Gui: implement option to disable overlay management
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user