Gui: implement option to disable overlay management

This commit is contained in:
wmayer
2023-10-14 12:59:10 +02:00
committed by wwmayer
parent 3f1ecf9141
commit 310c052134
5 changed files with 81 additions and 16 deletions

View File

@@ -154,6 +154,7 @@ struct DockWindowManagerP
boost::signals2::scoped_connection _connParam;
QTimer _timer;
DockWidgetEventFilter _dockWidgetEventFilter;
QPointer<OverlayManager> overlayManager;
};
} // namespace Gui
@@ -175,9 +176,31 @@ void DockWindowManager::destruct()
DockWindowManager::DockWindowManager()
{
d = new DockWindowManagerP;
d->_hPref = App::GetApplication().GetUserParameter().GetGroup("BaseApp/MainWindow/DockWindows");
auto grp = App::GetApplication().GetUserParameter().GetGroup("BaseApp/Preferences/DockWindows");
if (grp->GetBool("ActivateOverlay", true)) {
setupOverlayManagement();
}
}
DockWindowManager::~DockWindowManager()
{
d->_dockedWindows.clear();
delete d;
}
bool DockWindowManager::isOverlayActivated() const
{
return (d->overlayManager != nullptr);
}
void DockWindowManager::setupOverlayManagement()
{
d->overlayManager = OverlayManager::instance();
qApp->installEventFilter(&d->_dockWidgetEventFilter);
d->_hPref = App::GetApplication().GetUserParameter().GetGroup(
"BaseApp/MainWindow/DockWindows");
d->_dockWidgetEventFilter.cursorMargin = d->_hPref->GetInt("CursorMargin", 5);
d->_connParam = d->_hPref->Manager()->signalParamChanged.connect(
[this](ParameterGrp *Param, ParameterGrp::ParamType Type, const char *name, const char *) {
@@ -210,12 +233,6 @@ DockWindowManager::DockWindowManager()
});
}
DockWindowManager::~DockWindowManager()
{
d->_dockedWindows.clear();
delete d;
}
/**
* Adds a new dock window to the main window and embeds the given \a widget.
*/
@@ -230,7 +247,10 @@ QDockWidget* DockWindowManager::addDockWindow(const char* name, QWidget* widget,
// creates the dock widget as container to embed this widget
MainWindow* mw = getMainWindow();
dw = new QDockWidget(mw);
OverlayManager::instance()->setupTitleBar(dw);
if (d->overlayManager) {
d->overlayManager->setupTitleBar(dw);
}
// Note: By default all dock widgets are hidden but the user can show them manually in the view menu.
// First, hide immediately the dock widget to avoid flickering, after setting up the dock widgets
@@ -266,7 +286,9 @@ QDockWidget* DockWindowManager::addDockWindow(const char* name, QWidget* widget,
d->_dockedWindows.push_back(dw);
OverlayManager::instance()->initDockWidget(dw);
if (d->overlayManager) {
d->overlayManager->initDockWidget(dw);
}
connect(dw->toggleViewAction(), &QAction::triggered, [this, dw](){
Base::ConnectionBlocker block(d->_connParam);
@@ -329,7 +351,11 @@ QWidget* DockWindowManager::removeDockWindow(const char* name)
if ((*it)->objectName() == QString::fromUtf8(name)) {
QDockWidget* dw = *it;
d->_dockedWindows.erase(it);
OverlayManager::instance()->unsetupDockWidget(dw);
if (d->overlayManager) {
d->overlayManager->unsetupDockWidget(dw);
}
getMainWindow()->removeDockWidget(dw);
// avoid to destruct the embedded widget
widget = dw->widget();
@@ -359,7 +385,9 @@ void DockWindowManager::removeDockWindow(QWidget* widget)
if ((*it)->widget() == widget) {
QDockWidget* dw = *it;
d->_dockedWindows.erase(it);
OverlayManager::instance()->unsetupDockWidget(dw);
if (d->overlayManager) {
d->overlayManager->unsetupDockWidget(dw);
}
getMainWindow()->removeDockWidget(dw);
// avoid to destruct the embedded widget
widget->setParent(nullptr);
@@ -491,8 +519,9 @@ void DockWindowManager::setup(DockWindowItems* items)
docked.removeAt(index);
}
if(dw && visible)
OverlayManager::instance()->setupDockWidget(dw);
if (d->overlayManager && dw && visible) {
d->overlayManager->setupDockWidget(dw);
}
}
tabifyDockWidgets(items);

View File

@@ -97,6 +97,8 @@ public:
void loadState();
void retranslate();
bool isOverlayActivated() const;
private Q_SLOTS:
/**
* \internal
@@ -110,6 +112,7 @@ private Q_SLOTS:
private:
QDockWidget* findDockWidget(const QList<QDockWidget*>&, const QString&) const;
void tabifyDockWidgets(DockWindowItems*);
void setupOverlayManagement();
DockWindowManager();
~DockWindowManager() override;

View File

@@ -230,6 +230,10 @@ void DlgSettingsGeneral::saveSettings()
ui->RecentFiles->onSave();
ui->EnableCursorBlinking->onSave();
ui->SplashScreen->onSave();
ui->ActivateOverlay->onSave();
if (property("ActivateOverlay").toBool() != ui->ActivateOverlay->isChecked()) {
requireRestart();
}
setRecentFileSize();
bool force = setLanguage();
@@ -297,6 +301,8 @@ void DlgSettingsGeneral::loadSettings()
ui->RecentFiles->onRestore();
ui->EnableCursorBlinking->onRestore();
ui->SplashScreen->onRestore();
ui->ActivateOverlay->onRestore();
setProperty("ActivateOverlay", ui->ActivateOverlay->isChecked());
// search for the language files
ParameterGrp::handle hGrp = WindowParameter::getDefaultParameter()->GetGroup("General");

View File

@@ -360,6 +360,25 @@ display the splash screen</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="Gui::PrefCheckBox" name="ActivateOverlay">
<property name="toolTip">
<string>Activate overlay handling of dock windows</string>
</property>
<property name="text">
<string>Activate overlay handling</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
<property name="prefEntry" stdset="0">
<cstring>ActivateOverlay</cstring>
</property>
<property name="prefPath" stdset="0">
<cstring>DockWindows</cstring>
</property>
</widget>
</item>
</layout>
</widget>
</item>

View File

@@ -698,8 +698,16 @@ MenuItem* StdWorkbench::setupMenuBar() const
#endif
<< "Separator" << visu
<< "Std_ToggleNavigation"
<< "Std_SetAppearance" << "Std_RandomColor" << "Separator"
<< "Std_Workbench" << "Std_ToolBarMenu" << "Std_DockViewMenu" << "Std_DockOverlay" << "Separator"
<< "Std_SetAppearance"
<< "Std_RandomColor"
<< "Separator"
<< "Std_Workbench"
<< "Std_ToolBarMenu"
<< "Std_DockViewMenu";
if (DockWindowManager::instance()->isOverlayActivated()) {
*view << "Std_DockOverlay";
}
*view << "Separator"
<< "Std_LinkSelectActions"
<< "Std_TreeViewActions"
<< "Std_ViewStatusBar";