Introduce main window affinity
By default a dock widget can dock into any main window. With affinities, we can now have a dock widget "belong" to a main window and only be able to dock into it (or into other floating dock widgets with the same affinity). See DockWidgetBase::setAffinity() and MainWindowBase::setAffinity().
This commit is contained in:
@@ -51,6 +51,7 @@ public:
|
||||
}
|
||||
|
||||
QString name;
|
||||
QString affinityName;
|
||||
const MainWindowOptions m_options;
|
||||
};
|
||||
|
||||
@@ -73,6 +74,12 @@ void MainWindowBase::addDockWidgetAsTab(DockWidgetBase *widget)
|
||||
Q_ASSERT(widget);
|
||||
qCDebug(addwidget) << Q_FUNC_INFO << widget;
|
||||
|
||||
if (widget->affinityName() != affinityName()) {
|
||||
qWarning() << Q_FUNC_INFO << "Refusing to dock widget with incompatible affinity."
|
||||
<< widget->affinityName() << affinityName();
|
||||
return;
|
||||
}
|
||||
|
||||
if (d->supportsCentralFrame()) {
|
||||
dropArea()->m_centralFrame->addWidget(widget);
|
||||
} else {
|
||||
@@ -82,7 +89,7 @@ void MainWindowBase::addDockWidgetAsTab(DockWidgetBase *widget)
|
||||
|
||||
void MainWindowBase::addDockWidget(DockWidgetBase *dw, Location location, DockWidgetBase *relativeTo, AddingOption option)
|
||||
{
|
||||
dropArea()->addDockWidget(dw, location, relativeTo, option);
|
||||
dropArea()->addDockWidget(dw, location, relativeTo, option);
|
||||
}
|
||||
|
||||
QString MainWindowBase::uniqueName() const
|
||||
@@ -100,6 +107,26 @@ MultiSplitterLayout *MainWindowBase::multiSplitterLayout() const
|
||||
return dropArea()->multiSplitterLayout();
|
||||
}
|
||||
|
||||
void MainWindowBase::setAffinityName(const QString &name)
|
||||
{
|
||||
if (d->affinityName == name)
|
||||
return;
|
||||
|
||||
if (!d->affinityName.isEmpty()) {
|
||||
qWarning() << Q_FUNC_INFO
|
||||
<< "Affinity is already set, refusing to change."
|
||||
<< "Submit a feature request with a good justification.";
|
||||
return;
|
||||
}
|
||||
|
||||
d->affinityName = name;
|
||||
}
|
||||
|
||||
QString MainWindowBase::affinityName() const
|
||||
{
|
||||
return d->affinityName;
|
||||
}
|
||||
|
||||
void MainWindowBase::setUniqueName(const QString &uniqueName)
|
||||
{
|
||||
if (uniqueName.isEmpty())
|
||||
|
||||
Reference in New Issue
Block a user