Skip to content

Commit fa94da0

Browse files
Added optional Minimize button to AutoHide dock widget title bar
1 parent 420baee commit fa94da0

12 files changed

+89
-17
lines changed

src/DockAreaTitleBar.cpp

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -72,10 +72,11 @@ struct DockAreaTitleBarPrivate
7272
QPointer<CTitleBarButton> AutoHideButton;
7373
QPointer<CTitleBarButton> UndockButton;
7474
QPointer<CTitleBarButton> CloseButton;
75+
QPointer<CTitleBarButton> MinimizeButton;
7576
QBoxLayout* Layout;
7677
CDockAreaWidget* DockArea;
7778
CDockAreaTabBar* TabBar;
78-
CElidingLabel* AutoHideTitleLabel;
79+
CElidingLabel* AutoHideTitleLabel = nullptr;
7980
bool MenuOutdated = true;
8081
QMenu* TabsMenu;
8182
QList<tTitleBarButton*> DockWidgetActionsButtons;
@@ -218,6 +219,17 @@ void DockAreaTitleBarPrivate::createButtons()
218219
Layout->addWidget(AutoHideButton, 0);
219220
_this->connect(AutoHideButton, SIGNAL(clicked()), SLOT(onAutoHideButtonClicked()));
220221

222+
// Minimize button
223+
MinimizeButton = new CTitleBarButton(testAutoHideConfigFlag(CDockManager::AutoHideHasMinimizeButton));
224+
MinimizeButton->setObjectName("dockAreaMinimizeButton");
225+
MinimizeButton->setAutoRaise(true);
226+
MinimizeButton->setVisible(false);
227+
internal::setButtonIcon(MinimizeButton, QStyle::SP_TitleBarMinButton, ads::DockAreaMinimizeIcon);
228+
internal::setToolTip(MinimizeButton, QObject::tr("Minimize"));
229+
MinimizeButton->setSizePolicy(ButtonSizePolicy);
230+
Layout->addWidget(MinimizeButton, 0);
231+
_this->connect(MinimizeButton, SIGNAL(clicked()), SLOT(minimizeAutoHideContainer()));
232+
221233
// Close button
222234
CloseButton = new CTitleBarButton(testConfigFlag(CDockManager::DockAreaHasCloseButton));
223235
CloseButton->setObjectName("dockAreaCloseButton");
@@ -236,7 +248,10 @@ void DockAreaTitleBarPrivate::createAutoHideTitleLabel()
236248
{
237249
AutoHideTitleLabel = new CElidingLabel("");
238250
AutoHideTitleLabel->setObjectName("autoHideTitleLabel");
239-
Layout->addWidget(AutoHideTitleLabel);
251+
// At position 0 is the tab bar - insert behind tab bar
252+
Layout->insertWidget(1, AutoHideTitleLabel);
253+
AutoHideTitleLabel->setVisible(false); // Default hidden
254+
Layout->insertWidget(2 ,new CSpacerWidget(_this));
240255
}
241256

242257

@@ -324,10 +339,8 @@ CDockAreaTitleBar::CDockAreaTitleBar(CDockAreaWidget* parent) :
324339
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
325340

326341
d->createTabBar();
327-
d->createAutoHideTitleLabel();
328-
d->AutoHideTitleLabel->setVisible(false); // Default hidden
329-
d->Layout->addWidget(new CSpacerWidget(this));
330342
d->createButtons();
343+
d->createAutoHideTitleLabel();
331344

332345
setFocusPolicy(Qt::NoFocus);
333346
}
@@ -439,7 +452,7 @@ void CDockAreaTitleBar::onAutoHideCloseActionTriggered()
439452

440453

441454
//============================================================================
442-
void CDockAreaTitleBar::onAutoHideMinimizeActionTriggered()
455+
void CDockAreaTitleBar::minimizeAutoHideContainer()
443456
{
444457
auto AutoHideContainer = d->DockArea->autoHideDockContainer();
445458
if (AutoHideContainer)
@@ -565,6 +578,7 @@ CTitleBarButton* CDockAreaTitleBar::button(TitleBarButton which) const
565578
case TitleBarButtonUndock: return d->UndockButton;
566579
case TitleBarButtonClose: return d->CloseButton;
567580
case TitleBarButtonAutoHide: return d->AutoHideButton;
581+
case TitleBarButtonMinimize: return d->MinimizeButton;
568582
default:
569583
return nullptr;
570584
}
@@ -756,7 +770,7 @@ void CDockAreaTitleBar::contextMenuEvent(QContextMenuEvent* ev)
756770

757771
if (isAutoHide)
758772
{
759-
Action = Menu.addAction(tr("Minimize"), this, SLOT(onAutoHideMinimizeActionTriggered()));
773+
Action = Menu.addAction(tr("Minimize"), this, SLOT(minimizeAutoHideContainer()));
760774
Action = Menu.addAction(tr("Close"), this, SLOT(onAutoHideCloseActionTriggered()));
761775
}
762776
else
@@ -831,6 +845,16 @@ QString CDockAreaTitleBar::titleBarButtonToolTip(TitleBarButton Button) const
831845
return QString();
832846
}
833847

848+
849+
//============================================================================
850+
void CDockAreaTitleBar::showAutoHideControls(bool Show)
851+
{
852+
d->TabBar->setVisible(!Show); // Auto hide toolbar never has tabs
853+
d->MinimizeButton->setVisible(Show);
854+
d->AutoHideTitleLabel->setVisible(Show);
855+
}
856+
857+
834858
//============================================================================
835859
CTitleBarButton::CTitleBarButton(bool showInTitleBar, QWidget* parent)
836860
: tTitleBarButton(parent),
@@ -887,6 +911,7 @@ CSpacerWidget::CSpacerWidget(QWidget* Parent /*= 0*/) : Super(Parent)
887911
setStyleSheet("border: none; background: none;");
888912
}
889913

914+
890915
} // namespace ads
891916

892917
//---------------------------------------------------------------------------

src/DockAreaTitleBar.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ private Q_SLOTS:
9898
void onTabsMenuAboutToShow();
9999
void onCloseButtonClicked();
100100
void onAutoHideCloseActionTriggered();
101-
void onAutoHideMinimizeActionTriggered();
101+
void minimizeAutoHideContainer();
102102
void onUndockButtonClicked();
103103
void onTabsMenuActionTriggered(QAction* Action);
104104
void onCurrentTabChanged(int Index);
@@ -210,6 +210,11 @@ public Q_SLOTS:
210210
*/
211211
void setAreaFloating();
212212

213+
/**
214+
* Call this function, to create all the required auto hide controls
215+
*/
216+
void showAutoHideControls(bool Show);
217+
213218
Q_SIGNALS:
214219
/**
215220
* This signal is emitted if a tab in the tab bar is clicked by the user

src/DockAreaWidget.cpp

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,20 +390,29 @@ void DockAreaWidgetPrivate::updateTitleBarButtonVisibility(bool IsTopLevel)
390390
return;
391391
}
392392

393-
if (IsTopLevel)
393+
bool IsAutoHide = _this->isAutoHide();
394+
if (IsAutoHide)
395+
{
396+
bool ShowCloseButton = CDockManager::autoHideConfigFlags().testFlag(CDockManager::AutoHideHasCloseButton);
397+
TitleBar->button(TitleBarButtonClose)->setVisible(ShowCloseButton);
398+
TitleBar->button(TitleBarButtonAutoHide)->setVisible(true);
399+
TitleBar->button(TitleBarButtonUndock)->setVisible(false);
400+
TitleBar->button(TitleBarButtonTabsMenu)->setVisible(false);
401+
}
402+
else if (IsTopLevel)
394403
{
395404
TitleBar->button(TitleBarButtonClose)->setVisible(!container->isFloating());
396405
TitleBar->button(TitleBarButtonAutoHide)->setVisible(!container->isFloating());
397406
// Undock and tabs should never show when auto hidden
398-
TitleBar->button(TitleBarButtonUndock)->setVisible(!container->isFloating() && !_this->isAutoHide());
399-
TitleBar->button(TitleBarButtonTabsMenu)->setVisible(!_this->isAutoHide());
407+
TitleBar->button(TitleBarButtonUndock)->setVisible(!container->isFloating());
408+
TitleBar->button(TitleBarButtonTabsMenu)->setVisible(true);
400409
}
401410
else
402411
{
403412
TitleBar->button(TitleBarButtonClose)->setVisible(true);
404413
TitleBar->button(TitleBarButtonAutoHide)->setVisible(true);
405-
TitleBar->button(TitleBarButtonUndock)->setVisible(!_this->isAutoHide());
406-
TitleBar->button(TitleBarButtonTabsMenu)->setVisible(!_this->isAutoHide());
414+
TitleBar->button(TitleBarButtonUndock)->setVisible(true);
415+
TitleBar->button(TitleBarButtonTabsMenu)->setVisible(true);
407416
}
408417
}
409418

@@ -847,9 +856,7 @@ void CDockAreaWidget::updateTitleBarVisibility()
847856

848857
if (isAutoHideFeatureEnabled())
849858
{
850-
auto tabBar = d->TitleBar->tabBar();
851-
tabBar->setVisible(!IsAutoHide); // Never show tab bar when auto hidden
852-
d->TitleBar->autoHideTitleLabel()->setVisible(IsAutoHide); // Always show when auto hidden, never otherwise
859+
d->TitleBar->showAutoHideControls(IsAutoHide);
853860
updateTitleBarButtonVisibility(Container->topLevelDockArea() == this);
854861
}
855862
}

src/DockManager.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,10 +251,13 @@ public Q_SLOTS:
251251
AutoHideSideBarsIconOnly = 0x10,///< show only icons in auto hide side tab - if a tab has no icon, then the text will be shown
252252
AutoHideShowOnMouseOver = 0x20, ///< show the auto hide window on mouse over tab and hide it if mouse leaves auto hide container
253253
AutoHideCloseButtonCollapsesDock = 0x40, ///< Close button of an auto hide container collapses the dock instead of hiding it completely
254+
AutoHideHasCloseButton = 0x80, //< If the flag is set an auto hide title bar has a close button
255+
AutoHideHasMinimizeButton = 0x100, ///< if this flag is set, the auto hide title bar has a minimize button to collapse the dock widget
254256

255257
DefaultAutoHideConfig = AutoHideFeatureEnabled
256258
| DockAreaHasAutoHideButton
257259
| AutoHideCloseButtonCollapsesDock
260+
| AutoHideHasCloseButton
258261

259262
};
260263
Q_DECLARE_FLAGS(AutoHideFlags, eAutoHideFlag)

src/ads.qrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,7 @@
2020
<file>images/vs-pin-button-pinned-focused.svg</file>
2121
<file>images/vs-pin-button_45.svg</file>
2222
<file>images/pin-button-big.svg</file>
23+
<file>images/minimize-button.svg</file>
24+
<file>images/minimize-button-focused.svg</file>
2325
</qresource>
2426
</RCC>

src/ads_globals.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,8 @@ enum TitleBarButton
107107
TitleBarButtonTabsMenu,
108108
TitleBarButtonUndock,
109109
TitleBarButtonClose,
110-
TitleBarButtonAutoHide
110+
TitleBarButtonAutoHide,
111+
TitleBarButtonMinimize
111112
};
112113

113114
/**
@@ -131,6 +132,7 @@ enum eIcon
131132
DockAreaMenuIcon, //!< DockAreaMenuIcon
132133
DockAreaUndockIcon,//!< DockAreaUndockIcon
133134
DockAreaCloseIcon, //!< DockAreaCloseIcon
135+
DockAreaMinimizeIcon,
134136

135137
IconCount, //!< just a delimiter for range checks
136138
};
Lines changed: 2 additions & 0 deletions
Loading

src/images/minimize-button.svg

Lines changed: 2 additions & 0 deletions
Loading

src/stylesheets/default.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,12 @@ ads--CAutoHideDockContainer #dockAreaAutoHideButton {
298298
}
299299

300300

301+
ads--CAutoHideDockContainer #dockAreaMinimizeButton {
302+
qproperty-icon: url(:/ads/images/minimize-button-focused.svg);
303+
qproperty-iconSize: 16px;
304+
}
305+
306+
301307
ads--CAutoHideDockContainer #dockAreaCloseButton{
302308
qproperty-icon: url(:/ads/images/close-button-focused.svg)
303309
}

src/stylesheets/default_linux.css

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,6 +334,12 @@ ads--CAutoHideDockContainer #dockAreaAutoHideButton {
334334
}
335335

336336

337+
ads--CAutoHideDockContainer #dockAreaMinimizeButton {
338+
qproperty-icon: url(:/ads/images/minimize-button-focused.svg);
339+
qproperty-iconSize: 16px;
340+
}
341+
342+
337343
ads--CAutoHideDockContainer #dockAreaCloseButton{
338344
qproperty-icon: url(:/ads/images/close-button-focused.svg)
339345
}

0 commit comments

Comments
 (0)