diff --git a/src/Gui/CommandWindow.cpp b/src/Gui/CommandWindow.cpp index a2adf626a9..6b48d5f83a 100644 --- a/src/Gui/CommandWindow.cpp +++ b/src/Gui/CommandWindow.cpp @@ -36,6 +36,7 @@ #include "Document.h" #include "DlgActivateWindowImp.h" #include "DockWindowManager.h" +#include "ToolBarManager.h" #include #include @@ -339,6 +340,46 @@ Action * StdCmdToolBarMenu::createAction() return pcAction; } +//=========================================================================== +// Std_DlgToggleToolBarLock +//=========================================================================== +DEF_STD_CMD_C(StdCmdToggleToolBarLock) + +StdCmdToggleToolBarLock::StdCmdToggleToolBarLock() + :Command("Std_ToggleToolBarLock") +{ + sGroup = "Tools"; + sMenuText = QT_TR_NOOP("Lock toolbars"); + sToolTipText = QT_TR_NOOP("Locks toolbar so they are no longer moveable"); + sWhatsThis = "Std_ToggleToolBarLock"; + sStatusTip = QT_TR_NOOP("Locks toolbar so they are no longer moveable"); + eType = 0; +} + + +Action* StdCmdToggleToolBarLock::createAction() +{ + Action* action = Command::createAction(); + + action->setCheckable(true); + action->setChecked(ToolBarManager::getInstance()->areToolBarsLocked(), true); + + return action; +} + +void StdCmdToggleToolBarLock::activated(int iMsg) +{ + Q_UNUSED(iMsg); + + auto manager = ToolBarManager::getInstance(); + auto toggled = !manager->areToolBarsLocked(); + + manager->setToolBarsLocked(toggled); + + getAction()->setChecked(toggled); +} + + //=========================================================================== // Std_ViewStatusBar //=========================================================================== @@ -475,6 +516,7 @@ void CreateWindowStdCommands() rcCmdMgr.addCommand(new StdCmdWindows()); rcCmdMgr.addCommand(new StdCmdDockViewMenu()); rcCmdMgr.addCommand(new StdCmdToolBarMenu()); + rcCmdMgr.addCommand(new StdCmdToggleToolBarLock()); rcCmdMgr.addCommand(new StdCmdWindowsMenu()); rcCmdMgr.addCommand(new StdCmdStatusBar()); rcCmdMgr.addCommand(new StdCmdUserInterface()); diff --git a/src/Gui/MainWindow.cpp b/src/Gui/MainWindow.cpp index 46b7bba165..d72a3dd3a3 100644 --- a/src/Gui/MainWindow.cpp +++ b/src/Gui/MainWindow.cpp @@ -1387,6 +1387,10 @@ void MainWindow::onToolBarMenuAboutToShow() menu->addAction(action); } } + + menu->addSeparator(); + + Application::Instance->commandManager().getCommandByName("Std_ToggleToolBarLock")->addTo(menu); } void MainWindow::onDockWindowMenuAboutToShow() diff --git a/src/Gui/ToolBarManager.cpp b/src/Gui/ToolBarManager.cpp index dbbdca3f97..a6e9d561e1 100644 --- a/src/Gui/ToolBarManager.cpp +++ b/src/Gui/ToolBarManager.cpp @@ -408,11 +408,7 @@ void ToolBarManager::restoreState() const } } - - hPref = App::GetApplication().GetUserParameter().GetGroup("BaseApp") - ->GetGroup("Preferences")->GetGroup("General"); - bool lockToolBars = hPref->GetBool("LockToolBars", false); - setMovable(!lockToolBars); + setMovable(!areToolBarsLocked()); } void ToolBarManager::retranslate() const @@ -426,6 +422,30 @@ void ToolBarManager::retranslate() const } } +bool Gui::ToolBarManager::areToolBarsLocked() const +{ + auto hPref = App::GetApplication() + .GetUserParameter() + .GetGroup("BaseApp") + ->GetGroup("Preferences") + ->GetGroup("General"); + + return hPref->GetBool("LockToolBars", false); +} + +void Gui::ToolBarManager::setToolBarsLocked(bool locked) const +{ + auto hPref = App::GetApplication() + .GetUserParameter() + .GetGroup("BaseApp") + ->GetGroup("Preferences") + ->GetGroup("General"); + + hPref->SetBool("LockToolBars", locked); + + setMovable(!locked); +} + void Gui::ToolBarManager::setMovable(bool moveable) const { for (auto& tb : toolBars()) { diff --git a/src/Gui/ToolBarManager.h b/src/Gui/ToolBarManager.h index a84da34cbc..86059f08f7 100644 --- a/src/Gui/ToolBarManager.h +++ b/src/Gui/ToolBarManager.h @@ -103,14 +103,17 @@ public: void restoreState() const; void retranslate() const; - void setMovable(bool movable) const; + bool areToolBarsLocked() const; + void setToolBarsLocked(bool locked) const; void setState(const QList& names, State state); - void setState (const QString& name, State state); - + void setState(const QString& name, State state); + protected: void setup(ToolBarItem*, QToolBar*) const; + void setMovable(bool movable) const; + ToolBarItem::DefaultVisibility getToolbarPolicy(const QToolBar *) const; /** Returns a list of all currently existing toolbars. */ diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index c4d50c1ba9..163d1ba8de 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -620,6 +620,7 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const void StdWorkbench::createMainWindowPopupMenu(MenuItem* item) const { + *item << "Std_ToggleToolBarLock"; *item << "Std_DlgCustomize"; }