From c109ef836ad1160110f54da82c5caafd9f2fdfea Mon Sep 17 00:00:00 2001 From: Davide Faconti Date: Sat, 13 Jun 2020 16:59:13 +0200 Subject: [PATCH] use equal splitter size for widget added programmatically --- src/DockContainerWidget.cpp | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/DockContainerWidget.cpp b/src/DockContainerWidget.cpp index 0601a62..d92ea36 100644 --- a/src/DockContainerWidget.cpp +++ b/src/DockContainerWidget.cpp @@ -313,6 +313,21 @@ public: onVisibleDockAreaCountChanged(); emit _this->dockAreaViewToggled(DockArea, Visible); } + + void onAdjustSplitterSizes(QSplitter* Splitter, qreal LastRatio = 1.0) + { + int AreaSize = (Splitter->orientation() == Qt::Horizontal) ? Splitter->width() : Splitter->height(); + auto SplitterSizes = Splitter->sizes(); + + qreal TotRatio = SplitterSizes.size() - 1.0 + LastRatio; + for( int i=0; isetSizes(SplitterSizes); + } + }; // struct DockContainerWidgetPrivate @@ -1144,16 +1159,21 @@ CDockAreaWidget* DockContainerWidgetPrivate::dockWidgetIntoDockArea(DockWidgetAr int index = TargetAreaSplitter ->indexOf(TargetDockArea); if (TargetAreaSplitter->orientation() == InsertParam.orientation()) { - ADS_PRINT("TargetAreaSplitter->orientation() == InsertParam.orientation()"); + ADS_PRINT("TargetAreaSplitter->orientation() == InsertParam.orientation()"); TargetAreaSplitter->insertWidget(index + InsertParam.insertOffset(), NewDockArea); + onAdjustSplitterSizes(TargetAreaSplitter); } else { - ADS_PRINT("TargetAreaSplitter->orientation() != InsertParam.orientation()"); + ADS_PRINT("TargetAreaSplitter->orientation() != InsertParam.orientation()"); + auto TargetAreaSizes = TargetAreaSplitter->sizes(); QSplitter* NewSplitter = newSplitter(InsertParam.orientation()); NewSplitter->addWidget(TargetDockArea); + insertWidgetIntoSplitter(NewSplitter, NewDockArea, InsertParam.append()); TargetAreaSplitter->insertWidget(index, NewSplitter); + TargetAreaSplitter->setSizes(TargetAreaSizes); + onAdjustSplitterSizes(TargetAreaSplitter); } appendDockAreas({NewDockArea});