diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index a1ca5fe9ea..da43f8ffca 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -35,6 +35,7 @@ # include # include # include +# include #endif #include @@ -529,16 +530,27 @@ WorkbenchGroup::~WorkbenchGroup() void WorkbenchGroup::addTo(QWidget *w) { refreshWorkbenchList(); - if (w->inherits("QToolBar")) { - auto bar = qobject_cast(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(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(w)->setCornerWidget(box, left ? Qt::TopLeftCorner : Qt::TopRightCorner); } else if (w->inherits("QMenu")) { auto menu = qobject_cast(w); diff --git a/src/Gui/DlgGeneral.ui b/src/Gui/DlgGeneral.ui index 542ffd0e88..d2a43592ab 100644 --- a/src/Gui/DlgGeneral.ui +++ b/src/Gui/DlgGeneral.ui @@ -508,6 +508,43 @@ this according to your screen size or personal taste + + + + 6 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Workbench selector position : + + + + + + + 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. + + + + + diff --git a/src/Gui/DlgGeneralImp.cpp b/src/Gui/DlgGeneralImp.cpp index 94fb870ae8..d2db931dcc 100644 --- a/src/Gui/DlgGeneralImp.cpp +++ b/src/Gui/DlgGeneralImp.cpp @@ -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)); diff --git a/src/Gui/MenuManager.cpp b/src/Gui/MenuManager.cpp index 9ac8c888df..059b5f949e 100644 --- a/src/Gui/MenuManager.cpp +++ b/src/Gui/MenuManager.cpp @@ -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::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(); diff --git a/src/Gui/MenuManager.h b/src/Gui/MenuManager.h index 416838a497..8c1c94126a 100644 --- a/src/Gui/MenuManager.h +++ b/src/Gui/MenuManager.h @@ -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; diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index 9ec45e2ef4..8a13497cb4 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -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 );