@@ -55,28 +55,6 @@ namespace ads
55
55
{
56
56
using tTitleBarButton = QToolButton;
57
57
58
- /* *
59
- * Some kind of dummy button that is used if certain buttons are hidden
60
- * by dock manager config flags (i.e CDockManager::DockAreaHasCloseButton is
61
- * disabled)
62
- */
63
- class CInvisibleButton : public tTitleBarButton
64
- {
65
- public:
66
- CInvisibleButton (QWidget* parent = nullptr )
67
- : tTitleBarButton(parent)
68
- {
69
- this ->hide ();
70
- }
71
-
72
-
73
- virtual void setVisible (bool visible) override
74
- {
75
- Q_UNUSED (visible);
76
- tTitleBarButton::setVisible (false );
77
- }
78
- };
79
-
80
58
81
59
/* *
82
60
* Private data class of CDockAreaTitleBar class (pimpl)
@@ -119,7 +97,7 @@ struct DockAreaTitleBarPrivate
119
97
/* *
120
98
* Returns true if the given config flag is set
121
99
*/
122
- bool testConfigFlag (CDockManager::eConfigFlag Flag) const
100
+ static bool testConfigFlag (CDockManager::eConfigFlag Flag)
123
101
{
124
102
return CDockManager::configFlags ().testFlag (Flag);
125
103
}
@@ -154,6 +132,55 @@ struct DockAreaTitleBarPrivate
154
132
};// struct DockAreaTitleBarPrivate
155
133
156
134
135
+ /* *
136
+ * Title bar button of a dock area that customizes tTitleBarButton appearance/behaviour
137
+ * according to various config flags such as:
138
+ * CDockManager::DockAreaHas_xxx_Button - if set to 'false' keeps the button always invisible
139
+ * CDockManager::DockAreaHideDisabledButtons - if set to 'true' hides button when it is disabled
140
+ */
141
+ class CTitleBarButton : public tTitleBarButton
142
+ {
143
+ bool Visible = true ;
144
+ bool HideWhenDisabled = false ;
145
+ public:
146
+ CTitleBarButton (bool visible = true , QWidget* parent = nullptr )
147
+ : tTitleBarButton(parent)
148
+ , Visible(visible)
149
+ , HideWhenDisabled(DockAreaTitleBarPrivate::testConfigFlag(CDockManager::DockAreaHideDisabledButtons))
150
+ {
151
+ // this->setVisible(Visible); // this causes flickering and seems not to be needed TODO: investigate further and in case it IS needed fix flickering
152
+ }
153
+
154
+
155
+ virtual void setVisible (bool visible) override
156
+ {
157
+ // Adjust this visibility change request with our internal settings:
158
+
159
+ // 'visible' can stay 'true' if and only if this button is configured to generaly visible:
160
+ visible = visible && this ->Visible ;
161
+
162
+ // 'visible' can stay 'true' unless: this button is configured to be invisible when it is disabled and it is currently disabled:
163
+ if (visible && HideWhenDisabled)
164
+ {
165
+ visible = isEnabled ();
166
+ }
167
+
168
+ tTitleBarButton::setVisible (visible);
169
+ }
170
+
171
+ protected:
172
+ bool event (QEvent *ev) override
173
+ {
174
+ if (QEvent::EnabledChange == ev->type () && HideWhenDisabled)
175
+ {
176
+ // force setVisible() call
177
+ setVisible (isEnabled ());
178
+ }
179
+
180
+ return tTitleBarButton::event (ev);;
181
+ }
182
+ };
183
+
157
184
158
185
// ============================================================================
159
186
DockAreaTitleBarPrivate::DockAreaTitleBarPrivate (CDockAreaTitleBar* _public) :
@@ -168,79 +195,58 @@ void DockAreaTitleBarPrivate::createButtons()
168
195
{
169
196
QSizePolicy ButtonSizePolicy (QSizePolicy::Fixed, QSizePolicy::Expanding);
170
197
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);
198
+ // Tabs menu button
199
+ TabsMenuButton = new CTitleBarButton (testConfigFlag (CDockManager::DockAreaHasTabsMenuButton));
200
+ TabsMenuButton->setObjectName (" tabsMenuButton" );
201
+ TabsMenuButton->setAutoRaise (true );
202
+ TabsMenuButton->setPopupMode (QToolButton::InstantPopup);
203
+ setTitleBarButtonIcon (TabsMenuButton, QStyle::SP_TitleBarUnshadeButton, ads::DockAreaMenuIcon);
204
+ QMenu* TabsMenu = new QMenu (TabsMenuButton);
180
205
#ifndef QT_NO_TOOLTIP
181
- TabsMenu->setToolTipsVisible (true );
206
+ TabsMenu->setToolTipsVisible (true );
182
207
#endif
183
- _this->connect (TabsMenu, SIGNAL (aboutToShow ()), SLOT (onTabsMenuAboutToShow ()));
184
- TabsMenuButton->setMenu (TabsMenu);
208
+ _this->connect (TabsMenu, SIGNAL (aboutToShow ()), SLOT (onTabsMenuAboutToShow ()));
209
+ TabsMenuButton->setMenu (TabsMenu);
185
210
#ifndef QT_NO_TOOLTIP
186
- TabsMenuButton->setToolTip (QObject::tr (" List all tabs" ));
211
+ TabsMenuButton->setToolTip (QObject::tr (" List all tabs" ));
187
212
#endif
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
- }
213
+ TabsMenuButton->setSizePolicy (ButtonSizePolicy);
214
+ TopLayout->addWidget (TabsMenuButton, 0 );
215
+ _this->connect (TabsMenuButton->menu (), SIGNAL (triggered (QAction*)),
216
+ SLOT (onTabsMenuActionTriggered (QAction*)));
197
217
198
218
199
- if (testConfigFlag (CDockManager::DockAreaHasUndockButton))
200
- {
201
- // Undock button
202
- UndockButton = new tTitleBarButton ();
203
- UndockButton->setObjectName (" undockButton" );
204
- UndockButton->setAutoRaise (true );
219
+ // Undock button
220
+ UndockButton = new CTitleBarButton (testConfigFlag (CDockManager::DockAreaHasUndockButton));
221
+ UndockButton->setObjectName (" undockButton" );
222
+ UndockButton->setAutoRaise (true );
205
223
#ifndef QT_NO_TOOLTIP
206
- UndockButton->setToolTip (QObject::tr (" Detach Group" ));
224
+ UndockButton->setToolTip (QObject::tr (" Detach Group" ));
207
225
#endif
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
- }
217
-
218
- if (testConfigFlag (CDockManager::DockAreaHasCloseButton))
219
- {
220
- // Close button
221
- CloseButton = new tTitleBarButton ();
222
- CloseButton->setObjectName (" closeButton" );
223
- CloseButton->setAutoRaise (true );
224
- setTitleBarButtonIcon (CloseButton, QStyle::SP_TitleBarCloseButton, ads::DockAreaCloseIcon);
226
+ setTitleBarButtonIcon (UndockButton, QStyle::SP_TitleBarNormalButton, ads::DockAreaUndockIcon);
227
+ UndockButton->setSizePolicy (ButtonSizePolicy);
228
+ TopLayout->addWidget (UndockButton, 0 );
229
+ _this->connect (UndockButton, SIGNAL (clicked ()), SLOT (onUndockButtonClicked ()));
230
+
231
+ // Close button
232
+ CloseButton = new CTitleBarButton (testConfigFlag (CDockManager::DockAreaHasCloseButton));
233
+ CloseButton->setObjectName (" closeButton" );
234
+ CloseButton->setAutoRaise (true );
235
+ setTitleBarButtonIcon (CloseButton, QStyle::SP_TitleBarCloseButton, ads::DockAreaCloseIcon);
225
236
#ifndef QT_NO_TOOLTIP
226
- if (testConfigFlag (CDockManager::DockAreaCloseButtonClosesTab))
227
- {
228
- CloseButton->setToolTip (QObject::tr (" Close Active Tab" ));
229
- }
230
- else
231
- {
232
- CloseButton->setToolTip (QObject::tr (" Close Group" ));
233
- }
234
- #endif
235
- CloseButton->setSizePolicy (ButtonSizePolicy);
236
- CloseButton->setIconSize (QSize (16 , 16 ));
237
- TopLayout->addWidget (CloseButton, 0 );
238
- _this->connect (CloseButton, SIGNAL (clicked ()), SLOT (onCloseButtonClicked ()));
237
+ if (testConfigFlag (CDockManager::DockAreaCloseButtonClosesTab))
238
+ {
239
+ CloseButton->setToolTip (QObject::tr (" Close Active Tab" ));
239
240
}
240
241
else
241
242
{
242
- CloseButton = new CInvisibleButton ( );
243
+ CloseButton-> setToolTip ( QObject::tr ( " Close Group " ) );
243
244
}
245
+ #endif
246
+ CloseButton->setSizePolicy (ButtonSizePolicy);
247
+ CloseButton->setIconSize (QSize (16 , 16 ));
248
+ TopLayout->addWidget (CloseButton, 0 );
249
+ _this->connect (CloseButton, SIGNAL (clicked ()), SLOT (onCloseButtonClicked ()));
244
250
}
245
251
246
252
0 commit comments