Gui: Add ability to easily lock Toolbars from UI

This adds the Std_ToggleToolBarLock action mentioned in #4992. It is
exposed in the context menu of toolbar and also in the view -> toolbars
app menu.
This commit is contained in:
Kacper Donat
2023-11-30 22:47:15 +01:00
committed by wwmayer
parent 9e1639783e
commit afd72f3585
5 changed files with 78 additions and 8 deletions

View File

@@ -36,6 +36,7 @@
#include "Document.h"
#include "DlgActivateWindowImp.h"
#include "DockWindowManager.h"
#include "ToolBarManager.h"
#include <Base/Exception.h>
#include <App/Document.h>
@@ -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());

View File

@@ -1387,6 +1387,10 @@ void MainWindow::onToolBarMenuAboutToShow()
menu->addAction(action);
}
}
menu->addSeparator();
Application::Instance->commandManager().getCommandByName("Std_ToggleToolBarLock")->addTo(menu);
}
void MainWindow::onDockWindowMenuAboutToShow()

View File

@@ -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()) {

View File

@@ -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<QString>& 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. */

View File

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