DockManager: add the ability to programmatically update splitter sizes (#266)

Add the ability to programmatically update splitter sizes. The user must
specify the dock area that is contained in a splitter and a list of
sizes. The list of sizes will be passed to the splitter that immediately
contains the specified dock area. If the dock area is not part of a
splitter the method will have no effect.

Co-authored-by: Christian Seiler <c.seiler@luxflux.de>
This commit is contained in:
Christian Seiler
2020-10-23 20:59:50 +02:00
committed by GitHub
parent 3a5c965306
commit 0e3c3bab45
2 changed files with 48 additions and 0 deletions

View File

@@ -55,6 +55,7 @@
#include "DockingStateReader.h"
#include "DockAreaTitleBar.h"
#include "DockFocusController.h"
#include "DockSplitter.h"
#ifdef Q_OS_LINUX
#include "linux/FloatingWidgetTitleBar.h"
@@ -1093,6 +1094,34 @@ CDockWidget* CDockManager::focusedDockWidget() const
}
}
//===========================================================================
QList<int> CDockManager::splitterSizes(CDockAreaWidget *ContainedArea) const
{
if (ContainedArea)
{
auto Splitter = internal::findParent<CDockSplitter*>(ContainedArea);
if (Splitter)
{
return Splitter->sizes();
}
}
return QList<int>();
}
//===========================================================================
void CDockManager::setSplitterSizes(CDockAreaWidget *ContainedArea, const QList<int>& sizes)
{
if (!ContainedArea)
{
return;
}
auto Splitter = internal::findParent<CDockSplitter*>(ContainedArea);
if (Splitter && Splitter->count() == sizes.count())
{
Splitter->setSizes(sizes);
}
}
} // namespace ads