#include "ChannelListWidget.h" #include <QMouseEvent> #include <Windows.h> #include <QBoxLayout> #include <QFile> #include <QApplication> ChannelTree::ChannelTree(ChannelListWidget * widget, QWidget *parent) : QTreeWidget(parent) { m_parent = widget; setHeaderHidden(true); setExpandsOnDoubleClick(false); m_delegate = new MyItemDelegate; //setItemDelegate(m_delegate); QFile styleSheet("plugins\\qtTsOverlay\\tree.styl"); styleSheet.open(QIODevice::ReadOnly); setStyleSheet(styleSheet.readAll()); styleSheet.close(); setSizeAdjustPolicy(QAbstractScrollArea::AdjustToContents); setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); setAttribute(Qt::WA_ShowWithoutActivating); setFocusPolicy(Qt::NoFocus); } ChannelTree::~ChannelTree() { delete m_delegate; } void ChannelTree::mousePressEvent(QMouseEvent * event) { if (event->button() == Qt::LeftButton) { m_oldPosition = event->globalPos(); doMove = true; } else if (event->button() == Qt::RightButton) m_parent->hide(); QTreeWidget::mousePressEvent(event); } void ChannelTree::mouseReleaseEvent(QMouseEvent * event) { doMove = false; QTreeWidget::mouseReleaseEvent(event); } void ChannelTree::mouseMoveEvent(QMouseEvent * event) { if (doMove) { m_parent->move(m_parent->pos() + (event->globalPos() - m_oldPosition)); m_oldPosition = event->globalPos(); } QTreeWidget::mouseMoveEvent(event); } /////////////////////////////////////////////////////////////////////////////////////// Background::Background(ChannelListWidget * widget, QWidget *parent) : QLabel(parent) { m_parent = widget; QFile styleSheet("plugins\\qtTsOverlay\\background.styl"); styleSheet.open(QIODevice::ReadOnly); setStyleSheet(styleSheet.readAll()); styleSheet.close(); } Background::~Background() { } void Background::mousePressEvent(QMouseEvent * event) { if (event->button() == Qt::LeftButton) { m_oldPosition = event->globalPos(); doMove = true; } else if (event->button() == Qt::RightButton) m_parent->hide(); QLabel::mousePressEvent(event); } void Background::mouseReleaseEvent(QMouseEvent * event) { doMove = false; QLabel::mouseReleaseEvent(event); } void Background::mouseMoveEvent(QMouseEvent * event) { if (doMove) { m_parent->move(m_parent->pos() + (event->globalPos() - m_oldPosition)); m_oldPosition = event->globalPos(); } QLabel::mouseMoveEvent(event); } /////////////////////////////////////////////////////////////////////////////////////// ChannelListWidget::ChannelListWidget(QWidget *parent) : QWidget(parent) { m_state = full; m_minIcon.addFile("plugins\\qtTsOverlay\\min.png"); m_minIcon.addFile("plugins\\qtTsOverlay\\min.png", QSize(), QIcon::Selected); m_maxIcon.addFile("plugins\\qtTsOverlay\\max.png"); m_maxIcon.addFile("plugins\\qtTsOverlay\\max.png", QSize(), QIcon::Selected); setAttribute(Qt::WA_TranslucentBackground); setWindowFlags(Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::SplashScreen); move(320, 200); m_background = new Background(this, this); QVBoxLayout* layout = new QVBoxLayout(this); layout->setMargin(0); layout->setSpacing(0); m_button = new QPushButton(this); m_button->setIcon(m_minIcon); m_button->setIconSize(QSize(8,8)); connect(m_button, &QPushButton::pressed, this, &ChannelListWidget::buttonPressed); QFile style("plugins\\qtTsOverlay\\button.styl"); style.open(QIODevice::ReadOnly); m_button->setStyleSheet(style.readAll()); style.close(); layout->addWidget(m_button, 0, Qt::AlignTop | Qt::AlignRight); m_child = new ChannelTree(this); layout->addWidget(m_child); m_grip = new QSizeGrip(this); layout->addWidget(m_grip, 0, Qt::AlignBottom | Qt::AlignRight); show(); } ChannelListWidget::~ChannelListWidget() { delete m_child; delete m_grip; delete m_background; delete m_button; } QTreeWidget * ChannelListWidget::getTree() { return (QTreeWidget*)m_child; } void ChannelListWidget::buttonPressed() { if (m_state == full) { m_state = minimum; m_button->setIcon(m_maxIcon); } else { m_state = full; m_button->setIcon(m_minIcon); } emit treeStateChanged(m_state); } void ChannelListWidget::resizeEvent(QResizeEvent *event) { QWidget::resizeEvent(event); m_child->resize(m_child->size() - (event->oldSize() - event->size())); m_background->resize(size()); }