diff options
Diffstat (limited to 'src/libs/advanceddockingsystem/dockareatitlebar.cpp')
-rw-r--r-- | src/libs/advanceddockingsystem/dockareatitlebar.cpp | 85 |
1 files changed, 72 insertions, 13 deletions
diff --git a/src/libs/advanceddockingsystem/dockareatitlebar.cpp b/src/libs/advanceddockingsystem/dockareatitlebar.cpp index 7a2e677062..54f97307da 100644 --- a/src/libs/advanceddockingsystem/dockareatitlebar.cpp +++ b/src/libs/advanceddockingsystem/dockareatitlebar.cpp @@ -48,10 +48,11 @@ public: QPointer<TitleBarButton> m_autoHideButton; QPointer<TitleBarButton> m_undockButton; QPointer<TitleBarButton> m_closeButton; + QPointer<TitleBarButton> m_minimizeButton; QBoxLayout *m_layout = nullptr; DockAreaWidget *m_dockArea = nullptr; DockAreaTabBar *m_tabBar = nullptr; - ElidingLabel *m_autoHideTitleLabel; + ElidingLabel *m_autoHideTitleLabel = nullptr; bool m_menuOutdated = true; QMenu *m_tabsMenu; QList<TitleBarButtonType *> m_dockWidgetActionsButtons; @@ -202,6 +203,23 @@ void DockAreaTitleBarPrivate::createButtons() q, &DockAreaTitleBar::onAutoHideButtonClicked); + // Minimize button + m_minimizeButton = new TitleBarButton( + testAutoHideConfigFlag(DockManager::AutoHideHasMinimizeButton)); + m_minimizeButton->setObjectName("dockAreaMinimizeButton"); + //m_minimizeButton->setAutoRaise(true); + m_minimizeButton->setVisible(false); + internal::setButtonIcon(m_minimizeButton, + QStyle::SP_TitleBarMinButton, + ADS::DockAreaMinimizeIcon); + internal::setToolTip(m_minimizeButton, QObject::tr("Minimize")); + m_minimizeButton->setSizePolicy(sizePolicy); + m_layout->addWidget(m_minimizeButton, 0); + QObject::connect(m_minimizeButton, + &QToolButton::clicked, + q, + &DockAreaTitleBar::minimizeAutoHideContainer); + // Close button m_closeButton = new TitleBarButton(testConfigFlag(DockManager::DockAreaHasCloseButton)); m_closeButton->setObjectName("dockAreaCloseButton"); @@ -228,7 +246,10 @@ void DockAreaTitleBarPrivate::createAutoHideTitleLabel() { m_autoHideTitleLabel = new ElidingLabel(""); m_autoHideTitleLabel->setObjectName("autoHideTitleLabel"); - m_layout->addWidget(m_autoHideTitleLabel); + // At position 0 is the tab bar - insert behind tab bar + m_layout->insertWidget(1, m_autoHideTitleLabel); + m_autoHideTitleLabel->setVisible(false); // Default hidden + m_layout->insertWidget(2, new SpacerWidget(q)); } void DockAreaTitleBarPrivate::createTabBar() { @@ -370,10 +391,8 @@ DockAreaTitleBar::DockAreaTitleBar(DockAreaWidget *parent) setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); d->createTabBar(); - d->createAutoHideTitleLabel(); - d->m_autoHideTitleLabel->setVisible(false); // Default hidden - d->m_layout->addWidget(new SpacerWidget(this)); d->createButtons(); + d->createAutoHideTitleLabel(); setFocusPolicy(Qt::NoFocus); } @@ -452,6 +471,18 @@ void DockAreaTitleBar::onCloseButtonClicked() d->m_dockArea->closeArea(); } +void DockAreaTitleBar::onAutoHideCloseActionTriggered() +{ + d->m_dockArea->closeArea(); +} + +void DockAreaTitleBar::minimizeAutoHideContainer() +{ + auto autoHideContainer = d->m_dockArea->autoHideDockContainer(); + if (autoHideContainer) + autoHideContainer->collapseView(true); +} + void DockAreaTitleBar::onUndockButtonClicked() { if (d->m_dockArea->features().testFlag(DockWidget::DockWidgetFloatable)) @@ -543,6 +574,8 @@ TitleBarButton *DockAreaTitleBar::button(eTitleBarButton which) const return d->m_closeButton; case TitleBarButtonAutoHide: return d->m_autoHideButton; + case TitleBarButtonMinimize: + return d->m_minimizeButton; } return nullptr; } @@ -686,12 +719,28 @@ void DockAreaTitleBar::contextMenuEvent(QContextMenuEvent *event) } menu.addSeparator(); } - QAction *closeAction = menu.addAction(isAutoHide ? Tr::tr("Close") : Tr::tr("Close Group")); - closeAction->connect(closeAction, - &QAction::triggered, - this, - &DockAreaTitleBar::onCloseButtonClicked); - closeAction->setEnabled(d->m_dockArea->features().testFlag(DockWidget::DockWidgetClosable)); + + if (isAutoHide) { + QAction *minimizeAction = menu.addAction(Tr::tr("Minimize")); + minimizeAction->connect(minimizeAction, + &QAction::triggered, + this, + &DockAreaTitleBar::minimizeAutoHideContainer); + + QAction *closeAction = menu.addAction(Tr::tr("Close")); + closeAction->connect(closeAction, + &QAction::triggered, + this, + &DockAreaTitleBar::onAutoHideCloseActionTriggered); + closeAction->setEnabled(d->m_dockArea->features().testFlag(DockWidget::DockWidgetClosable)); + } else { + QAction *closeAction = menu.addAction(Tr::tr("Close Group")); + closeAction->connect(closeAction, + &QAction::triggered, + this, + &DockAreaTitleBar::onCloseButtonClicked); + closeAction->setEnabled(d->m_dockArea->features().testFlag(DockWidget::DockWidgetClosable)); + } if (!isAutoHide && !isTopLevelArea) { QAction *closeOthersAction = menu.addAction(Tr::tr("Close Other Groups")); @@ -728,8 +777,11 @@ QString DockAreaTitleBar::titleBarButtonToolTip(eTitleBarButton button) const break; case TitleBarButtonClose: - if (d->m_dockArea->isAutoHide()) - return Tr::tr("Close"); + if (d->m_dockArea->isAutoHide()) { + bool minimize = DockManager::testAutoHideConfigFlag( + DockManager::AutoHideCloseButtonCollapsesDock); + return minimize ? Tr::tr("Minimize") : Tr::tr("Close"); + } if (DockManager::testConfigFlag(DockManager::DockAreaCloseButtonClosesTab)) return Tr::tr("Close Active Tab"); @@ -758,4 +810,11 @@ void DockAreaTitleBar::setAreaFloating() d->makeAreaFloating(mapFromGlobal(QCursor::pos()), DraggingInactive); } +void DockAreaTitleBar::showAutoHideControls(bool show) +{ + d->m_tabBar->setVisible(!show); // Auto hide toolbar never has tabs + d->m_minimizeButton->setVisible(show); + d->m_autoHideTitleLabel->setVisible(show); +} + } // namespace ADS |