Skip to content

Commit ffed6a9

Browse files
Merged pull request #201 but made it configurable via config flag
1 parent 38d8e6a commit ffed6a9

File tree

3 files changed

+38
-22
lines changed

3 files changed

+38
-22
lines changed

demo/MainWindow.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,6 +578,10 @@ CMainWindow::CMainWindow(QWidget *parent) :
578578
// widget that has the focus
579579
// CDockManager::setConfigFlag(CDockManager::FocusHighlighting, true);
580580

581+
// uncomment if you would like to enable an equal distribution of the
582+
// available size of a splitter to all contained dock widgets
583+
// CDockManager::setConfigFlag(CDockManager::EqualSplitOnInsertion, true);
584+
581585
// Now create the dock manager and its content
582586
d->DockManager = new CDockManager(this);
583587

@@ -586,7 +590,7 @@ CMainWindow::CMainWindow(QWidget *parent) :
586590

587591
d->createContent();
588592
// Default window geometry - center on screen
589-
resize(1200, 1000);
593+
resize(1280, 720);
590594
setGeometry(QStyle::alignedRect(
591595
Qt::LeftToRight, Qt::AlignCenter, frameSize(),
592596
QGuiApplication::primaryScreen()->availableGeometry()

src/DockContainerWidget.cpp

Lines changed: 32 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,12 @@ class DockContainerWidgetPrivate
147147
* Adds dock widget to container and returns the dock area that contains
148148
* the inserted dock widget
149149
*/
150-
CDockAreaWidget* dockWidgetIntoContainer(DockWidgetArea area, CDockWidget* Dockwidget);
150+
CDockAreaWidget* addDockWidgetToContainer(DockWidgetArea area, CDockWidget* Dockwidget);
151151

152152
/**
153153
* Adds dock widget to a existing DockWidgetArea
154154
*/
155-
CDockAreaWidget* dockWidgetIntoDockArea(DockWidgetArea area, CDockWidget* Dockwidget,
155+
CDockAreaWidget* addDockWidgetToDockArea(DockWidgetArea area, CDockWidget* Dockwidget,
156156
CDockAreaWidget* TargetDockArea);
157157

158158
/**
@@ -304,30 +304,33 @@ class DockContainerWidgetPrivate
304304
return s;
305305
}
306306

307-
308-
// private slots: ------------------------------------------------------------
309-
void onDockAreaViewToggled(bool Visible)
310-
{
311-
CDockAreaWidget* DockArea = qobject_cast<CDockAreaWidget*>(_this->sender());
312-
VisibleDockAreaCount += Visible ? 1 : -1;
313-
onVisibleDockAreaCountChanged();
314-
emit _this->dockAreaViewToggled(DockArea, Visible);
315-
}
316-
317-
void onAdjustSplitterSizes(QSplitter* Splitter, qreal LastRatio = 1.0)
307+
/**
308+
* Ensures equal distribution of the sizes of a splitter if an dock widget
309+
* is inserted from code
310+
*/
311+
void adjustSplitterSizesOnInsertion(QSplitter* Splitter, qreal LastRatio = 1.0)
318312
{
319313
int AreaSize = (Splitter->orientation() == Qt::Horizontal) ? Splitter->width() : Splitter->height();
320314
auto SplitterSizes = Splitter->sizes();
321315

322316
qreal TotRatio = SplitterSizes.size() - 1.0 + LastRatio;
323-
for( int i=0; i<SplitterSizes.size()-1; i++)
317+
for(int i = 0; i < SplitterSizes.size() -1; i++)
324318
{
325319
SplitterSizes[i] = AreaSize / TotRatio;
326320
}
327321
SplitterSizes.back() = AreaSize * LastRatio / TotRatio;
328322
Splitter->setSizes(SplitterSizes);
329323
}
330324

325+
326+
// private slots: ------------------------------------------------------------
327+
void onDockAreaViewToggled(bool Visible)
328+
{
329+
CDockAreaWidget* DockArea = qobject_cast<CDockAreaWidget*>(_this->sender());
330+
VisibleDockAreaCount += Visible ? 1 : -1;
331+
onVisibleDockAreaCountChanged();
332+
emit _this->dockAreaViewToggled(DockArea, Visible);
333+
}
331334
}; // struct DockContainerWidgetPrivate
332335

333336

@@ -1028,7 +1031,7 @@ bool DockContainerWidgetPrivate::restoreChildNodes(CDockingStateReader& s,
10281031

10291032

10301033
//============================================================================
1031-
CDockAreaWidget* DockContainerWidgetPrivate::dockWidgetIntoContainer(DockWidgetArea area,
1034+
CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToContainer(DockWidgetArea area,
10321035
CDockWidget* Dockwidget)
10331036
{
10341037
CDockAreaWidget* NewDockArea = new CDockAreaWidget(DockManager, _this);
@@ -1141,7 +1144,7 @@ void DockContainerWidgetPrivate::dumpRecursive(int level, QWidget* widget)
11411144

11421145

11431146
//============================================================================
1144-
CDockAreaWidget* DockContainerWidgetPrivate::dockWidgetIntoDockArea(DockWidgetArea area,
1147+
CDockAreaWidget* DockContainerWidgetPrivate::addDockWidgetToDockArea(DockWidgetArea area,
11451148
CDockWidget* Dockwidget, CDockAreaWidget* TargetDockArea)
11461149
{
11471150
if (CenterDockWidgetArea == area)
@@ -1161,7 +1164,12 @@ CDockAreaWidget* DockContainerWidgetPrivate::dockWidgetIntoDockArea(DockWidgetAr
11611164
{
11621165
ADS_PRINT("TargetAreaSplitter->orientation() == InsertParam.orientation()");
11631166
TargetAreaSplitter->insertWidget(index + InsertParam.insertOffset(), NewDockArea);
1164-
onAdjustSplitterSizes(TargetAreaSplitter);
1167+
// do nothing, if flag is not enabled
1168+
if (CDockManager::testConfigFlag(CDockManager::EqualSplitOnInsertion))
1169+
{
1170+
adjustSplitterSizesOnInsertion(TargetAreaSplitter);
1171+
}
1172+
11651173
}
11661174
else
11671175
{
@@ -1172,8 +1180,11 @@ CDockAreaWidget* DockContainerWidgetPrivate::dockWidgetIntoDockArea(DockWidgetAr
11721180

11731181
insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append());
11741182
TargetAreaSplitter->insertWidget(index, NewSplitter);
1175-
TargetAreaSplitter->setSizes(TargetAreaSizes);
1176-
onAdjustSplitterSizes(NewSplitter);
1183+
if (CDockManager::testConfigFlag(CDockManager::EqualSplitOnInsertion))
1184+
{
1185+
TargetAreaSplitter->setSizes(TargetAreaSizes);
1186+
adjustSplitterSizesOnInsertion(NewSplitter);
1187+
}
11771188
}
11781189

11791190
appendDockAreas({NewDockArea});
@@ -1231,11 +1242,11 @@ CDockAreaWidget* CDockContainerWidget::addDockWidget(DockWidgetArea area, CDockW
12311242
Dockwidget->setDockManager(d->DockManager);
12321243
if (DockAreaWidget)
12331244
{
1234-
return d->dockWidgetIntoDockArea(area, Dockwidget, DockAreaWidget);
1245+
return d->addDockWidgetToDockArea(area, Dockwidget, DockAreaWidget);
12351246
}
12361247
else
12371248
{
1238-
return d->dockWidgetIntoContainer(area, Dockwidget);
1249+
return d->addDockWidgetToContainer(area, Dockwidget);
12391250
}
12401251
}
12411252

src/DockManager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,7 @@ class ADS_EXPORT CDockManager : public CDockContainerWidget
179179
HideSingleCentralWidgetTitleBar = 0x100000, //!< If there is only one single visible dock widget in the main dock container (the dock manager) and if this flag is set, then the titlebar of this dock widget will be hidden
180180
//!< this only makes sense for non draggable and non floatable widgets and enables the creation of some kind of "central" widget
181181
FocusHighlighting = 0x200000, //!< enables styling of focused dock widget tabs or floating widget titlebar
182+
EqualSplitOnInsertion = 0x400000, ///!< if enabled, the space is equally distributed to all widgets in a splitter
182183

183184
DefaultDockAreaButtons = DockAreaHasCloseButton
184185
| DockAreaHasUndockButton

0 commit comments

Comments
 (0)