feat(dock): add position changed fanction

This commit is contained in:
wangxuwen 2019-08-30 13:58:58 +08:00
parent 0a5fd622db
commit 865cb40b78
3 changed files with 37 additions and 21 deletions

View File

@ -45,7 +45,7 @@ MainPanelControl::MainPanelControl(QWidget *parent)
, m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_pluginLayout(new QBoxLayout(QBoxLayout::LeftToRight))
, m_appAreaSonWidget(new QWidget(this)) , m_appAreaSonWidget(new QWidget(this))
, m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight)) , m_appAreaSonLayout(new QBoxLayout(QBoxLayout::LeftToRight))
, m_position(Qt::TopEdge) , m_position(Position::Top)
, m_placeholderItem(nullptr) , m_placeholderItem(nullptr)
, m_appDragWidget(nullptr) , m_appDragWidget(nullptr)
, m_dislayMode(Efficient) , m_dislayMode(Efficient)
@ -56,6 +56,7 @@ MainPanelControl::MainPanelControl(QWidget *parent)
setAcceptDrops(true); setAcceptDrops(true);
connect(this, SIGNAL(displayModeChanged()), this, SLOT(onDisplayModeChanged())); connect(this, SIGNAL(displayModeChanged()), this, SLOT(onDisplayModeChanged()));
connect(this, SIGNAL(positionChanged()), this, SLOT(onPositionChanged()));
} }
MainPanelControl::~MainPanelControl() MainPanelControl::~MainPanelControl()
@ -99,8 +100,8 @@ void MainPanelControl::setDisplayMode(const DisplayMode mode)
void MainPanelControl::updateMainPanelLayout() void MainPanelControl::updateMainPanelLayout()
{ {
switch (m_position) { switch (m_position) {
case Qt::TopEdge: case Position::Top:
case Qt::BottomEdge: case Position::Bottom:
m_fixedAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); m_fixedAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_pluginAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding); m_pluginAreaWidget->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
@ -111,8 +112,8 @@ void MainPanelControl::updateMainPanelLayout()
m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight); m_trayAreaLayout->setDirection(QBoxLayout::LeftToRight);
m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight); m_appAreaSonLayout->setDirection(QBoxLayout::LeftToRight);
break; break;
case Qt::RightEdge: case Position::Right:
case Qt::LeftEdge: case Position::Left:
m_fixedAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_fixedAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); m_appAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
m_pluginAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed); m_pluginAreaWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
@ -182,7 +183,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
for (int i = 0; i < m_appAreaSonLayout->count(); ++i) { for (int i = 0; i < m_appAreaSonLayout->count(); ++i) {
QWidget *w = m_appAreaSonLayout->itemAt(i)->widget(); QWidget *w = m_appAreaSonLayout->itemAt(i)->widget();
if (w) { if (w) {
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
w->setMaximumSize(height(), height()); w->setMaximumSize(height(), height());
} else { } else {
w->setMaximumSize(width(), width()); w->setMaximumSize(width(), width());
@ -193,7 +194,7 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
for (int i = 0; i < m_fixedAreaLayout->count(); ++i) { for (int i = 0; i < m_fixedAreaLayout->count(); ++i) {
QWidget *w = m_fixedAreaLayout->itemAt(i)->widget(); QWidget *w = m_fixedAreaLayout->itemAt(i)->widget();
if (w) { if (w) {
if ((m_position == Qt::TopEdge) || (m_position == Qt::BottomEdge)) { if ((m_position == Position::Top) || (m_position == Position::Bottom)) {
w->setMaximumSize(height(), height()); w->setMaximumSize(height(), height());
} else { } else {
w->setMaximumSize(width(), width()); 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())); m_appAreaSonWidget->setMaximumWidth(qMin((m_appAreaWidget->geometry().right() - width() / 2) * 2, m_appAreaWidget->width()));
} else { } else {
m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height())); m_appAreaSonWidget->setMaximumHeight(qMin((m_appAreaWidget->geometry().bottom() - height() / 2) * 2, m_appAreaWidget->height()));
@ -210,9 +211,12 @@ void MainPanelControl::updateAppAreaSonWidgetSize()
m_appAreaSonWidget->adjustSize(); 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) void MainPanelControl::insertItem(const int index, DockItem *item)
@ -481,10 +485,10 @@ void MainPanelControl::startDrag(DockItem *item)
Dock::Position position; Dock::Position position;
switch (m_position) { switch (m_position) {
case Qt::TopEdge: position = Dock::Top; break; case Position::Top: position = Dock::Top; break;
case Qt::BottomEdge: position = Dock::Bottom; break; case Position::Bottom: position = Dock::Bottom; break;
case Qt::LeftEdge: position = Dock::Left; break; case Position::Left: position = Dock::Left; break;
case Qt::RightEdge: position = Dock::Right; break; case Position::Right: position = Dock::Right; break;
} }
appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos()))); appDrag->appDragWidget()->setOriginPos((m_appAreaSonWidget->mapToGlobal(item->pos())));
@ -591,3 +595,12 @@ void MainPanelControl::onDisplayModeChanged()
{ {
updateDisplayMode(); updateDisplayMode();
} }
void MainPanelControl::updatePosition()
{
onPositionChanged();
}
void MainPanelControl::onPositionChanged()
{
updateMainPanelLayout();
}

View File

@ -53,7 +53,7 @@ public:
void removeAppAreaItem(QWidget *wdg); void removeAppAreaItem(QWidget *wdg);
void removeTrayAreaItem(QWidget *wdg); void removeTrayAreaItem(QWidget *wdg);
void removePluginAreaItem(QWidget *wdg); void removePluginAreaItem(QWidget *wdg);
void setPositonValue(const Qt::Edge val); void setPositonValue(const Position position);
void setDisplayMode(const DisplayMode m_displayMode); void setDisplayMode(const DisplayMode m_displayMode);
MainPanelDelegate *delegate() const; MainPanelDelegate *delegate() const;
@ -63,6 +63,7 @@ signals:
void itemMoved(DockItem *sourceItem, DockItem *targetItem); void itemMoved(DockItem *sourceItem, DockItem *targetItem);
void itemAdded(const QString &appDesktop, int idx); void itemAdded(const QString &appDesktop, int idx);
void displayModeChanged(); void displayModeChanged();
void positionChanged();
private: private:
void resizeEvent(QResizeEvent *event) override; void resizeEvent(QResizeEvent *event) override;
@ -71,6 +72,7 @@ private:
void updateAppAreaSonWidgetSize(); void updateAppAreaSonWidgetSize();
void updateMainPanelLayout(); void updateMainPanelLayout();
void updateDisplayMode(); void updateDisplayMode();
void updatePosition();
void dragMoveEvent(QDragMoveEvent *e) override; void dragMoveEvent(QDragMoveEvent *e) override;
void dragEnterEvent(QDragEnterEvent *e) override; void dragEnterEvent(QDragEnterEvent *e) override;
@ -87,6 +89,7 @@ public slots:
void insertItem(const int index, DockItem *item); void insertItem(const int index, DockItem *item);
void removeItem(DockItem *item); void removeItem(DockItem *item);
void onDisplayModeChanged(); void onDisplayModeChanged();
void onPositionChanged();
private: private:
QBoxLayout *m_mainPanelLayout; QBoxLayout *m_mainPanelLayout;
@ -99,7 +102,7 @@ private:
QBoxLayout *m_pluginLayout; QBoxLayout *m_pluginLayout;
QWidget *m_appAreaSonWidget; QWidget *m_appAreaSonWidget;
QBoxLayout *m_appAreaSonLayout; QBoxLayout *m_appAreaSonLayout;
Qt::Edge m_position; Position m_position;
QPointer<PlaceholderItem> m_placeholderItem; QPointer<PlaceholderItem> m_placeholderItem;
MainPanelDelegate *m_delegate; MainPanelDelegate *m_delegate;
QString m_draggingMimeKey; QString m_draggingMimeKey;

View File

@ -503,12 +503,12 @@ void MainWindow::updateGeometry()
// DockDisplayMode and DockPosition MUST be set before invoke setFixedSize method of MainPanel // DockDisplayMode and DockPosition MUST be set before invoke setFixedSize method of MainPanel
// m_mainPanel->updateDockDisplayMode(m_settings->displayMode()); // m_mainPanel->updateDockDisplayMode(m_settings->displayMode());
Qt::Edge panelPos; Position panelPos;
switch (position) { switch (position) {
case Dock::Top: panelPos = Qt::TopEdge; break; case Dock::Top: panelPos = Position::Top; break;
case Dock::Bottom: panelPos = Qt::BottomEdge; break; case Dock::Bottom: panelPos = Position::Bottom; break;
case Dock::Left: panelPos = Qt::LeftEdge; break; case Dock::Left: panelPos = Position::Left; break;
case Dock::Right: panelPos = Qt::RightEdge; break; case Dock::Right: panelPos = Position::Right; break;
} }
m_mainPanel->setPositonValue(panelPos); m_mainPanel->setPositonValue(panelPos);
// this->setFixedSize has been overridden for size animation // this->setFixedSize has been overridden for size animation