diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index e1ce0534ab..c6eefc3ddf 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -723,6 +723,7 @@ MenuItem* StdWorkbench::setupMenuBar() const << "Separator"; #endif *tool << "Std_Measure" + << "Std_QuickMeasure" << "Std_UnitsCalculator" << "Separator" << "Std_ViewLoadImage" @@ -812,7 +813,7 @@ ToolBarItem* StdWorkbench::setupToolBars() const auto view = new ToolBarItem( root ); view->setCommand("View"); *view << "Std_ViewFitAll" << "Std_ViewFitSelection" << "Std_ViewGroup" << "Std_AlignToSelection" - << "Separator" << "Std_DrawStyle" << "Std_TreeViewActions" << "Std_Measure"; + << "Separator" << "Std_DrawStyle" << "Std_TreeViewActions" << "Std_Measure" << "Std_QuickMeasure"; // Individual views auto individualViews = new ToolBarItem(root, ToolBarItem::DefaultVisibility::Hidden); diff --git a/src/Mod/Measure/Gui/AppMeasureGui.cpp b/src/Mod/Measure/Gui/AppMeasureGui.cpp index 7283fc9bcb..e282e00f9c 100644 --- a/src/Mod/Measure/Gui/AppMeasureGui.cpp +++ b/src/Mod/Measure/Gui/AppMeasureGui.cpp @@ -32,7 +32,6 @@ #include #include "DlgPrefsMeasureAppearanceImp.h" -#include "QuickMeasure.h" #include "QuickMeasurePy.h" #include "ViewProviderMeasureAngle.h" #include "ViewProviderMeasureDistance.h" @@ -112,9 +111,5 @@ PyMOD_INIT_FUNC(MeasureGui) Base::Interpreter().addType(&MeasureGui::QuickMeasurePy::Type, mod, "QuickMeasure"); - // Create a QuickMeasure instance - auto measure = new MeasureGui::QuickMeasure(QApplication::instance()); - Q_UNUSED(measure) - PyMOD_Return(mod); } diff --git a/src/Mod/Measure/Gui/Command.cpp b/src/Mod/Measure/Gui/Command.cpp index 2a138080fa..5f78fd85eb 100644 --- a/src/Mod/Measure/Gui/Command.cpp +++ b/src/Mod/Measure/Gui/Command.cpp @@ -20,8 +20,13 @@ **************************************************************************/ #include "PreCompiled.h" +#ifndef _PreComp_ +#include +#endif +#include #include +#include #include #include #include @@ -30,6 +35,7 @@ #include #include +#include "QuickMeasure.h" #include "TaskMeasure.h" @@ -76,6 +82,65 @@ bool StdCmdMeasure::isActive() return false; } + +class StdCmdQuickMeasure: public Gui::Command +{ +public: + StdCmdQuickMeasure() + : Command("Std_QuickMeasure") + { + sGroup = "Measure"; + sMenuText = QT_TR_NOOP("&Quick measure"); + sToolTipText = QT_TR_NOOP("Toggle quick measure"); + sWhatsThis = "Std_QuickMeasure"; + sStatusTip = QT_TR_NOOP("Toggle quick measure"); + accessParameter(); + } + ~StdCmdQuickMeasure() override = default; + StdCmdQuickMeasure(const StdCmdQuickMeasure&) = delete; + StdCmdQuickMeasure(StdCmdQuickMeasure&&) = delete; + StdCmdQuickMeasure& operator=(const StdCmdQuickMeasure&) = delete; + StdCmdQuickMeasure& operator=(StdCmdQuickMeasure&&) = delete; + + const char* className() const override + { + return "StdCmdQuickMeasure"; + } + +protected: + void activated(int iMsg) override + { + if (parameter.isValid()) { + parameter->SetBool("EnableQuickMeasure", iMsg > 0); + } + + if (iMsg == 0) { + quickMeasure.reset(); + } + else { + quickMeasure = std::make_unique(QApplication::instance()); + } + } + Gui::Action* createAction() override + { + Gui::Action* action = Gui::Command::createAction(); + action->setCheckable(true); + action->setChecked(parameter->GetBool("EnableQuickMeasure", false)); + return action; + } + void accessParameter() + { + // clang-format off + parameter = App::GetApplication().GetUserParameter(). + GetGroup("BaseApp/Preferences/Mod/Measure"); + // clang-format on + } + +private: + std::unique_ptr quickMeasure; + ParameterGrp::handle parameter; +}; + void CreateMeasureCommands() { Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager(); @@ -83,4 +148,5 @@ void CreateMeasureCommands() auto cmd = new StdCmdMeasure(); cmd->initAction(); rcCmdMgr.addCommand(cmd); + rcCmdMgr.addCommand(new StdCmdQuickMeasure); }