From 865cb40b788bede9ef228efd5ea0f55a56e7e41c Mon Sep 17 00:00:00 2001 From: wangxuwen Date: Fri, 30 Aug 2019 13:58:58 +0800 Subject: [PATCH] feat(dock): add position changed fanction --- frame/panel/mainpanelcontrol.cpp | 41 +++++++++++++++++++++----------- frame/panel/mainpanelcontrol.h | 7 ++++-- frame/window/mainwindow.cpp | 10 ++++---- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/frame/panel/mainpanelcontrol.cpp b/frame/panel/mainpanelcontrol.cpp index bf0df07ec..ba07ff4e4 100644 --- a/frame/panel/mainpanelcontrol.cpp +++ b/frame/panel/mainpanelcontrol.cpp @@ -45,7 +45,7 @@ MainPanelControl::MainPanelControl(QWidget *parent) , m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_appAreaSonWidget(new QWidget(this)) , m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight)) - , m_position(Qt::TopEdge) + , m_position(Position::Top) , m_placeholderItem(nullptr) , m_appDragWidget(nullptr) , m_dislayMode(Efficient) @@ -56,6 +56,7 @@ MainPanelControl::MainPanelControl(QWidget *parent) setAcceptDrops(true); connect(this, SIGNAL(displayModeChanged()), this, SLOT(onDisplayModeChanged())); + connect(this, SIGNAL(positionChanged()), this, SLOT(onPositionChanged())); } MainPanelControl::~MainPanelControl() @@ -99,8 +100,8 @@ void MainPanelControl::setDisplayMode(const DisplayMode mode) void MainPanelControl::updateMainPanelLayout() { switch (m_position) { - case Qt::TopEdge: - case Qt::BottomEdge: + case Position::Top: + case Position::Bottom: m_fixedAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_pluginAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); @@ -111,8 +112,8 @@ void MainPanelControl::updateMainPanelLayout() m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight); m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight); break; - case Qt::RightEdge: - case Qt::LeftEdge: + case Position::Right: + case Position::Left: m_fixedAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_pluginAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); @@ -182,7 +183,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize() for (int i = 0; i < m_appAreaSonLayout->count(); ++i) { QWidget *w = m_appAreaSonLayout->itemAt(i)->widget(); if (w) { - if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { + if ((m_position == Position::Top) || (m_position == Position::Bottom)) { w->setMaximumSize(height(), height()); } else { w->setMaximumSize(width(), width()); @@ -193,7 +194,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize() for (int i = 0; i < m_fixedAreaLayout->count(); ++i) { QWidget *w = m_fixedAreaLayout->itemAt(i)->widget(); if (w) { - if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { + if ((m_position == Position::Top) || (m_position == Position::Bottom)) { w->setMaximumSize(height(), height()); } else { w->setMaximumSize(width(), width()); @@ -201,7 +202,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize() } } - if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { + if ((m_position == Position::Top) || (m_position == Position::Bottom)) { m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width())); } else { m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height())); @@ -210,9 +211,12 @@ void MainPanelControl::updateAppAreaSonWidgetSize() m_appAreaSonWidget->adjustSize(); } -void MainPanelControl::setPositonValue(const Qt::Edge val) +void MainPanelControl::setPositonValue(const Position position) { - m_position = val; + if (m_position == position) + return; + m_position = position; + emit positionChanged(); } void MainPanelControl::insertItem(const int index, DockItem *item) @@ -481,10 +485,10 @@ void MainPanelControl::startDrag(DockItem *item) Dock::Position position; switch (m_position) { - case Qt::TopEdge: position = Dock::Top; break; - case Qt::BottomEdge: position = Dock::Bottom; break; - case Qt::LeftEdge: position = Dock::Left; break; - case Qt::RightEdge: position = Dock::Right; break; + case Position::Top: position = Dock::Top; break; + case Position::Bottom: position = Dock::Bottom; break; + case Position::Left: position = Dock::Left; break; + case Position::Right: position = Dock::Right; break; } appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos()))); @@ -591,3 +595,12 @@ void MainPanelControl::onDisplayModeChanged() { updateDisplayMode(); } +void MainPanelControl::updatePosition() +{ + onPositionChanged(); +} + +void MainPanelControl::onPositionChanged() +{ + updateMainPanelLayout(); +} diff --git a/frame/panel/mainpanelcontrol.h b/frame/panel/mainpanelcontrol.h index 98a0436dc..41083dc15 100644 --- a/frame/panel/mainpanelcontrol.h +++ b/frame/panel/mainpanelcontrol.h @@ -53,7 +53,7 @@ public: void removeAppAreaItem(QWidget *wdg); void removeTrayAreaItem(QWidget *wdg); void removePluginAreaItem(QWidget *wdg); - void setPositonValue(const Qt::Edge val); + void setPositonValue(const Position position); void setDisplayMode(const DisplayMode m_displayMode); MainPanelDelegate *delegate() const; @@ -63,6 +63,7 @@ signals: void itemMoved(DockItem *sourceItem, DockItem *targetItem); void itemAdded(const QString &appDesktop, int idx); void displayModeChanged(); + void positionChanged(); private: void resizeEvent(QResizeEvent *event) override; @@ -71,6 +72,7 @@ private: void updateAppAreaSonWidgetSize(); void updateMainPanelLayout(); void updateDisplayMode(); + void updatePosition(); void dragMoveEvent(QDragMoveEvent *e) override; void dragEnterEvent(QDragEnterEvent *e) override; @@ -87,6 +89,7 @@ public slots: void insertItem(const int index, DockItem *item); void removeItem(DockItem *item); void onDisplayModeChanged(); + void onPositionChanged(); private: QBoxLayout *m_mainPanelLayout; @@ -99,7 +102,7 @@ private: QBoxLayout *m_pluginLayout; QWidget *m_appAreaSonWidget; QBoxLayout *m_appAreaSonLayout; - Qt::Edge m_position; + Position m_position; QPointer m_placeholderItem; MainPanelDelegate *m_delegate; QString m_draggingMimeKey; diff --git a/frame/window/mainwindow.cpp b/frame/window/mainwindow.cpp index e0e5d1de5..83906d35c 100644 --- a/frame/window/mainwindow.cpp +++ b/frame/window/mainwindow.cpp @@ -503,12 +503,12 @@ void MainWindow::updateGeometry() // DockDisplayMode and DockPosition MUST be set before invoke setFixedSize method of MainPanel // m_mainPanel->updateDockDisplayMode(m_settings->displayMode()); - Qt::Edge panelPos; + Position panelPos; switch (position) { - case Dock::Top: panelPos = Qt::TopEdge; break; - case Dock::Bottom: panelPos = Qt::BottomEdge; break; - case Dock::Left: panelPos = Qt::LeftEdge; break; - case Dock::Right: panelPos = Qt::RightEdge; break; + case Dock::Top: panelPos = Position::Top; break; + case Dock::Bottom: panelPos = Position::Bottom; break; + case Dock::Left: panelPos = Position::Left; break; + case Dock::Right: panelPos = Position::Right; break; } m_mainPanel->setPositonValue(panelPos); // this->setFixedSize has been overridden for size animation