Gui: Add setting enabling workbench selector to be on the menubar. Restart required.

This commit is contained in:
Paddle
2022-11-02 19:03:26 +01:00
committed by WandererFan
parent e75ffa0566
commit c87c4bbd9f
6 changed files with 118 additions and 8 deletions

View File

@@ -35,6 +35,7 @@
# include <QToolBar>
# include <QToolButton>
# include <QToolTip>
# include <QMenuBar>
#endif
#include <Base/Exception.h>
@@ -529,16 +530,27 @@ WorkbenchGroup::~WorkbenchGroup()
void WorkbenchGroup::addTo(QWidget *w)
{
refreshWorkbenchList();
if (w->inherits("QToolBar")) {
auto bar = qobject_cast<QToolBar*>(w);
QComboBox* box = new WorkbenchComboBox(this, w);
auto setupBox = [&](QComboBox* box) {
box->setIconSize(QSize(16, 16));
box->setToolTip(_action->toolTip());
box->setStatusTip(_action->statusTip());
box->setWhatsThis(_action->whatsThis());
box->addActions(_group->actions());
connect(_group, SIGNAL(triggered(QAction*)), box, SLOT(onActivated (QAction*)));
bar->addWidget(box);
connect(_group, SIGNAL(triggered(QAction*)), box, SLOT(onActivated(QAction*)));
};
if (w->inherits("QToolBar")) {
QComboBox* box = new WorkbenchComboBox(this, w);
setupBox(box);
qobject_cast<QToolBar*>(w)->addWidget(box);
}
else if (w->inherits("QMenuBar")) {
QComboBox* box = new WorkbenchComboBox(this, w);
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);
}
else if (w->inherits("QMenu")) {
auto menu = qobject_cast<QMenu*>(w);

View File

@@ -508,6 +508,43 @@ this according to your screen size or personal taste</string>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout">
<property name="spacing">
<number>6</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="WorkbenchSelectorPositionLabel">
<property name="text">
<string>Workbench selector position :</string>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="WorkbenchSelectorPosition">
<property name="toolTip">
<string>Customize where the workbench selector appears (restart required).
'Toolbar': In the toolbars, as a movable toolbar.
'Left Corner': In the menu bar, on the left corner.
'Right Corner': In the menu bar, on the right corner.</string>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>

View File

@@ -215,6 +215,25 @@ 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);
hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow");
hGrp->SetBool("TiledBackground", ui->tiledBackground->isChecked());
@@ -284,6 +303,7 @@ void DlgGeneralImp::loadSettings()
}
ui->toolbarIconSize->setCurrentIndex(index);
//TreeMode combobox setup.
ui->treeMode->clear();
ui->treeMode->addItem(tr("Combo View"));
ui->treeMode->addItem(tr("TreeView and PropertyView"));
@@ -299,6 +319,23 @@ 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);
hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow");
ui->tiledBackground->setChecked(hGrp->GetBool("TiledBackground", false));

View File

@@ -263,6 +263,8 @@ void MenuManager::setup(MenuItem* menuItems) const
setup(*it, action->menu());
}
setupMenuBarCornerWidgets();
// hide all menus which we don't need for the moment
for (QList<QAction*>::Iterator it = actions.begin(); it != actions.end(); ++it) {
(*it)->setVisible(false);
@@ -338,6 +340,24 @@ void MenuManager::setup(MenuItem* item, QMenu* menu) 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");
//Right corner widget
if (hGrp->GetBool("WSRightCorner", false)) { //add workbench selector to menubar right corner widget.
if (!menuBar->cornerWidget(Qt::TopRightCorner))
Application::Instance->commandManager().addTo("Std_Workbench", menuBar);
}
//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);
}
}
void MenuManager::retranslate() const
{
QMenuBar* menuBar = getMainWindow()->menuBar();

View File

@@ -77,6 +77,7 @@ class GuiExport MenuManager
public:
/** Sets up the menus of a given workbench. */
void setup(MenuItem*) const;
void setupMenuBarCornerWidgets() const;
/// sets up a context menu out of item
void setupContextMenu(MenuItem* item, QMenu &menu) const;
void retranslate() const;

View File

@@ -768,9 +768,12 @@ ToolBarItem* StdWorkbench::setupToolBars() const
<< "Std_Refresh" << "Separator" << "Std_WhatsThis";
// Workbench switcher
auto wb = new ToolBarItem( root );
wb->setCommand("Workbench");
*wb << "Std_Workbench";
ParameterGrp::handle hGrp = App::GetApplication().GetParameterGroupByPath("User parameter:BaseApp/Preferences/MainWindow");
if (hGrp->GetBool("WSToolbar", true)) {
auto wb = new ToolBarItem(root);
wb->setCommand("Workbench");
*wb << "Std_Workbench";
}
// Macro
auto macro = new ToolBarItem( root );