Skip to content

Commit c109ef8

Browse files
author
Davide Faconti
committed
use equal splitter size for widget added programmatically
1 parent caa1a9f commit c109ef8

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

src/DockContainerWidget.cpp

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,6 +313,21 @@ class DockContainerWidgetPrivate
313313
onVisibleDockAreaCountChanged();
314314
emit _this->dockAreaViewToggled(DockArea, Visible);
315315
}
316+
317+
void onAdjustSplitterSizes(QSplitter* Splitter, qreal LastRatio = 1.0)
318+
{
319+
int AreaSize = (Splitter->orientation() == Qt::Horizontal) ? Splitter->width() : Splitter->height();
320+
auto SplitterSizes = Splitter->sizes();
321+
322+
qreal TotRatio = SplitterSizes.size() - 1.0 + LastRatio;
323+
for( int i=0; i<SplitterSizes.size()-1; i++)
324+
{
325+
SplitterSizes[i] = AreaSize / TotRatio;
326+
}
327+
SplitterSizes.back() = AreaSize * AreaSize / TotRatio;
328+
Splitter->setSizes(SplitterSizes);
329+
}
330+
316331
}; // struct DockContainerWidgetPrivate
317332

318333

@@ -1144,16 +1159,21 @@ CDockAreaWidget* DockContainerWidgetPrivate::dockWidgetIntoDockArea(DockWidgetAr
11441159
int index = TargetAreaSplitter ->indexOf(TargetDockArea);
11451160
if (TargetAreaSplitter->orientation() == InsertParam.orientation())
11461161
{
1147-
ADS_PRINT("TargetAreaSplitter->orientation() == InsertParam.orientation()");
1162+
ADS_PRINT("TargetAreaSplitter->orientation() == InsertParam.orientation()");
11481163
TargetAreaSplitter->insertWidget(index + InsertParam.insertOffset(), NewDockArea);
1164+
onAdjustSplitterSizes(TargetAreaSplitter);
11491165
}
11501166
else
11511167
{
1152-
ADS_PRINT("TargetAreaSplitter->orientation() != InsertParam.orientation()");
1168+
ADS_PRINT("TargetAreaSplitter->orientation() != InsertParam.orientation()");
1169+
auto TargetAreaSizes = TargetAreaSplitter->sizes();
11531170
QSplitter* NewSplitter = newSplitter(InsertParam.orientation());
11541171
NewSplitter->addWidget(TargetDockArea);
1172+
11551173
insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append());
11561174
TargetAreaSplitter->insertWidget(index, NewSplitter);
1175+
TargetAreaSplitter->setSizes(TargetAreaSizes);
1176+
onAdjustSplitterSizes(TargetAreaSplitter);
11571177
}
11581178

11591179
appendDockAreas({NewDockArea});

0 commit comments

Comments
 (0)