From 73f5e5ad5746fb6e4268850803c0bad889402ab2 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sat, 1 Apr 2023 12:08:57 +0200 Subject: [PATCH] Sketcher: restore toolbars when changing between workbenches in edit mode This partially fixes issue #9135 --- src/Mod/Sketcher/Gui/ViewProviderSketch.cpp | 37 ++------------ src/Mod/Sketcher/Gui/Workbench.cpp | 53 ++++++++++++++++++++- src/Mod/Sketcher/Gui/Workbench.h | 4 ++ 3 files changed, 59 insertions(+), 35 deletions(-) diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 053a1a62dd..0994de8d9d 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -51,7 +51,6 @@ #include #include #include -#include "Gui/ToolBarManager.h" #include #include #include @@ -70,6 +69,7 @@ #include "TaskSketcherValidation.h" #include "Utils.h" #include "ViewProviderSketchGeometryExtension.h" +#include "Workbench.h" FC_LOG_LEVEL_INIT("Sketch",true,true) @@ -2770,25 +2770,6 @@ void ViewProviderSketch::setupContextMenu(QMenu *menu, QObject *receiver, const Gui::ViewProvider::setupContextMenu(menu, receiver, member); } -namespace -{ - inline const QStringList editModeToolbarNames() - { - return QStringList{ QString::fromLatin1("Sketcher Edit Mode"), - QString::fromLatin1("Sketcher geometries"), - QString::fromLatin1("Sketcher constraints"), - QString::fromLatin1("Sketcher tools"), - QString::fromLatin1("Sketcher B-spline tools"), - QString::fromLatin1("Sketcher virtual space") }; - } - - inline const QStringList nonEditModeToolbarNames() - { - return QStringList{ QString::fromLatin1("Structure"), - QString::fromLatin1("Sketcher") }; - } -} - bool ViewProviderSketch::setEdit(int ModNum) { Q_UNUSED(ModNum) @@ -2935,13 +2916,7 @@ bool ViewProviderSketch::setEdit(int ModNum) Gui::getMainWindow()->installEventFilter(listener); - /*Modify toolbars dynamically. - First save state of toolbars in case user changed visibility of a toolbar but he's not changing the wb. - This happens in someone works directly from sketcher, changing from edit mode to not-edit-mode*/ - Gui::ToolBarManager::getInstance()->saveState(); - - Gui::ToolBarManager::getInstance()->setToolbarVisibility(true, editModeToolbarNames()); - Gui::ToolBarManager::getInstance()->setToolbarVisibility(false, nonEditModeToolbarNames()); + Workbench::enterEditMode(); return true; } @@ -3078,13 +3053,7 @@ void ViewProviderSketch::unsetEdit(int ModNum) auto gridnode = getGridNode(); pcRoot->removeChild(gridnode); - /*Modify toolbars dynamically. - First save state of toolbars in case user changed visibility of a toolbar but he's not changing the wb. - This happens in someone works directly from sketcher, changing from edit mode to not-edit-mode*/ - Gui::ToolBarManager::getInstance()->saveState(); - - Gui::ToolBarManager::getInstance()->setToolbarVisibility(false, editModeToolbarNames()); - Gui::ToolBarManager::getInstance()->setToolbarVisibility(true, nonEditModeToolbarNames()); + Workbench::leaveEditMode(); if(listener) { Gui::getMainWindow()->removeEventFilter(listener); diff --git a/src/Mod/Sketcher/Gui/Workbench.cpp b/src/Mod/Sketcher/Gui/Workbench.cpp index f1e2a31d88..09a4864193 100644 --- a/src/Mod/Sketcher/Gui/Workbench.cpp +++ b/src/Mod/Sketcher/Gui/Workbench.cpp @@ -22,8 +22,11 @@ #include "PreCompiled.h" +#include +#include "Utils.h" #include "Workbench.h" - +#include +#include using namespace SketcherGui; @@ -142,6 +145,54 @@ Gui::ToolBarItem* Workbench::setupCommandBars() const return root; } +void Workbench::activated() +{ + Gui::Document *doc = Gui::Application::Instance->activeDocument(); + if (isSketchInEdit(doc)) { + enterEditMode(); + } +} + +namespace +{ + inline const QStringList editModeToolbarNames() + { + return QStringList{ QString::fromLatin1("Sketcher Edit Mode"), + QString::fromLatin1("Sketcher geometries"), + QString::fromLatin1("Sketcher constraints"), + QString::fromLatin1("Sketcher tools"), + QString::fromLatin1("Sketcher B-spline tools"), + QString::fromLatin1("Sketcher virtual space") }; + } + + inline const QStringList nonEditModeToolbarNames() + { + return QStringList{ QString::fromLatin1("Structure"), + QString::fromLatin1("Sketcher") }; + } +} + +void Workbench::enterEditMode() +{ + /*Modify toolbars dynamically. + First save state of toolbars in case user changed visibility of a toolbar but he's not changing the wb. + This happens in someone works directly from sketcher, changing from edit mode to not-edit-mode*/ + Gui::ToolBarManager::getInstance()->saveState(); + + Gui::ToolBarManager::getInstance()->setToolbarVisibility(true, editModeToolbarNames()); + Gui::ToolBarManager::getInstance()->setToolbarVisibility(false, nonEditModeToolbarNames()); +} + +void Workbench::leaveEditMode() +{ + /*Modify toolbars dynamically. + First save state of toolbars in case user changed visibility of a toolbar but he's not changing the wb. + This happens in someone works directly from sketcher, changing from edit mode to not-edit-mode*/ + Gui::ToolBarManager::getInstance()->saveState(); + + Gui::ToolBarManager::getInstance()->setToolbarVisibility(false, editModeToolbarNames()); + Gui::ToolBarManager::getInstance()->setToolbarVisibility(true, nonEditModeToolbarNames()); +} namespace SketcherGui { diff --git a/src/Mod/Sketcher/Gui/Workbench.h b/src/Mod/Sketcher/Gui/Workbench.h index 6eacaf876f..3c5f72814d 100644 --- a/src/Mod/Sketcher/Gui/Workbench.h +++ b/src/Mod/Sketcher/Gui/Workbench.h @@ -43,10 +43,14 @@ public: Workbench(); ~Workbench() override; + static void enterEditMode(); + static void leaveEditMode(); + protected: Gui::MenuItem* setupMenuBar() const override; Gui::ToolBarItem* setupToolBars() const override; Gui::ToolBarItem* setupCommandBars() const override; + void activated() override; }; SketcherGuiExport void addSketcherWorkbenchSketchActions(Gui::MenuItem& sketch);