diff --git a/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp b/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp index f7153afbe9..f3f8cef75d 100644 --- a/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp +++ b/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp @@ -81,11 +81,12 @@ CmdSketcherToggleConstruction::CmdSketcherToggleConstruction() // list of toggle construction commands Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager(); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateLine"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreatePolyline"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompLine"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateRectangle"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateRectangle_Center"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateOblong"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateRectangles"); - rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreatePolyline"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateArcSlot"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateSlot"); rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompSlot"); diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 51af822cc3..a7d211d072 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -102,6 +102,60 @@ GeometryCreationMode geometryCreationMode = GeometryCreationMode::Normal; /* Sketch commands =======================================================*/ +// Comp for line tools ============================================= + +class CmdSketcherCompLine: public Gui::GroupCommand +{ +public: + CmdSketcherCompLine() + : GroupCommand("Sketcher_CompLine") + { + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create polyline"); + sToolTipText = QT_TR_NOOP("Create a polyline in the sketch. 'M' Key cycles behaviour"); + sWhatsThis = "Sketcher_CompLine"; + sStatusTip = sToolTipText; + eType = ForEdit; + + setCheckable(false); + + addCommand("Sketcher_CreatePolyline"); + addCommand("Sketcher_CreateLine"); + } + + void updateAction(int mode) override + { + Gui::ActionGroup* pcAction = qobject_cast(getAction()); + if (!pcAction) { + return; + } + + QList al = pcAction->actions(); + int index = pcAction->property("defaultAction").toInt(); + switch (static_cast(mode)) { + case GeometryCreationMode::Normal: + al[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePolyline")); + al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateLine")); + getAction()->setIcon(al[index]->icon()); + break; + case GeometryCreationMode::Construction: + al[0]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePolyline_Constr")); + al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateLine_Constr")); + getAction()->setIcon(al[index]->icon()); + break; + } + } + + const char* className() const override + { + return "CmdSketcherCompLine"; + } +}; + +// Line ================================================================ + DEF_STD_CMD_AU(CmdSketcherCreateLine) CmdSketcherCreateLine::CmdSketcherCreateLine() @@ -131,6 +185,37 @@ bool CmdSketcherCreateLine::isActive() return isCommandActive(getActiveGuiDocument()); } +// Polyline ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreatePolyline) + +CmdSketcherCreatePolyline::CmdSketcherCreatePolyline() + : Command("Sketcher_CreatePolyline") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create polyline"); + sToolTipText = QT_TR_NOOP("Create a polyline in the sketch. 'M' Key cycles behaviour"); + sWhatsThis = "Sketcher_CreatePolyline"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreatePolyline"; + sAccel = "G, M"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreatePolyline, "Sketcher_CreatePolyline") + +void CmdSketcherCreatePolyline::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerLineSet()); +} + +bool CmdSketcherCreatePolyline::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + /* Create Box =======================================================*/ @@ -361,38 +446,6 @@ bool CmdSketcherCompCreateRectangles::isActive() return isCommandActive(getActiveGuiDocument()); } -// ====================================================================================== - -DEF_STD_CMD_AU(CmdSketcherCreatePolyline) - -CmdSketcherCreatePolyline::CmdSketcherCreatePolyline() - : Command("Sketcher_CreatePolyline") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create polyline"); - sToolTipText = QT_TR_NOOP("Create a polyline in the sketch. 'M' Key cycles behaviour"); - sWhatsThis = "Sketcher_CreatePolyline"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreatePolyline"; - sAccel = "G, M"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreatePolyline, "Sketcher_CreatePolyline") - -void CmdSketcherCreatePolyline::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), new DrawSketchHandlerLineSet()); -} - -bool CmdSketcherCreatePolyline::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - - // ====================================================================================== DEF_STD_CMD_AU(CmdSketcherCreateArc) @@ -2248,4 +2301,5 @@ void CreateSketcherCommandsCreateGeo() rcCmdMgr.addCommand(new CmdSketcherCompCurveEdition()); rcCmdMgr.addCommand(new CmdSketcherExternal()); rcCmdMgr.addCommand(new CmdSketcherCarbonCopy()); + rcCmdMgr.addCommand(new CmdSketcherCompLine()); } diff --git a/src/Mod/Sketcher/Gui/Workbench.cpp b/src/Mod/Sketcher/Gui/Workbench.cpp index 051d5a18b1..6c04552717 100644 --- a/src/Mod/Sketcher/Gui/Workbench.cpp +++ b/src/Mod/Sketcher/Gui/Workbench.cpp @@ -285,6 +285,22 @@ inline void SketcherAddWorkbenchSketchEditModeActions(Gui::ToolBarItem& sketch) template void SketcherAddWorkbenchGeometries(T& geom); +template +void SketcherAddWorkspaceLines(T& geom); + +template<> +inline void SketcherAddWorkspaceLines(Gui::MenuItem& geom) +{ + geom << "Sketcher_CreatePolyline" + << "Sketcher_CreateLine"; +} + +template<> +inline void SketcherAddWorkspaceLines(Gui::ToolBarItem& geom) +{ + geom << "Sketcher_CompLine"; +} + template void SketcherAddWorkspaceArcs(T& geom); @@ -405,11 +421,10 @@ inline void SketcherAddWorkspaceCurveEdition(Gui::ToolBarItem& template inline void SketcherAddWorkbenchGeometries(T& geom) { - geom << "Sketcher_CreatePoint" - << "Sketcher_CreateLine"; + geom << "Sketcher_CreatePoint"; + SketcherAddWorkspaceLines(geom); SketcherAddWorkspaceArcs(geom); - geom << "Separator" - << "Sketcher_CreatePolyline"; + geom << "Separator"; SketcherAddWorkspaceRectangles(geom); SketcherAddWorkspaceRegularPolygon(geom); SketcherAddWorkspaceslots(geom);