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:
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user