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
This commit is contained in:
wmayer
2022-11-08 14:05:54 +01:00
committed by Uwe
parent 2e1feaa78e
commit e6a8533fa8
5 changed files with 70 additions and 52 deletions

View File

@@ -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<QAction*>(&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<QToolBar*>(w)->addWidget(box);
qobject_cast<QToolBar*>(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<QMenuBar*>(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<QMenuBar*>(widget)->setCornerWidget(box, left ? Qt::TopLeftCorner : Qt::TopRightCorner);
}
else if (w->inherits("QMenu")) {
auto menu = qobject_cast<QMenu*>(w);
else if (widget->inherits("QMenu")) {
auto menu = qobject_cast<QMenu*>(widget);
menu = menu->addMenu(_action->text());
menu->addActions(_group->actions());
}

View File

@@ -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"

View File

@@ -26,6 +26,8 @@
#include "PropertyPage.h"
#include <memory>
#include <string>
#include <QVector>
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<std::string> wsPositions;
int localeIndex;
std::unique_ptr<Ui_DlgGeneral> ui;
std::unique_ptr<DlgCreateNewPreferencePackImp> newPreferencePackDialog;

View File

@@ -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);
}
}

View File

@@ -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";