Skip to content

Commit 1d68e27

Browse files
authored
Added DockAreaHasTabsMenuButton and DockAreaHasUndockButton to CDockManager config (#108)
* Added DockAreaHasUndockButton and DockAreaHasTabsMenuButton configuration flag
1 parent 1dbd3f3 commit 1d68e27

File tree

3 files changed

+55
-25
lines changed

3 files changed

+55
-25
lines changed

demo/MainWindow.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,12 +418,19 @@ CMainWindow::CMainWindow(QWidget *parent) :
418418
// comment the following line if you want to use opaque undocking and
419419
// opaque splitter resizing
420420
CDockManager::setConfigFlags(CDockManager::DefaultNonOpaqueConfig);
421-
//CDockManager::setConfigFlag(CDockManager::DockAreaHasCloseButton, false);
422421

423422
// uncomment the following line if you want a fixed tab width that does
424423
// not change if the visibility of the close button changes
425424
//CDockManager::setConfigFlag(CDockManager::RetainTabSizeWhenCloseButtonHidden, true);
426425

426+
// uncomment the following line if you don't want close button on DockArea's title bar
427+
//CDockManager::setConfigFlag(CDockManager::DockAreaHasCloseButton, false);
428+
429+
// uncomment the following line if you don't want undock button on DockArea's title bar
430+
//CDockManager::setConfigFlag(CDockManager::DockAreaHasUndockButton, false);
431+
432+
// uncomment the following line if you don't want tabs menu button on DockArea's title bar
433+
//CDockManager::setConfigFlag(CDockManager::DockAreaHasTabsMenuButton, false);
427434

428435
// Now create the dock manager and its content
429436
d->DockManager = new CDockManager(this);

src/DockAreaTitleBar.cpp

Lines changed: 39 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -167,38 +167,53 @@ DockAreaTitleBarPrivate::DockAreaTitleBarPrivate(CDockAreaTitleBar* _public) :
167167
void DockAreaTitleBarPrivate::createButtons()
168168
{
169169
QSizePolicy ButtonSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
170-
// Tabs menu button
171-
TabsMenuButton = new tTitleBarButton();
172-
TabsMenuButton->setObjectName("tabsMenuButton");
173-
TabsMenuButton->setAutoRaise(true);
174-
TabsMenuButton->setPopupMode(QToolButton::InstantPopup);
175-
setTitleBarButtonIcon(TabsMenuButton, QStyle::SP_TitleBarUnshadeButton, ads::DockAreaMenuIcon);
176-
QMenu* TabsMenu = new QMenu(TabsMenuButton);
170+
171+
if (testConfigFlag(CDockManager::DockAreaHasTabsMenuButton))
172+
{
173+
// Tabs menu button
174+
TabsMenuButton = new tTitleBarButton();
175+
TabsMenuButton->setObjectName("tabsMenuButton");
176+
TabsMenuButton->setAutoRaise(true);
177+
TabsMenuButton->setPopupMode(QToolButton::InstantPopup);
178+
setTitleBarButtonIcon(TabsMenuButton, QStyle::SP_TitleBarUnshadeButton, ads::DockAreaMenuIcon);
179+
QMenu* TabsMenu = new QMenu(TabsMenuButton);
177180
#ifndef QT_NO_TOOLTIP
178-
TabsMenu->setToolTipsVisible(true);
181+
TabsMenu->setToolTipsVisible(true);
179182
#endif
180-
_this->connect(TabsMenu, SIGNAL(aboutToShow()), SLOT(onTabsMenuAboutToShow()));
181-
TabsMenuButton->setMenu(TabsMenu);
183+
_this->connect(TabsMenu, SIGNAL(aboutToShow()), SLOT(onTabsMenuAboutToShow()));
184+
TabsMenuButton->setMenu(TabsMenu);
182185
#ifndef QT_NO_TOOLTIP
183-
TabsMenuButton->setToolTip(QObject::tr("List all tabs"));
186+
TabsMenuButton->setToolTip(QObject::tr("List all tabs"));
184187
#endif
185-
TabsMenuButton->setSizePolicy(ButtonSizePolicy);
186-
TopLayout->addWidget(TabsMenuButton, 0);
187-
_this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)),
188-
SLOT(onTabsMenuActionTriggered(QAction*)));
188+
TabsMenuButton->setSizePolicy(ButtonSizePolicy);
189+
TopLayout->addWidget(TabsMenuButton, 0);
190+
_this->connect(TabsMenuButton->menu(), SIGNAL(triggered(QAction*)),
191+
SLOT(onTabsMenuActionTriggered(QAction*)));
192+
}
193+
else
194+
{
195+
TabsMenuButton = new CInvisibleButton();
196+
}
189197

190198

191-
// Undock button
192-
UndockButton = new tTitleBarButton();
193-
UndockButton->setObjectName("undockButton");
194-
UndockButton->setAutoRaise(true);
199+
if (testConfigFlag(CDockManager::DockAreaHasUndockButton))
200+
{
201+
// Undock button
202+
UndockButton = new tTitleBarButton();
203+
UndockButton->setObjectName("undockButton");
204+
UndockButton->setAutoRaise(true);
195205
#ifndef QT_NO_TOOLTIP
196-
UndockButton->setToolTip(QObject::tr("Detach Group"));
206+
UndockButton->setToolTip(QObject::tr("Detach Group"));
197207
#endif
198-
setTitleBarButtonIcon(UndockButton, QStyle::SP_TitleBarNormalButton, ads::DockAreaUndockIcon);
199-
UndockButton->setSizePolicy(ButtonSizePolicy);
200-
TopLayout->addWidget(UndockButton, 0);
201-
_this->connect(UndockButton, SIGNAL(clicked()), SLOT(onUndockButtonClicked()));
208+
setTitleBarButtonIcon(UndockButton, QStyle::SP_TitleBarNormalButton, ads::DockAreaUndockIcon);
209+
UndockButton->setSizePolicy(ButtonSizePolicy);
210+
TopLayout->addWidget(UndockButton, 0);
211+
_this->connect(UndockButton, SIGNAL(clicked()), SLOT(onUndockButtonClicked()));
212+
}
213+
else
214+
{
215+
UndockButton = new CInvisibleButton();
216+
}
202217

203218
if (testConfigFlag(CDockManager::DockAreaHasCloseButton))
204219
{

src/DockManager.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,25 @@ class ADS_EXPORT CDockManager : public CDockContainerWidget
157157
DragPreviewShowsContentPixmap = 0x0800,///< If opaque undocking is disabled, the created drag preview window shows a copy of the content of the dock widget / dock are that is dragged
158158
DragPreviewHasWindowFrame = 0x1000,///< If opaque undocking is disabled, then this flag configures if the drag preview is frameless or looks like a real window
159159
AlwaysShowTabs = 0x2000,///< If this option is enabled, the tab of a dock widget is always displayed - even if it is the only visible dock widget in a floating widget.
160+
DockAreaHasUndockButton = 0x4000, //!< If the flag is set each dock area has an undock button
161+
DockAreaHasTabsMenuButton = 0x8000, //!< If the flag is set each dock area has a tabs menu button
160162
DefaultConfig = ActiveTabHasCloseButton
161163
| DockAreaHasCloseButton
164+
| DockAreaHasUndockButton
165+
| DockAreaHasTabsMenuButton
162166
| OpaqueSplitterResize
163167
| XmlCompressionEnabled
164168
| OpaqueUndocking, ///< the default configuration
165169
DefaultNonOpaqueConfig = ActiveTabHasCloseButton
166170
| DockAreaHasCloseButton
171+
| DockAreaHasUndockButton
172+
| DockAreaHasTabsMenuButton
167173
| XmlCompressionEnabled
168174
| DragPreviewShowsContentPixmap, ///< the default configuration for non opaque operations
169175
NonOpaqueWithWindowFrame = ActiveTabHasCloseButton
170176
| DockAreaHasCloseButton
177+
| DockAreaHasUndockButton
178+
| DockAreaHasTabsMenuButton
171179
| XmlCompressionEnabled
172180
| DragPreviewShowsContentPixmap
173181
| DragPreviewHasWindowFrame ///< the default configuration for non opaque operations that show a real window with frame

0 commit comments

Comments
 (0)