Set splitter sizes based on proportion settable in the dock widget

This commit is contained in:
Syarif Fakhri
2022-09-13 11:20:46 +08:00
parent 214c415fa2
commit 4841d9b896
5 changed files with 61 additions and 29 deletions

View File

@@ -188,6 +188,7 @@ COverlayDockContainer::COverlayDockContainer(CDockWidget* DockWidget, CDockWidge
COverlayDockContainer(DockWidget->dockManager(), area, parent)
{
addDockWidget(DockWidget);
setDockSizeProportion(DockWidget->DefaultOverlayDockProportion());
}
//============================================================================
@@ -234,30 +235,6 @@ void COverlayDockContainer::addDockWidget(CDockWidget* DockWidget)
OldDockArea->removeDockWidget(DockWidget);
}
d->DockArea->addDockWidget(DockWidget);
const auto dockContainerParent = parentContainer();
const auto rootSplitter = dockContainerParent->rootSplitter();
const auto rect = rootSplitter->frameGeometry();
const auto dockWidth = DockWidget->sizeHint().width();
switch (d->Area)
{
case CDockWidgetSideTab::Left:
{
d->Splitter->setSizes({ dockWidth, rect.width() - dockWidth });
break;
}
case CDockWidgetSideTab::Right:
{
d->Splitter->setSizes({ rect.width() - dockWidth, dockWidth });
break;
}
case CDockWidgetSideTab::Bottom:
{
d->Splitter->setSizes({ rect.width() - dockWidth, dockWidth });
break;
}
}
d->DockWidget->sideTabWidget()->updateOrientationAndSpacing(d->Area);
updateSize();
@@ -265,6 +242,28 @@ void COverlayDockContainer::addDockWidget(CDockWidget* DockWidget)
}
//============================================================================
void COverlayDockContainer::setDockSizeProportion(int SplitterProportion)
{
switch (d->Area)
{
case CDockWidgetSideTab::Left:
{
d->Splitter->setSizes({ INT_MAX / SplitterProportion, INT_MAX - INT_MAX / SplitterProportion });
break;
}
case CDockWidgetSideTab::Right:
[[fallthrough]];
case CDockWidgetSideTab::Bottom:
{
d->Splitter->setSizes({ INT_MAX - INT_MAX / SplitterProportion, INT_MAX / SplitterProportion });
break;
}
}
}
//============================================================================
CDockWidgetSideTab::SideTabBarArea COverlayDockContainer::sideTabBarArea() const
{