From c3808cd9915ba29cc1a1c0f94ed4e09ed91b9fa1 Mon Sep 17 00:00:00 2001 From: wmayer Date: Wed, 3 Jun 2015 19:12:48 +0200 Subject: [PATCH] + Use update mechanism for CmdSketcherToggleConstruction --- src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp | 130 ++------------- src/Mod/Sketcher/Gui/CommandCreateGeo.cpp | 150 +++++++++++++++++- 2 files changed, 158 insertions(+), 122 deletions(-) diff --git a/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp b/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp index bb626e18f..a77524ab2 100644 --- a/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp +++ b/src/Mod/Sketcher/Gui/CommandAlterGeometry.cpp @@ -77,6 +77,17 @@ CmdSketcherToggleConstruction::CmdSketcherToggleConstruction() sPixmap = "Sketcher_AlterConstruction"; sAccel = "C,M"; eType = ForEdit; + + // list of toggle construction commands + Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateLine"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateRectangle"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreatePolyline"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CreateSlot"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateArc"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateConic"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateCircle"); + rcCmdMgr.addCommandMode("ToggleConstruction", "Sketcher_CompCreateRegularPolygon"); } void CmdSketcherToggleConstruction::activated(int iMsg) @@ -86,123 +97,14 @@ void CmdSketcherToggleConstruction::activated(int iMsg) Gui::CommandManager &rcCmdMgr = Gui::Application::Instance->commandManager(); - if(geometryCreationMode==Construction) { - geometryCreationMode=Normal; - - rcCmdMgr.getCommandByName("Sketcher_CreateLine")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreateLine")); - rcCmdMgr.getCommandByName("Sketcher_CreateRectangle")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreateRectangle")); - rcCmdMgr.getCommandByName("Sketcher_CreatePolyline")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreatePolyline")); - rcCmdMgr.getCommandByName("Sketcher_CreateSlot")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreateSlot")); - // Comp commands require a distinctive treatment - Gui::ActionGroup* pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateArc")->getAction()); - QList a = pcAction->actions(); - int index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateArc")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointArc")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateArc")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateArc"): - Gui::BitmapFactory().pixmap("Sketcher_Create3PointArc")); - // Conics - pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateConic")->getAction()); - a = pcAction->actions(); - index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_3points")); - a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Elliptical_Arc")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateConic")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse"): - index==1?Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_3points"): - Gui::BitmapFactory().pixmap("Sketcher_Elliptical_Arc")); - // Circle - pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateCircle")->getAction()); - a = pcAction->actions(); - index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateCircle")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointCircle")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateCircle")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateCircle"): - Gui::BitmapFactory().pixmap("Sketcher_Create3PointCircle")); - // Polygon - pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateRegularPolygon")->getAction()); - a = pcAction->actions(); - index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateTriangle")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateSquare")); - a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreatePentagon")); - a[3]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHexagon")); - a[4]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHeptagon")); - a[5]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateOctagon")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateRegularPolygon")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateTriangle"): - index==1?Gui::BitmapFactory().pixmap("Sketcher_CreateSquare"): - index==2?Gui::BitmapFactory().pixmap("Sketcher_CreatePentagon"): - index==3?Gui::BitmapFactory().pixmap("Sketcher_CreateHexagon"): - index==4?Gui::BitmapFactory().pixmap("Sketcher_CreateHeptagon"): - Gui::BitmapFactory().pixmap("Sketcher_CreateOctagon")); + if (geometryCreationMode == Construction) { + geometryCreationMode = Normal; } else { - geometryCreationMode=Construction; - - rcCmdMgr.getCommandByName("Sketcher_CreateLine")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreateLine_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CreateRectangle")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreateRectangle_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CreatePolyline")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreatePolyline_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CreateSlot")->getAction()->setIcon( - Gui::BitmapFactory().pixmap("Sketcher_CreateSlot_Constr")); - // Comp commands require a distinctive treatment - // Arc - Gui::ActionGroup* pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateArc")->getAction()); - QList a = pcAction->actions(); - int index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateArc_Constr")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointArc_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateArc")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateArc_Constr"): - Gui::BitmapFactory().pixmap("Sketcher_Create3PointArc_Constr")); - // Conics - pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateConic")->getAction()); - a = pcAction->actions(); - index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_Constr")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_3points_Constr")); - a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Elliptical_Arc_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateConic")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_Constr"): - index==1?Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_3points_Constr"): - Gui::BitmapFactory().pixmap("Sketcher_Elliptical_Arc_Constr")); - // Circle - pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateCircle")->getAction()); - a = pcAction->actions(); - index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateCircle_Constr")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointCircle_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateCircle")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateCircle_Constr"): - Gui::BitmapFactory().pixmap("Sketcher_Create3PointCircle_Constr")); - // Polygon - pcAction = qobject_cast(rcCmdMgr.getCommandByName("Sketcher_CompCreateRegularPolygon")->getAction()); - a = pcAction->actions(); - index = pcAction->property("defaultAction").toInt(); - a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateTriangle_Constr")); - a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateSquare_Constr")); - a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreatePentagon_Constr")); - a[3]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHexagon_Constr")); - a[4]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHeptagon_Constr")); - a[5]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateOctagon_Constr")); - rcCmdMgr.getCommandByName("Sketcher_CompCreateRegularPolygon")->getAction()->setIcon( - index==0?Gui::BitmapFactory().pixmap("Sketcher_CreateTriangle_Constr"): - index==1?Gui::BitmapFactory().pixmap("Sketcher_CreateSquare_Constr"): - index==2?Gui::BitmapFactory().pixmap("Sketcher_CreatePentagon_Constr"): - index==3?Gui::BitmapFactory().pixmap("Sketcher_CreateHexagon_Constr"): - index==4?Gui::BitmapFactory().pixmap("Sketcher_CreateHeptagon_Constr"): - Gui::BitmapFactory().pixmap("Sketcher_CreateOctagon_Constr")); + geometryCreationMode = Construction; } + + rcCmdMgr.updateCommands("ToggleConstruction", static_cast(geometryCreationMode)); } else // there was a selection, so operate in toggle mode. { diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index 5d9c097b9..c279832ff 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -297,7 +297,7 @@ protected: std::vector sugConstr1, sugConstr2; }; -DEF_STD_CMD_A(CmdSketcherCreateLine); +DEF_STD_CMD_AU(CmdSketcherCreateLine); CmdSketcherCreateLine::CmdSketcherCreateLine() : Command("Sketcher_CreateLine") @@ -318,6 +318,18 @@ void CmdSketcherCreateLine::activated(int iMsg) ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerLine() ); } +void CmdSketcherCreateLine::updateAction(int mode) +{ + switch (mode) { + case Normal: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateLine")); + break; + case Construction: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateLine_Constr")); + break; + } +} + bool CmdSketcherCreateLine::isActive(void) { return isCreateGeoActive(getActiveGuiDocument()); @@ -540,7 +552,7 @@ protected: std::vector sugConstr1, sugConstr2; }; -DEF_STD_CMD_A(CmdSketcherCreateRectangle); +DEF_STD_CMD_AU(CmdSketcherCreateRectangle); CmdSketcherCreateRectangle::CmdSketcherCreateRectangle() : Command("Sketcher_CreateRectangle") @@ -561,6 +573,18 @@ void CmdSketcherCreateRectangle::activated(int iMsg) ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerBox() ); } +void CmdSketcherCreateRectangle::updateAction(int mode) +{ + switch (mode) { + case Normal: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateRectangle")); + break; + case Construction: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateRectangle_Constr")); + break; + } +} + bool CmdSketcherCreateRectangle::isActive(void) { return isCreateGeoActive(getActiveGuiDocument()); @@ -1134,7 +1158,7 @@ protected: } }; -DEF_STD_CMD_A(CmdSketcherCreatePolyline); +DEF_STD_CMD_AU(CmdSketcherCreatePolyline); CmdSketcherCreatePolyline::CmdSketcherCreatePolyline() : Command("Sketcher_CreatePolyline") @@ -1154,6 +1178,18 @@ void CmdSketcherCreatePolyline::activated(int iMsg) ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerLineSet() ); } +void CmdSketcherCreatePolyline::updateAction(int mode) +{ + switch (mode) { + case Normal: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreatePolyline")); + break; + case Construction: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreatePolyline_Constr")); + break; + } +} + bool CmdSketcherCreatePolyline::isActive(void) { return isCreateGeoActive(getActiveGuiDocument()); @@ -1720,7 +1756,7 @@ bool CmdSketcherCreate3PointArc::isActive(void) } -DEF_STD_CMD_ACL(CmdSketcherCompCreateArc); +DEF_STD_CMD_ACLU(CmdSketcherCompCreateArc); CmdSketcherCompCreateArc::CmdSketcherCompCreateArc() : Command("Sketcher_CompCreateArc") @@ -1773,6 +1809,25 @@ Gui::Action * CmdSketcherCompCreateArc::createAction(void) return pcAction; } +void CmdSketcherCompCreateArc::updateAction(int mode) +{ + Gui::ActionGroup* pcAction = qobject_cast(getAction()); + QList a = pcAction->actions(); + int index = pcAction->property("defaultAction").toInt(); + switch (mode) { + case Normal: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateArc")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointArc")); + getAction()->setIcon(a[index]->icon()); + break; + case Construction: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateArc_Constr")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointArc_Constr")); + getAction()->setIcon(a[index]->icon()); + break; + } +} + void CmdSketcherCompCreateArc::languageChange() { Command::languageChange(); @@ -3236,7 +3291,7 @@ bool CmdSketcherCreateArcOfEllipse::isActive(void) } /// @brief Macro that declares a new sketcher command class 'CmdSketcherCompCreateEllipse' -DEF_STD_CMD_ACL(CmdSketcherCompCreateConic); +DEF_STD_CMD_ACLU(CmdSketcherCompCreateConic); /** * @brief ctor @@ -3304,6 +3359,27 @@ Gui::Action * CmdSketcherCompCreateConic::createAction(void) return pcAction; } +void CmdSketcherCompCreateConic::updateAction(int mode) +{ + Gui::ActionGroup* pcAction = qobject_cast(getAction()); + QList a = pcAction->actions(); + int index = pcAction->property("defaultAction").toInt(); + switch (mode) { + case Normal: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_3points")); + a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Elliptical_Arc")); + getAction()->setIcon(a[index]->icon()); + break; + case Construction: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_Constr")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateEllipse_3points_Constr")); + a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Elliptical_Arc_Constr")); + getAction()->setIcon(a[index]->icon()); + break; + } +} + void CmdSketcherCompCreateConic::languageChange() { Command::languageChange(); @@ -3576,7 +3652,7 @@ bool CmdSketcherCreate3PointCircle::isActive(void) } -DEF_STD_CMD_ACL(CmdSketcherCompCreateCircle); +DEF_STD_CMD_ACLU(CmdSketcherCompCreateCircle); CmdSketcherCompCreateCircle::CmdSketcherCompCreateCircle() : Command("Sketcher_CompCreateCircle") @@ -3629,6 +3705,25 @@ Gui::Action * CmdSketcherCompCreateCircle::createAction(void) return pcAction; } +void CmdSketcherCompCreateCircle::updateAction(int mode) +{ + Gui::ActionGroup* pcAction = qobject_cast(getAction()); + QList a = pcAction->actions(); + int index = pcAction->property("defaultAction").toInt(); + switch (mode) { + case Normal: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateCircle")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointCircle")); + getAction()->setIcon(a[index]->icon()); + break; + case Construction: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateCircle_Constr")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_Create3PointCircle_Constr")); + getAction()->setIcon(a[index]->icon()); + break; + } +} + void CmdSketcherCompCreateCircle::languageChange() { Command::languageChange(); @@ -4711,7 +4806,7 @@ protected: std::vector sugConstr1, sugConstr2; }; -DEF_STD_CMD_A(CmdSketcherCreateSlot); +DEF_STD_CMD_AU(CmdSketcherCreateSlot); CmdSketcherCreateSlot::CmdSketcherCreateSlot() : Command("Sketcher_CreateSlot") @@ -4732,6 +4827,18 @@ void CmdSketcherCreateSlot::activated(int iMsg) ActivateHandler(getActiveGuiDocument(),new DrawSketchHandlerSlot() ); } +void CmdSketcherCreateSlot::updateAction(int mode) +{ + switch (mode) { + case Normal: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateSlot")); + break; + case Construction: + getAction()->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateSlot_Constr")); + break; + } +} + bool CmdSketcherCreateSlot::isActive(void) { return isCreateGeoActive(getActiveGuiDocument()); @@ -5089,7 +5196,7 @@ bool CmdSketcherCreateOctagon::isActive(void) } -DEF_STD_CMD_ACL(CmdSketcherCompCreateRegularPolygon); +DEF_STD_CMD_ACLU(CmdSketcherCompCreateRegularPolygon); CmdSketcherCompCreateRegularPolygon::CmdSketcherCompCreateRegularPolygon() : Command("Sketcher_CompCreateRegularPolygon") @@ -5160,6 +5267,33 @@ Gui::Action * CmdSketcherCompCreateRegularPolygon::createAction(void) return pcAction; } +void CmdSketcherCompCreateRegularPolygon::updateAction(int mode) +{ + Gui::ActionGroup* pcAction = qobject_cast(getAction()); + QList a = pcAction->actions(); + int index = pcAction->property("defaultAction").toInt(); + switch (mode) { + case Normal: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateTriangle")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateSquare")); + a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreatePentagon")); + a[3]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHexagon")); + a[4]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHeptagon")); + a[5]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateOctagon")); + getAction()->setIcon(a[index]->icon()); + break; + case Construction: + a[0]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateTriangle_Constr")); + a[1]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateSquare_Constr")); + a[2]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreatePentagon_Constr")); + a[3]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHexagon_Constr")); + a[4]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateHeptagon_Constr")); + a[5]->setIcon(Gui::BitmapFactory().pixmap("Sketcher_CreateOctagon_Constr")); + getAction()->setIcon(a[index]->icon()); + break; + } +} + void CmdSketcherCompCreateRegularPolygon::languageChange() { Command::languageChange();