Skip to content

Commit e878bb4

Browse files
author
Uwe Kindler
committed
Added support for setting the DockWidget icon - this icon is shown in the title bar or when using the ToggleViewAction
1 parent dae852d commit e878bb4

File tree

8 files changed

+116
-7
lines changed

8 files changed

+116
-7
lines changed

.cproject

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/demo}&quot;"/>
2525
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/src}&quot;"/>
2626
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include&quot;"/>
27+
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtCore&quot;"/>
2728
</option>
2829
<inputType id="cdt.managedbuild.tool.gnu.assembler.input.1249325593" superClass="cdt.managedbuild.tool.gnu.assembler.input"/>
2930
</tool>
@@ -33,17 +34,19 @@
3334
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/src}&quot;"/>
3435
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/demo}&quot;"/>
3536
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include&quot;"/>
37+
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtCore&quot;"/>
3638
</option>
37-
<option id="gnu.cpp.compiler.option.preprocessor.def.56223209" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false" valueType="definedSymbols"/>
39+
<option id="gnu.cpp.compiler.option.preprocessor.def.56223209" name="Defined symbols (-D)" superClass="gnu.cpp.compiler.option.preprocessor.def" useByScannerDiscovery="false"/>
3840
<inputType id="cdt.managedbuild.tool.gnu.cpp.compiler.input.1318830536" superClass="cdt.managedbuild.tool.gnu.cpp.compiler.input"/>
3941
</tool>
4042
<tool id="cdt.managedbuild.tool.gnu.c.compiler.mingw.base.389117097" name="GCC C Compiler" superClass="cdt.managedbuild.tool.gnu.c.compiler.mingw.base">
4143
<option id="gnu.c.compiler.option.include.paths.1871729602" name="Include paths (-I)" superClass="gnu.c.compiler.option.include.paths" useByScannerDiscovery="false" valueType="includePath">
4244
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/demo}&quot;"/>
4345
<listOptionValue builtIn="false" value="&quot;${workspace_loc:/QtAdvancedDockingSystem/src}&quot;"/>
4446
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include&quot;"/>
47+
<listOptionValue builtIn="false" value="&quot;${QTDIR}/include/QtCore&quot;"/>
4548
</option>
46-
<option id="gnu.c.compiler.option.preprocessor.def.symbols.806805509" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false" valueType="definedSymbols"/>
49+
<option id="gnu.c.compiler.option.preprocessor.def.symbols.806805509" name="Defined symbols (-D)" superClass="gnu.c.compiler.option.preprocessor.def.symbols" useByScannerDiscovery="false"/>
4750
<inputType id="cdt.managedbuild.tool.gnu.c.compiler.input.1568363924" superClass="cdt.managedbuild.tool.gnu.c.compiler.input"/>
4851
</tool>
4952
<tool id="cdt.managedbuild.tool.gnu.c.linker.mingw.base.1734874312" name="MinGW C Linker" superClass="cdt.managedbuild.tool.gnu.c.linker.mingw.base"/>

.settings/language.settings.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<project>
33
<configuration id="cdt.managedbuild.toolchain.gnu.mingw.base.1119687795" name="Default">
44
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
5-
<provider class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW" console="false" env-hash="-1519829723851667984" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings MinGW" parameter="${COMMAND} ${FLAGS} -E -P -v -dD -std=c++14 &quot;${INPUTS}&quot;" prefer-non-shared="true">
5+
<provider class="org.eclipse.cdt.managedbuilder.internal.language.settings.providers.GCCBuiltinSpecsDetectorMinGW" console="false" env-hash="-550644722333667955" id="org.eclipse.cdt.managedbuilder.core.GCCBuiltinSpecsDetectorMinGW" keep-relative-paths="false" name="CDT GCC Built-in Compiler Settings MinGW" parameter="${COMMAND} ${FLAGS} -E -P -v -dD -std=c++14 &quot;${INPUTS}&quot;" prefer-non-shared="true">
66
<language-scope id="org.eclipse.cdt.core.gcc"/>
77
<language-scope id="org.eclipse.cdt.core.g++"/>
88
</provider>

demo/mainwindow.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ static ads::CDockWidget* createCalendarDockWidget(QMenu* ViewMenu)
5858
ads::CDockWidget* DockWidget = new ads::CDockWidget(QString("Calendar %1").arg(CalendarCount++));
5959
DockWidget->setWidget(w);
6060
DockWidget->setObjectName(DockWidget->windowTitle());
61+
DockWidget->setToggleViewActionMode(ads::CDockWidget::ActionModeShow);
6162
ViewMenu->addAction(DockWidget->toggleViewAction());
6263
return DockWidget;
6364
}
@@ -84,6 +85,10 @@ MainWindow::MainWindow(QWidget *parent) :
8485
ui(new Ui::MainWindow)
8586
{
8687
ui->setupUi(this);
88+
ui->toolBar->addAction(ui->actionSaveState);
89+
ui->actionSaveState->setIcon(style()->standardIcon(QStyle::SP_DialogSaveButton));
90+
ui->toolBar->addAction(ui->actionRestoreState);
91+
ui->actionRestoreState->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
8792

8893
m_DockManager = new ads::CDockManager(this);
8994
createContent();
@@ -102,10 +107,11 @@ void MainWindow::createContent()
102107
// Test container docking
103108
QMenu* ViewMenu = this->ui->menuView;
104109
auto DockWidget = createCalendarDockWidget(ViewMenu);
110+
DockWidget->setIcon(style()->standardIcon(QStyle::SP_DialogOpenButton));
105111
DockWidget->setFeatures(DockWidget->features().setFlag(ads::CDockWidget::DockWidgetClosable, false));
106112
m_DockManager->addDockWidget(ads::LeftDockWidgetArea, DockWidget);
107113
m_DockManager->addDockWidget(ads::LeftDockWidgetArea, createLongTextLabelDockWidget(ViewMenu));
108-
/*m_DockManager->addDockWidget(ads::BottomDockWidgetArea, createFileSystemTreeDockWidget(ViewMenu));
114+
m_DockManager->addDockWidget(ads::BottomDockWidgetArea, createFileSystemTreeDockWidget(ViewMenu));
109115
auto TopDockArea = m_DockManager->addDockWidget(ads::TopDockWidgetArea, createFileSystemTreeDockWidget(ViewMenu));
110116
DockWidget = createCalendarDockWidget(ViewMenu);
111117
DockWidget->setFeatures(DockWidget->features().setFlag(ads::CDockWidget::DockWidgetClosable, false));
@@ -116,7 +122,7 @@ void MainWindow::createContent()
116122
m_DockManager->addDockWidget(ads::TopDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea);
117123
auto BottomDockArea = m_DockManager->addDockWidget(ads::BottomDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea);
118124
m_DockManager->addDockWidget(ads::RightDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), RighDockArea);
119-
m_DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), BottomDockArea);*/
125+
m_DockManager->addDockWidget(ads::CenterDockWidgetArea, createLongTextLabelDockWidget(ViewMenu), BottomDockArea);
120126
}
121127

122128

demo/mainwindow.ui

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
<property name="windowTitle">
1414
<string>MainWindow</string>
1515
</property>
16+
<property name="dockOptions">
17+
<set>QMainWindow::AllowTabbedDocks</set>
18+
</property>
1619
<widget class="QWidget" name="centralWidget"/>
1720
<widget class="QStatusBar" name="statusBar"/>
1821
<widget class="QMenuBar" name="menuBar">
@@ -46,6 +49,17 @@
4649
<addaction name="menuView"/>
4750
<addaction name="menuAbout"/>
4851
</widget>
52+
<widget class="QToolBar" name="toolBar">
53+
<property name="windowTitle">
54+
<string>toolBar</string>
55+
</property>
56+
<attribute name="toolBarArea">
57+
<enum>TopToolBarArea</enum>
58+
</attribute>
59+
<attribute name="toolBarBreak">
60+
<bool>false</bool>
61+
</attribute>
62+
</widget>
4963
<action name="actionExit">
5064
<property name="text">
5165
<string>Exit</string>

src/DockWidget.cpp

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,31 @@ QAction* CDockWidget::toggleViewAction() const
330330
}
331331

332332

333+
//============================================================================
334+
void CDockWidget::setToggleViewActionMode(eToggleViewActionMode Mode)
335+
{
336+
if (ActionModeToggle == Mode)
337+
{
338+
d->ToggleViewAction->setCheckable(true);
339+
d->ToggleViewAction->setIcon(QIcon());
340+
}
341+
else
342+
{
343+
d->ToggleViewAction->setCheckable(false);
344+
d->ToggleViewAction->setIcon(d->TitleWidget->icon());
345+
}
346+
}
347+
348+
333349
//============================================================================
334350
void CDockWidget::toggleView(bool Open)
335351
{
352+
QAction* Sender = qobject_cast<QAction*>(sender());
353+
if (Sender == d->ToggleViewAction && !d->ToggleViewAction->isCheckable())
354+
{
355+
Open = true;
356+
}
357+
336358
if (Open)
337359
{
338360
d->showDockWidget();
@@ -391,6 +413,17 @@ bool CDockWidget::event(QEvent *e)
391413
}
392414

393415

416+
//============================================================================
417+
void CDockWidget::setIcon(const QIcon& Icon)
418+
{
419+
d->TitleWidget->setIcon(Icon);
420+
if (!d->ToggleViewAction->isCheckable())
421+
{
422+
d->ToggleViewAction->setIcon(Icon);
423+
}
424+
}
425+
426+
394427

395428
} // namespace ads
396429

src/DockWidget.h

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,20 @@ class CDockWidget : public QFrame
115115
StateFloating
116116
};
117117

118+
/**
119+
* This mode configures the behavior of the toggle view action.
120+
* If the mode if ActionModeToggle, then the toggle view action is
121+
* a checkable action to show / hide the dock widget. If the mode
122+
* is ActionModeShow, then the action is not checkable an it will
123+
* always show the dock widget if clicked. If the mode is ActionModeShow,
124+
* the user can only close the DockWidget with the close button.
125+
*/
126+
enum eToggleViewActionMode
127+
{
128+
ActionModeToggle,//!< ActionModeToggle
129+
ActionModeShow //!< ActionModeShow
130+
};
131+
118132
/**
119133
* Default Constructor
120134
*/
@@ -189,16 +203,28 @@ class CDockWidget : public QFrame
189203
QAction* toggleViewAction() const;
190204

191205
/**
192-
* Emits titleChanged signal if title change event occures
206+
* Configures the behavior of the toggle view action.
207+
* \see eToggleViewActionMode for a detailed description
208+
*/
209+
void setToggleViewActionMode(eToggleViewActionMode Mode);
210+
211+
/**
212+
* Emits titleChanged signal if title change event occurs
193213
*/
194214
virtual bool event(QEvent *e) override;
195215

216+
/**
217+
* Sets the dock widget icon that is shown in tabs and in toggle view
218+
* actions
219+
*/
220+
void setIcon(const QIcon& Icon);
221+
196222
public slots:
197223
/**
198224
* This property controls whether the dock widget is open or closed.
199225
* The toogleViewAction triggers this slot
200226
*/
201-
void toggleView(bool Open);
227+
void toggleView(bool Open = true);
202228

203229
signals:
204230
/**

src/DockWidgetTitleBar.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ struct DockWidgetTitleBarPrivate
7373
CDockAreaWidget* DockArea = nullptr;
7474
eDragState DragState = DraggingInactive;
7575
CFloatingDockContainer* FloatingWidget = nullptr;
76+
QIcon Icon;
7677

7778
/**
7879
* Private data constructor
@@ -347,6 +348,22 @@ CDockAreaWidget* CDockWidgetTitleBar::dockAreaWidget() const
347348
{
348349
return d->DockArea;
349350
}
351+
352+
353+
//============================================================================
354+
void CDockWidgetTitleBar::setIcon(const QIcon& Icon)
355+
{
356+
d->Icon = Icon;
357+
d->IconLabel->setPixmap(Icon.pixmap(this->windowHandle(), QSize(16, 16)));
358+
d->IconLabel->setVisible(true);
359+
}
360+
361+
362+
//============================================================================
363+
const QIcon& CDockWidgetTitleBar::icon() const
364+
{
365+
return d->Icon;
366+
}
350367
} // namespace ads
351368

352369
//---------------------------------------------------------------------------

src/DockWidgetTitleBar.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,16 @@ class CDockWidgetTitleBar : public QFrame
9696
*/
9797
CDockAreaWidget* dockAreaWidget() const;
9898

99+
/**
100+
* Sets the icon to show in title bar
101+
*/
102+
void setIcon(const QIcon& Icon);
103+
104+
/**
105+
* Returns the icon
106+
*/
107+
const QIcon& icon() const;
108+
99109
signals:
100110
void activeTabChanged();
101111
void clicked();

0 commit comments

Comments
 (0)