From e6a8533fa83cef973f33eae0bff60ae1c681e8de Mon Sep 17 00:00:00 2001 From: wmayer Date: Tue, 8 Nov 2022 14:05:54 +0100 Subject: [PATCH] Gui: simplify code to handle workbench selector + replace three boolean parameters with a single string parameter + refactor DlgGeneralImp::saveSettings/loadSettings + handle visibility of corner widgets --- src/Gui/Action.cpp | 21 +++++++------- src/Gui/DlgGeneralImp.cpp | 60 ++++++++++++++++++--------------------- src/Gui/DlgGeneralImp.h | 5 ++++ src/Gui/MenuManager.cpp | 33 +++++++++++++++------ src/Gui/Workbench.cpp | 3 +- 5 files changed, 70 insertions(+), 52 deletions(-) diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index 19e2e3eda8..fdaa2d9460 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -703,7 +703,7 @@ WorkbenchGroup::~WorkbenchGroup() { } -void WorkbenchGroup::addTo(QWidget *w) +void WorkbenchGroup::addTo(QWidget *widget) { refreshWorkbenchList(); @@ -715,21 +715,22 @@ void WorkbenchGroup::addTo(QWidget *w) box->addActions(_group->actions()); connect(_group, &QActionGroup::triggered, box, qOverload(&WorkbenchComboBox::onActivated)); }; - if (w->inherits("QToolBar")) { - auto* box = new WorkbenchComboBox(this, w); + if (widget->inherits("QToolBar")) { + auto* box = new WorkbenchComboBox(this, widget); setupBox(box); - qobject_cast(w)->addWidget(box); + qobject_cast(widget)->addWidget(box); } - else if (w->inherits("QMenuBar")) { - auto* box = new WorkbenchComboBox(this, w); + else if (widget->inherits("QMenuBar")) { + auto* box = new WorkbenchComboBox(this, widget); setupBox(box); - bool left = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow")->GetBool("WSLeftCorner", true); - qobject_cast(w)->setCornerWidget(box, left ? Qt::TopLeftCorner : Qt::TopRightCorner); + std::string pos = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow")->GetASCII("WSPosition", "WSToolbar"); + bool left = (pos == "WSLeftCorner"); + qobject_cast(widget)->setCornerWidget(box, left ? Qt::TopLeftCorner : Qt::TopRightCorner); } - else if (w->inherits("QMenu")) { - auto menu = qobject_cast(w); + else if (widget->inherits("QMenu")) { + auto menu = qobject_cast(widget); menu = menu->addMenu(_action->text()); menu->addActions(_group->actions()); } diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index d2db931dcc..090ff653d0 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -104,6 +104,8 @@ DlgGeneralImp::DlgGeneralImp( QWidget* parent ) else ui->RevertToSavedConfig->setEnabled(true); connect(ui->RevertToSavedConfig, &QPushButton::clicked, this, &DlgGeneralImp::revertToSavedConfig); + + wsPositions << "WSToolbar" << "WSLeftCorner" << "WSRightCorner"; } /** @@ -215,24 +217,7 @@ void DlgGeneralImp::saveSettings() hGrp->GetGroup("TreeView")->SetBool("Enabled",treeView); hGrp->GetGroup("PropertyView")->SetBool("Enabled",propertyView); - //save workbench selector position - hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); - bool WSToolbar = false, WSLeftCorner = false, WSRightCorner = false; - - switch (ui->WorkbenchSelectorPosition->currentIndex()) { - case 0: - WSToolbar = true; - break; - case 1: - WSLeftCorner = true; - break; - case 2: - WSRightCorner = true; - break; - } - hGrp->SetBool("WSToolbar", WSToolbar); - hGrp->SetBool("WSLeftCorner", WSLeftCorner); - hGrp->SetBool("WSRightCorner", WSRightCorner); + saveWorkbenchSelector(); hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); hGrp->SetBool("TiledBackground", ui->tiledBackground->isChecked()); @@ -320,21 +305,7 @@ void DlgGeneralImp::loadSettings() ui->treeMode->setCurrentIndex(index); //workbench selector position combobox setup - ui->WorkbenchSelectorPosition->clear(); - ui->WorkbenchSelectorPosition->addItem(tr("Toolbar")); - ui->WorkbenchSelectorPosition->addItem(tr("Left corner")); - ui->WorkbenchSelectorPosition->addItem(tr("Right corner")); - - hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); - //bool WSToolbar = hGrp->GetBool("WSToolbar", true); - bool WSLeftCorner = hGrp->GetBool("WSLeftCorner", false); - bool WSRightCorner = hGrp->GetBool("WSRightCorner", false); - index = 0; - if (WSLeftCorner) - index = 1; - else if (WSRightCorner) - index = 2; - ui->WorkbenchSelectorPosition->setCurrentIndex(index); + loadWorkbenchSelector(); hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); ui->tiledBackground->setChecked(hGrp->GetBool("TiledBackground", false)); @@ -527,5 +498,28 @@ void DlgGeneralImp::onLoadPreferencePackClicked(const std::string& packName) } } +void DlgGeneralImp::saveWorkbenchSelector() +{ + //save workbench selector position + auto index = ui->WorkbenchSelectorPosition->currentIndex(); + auto hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); + if (index >= 0 && index < wsPositions.size()) { + hGrp->SetASCII("WSPosition", wsPositions[index].c_str()); + } +} + +void DlgGeneralImp::loadWorkbenchSelector() +{ + //workbench selector position combobox setup + ui->WorkbenchSelectorPosition->clear(); + ui->WorkbenchSelectorPosition->addItem(tr("Toolbar")); + ui->WorkbenchSelectorPosition->addItem(tr("Left corner")); + ui->WorkbenchSelectorPosition->addItem(tr("Right corner")); + + auto hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); + std::string pos = hGrp->GetASCII("WSPosition", "WSToolbar"); + int index = std::max(0, wsPositions.indexOf(pos)); + ui->WorkbenchSelectorPosition->setCurrentIndex(index); +} #include "moc_DlgGeneralImp.cpp" diff --git a/src/Gui/DlgGeneralImp.h b/src/Gui/DlgGeneralImp.h index 685c20a586..dfa0f6c955 100644 --- a/src/Gui/DlgGeneralImp.h +++ b/src/Gui/DlgGeneralImp.h @@ -26,6 +26,8 @@ #include "PropertyPage.h" #include +#include +#include class QTabWidget; @@ -68,8 +70,11 @@ private: bool setLanguage(); //Returns true if language has been changed void setNumberLocale(bool force = false); void setDecimalPointConversion(bool on); + void saveWorkbenchSelector(); + void loadWorkbenchSelector(); private: + QVector wsPositions; int localeIndex; std::unique_ptr ui; std::unique_ptr newPreferencePackDialog; diff --git a/src/Gui/MenuManager.cpp b/src/Gui/MenuManager.cpp index 6511ddcb41..72c2f0939c 100644 --- a/src/Gui/MenuManager.cpp +++ b/src/Gui/MenuManager.cpp @@ -366,21 +366,38 @@ void MenuManager::setup(MenuItem* item, QMenu* menu) const } } -void MenuManager::setupMenuBarCornerWidgets() const { +void MenuManager::setupMenuBarCornerWidgets() const +{ /*Note: currently only workbench selector uses corner widget.*/ QMenuBar* menuBar = getMainWindow()->menuBar(); - ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); + std::string pos = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow")->GetASCII("WSPosition", "WSToolbar"); + + bool showLeftWidget = false; + bool showRightWidget = false; //Right corner widget - if (hGrp->GetBool("WSRightCorner", false)) { //add workbench selector to menubar right corner widget. - if (!menuBar->cornerWidget(Qt::TopRightCorner)) + if (pos == "WSRightCorner") { + //add workbench selector to menubar right corner widget. + if (!menuBar->cornerWidget(Qt::TopRightCorner)) { Application::Instance->commandManager().addTo("Std_Workbench", menuBar); + } + showRightWidget = true; + } + //Left corner widget + else if (pos == "WSLeftCorner") { + //add workbench selector to menubar left corner widget. + if (!menuBar->cornerWidget(Qt::TopLeftCorner)) { + Application::Instance->commandManager().addTo("Std_Workbench", menuBar); + } + showLeftWidget = true; } - //Left corner widget - if (hGrp->GetBool("WSLeftCorner", false)) { //add workbench selector to menubar left corner widget. - if (!menuBar->cornerWidget(Qt::TopLeftCorner)) - Application::Instance->commandManager().addTo("Std_Workbench", menuBar); + // Set visibility of corner widget + if (QWidget* right = menuBar->cornerWidget(Qt::TopRightCorner)) { + right->setVisible(showRightWidget); + } + if (QWidget* left = menuBar->cornerWidget(Qt::TopLeftCorner)) { + left->setVisible(showLeftWidget); } } diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index 914543943b..87585deac9 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -752,7 +752,8 @@ ToolBarItem* StdWorkbench::setupToolBars() const // Workbench switcher ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow"); - if (hGrp->GetBool("WSToolbar", true)) { + std::string defaultPos = "WSToolbar"; + if (hGrp->GetASCII("WSPosition", defaultPos.c_str()) == defaultPos) { auto wb = new ToolBarItem(root); wb->setCommand("Workbench"); *wb << "Std_Workbench";