From eb05effb9a51ebbb0ec2a329f8ec367bda4ca73f Mon Sep 17 00:00:00 2001 From: hlorus <64740362+hlorus@users.noreply.github.com> Date: Fri, 5 Jul 2024 10:47:07 +0200 Subject: [PATCH] MeasureGui: Insert measure command into menu & toolbar --- src/Mod/Measure/Gui/AppMeasureGui.cpp | 4 ++ src/Mod/Measure/Gui/CMakeLists.txt | 4 +- src/Mod/Measure/Gui/WorkbenchManipulator.cpp | 50 ++++++++++++++++++++ src/Mod/Measure/Gui/WorkbenchManipulator.h | 40 ++++++++++++++++ 4 files changed, 96 insertions(+), 2 deletions(-) create mode 100644 src/Mod/Measure/Gui/WorkbenchManipulator.cpp create mode 100644 src/Mod/Measure/Gui/WorkbenchManipulator.h diff --git a/src/Mod/Measure/Gui/AppMeasureGui.cpp b/src/Mod/Measure/Gui/AppMeasureGui.cpp index 1194fbe3ff..5ca94d8627 100644 --- a/src/Mod/Measure/Gui/AppMeasureGui.cpp +++ b/src/Mod/Measure/Gui/AppMeasureGui.cpp @@ -37,6 +37,7 @@ #include "ViewProviderMeasureAngle.h" #include "ViewProviderMeasureDistance.h" #include "ViewProviderMeasureBase.h" +#include "WorkbenchManipulator.h" // use a different name to CreateCommand() @@ -86,6 +87,9 @@ PyMOD_INIT_FUNC(MeasureGui) PyObject* mod = MeasureGui::initModule(); Base::Console().Log("Loading GUI of Measure module... done\n"); + auto manip = std::make_shared(); + Gui::WorkbenchManipulator::installManipulator(manip); + // instantiating the commands CreateMeasureCommands(); diff --git a/src/Mod/Measure/Gui/CMakeLists.txt b/src/Mod/Measure/Gui/CMakeLists.txt index 9921d458ea..653d53e168 100644 --- a/src/Mod/Measure/Gui/CMakeLists.txt +++ b/src/Mod/Measure/Gui/CMakeLists.txt @@ -59,8 +59,8 @@ SET(MeasureGui_SRCS ViewProviderMeasureAngle.h ViewProviderMeasureDistance.cpp ViewProviderMeasureDistance.h - # Workbench.cpp - # Workbench.h + WorkbenchManipulator.cpp + WorkbenchManipulator.h DlgPrefsMeasureAppearanceImp.ui DlgPrefsMeasureAppearanceImp.cpp DlgPrefsMeasureAppearanceImp.h diff --git a/src/Mod/Measure/Gui/WorkbenchManipulator.cpp b/src/Mod/Measure/Gui/WorkbenchManipulator.cpp new file mode 100644 index 0000000000..3f57cfffb5 --- /dev/null +++ b/src/Mod/Measure/Gui/WorkbenchManipulator.cpp @@ -0,0 +1,50 @@ +/*************************************************************************** + * Copyright (c) 2024 David Friedli * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + + +#include "PreCompiled.h" +#include "WorkbenchManipulator.h" +#include +#include + +using namespace MeasureGui; + +void WorkbenchManipulator::modifyMenuBar([[maybe_unused]] Gui::MenuItem* menuBar) +{ + auto menuTools = menuBar->findItem("&Tools"); + if (!menuTools) { + return; + } + auto itemMeasure = new Gui::MenuItem(); + itemMeasure->setCommand("Std_Measure"); + menuTools->appendItem(itemMeasure); +} + +void WorkbenchManipulator::modifyToolBars(Gui::ToolBarItem* toolBar) { + auto tbView = toolBar->findItem("View"); + if (!tbView) { + return; + } + + auto itemMeasure = new Gui::ToolBarItem(); + itemMeasure->setCommand("Std_Measure"); + tbView->appendItem(itemMeasure); +} diff --git a/src/Mod/Measure/Gui/WorkbenchManipulator.h b/src/Mod/Measure/Gui/WorkbenchManipulator.h new file mode 100644 index 0000000000..0b9844ebc9 --- /dev/null +++ b/src/Mod/Measure/Gui/WorkbenchManipulator.h @@ -0,0 +1,40 @@ +/*************************************************************************** + * Copyright (c) 2024 David Friedli * + * * + * This file is part of FreeCAD. * + * * + * FreeCAD is free software: you can redistribute it and/or modify it * + * under the terms of the GNU Lesser General Public License as * + * published by the Free Software Foundation, either version 2.1 of the * + * License, or (at your option) any later version. * + * * + * FreeCAD is distributed in the hope that it will be useful, but * + * WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * + * Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with FreeCAD. If not, see * + * . * + * * + **************************************************************************/ + + +#ifndef MEASUREGUI_WORKBENCHMANIPULATOR_H +#define MEASUREGUI_WORKBENCHMANIPULATOR_H + +#include + +namespace MeasureGui { + +class WorkbenchManipulator: public Gui::WorkbenchManipulator +{ +protected: + void modifyMenuBar(Gui::MenuItem* menuBar) override; + void modifyToolBars(Gui::ToolBarItem* toolBar) override; +}; + +} // namespace MeasureGui + + +#endif // MEASUREGUI_WORKBENCHMANIPULATOR_H