diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index 718c0deb93..eee5ea9481 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -102,3 +102,4 @@ c5c2ea3498f402c0c89916c46ddb071e22756622 # Assembly: Final application of pre-co d472927bba7b2d8d151c99fb29cf1d8dd099ea7d # Correct PartDesign Helix feature negative angles (#11399) b93c02e07da4990482b9d927506901e6f5d624e1 # Black updated to 24.3.0 cbea6b60942f8327e6105b12e8c1d5db4647984c # FEM: Apply pre-commit to FEM files +f9d66096878c7d89c273522b9ca57bdb14fee3bc # Rearranged CommandCreateGeo.cpp \ No newline at end of file diff --git a/src/Gui/Command.cpp b/src/Gui/Command.cpp index 4e1ddda1eb..2837dc0d54 100644 --- a/src/Gui/Command.cpp +++ b/src/Gui/Command.cpp @@ -1121,6 +1121,8 @@ void GroupCommand::setup(Action *pcAction) { int idx = pcAction->property("defaultAction").toInt(); if(idx>=0 && idx<(int)cmds.size() && cmds[idx].first) { auto cmd = cmds[idx].first; + QString shortcut = cmd->getShortcut(); + pcAction->setShortcut(shortcut); pcAction->setText(QCoreApplication::translate(className(), getMenuText())); QIcon icon; if (auto childAction = cmd->getAction()) diff --git a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp index b3572aaf5e..e01d6d8c47 100644 --- a/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp +++ b/src/Mod/Sketcher/Gui/CommandCreateGeo.cpp @@ -102,6 +102,36 @@ GeometryCreationMode geometryCreationMode = GeometryCreationMode::Normal; /* Sketch commands =======================================================*/ +// Point ================================================================ + +DEF_STD_CMD_A(CmdSketcherCreatePoint) + +CmdSketcherCreatePoint::CmdSketcherCreatePoint() + : Command("Sketcher_CreatePoint") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create point"); + sToolTipText = QT_TR_NOOP("Create a point in the sketch"); + sWhatsThis = "Sketcher_CreatePoint"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreatePoint"; + sAccel = "G, Y"; + eType = ForEdit; +} + +void CmdSketcherCreatePoint::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique()); +} + +bool CmdSketcherCreatePoint::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// ====================================================================================== // Comp for line tools ============================================= class CmdSketcherCompLine: public Gui::GroupCommand @@ -116,6 +146,7 @@ public: sToolTipText = QT_TR_NOOP("Create a polyline in the sketch. 'M' Key cycles behaviour"); sWhatsThis = "Sketcher_CompLine"; sStatusTip = sToolTipText; + sAccel = "G, M"; eType = ForEdit; setCheckable(false); @@ -221,303 +252,8 @@ bool CmdSketcherCreatePolyline::isActive() return isCommandActive(getActiveGuiDocument()); } - -/* Create Box =======================================================*/ - -DEF_STD_CMD_AU(CmdSketcherCreateRectangle) - -CmdSketcherCreateRectangle::CmdSketcherCreateRectangle() - : Command("Sketcher_CreateRectangle") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create rectangle"); - sToolTipText = QT_TR_NOOP("Create a rectangle in the sketch"); - sWhatsThis = "Sketcher_CreateRectangle"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateRectangle"; - sAccel = "G, R"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateRectangle, "Sketcher_CreateRectangle") - -void CmdSketcherCreateRectangle::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::RectangleConstructionMethod::Diagonal)); -} - -bool CmdSketcherCreateRectangle::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_AU(CmdSketcherCreateRectangleCenter) - -CmdSketcherCreateRectangleCenter::CmdSketcherCreateRectangleCenter() - : Command("Sketcher_CreateRectangle_Center") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create centered rectangle"); - sToolTipText = QT_TR_NOOP("Create a centered rectangle in the sketch"); - sWhatsThis = "Sketcher_CreateRectangle_Center"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateRectangle_Center"; - sAccel = "G, V"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateRectangleCenter, "Sketcher_CreateRectangle_Center") - -void CmdSketcherCreateRectangleCenter::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::RectangleConstructionMethod::CenterAndCorner)); -} - -bool CmdSketcherCreateRectangleCenter::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - - -/* Create rounded oblong =======================================================*/ - -DEF_STD_CMD_AU(CmdSketcherCreateOblong) - -CmdSketcherCreateOblong::CmdSketcherCreateOblong() - : Command("Sketcher_CreateOblong") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create rounded rectangle"); - sToolTipText = QT_TR_NOOP("Create a rounded rectangle in the sketch"); - sWhatsThis = "Sketcher_CreateOblong"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateOblong"; - sAccel = "G, O"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateOblong, "Sketcher_CreateOblong") - -void CmdSketcherCreateOblong::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::RectangleConstructionMethod::Diagonal, - true)); -} - -bool CmdSketcherCreateOblong::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -/* Rectangles Comp command =========================================*/ - -DEF_STD_CMD_ACLU(CmdSketcherCompCreateRectangles) - -CmdSketcherCompCreateRectangles::CmdSketcherCompCreateRectangles() - : Command("Sketcher_CompCreateRectangles") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create rectangle"); - sToolTipText = QT_TR_NOOP("Creates a rectangle in the sketch"); - sWhatsThis = "Sketcher_CompCreateRectangles"; - sStatusTip = sToolTipText; - eType = ForEdit; -} - -void CmdSketcherCompCreateRectangles::activated(int iMsg) -{ - if (iMsg == 0) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::RectangleConstructionMethod::Diagonal)); - } - else if (iMsg == 1) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::RectangleConstructionMethod::CenterAndCorner)); - } - else if (iMsg == 2) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::RectangleConstructionMethod::Diagonal, - true)); - } - else { - return; - } - - // Since the default icon is reset when enabling/disabling the command we have - // to explicitly set the icon of the used command. - Gui::ActionGroup* pcAction = qobject_cast(_pcAction); - QList a = pcAction->actions(); - - assert(iMsg < a.size()); - pcAction->setIcon(a[iMsg]->icon()); -} - -Gui::Action* CmdSketcherCompCreateRectangles::createAction() -{ - Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow()); - pcAction->setDropDownMenu(true); - applyCommandData(this->className(), pcAction); - - QAction* arc1 = pcAction->addAction(QString()); - arc1->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle")); - QAction* arc2 = pcAction->addAction(QString()); - arc2->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Center")); - QAction* arc3 = pcAction->addAction(QString()); - arc3->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOblong")); - - _pcAction = pcAction; - languageChange(); - - pcAction->setIcon(arc1->icon()); - int defaultId = 0; - pcAction->setProperty("defaultAction", QVariant(defaultId)); - - return pcAction; -} - -void CmdSketcherCompCreateRectangles::updateAction(int mode) -{ - Gui::ActionGroup* pcAction = qobject_cast(getAction()); - if (!pcAction) { - return; - } - - QList a = pcAction->actions(); - int index = pcAction->property("defaultAction").toInt(); - switch (static_cast(mode)) { - case GeometryCreationMode::Normal: - a[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle")); - a[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Center")); - a[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOblong")); - getAction()->setIcon(a[index]->icon()); - break; - case GeometryCreationMode::Construction: - a[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Constr")); - a[1]->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Center_Constr")); - a[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOblong_Constr")); - getAction()->setIcon(a[index]->icon()); - break; - } -} - -void CmdSketcherCompCreateRectangles::languageChange() -{ - Command::languageChange(); - - if (!_pcAction) { - return; - } - Gui::ActionGroup* pcAction = qobject_cast(_pcAction); - QList a = pcAction->actions(); - - QAction* rectangle1 = a[0]; - rectangle1->setText(QApplication::translate("CmdSketcherCompCreateRectangles", "Rectangle")); - rectangle1->setToolTip( - QApplication::translate("Sketcher_CreateRectangle", "Create a rectangle")); - rectangle1->setStatusTip(rectangle1->toolTip()); - QAction* rectangle2 = a[1]; - rectangle2->setText( - QApplication::translate("CmdSketcherCompCreateRectangles", "Centered rectangle")); - rectangle2->setToolTip( - QApplication::translate("Sketcher_CreateRectangle_Center", "Create a centered rectangle")); - rectangle2->setStatusTip(rectangle2->toolTip()); - QAction* rectangle3 = a[2]; - rectangle3->setText( - QApplication::translate("CmdSketcherCompCreateRectangles", "Rounded rectangle")); - rectangle3->setToolTip( - QApplication::translate("Sketcher_CreateOblong", "Create a rounded rectangle")); - rectangle3->setStatusTip(rectangle3->toolTip()); -} - -bool CmdSketcherCompCreateRectangles::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - // ====================================================================================== - -DEF_STD_CMD_AU(CmdSketcherCreateArc) - -CmdSketcherCreateArc::CmdSketcherCreateArc() - : Command("Sketcher_CreateArc") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create arc by center"); - sToolTipText = QT_TR_NOOP("Create an arc by its center and by its end points"); - sWhatsThis = "Sketcher_CreateArc"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateArc"; - sAccel = "G, A"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateArc, "Sketcher_CreateArc") - -void CmdSketcherCreateArc::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique()); -} - -bool CmdSketcherCreateArc::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - - -// ====================================================================================== - -DEF_STD_CMD_AU(CmdSketcherCreate3PointArc) - -CmdSketcherCreate3PointArc::CmdSketcherCreate3PointArc() - : Command("Sketcher_Create3PointArc") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create arc by 3 points"); - sToolTipText = QT_TR_NOOP("Create an arc by its end points and a point along the arc"); - sWhatsThis = "Sketcher_Create3PointArc"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_Create3PointArc"; - sAccel = "G, 3, A"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreate3PointArc, "Sketcher_Create3PointArc") - -void CmdSketcherCreate3PointArc::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::CircleEllipseConstructionMethod::ThreeRim)); -} - -bool CmdSketcherCreate3PointArc::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - - -// Comp create arc tools ============================================= +// Comp for arc tools ============================================= class CmdSketcherCompCreateArc: public Gui::GroupCommand { @@ -531,6 +267,7 @@ public: sToolTipText = QT_TR_NOOP("Create an arc in the sketch"); sWhatsThis = "Sketcher_CompCreateArc"; sStatusTip = sToolTipText; + sAccel = "G, A"; eType = ForEdit; setCheckable(false); @@ -585,107 +322,73 @@ public: } }; -// ====================================================================================== +// Arc by center ================================================================ +DEF_STD_CMD_AU(CmdSketcherCreateArc) -DEF_STD_CMD_AU(CmdSketcherCreateCircle) - -CmdSketcherCreateCircle::CmdSketcherCreateCircle() - : Command("Sketcher_CreateCircle") +CmdSketcherCreateArc::CmdSketcherCreateArc() + : Command("Sketcher_CreateArc") { sAppModule = "Sketcher"; sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create circle by center"); - sToolTipText = QT_TR_NOOP("Create a circle in the sketch"); - sWhatsThis = "Sketcher_CreateCircle"; + sMenuText = QT_TR_NOOP("Create arc by center"); + sToolTipText = QT_TR_NOOP("Create an arc by its center and by its end points"); + sWhatsThis = "Sketcher_CreateArc"; sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateCircle"; - sAccel = "G, C"; + sPixmap = "Sketcher_CreateArc"; + sAccel = "G, A"; eType = ForEdit; } -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateCircle, "Sketcher_CreateCircle") +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateArc, "Sketcher_CreateArc") -void CmdSketcherCreateCircle::activated(int iMsg) +void CmdSketcherCreateArc::activated(int iMsg) { Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique()); + ActivateHandler(getActiveGuiDocument(), std::make_unique()); } -bool CmdSketcherCreateCircle::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} -// ====================================================================================== - -/// @brief Macro that declares a new sketcher command class 'CmdSketcherCreateEllipseByCenter' -DEF_STD_CMD_AU(CmdSketcherCreateEllipseByCenter) - -/** - * @brief ctor - */ -CmdSketcherCreateEllipseByCenter::CmdSketcherCreateEllipseByCenter() - : Command("Sketcher_CreateEllipseByCenter") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create ellipse by center"); - sToolTipText = QT_TR_NOOP("Create an ellipse by center in the sketch"); - sWhatsThis = "Sketcher_CreateEllipseByCenter"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateEllipseByCenter"; - sAccel = "G, E, E"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateEllipseByCenter, "Sketcher_CreateEllipseByCenter") - -void CmdSketcherCreateEllipseByCenter::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique()); -} - -bool CmdSketcherCreateEllipseByCenter::isActive() +bool CmdSketcherCreateArc::isActive() { return isCommandActive(getActiveGuiDocument()); } -/// @brief Macro that declares a new sketcher command class 'CmdSketcherCreateEllipseBy3Points' -DEF_STD_CMD_AU(CmdSketcherCreateEllipseBy3Points) -/** - * @brief ctor - */ -CmdSketcherCreateEllipseBy3Points::CmdSketcherCreateEllipseBy3Points() - : Command("Sketcher_CreateEllipseBy3Points") +// Arc by 3 points ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreate3PointArc) + +CmdSketcherCreate3PointArc::CmdSketcherCreate3PointArc() + : Command("Sketcher_Create3PointArc") { sAppModule = "Sketcher"; sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create ellipse by 3 points"); - sToolTipText = QT_TR_NOOP("Create an ellipse by 3 points in the sketch"); - sWhatsThis = "Sketcher_CreateEllipseBy3Points"; + sMenuText = QT_TR_NOOP("Create arc by 3 points"); + sToolTipText = QT_TR_NOOP("Create an arc by its end points and a point along the arc"); + sWhatsThis = "Sketcher_Create3PointArc"; sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateEllipse_3points"; - sAccel = "G, 3, E"; + sPixmap = "Sketcher_Create3PointArc"; + sAccel = "G, 3, A"; eType = ForEdit; } -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateEllipseBy3Points, "Sketcher_CreateEllipse_3points") +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreate3PointArc, "Sketcher_Create3PointArc") -void CmdSketcherCreateEllipseBy3Points::activated(int iMsg) +void CmdSketcherCreate3PointArc::activated(int iMsg) { Q_UNUSED(iMsg); ActivateHandler(getActiveGuiDocument(), - std::make_unique( + std::make_unique( ConstructionMethods::CircleEllipseConstructionMethod::ThreeRim)); } -bool CmdSketcherCreateEllipseBy3Points::isActive() +bool CmdSketcherCreate3PointArc::isActive() { return isCommandActive(getActiveGuiDocument()); } +// Arc of ellipse ================================================================ + DEF_STD_CMD_AU(CmdSketcherCreateArcOfEllipse) CmdSketcherCreateArcOfEllipse::CmdSketcherCreateArcOfEllipse() @@ -715,6 +418,8 @@ bool CmdSketcherCreateArcOfEllipse::isActive() return isCommandActive(getActiveGuiDocument()); } +// Arc of hyperbola ================================================================ + DEF_STD_CMD_AU(CmdSketcherCreateArcOfHyperbola) CmdSketcherCreateArcOfHyperbola::CmdSketcherCreateArcOfHyperbola() @@ -743,6 +448,8 @@ bool CmdSketcherCreateArcOfHyperbola::isActive() return isCommandActive(getActiveGuiDocument()); } +// Arc of parabola ================================================================ + DEF_STD_CMD_AU(CmdSketcherCreateArcOfParabola) CmdSketcherCreateArcOfParabola::CmdSketcherCreateArcOfParabola() @@ -771,8 +478,9 @@ bool CmdSketcherCreateArcOfParabola::isActive() return isCommandActive(getActiveGuiDocument()); } +// ====================================================================================== +// Comp for conic tools ============================================= -// Comp create conic tools ============================================= class CmdSketcherCompCreateConic: public Gui::GroupCommand { public: @@ -785,6 +493,7 @@ public: sToolTipText = QT_TR_NOOP("Create a conic in the sketch"); sWhatsThis = "Sketcher_CompCreateConic"; sStatusTip = sToolTipText; + sAccel = "G, C"; eType = ForEdit; setCheckable(false); @@ -837,7 +546,794 @@ public: } }; +// Circle by center ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateCircle) + +CmdSketcherCreateCircle::CmdSketcherCreateCircle() + : Command("Sketcher_CreateCircle") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create circle by center"); + sToolTipText = QT_TR_NOOP("Create a circle in the sketch"); + sWhatsThis = "Sketcher_CreateCircle"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateCircle"; + sAccel = "G, C"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateCircle, "Sketcher_CreateCircle") + +void CmdSketcherCreateCircle::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique()); +} + +bool CmdSketcherCreateCircle::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Circle by 3 points ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreate3PointCircle) + +CmdSketcherCreate3PointCircle::CmdSketcherCreate3PointCircle() + : Command("Sketcher_Create3PointCircle") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create circle by 3 points"); + sToolTipText = QT_TR_NOOP("Create a circle by 3 perimeter points"); + sWhatsThis = "Sketcher_Create3PointCircle"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_Create3PointCircle"; + sAccel = "G, 3, C"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreate3PointCircle, "Sketcher_Create3PointCircle") + +void CmdSketcherCreate3PointCircle::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), + std::make_unique( + ConstructionMethods::CircleEllipseConstructionMethod::ThreeRim)); +} + +bool CmdSketcherCreate3PointCircle::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Ellipse by center ================================================================ + +/// @brief Macro that declares a new sketcher command class 'CmdSketcherCreateEllipseByCenter' +DEF_STD_CMD_AU(CmdSketcherCreateEllipseByCenter) + +/** + * @brief ctor + */ +CmdSketcherCreateEllipseByCenter::CmdSketcherCreateEllipseByCenter() + : Command("Sketcher_CreateEllipseByCenter") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create ellipse by center"); + sToolTipText = QT_TR_NOOP("Create an ellipse by center in the sketch"); + sWhatsThis = "Sketcher_CreateEllipseByCenter"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateEllipseByCenter"; + sAccel = "G, E, E"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateEllipseByCenter, "Sketcher_CreateEllipseByCenter") + +void CmdSketcherCreateEllipseByCenter::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique()); +} + +bool CmdSketcherCreateEllipseByCenter::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Ellipse by 3 points ================================================================ + +/// @brief Macro that declares a new sketcher command class 'CmdSketcherCreateEllipseBy3Points' +DEF_STD_CMD_AU(CmdSketcherCreateEllipseBy3Points) + +/** + * @brief ctor + */ +CmdSketcherCreateEllipseBy3Points::CmdSketcherCreateEllipseBy3Points() + : Command("Sketcher_CreateEllipseBy3Points") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create ellipse by 3 points"); + sToolTipText = QT_TR_NOOP("Create an ellipse by 3 points in the sketch"); + sWhatsThis = "Sketcher_CreateEllipseBy3Points"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateEllipse_3points"; + sAccel = "G, 3, E"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateEllipseBy3Points, "Sketcher_CreateEllipse_3points") + +void CmdSketcherCreateEllipseBy3Points::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), + std::make_unique( + ConstructionMethods::CircleEllipseConstructionMethod::ThreeRim)); +} + +bool CmdSketcherCreateEllipseBy3Points::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + // ====================================================================================== +// Comp for rectangle tools ============================================= + +class CmdSketcherCompCreateRectangles: public Gui::GroupCommand +{ +public: + CmdSketcherCompCreateRectangles() + : GroupCommand("Sketcher_CompCreateRectangles") + { + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create rectangle"); + sToolTipText = QT_TR_NOOP("Creates a rectangle in the sketch"); + sWhatsThis = "Sketcher_CompCreateRectangles"; + sStatusTip = sToolTipText; + sAccel = "G, R"; + eType = ForEdit; + + setCheckable(false); + // setRememberLast(true); + + addCommand("Sketcher_CreateRectangle"); + addCommand("Sketcher_CreateRectangle_Center"); + addCommand("Sketcher_CreateOblong"); + } + + 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_CreateRectangle")); + al[1]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Center")); + al[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOblong")); + getAction()->setIcon(al[index]->icon()); + break; + case GeometryCreationMode::Construction: + al[0]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Constr")); + al[1]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRectangle_Center_Constr")); + al[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOblong_Constr")); + getAction()->setIcon(al[index]->icon()); + break; + } + } + const char* className() const override + { + return "CmdSketcherCompCreateRectangles"; + } + bool isActive() override + { + return isCommandActive(getActiveGuiDocument()); + } +}; + +// Rectangle ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateRectangle) + +CmdSketcherCreateRectangle::CmdSketcherCreateRectangle() + : Command("Sketcher_CreateRectangle") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create rectangle"); + sToolTipText = QT_TR_NOOP("Create a rectangle in the sketch"); + sWhatsThis = "Sketcher_CreateRectangle"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateRectangle"; + sAccel = "G, R"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateRectangle, "Sketcher_CreateRectangle") + +void CmdSketcherCreateRectangle::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), + std::make_unique( + ConstructionMethods::RectangleConstructionMethod::Diagonal)); +} + +bool CmdSketcherCreateRectangle::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Rectangle by center ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateRectangleCenter) + +CmdSketcherCreateRectangleCenter::CmdSketcherCreateRectangleCenter() + : Command("Sketcher_CreateRectangle_Center") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create centered rectangle"); + sToolTipText = QT_TR_NOOP("Create a centered rectangle in the sketch"); + sWhatsThis = "Sketcher_CreateRectangle_Center"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateRectangle_Center"; + sAccel = "G, V"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateRectangleCenter, "Sketcher_CreateRectangle_Center") + +void CmdSketcherCreateRectangleCenter::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), + std::make_unique( + ConstructionMethods::RectangleConstructionMethod::CenterAndCorner)); +} + +bool CmdSketcherCreateRectangleCenter::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + + +// Rounded rectange ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateOblong) + +CmdSketcherCreateOblong::CmdSketcherCreateOblong() + : Command("Sketcher_CreateOblong") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create rounded rectangle"); + sToolTipText = QT_TR_NOOP("Create a rounded rectangle in the sketch"); + sWhatsThis = "Sketcher_CreateOblong"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateOblong"; + sAccel = "G, O"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateOblong, "Sketcher_CreateOblong") + +void CmdSketcherCreateOblong::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), + std::make_unique( + ConstructionMethods::RectangleConstructionMethod::Diagonal, + true)); +} + +bool CmdSketcherCreateOblong::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// ====================================================================================== +// Comp for polygon tools ============================================= + +class CmdSketcherCompCreateRegularPolygon: public Gui::GroupCommand +{ +public: + CmdSketcherCompCreateRegularPolygon() + : GroupCommand("Sketcher_CompCreateRegularPolygon") + { + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create regular polygon"); + sToolTipText = QT_TR_NOOP("Create a regular polygon in the sketcher"); + sWhatsThis = "Sketcher_CompCreateRegularPolygon"; + sStatusTip = sToolTipText; + sAccel = "G, P, 3"; + eType = ForEdit; + + setCheckable(false); + // setRememberLast(true); + + addCommand("Sketcher_CreateTriangle"); + addCommand("Sketcher_CreateSquare"); + addCommand("Sketcher_CreatePentagon"); + addCommand("Sketcher_CreateHexagon"); + addCommand("Sketcher_CreateHeptagon"); + addCommand("Sketcher_CreateOctagon"); + addCommand("Sketcher_CreateRegularPolygon"); + } + 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_CreateTriangle")); + al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSquare")); + al[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePentagon")); + al[3]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHexagon")); + al[4]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHeptagon")); + al[5]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOctagon")); + al[6]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRegularPolygon")); + + getAction()->setIcon(al[index]->icon()); + break; + case GeometryCreationMode::Construction: + al[0]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateTriangle_Constr")); + al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSquare_Constr")); + al[2]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePentagon_Constr")); + al[3]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHexagon_Constr")); + al[4]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHeptagon_Constr")); + al[5]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOctagon_Constr")); + al[6]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRegularPolygon_Constr")); + getAction()->setIcon(al[index]->icon()); + break; + } + } + const char* className() const override + { + return "CmdSketcherCompCreateRegularPolygon"; + } + bool isActive() override + { + return isCommandActive(getActiveGuiDocument()); + } +}; + +// Triangle ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateTriangle) + +CmdSketcherCreateTriangle::CmdSketcherCreateTriangle() + : Command("Sketcher_CreateTriangle") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create equilateral triangle"); + sToolTipText = QT_TR_NOOP("Create an equilateral triangle in the sketch"); + sWhatsThis = "Sketcher_CreateTriangle"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateTriangle"; + sAccel = "G, P, 3"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateTriangle, "Sketcher_CreateTriangle") + +void CmdSketcherCreateTriangle::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique(3)); +} + +bool CmdSketcherCreateTriangle::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Square ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateSquare) + +CmdSketcherCreateSquare::CmdSketcherCreateSquare() + : Command("Sketcher_CreateSquare") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create square"); + sToolTipText = QT_TR_NOOP("Create a square in the sketch"); + sWhatsThis = "Sketcher_CreateSquare"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateSquare"; + sAccel = "G, P, 4"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateSquare, "Sketcher_CreateSquare") + +void CmdSketcherCreateSquare::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique(4)); +} + +bool CmdSketcherCreateSquare::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Pentagon ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreatePentagon) + +CmdSketcherCreatePentagon::CmdSketcherCreatePentagon() + : Command("Sketcher_CreatePentagon") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create pentagon"); + sToolTipText = QT_TR_NOOP("Create a pentagon in the sketch"); + sWhatsThis = "Sketcher_CreatePentagon"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreatePentagon"; + sAccel = "G, P, 5"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreatePentagon, "Sketcher_CreatePentagon") + +void CmdSketcherCreatePentagon::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique(5)); +} + +bool CmdSketcherCreatePentagon::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Hexagon ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateHexagon) + +CmdSketcherCreateHexagon::CmdSketcherCreateHexagon() + : Command("Sketcher_CreateHexagon") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create hexagon"); + sToolTipText = QT_TR_NOOP("Create a hexagon in the sketch"); + sWhatsThis = "Sketcher_CreateHexagon"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateHexagon"; + sAccel = "G, P, 6"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateHexagon, "Sketcher_CreateHexagon") + +void CmdSketcherCreateHexagon::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique(6)); +} + +bool CmdSketcherCreateHexagon::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Heptagon ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateHeptagon) + +CmdSketcherCreateHeptagon::CmdSketcherCreateHeptagon() + : Command("Sketcher_CreateHeptagon") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create heptagon"); + sToolTipText = QT_TR_NOOP("Create a heptagon in the sketch"); + sWhatsThis = "Sketcher_CreateHeptagon"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateHeptagon"; + sAccel = "G, P, 7"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateHeptagon, "Sketcher_CreateHeptagon") + +void CmdSketcherCreateHeptagon::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique(7)); +} + +bool CmdSketcherCreateHeptagon::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Octagon ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateOctagon) + +CmdSketcherCreateOctagon::CmdSketcherCreateOctagon() + : Command("Sketcher_CreateOctagon") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create octagon"); + sToolTipText = QT_TR_NOOP("Create an octagon in the sketch"); + sWhatsThis = "Sketcher_CreateOctagon"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateOctagon"; + sAccel = "G, P, 8"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateOctagon, "Sketcher_CreateOctagon") + +void CmdSketcherCreateOctagon::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique(8)); +} + +bool CmdSketcherCreateOctagon::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Regular polygon ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateRegularPolygon) + +CmdSketcherCreateRegularPolygon::CmdSketcherCreateRegularPolygon() + : Command("Sketcher_CreateRegularPolygon") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create regular polygon"); + sToolTipText = QT_TR_NOOP("Create a regular polygon in the sketch"); + sWhatsThis = "Sketcher_CreateRegularPolygon"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateRegularPolygon"; + sAccel = "G, P, R"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateRegularPolygon, "Sketcher_CreateRegularPolygon") + +void CmdSketcherCreateRegularPolygon::activated(int iMsg) +{ + Q_UNUSED(iMsg); + + // Pop-up asking for values + SketcherRegularPolygonDialog srpd; + if (srpd.exec() == QDialog::Accepted) { + ActivateHandler(getActiveGuiDocument(), + std::make_unique(srpd.sides)); + } +} + +bool CmdSketcherCreateRegularPolygon::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// ====================================================================================== +// Comp for slot tools ============================================= + +class CmdSketcherCompSlot: public Gui::GroupCommand +{ +public: + CmdSketcherCompSlot() + : GroupCommand("Sketcher_CompSlot") + { + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Slots"); + sToolTipText = QT_TR_NOOP("Slot tools."); + sWhatsThis = "Sketcher_CompSlot"; + sStatusTip = sToolTipText; + sAccel = "G, S"; + eType = ForEdit; + + setCheckable(false); + + addCommand("Sketcher_CreateSlot"); + addCommand("Sketcher_CreateArcSlot"); + } + + 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_CreateSlot")); + al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot")); + getAction()->setIcon(al[index]->icon()); + break; + case GeometryCreationMode::Construction: + al[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSlot_Constr")); + al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot_Constr")); + getAction()->setIcon(al[index]->icon()); + break; + } + } + + const char* className() const override + { + return "CmdSketcherCompSlot"; + } + + bool isActive() override + { + return isCommandActive(getActiveGuiDocument()); + } +}; + +// Slot ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateSlot) + +CmdSketcherCreateSlot::CmdSketcherCreateSlot() + : Command("Sketcher_CreateSlot") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create slot"); + sToolTipText = QT_TR_NOOP("Create a slot in the sketch"); + sWhatsThis = "Sketcher_CreateSlot"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateSlot"; + sAccel = "G, S"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateSlot, "Sketcher_CreateSlot") + +void CmdSketcherCreateSlot::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique()); +} + +bool CmdSketcherCreateSlot::isActive() +{ + return isCommandActive(getActiveGuiDocument()); +} + +// Arc slot ================================================================ + +DEF_STD_CMD_AU(CmdSketcherCreateArcSlot) + +CmdSketcherCreateArcSlot::CmdSketcherCreateArcSlot() + : Command("Sketcher_CreateArcSlot") +{ + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create arc slot"); + sToolTipText = QT_TR_NOOP("Create an arc slot in the sketch"); + sWhatsThis = "Sketcher_CreateArcSlot"; + sStatusTip = sToolTipText; + sPixmap = "Sketcher_CreateArcSlot"; + sAccel = "G, S, 2"; + eType = ForEdit; +} + +CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateArcSlot, "Sketcher_CreateArcSlot") + +void CmdSketcherCreateArcSlot::activated(int iMsg) +{ + Q_UNUSED(iMsg); + ActivateHandler(getActiveGuiDocument(), std::make_unique()); +} + +bool CmdSketcherCreateArcSlot::isActive(void) +{ + return isCommandActive(getActiveGuiDocument()); +} + +// ====================================================================================== +// Comp for spline tools ============================================= + +class CmdSketcherCompCreateBSpline: public Gui::GroupCommand +{ +public: + CmdSketcherCompCreateBSpline() + : GroupCommand("Sketcher_CompCreateBSpline") + { + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create B-spline"); + sToolTipText = QT_TR_NOOP("Create a B-spline in the sketch"); + sWhatsThis = "Sketcher_CompCreateBSpline"; + sStatusTip = sToolTipText; + sAccel = "G, B, B"; + eType = ForEdit; + + setCheckable(false); + // setRememberLast(true); + + addCommand("Sketcher_CreateBSpline"); + addCommand("Sketcher_CreatePeriodicBSpline"); + addCommand("Sketcher_CreateBSplineByInterpolation"); + addCommand("Sketcher_CreatePeriodicBSplineByInterpolation"); + } + 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_CreateBSpline")); + al[1]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_Create_Periodic_BSpline")); + al[2]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSplineByInterpolation")); + al[3]->setIcon(Gui::BitmapFactory().iconFromTheme( + "Sketcher_CreatePeriodicBSplineByInterpolation")); + getAction()->setIcon(al[index]->icon()); + break; + case GeometryCreationMode::Construction: + al[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSpline_Constr")); + al[1]->setIcon( + Gui::BitmapFactory().iconFromTheme("Sketcher_Create_Periodic_BSpline_Constr")); + al[2]->setIcon(Gui::BitmapFactory().iconFromTheme( + "Sketcher_CreateBSplineByInterpolation_Constr")); + al[3]->setIcon(Gui::BitmapFactory().iconFromTheme( + "Sketcher_CreatePeriodicBSplineByInterpolation_Constr")); + getAction()->setIcon(al[index]->icon()); + break; + } + } + const char* className() const override + { + return "CmdSketcherCompCreateBSpline"; + } + bool isActive() override + { + return isCommandActive(getActiveGuiDocument()); + } +}; + +// B-spline ================================================================ DEF_STD_CMD_AU(CmdSketcherCreateBSpline) @@ -870,6 +1366,8 @@ bool CmdSketcherCreateBSpline::isActive() return isCommandActive(getActiveGuiDocument()); } +// Periodic B-spline ================================================================ + /// @brief Macro that declares a new sketcher command class 'CmdSketcherCreateBSpline' DEF_STD_CMD_AU(CmdSketcherCreatePeriodicBSpline) @@ -906,6 +1404,8 @@ bool CmdSketcherCreatePeriodicBSpline::isActive() return isCommandActive(getActiveGuiDocument()); } +// B-spline by interpolation ================================================================ + /// @brief Macro that declares a new sketcher command class /// 'CmdSketcherCreateBSplineByInterpolation' DEF_STD_CMD_AU(CmdSketcherCreateBSplineByInterpolation) @@ -940,6 +1440,9 @@ bool CmdSketcherCreateBSplineByInterpolation::isActive() return isCommandActive(getActiveGuiDocument()); } +// Periodic B-spline by interpolation +// ================================================================ + /// @brief Macro that declares a new sketcher command class /// 'CmdSketcherCreatePeriodicBSplineByInterpolation' DEF_STD_CMD_AU(CmdSketcherCreatePeriodicBSplineByInterpolation) @@ -977,245 +1480,43 @@ bool CmdSketcherCreatePeriodicBSplineByInterpolation::isActive() return isCommandActive(getActiveGuiDocument()); } - -/// @brief Macro that declares a new sketcher command class 'CmdSketcherCompCreateBSpline' -DEF_STD_CMD_ACLU(CmdSketcherCompCreateBSpline) - -/** - * @brief ctor - */ -CmdSketcherCompCreateBSpline::CmdSketcherCompCreateBSpline() - : Command("Sketcher_CompCreateBSpline") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create B-spline"); - sToolTipText = QT_TR_NOOP("Create a B-spline in the sketch"); - sWhatsThis = "Sketcher_CompCreateBSpline"; - sStatusTip = sToolTipText; - eType = ForEdit; -} - -/** - * @brief Instantiates the B-spline handler when the B-spline command activated - * @param int iMsg - */ -void CmdSketcherCompCreateBSpline::activated(int iMsg) -{ - if (iMsg == 0) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::BSplineConstructionMethod::ControlPoints)); - } - else if (iMsg == 1) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::BSplineConstructionMethod::ControlPoints, - true)); - } - else if (iMsg == 2) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::BSplineConstructionMethod::Knots)); - } - else if (iMsg == 3) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::BSplineConstructionMethod::Knots, - true)); - } - else { - return; - } - - // Since the default icon is reset when enabling/disabling the command we have - // to explicitly set the icon of the used command. - Gui::ActionGroup* pcAction = qobject_cast(_pcAction); - QList a = pcAction->actions(); - - assert(iMsg < a.size()); - pcAction->setIcon(a[iMsg]->icon()); -} - -Gui::Action* CmdSketcherCompCreateBSpline::createAction() -{ - Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow()); - pcAction->setDropDownMenu(true); - applyCommandData(this->className(), pcAction); - - QAction* bspline = pcAction->addAction(QString()); - bspline->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSpline")); - - QAction* periodicbspline = pcAction->addAction(QString()); - periodicbspline->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_Create_Periodic_BSpline")); - - QAction* bsplinebyknot = pcAction->addAction(QString()); - bsplinebyknot->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSplineByInterpolation")); - - QAction* periodicbsplinebyknot = pcAction->addAction(QString()); - periodicbsplinebyknot->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePeriodicBSplineByInterpolation")); - - _pcAction = pcAction; - languageChange(); - - // default - pcAction->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSpline")); - int defaultId = 0; - pcAction->setProperty("defaultAction", QVariant(defaultId)); - - return pcAction; -} - -void CmdSketcherCompCreateBSpline::updateAction(int mode) -{ - Gui::ActionGroup* pcAction = qobject_cast(getAction()); - if (!pcAction) { - return; - } - - QList a = pcAction->actions(); - int index = pcAction->property("defaultAction").toInt(); - switch (static_cast(mode)) { - case GeometryCreationMode::Normal: - a[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSpline")); - a[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_Create_Periodic_BSpline")); - a[2]->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSplineByInterpolation")); - a[3]->setIcon(Gui::BitmapFactory().iconFromTheme( - "Sketcher_CreatePeriodicBSplineByInterpolation")); - getAction()->setIcon(a[index]->icon()); - break; - case GeometryCreationMode::Construction: - a[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSpline_Constr")); - a[1]->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_Create_Periodic_BSpline_Constr")); - a[2]->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_CreateBSplineByInterpolation_Constr")); - a[3]->setIcon(Gui::BitmapFactory().iconFromTheme( - "Sketcher_CreatePeriodicBSplineByInterpolation_Constr")); - getAction()->setIcon(a[index]->icon()); - break; - } -} - -void CmdSketcherCompCreateBSpline::languageChange() -{ - Command::languageChange(); - - if (!_pcAction) { - return; - } - Gui::ActionGroup* pcAction = qobject_cast(_pcAction); - QList a = pcAction->actions(); - - QAction* bspline = a[0]; - bspline->setText( - QApplication::translate("Sketcher_CreateBSpline", "B-spline by control points")); - bspline->setToolTip( - QApplication::translate("Sketcher_CreateBSpline", "Create a B-spline by control points")); - bspline->setStatusTip( - QApplication::translate("Sketcher_CreateBSpline", "Create a B-spline by control points")); - QAction* periodicbspline = a[1]; - periodicbspline->setText(QApplication::translate("Sketcher_Create_Periodic_BSpline", - "Periodic B-spline by control points")); - periodicbspline->setToolTip( - QApplication::translate("Sketcher_Create_Periodic_BSpline", - "Create a periodic B-spline by control points")); - periodicbspline->setStatusTip( - QApplication::translate("Sketcher_Create_Periodic_BSpline", - "Create a periodic B-spline by control points")); - QAction* bsplinebyknot = a[2]; - bsplinebyknot->setText( - QApplication::translate("Sketcher_CreateBSplineByInterpolation", "B-spline by knots")); - bsplinebyknot->setToolTip(QApplication::translate("Sketcher_CreateBSplineByInterpolation", - "Create a B-spline by knots")); - bsplinebyknot->setStatusTip(QApplication::translate("Sketcher_CreateBSplineByInterpolation", - "Create a B-spline by knots")); - QAction* periodicbsplinebyknot = a[3]; - periodicbsplinebyknot->setText( - QApplication::translate("Sketcher_CreatePeriodicBSplineByInterpolation", - "Periodic B-spline by knots")); - periodicbsplinebyknot->setToolTip( - QApplication::translate("Sketcher_CreatePeriodicBSplineByInterpolation", - "Create a periodic B-spline by knots")); - periodicbsplinebyknot->setStatusTip( - QApplication::translate("Sketcher_CreatePeriodicBSplineByInterpolation", - "Create a periodic B-spline by knots")); -} - -bool CmdSketcherCompCreateBSpline::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - - // ====================================================================================== +// Comp for fillet tools ============================================= -DEF_STD_CMD_AU(CmdSketcherCreate3PointCircle) - -CmdSketcherCreate3PointCircle::CmdSketcherCreate3PointCircle() - : Command("Sketcher_Create3PointCircle") +class CmdSketcherCompCreateFillets: public Gui::GroupCommand { - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create circle by 3 points"); - sToolTipText = QT_TR_NOOP("Create a circle by 3 perimeter points"); - sWhatsThis = "Sketcher_Create3PointCircle"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_Create3PointCircle"; - sAccel = "G, 3, C"; - eType = ForEdit; -} +public: + CmdSketcherCompCreateFillets() + : GroupCommand("Sketcher_CompCreateFillets") + { + sAppModule = "Sketcher"; + sGroup = "Sketcher"; + sMenuText = QT_TR_NOOP("Create fillet or chamfer"); + sToolTipText = QT_TR_NOOP("Create a fillet or chamfer between two lines"); + sWhatsThis = "Sketcher_CompCreateFillets"; + sStatusTip = sToolTipText; + sAccel = "G, F, F"; + eType = ForEdit; -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreate3PointCircle, "Sketcher_Create3PointCircle") + setCheckable(false); -void CmdSketcherCreate3PointCircle::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), - std::make_unique( - ConstructionMethods::CircleEllipseConstructionMethod::ThreeRim)); -} + addCommand("Sketcher_CreateFillet"); + addCommand("Sketcher_CreateChamfer"); + } -bool CmdSketcherCreate3PointCircle::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} + const char* className() const override + { + return "CmdSketcherCompCreateFillets"; + } -// ====================================================================================== + bool isActive() override + { + return isCommandActive(getActiveGuiDocument()); + } +}; +// Fillet ================================================================ -DEF_STD_CMD_A(CmdSketcherCreatePoint) - -CmdSketcherCreatePoint::CmdSketcherCreatePoint() - : Command("Sketcher_CreatePoint") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create point"); - sToolTipText = QT_TR_NOOP("Create a point in the sketch"); - sWhatsThis = "Sketcher_CreatePoint"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreatePoint"; - sAccel = "G, Y"; - eType = ForEdit; -} - -void CmdSketcherCreatePoint::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique()); -} - -bool CmdSketcherCreatePoint::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -// ====================================================================================== DEF_STD_CMD_A(CmdSketcherCreateFillet) @@ -1246,7 +1547,7 @@ bool CmdSketcherCreateFillet::isActive() return isCommandActive(getActiveGuiDocument()); } -// ====================================================================================== +// Chamfer ================================================================ DEF_STD_CMD_A(CmdSketcherCreateChamfer) @@ -1277,30 +1578,34 @@ bool CmdSketcherCreateChamfer::isActive() return isCommandActive(getActiveGuiDocument()); } +// ====================================================================================== +// Comp for curve edition tools ============================================= -class CmdSketcherCompCreateFillets: public Gui::GroupCommand +class CmdSketcherCompCurveEdition: public Gui::GroupCommand { public: - CmdSketcherCompCreateFillets() - : GroupCommand("Sketcher_CompCreateFillets") + CmdSketcherCompCurveEdition() + : GroupCommand("Sketcher_CompCurveEdition") { sAppModule = "Sketcher"; sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create fillet or chamfer"); - sToolTipText = QT_TR_NOOP("Create a fillet or chamfer between two lines"); - sWhatsThis = "Sketcher_CompCreateFillets"; + sMenuText = QT_TR_NOOP("Curve Edition"); + sToolTipText = QT_TR_NOOP("Curve Edition tools."); + sWhatsThis = "Sketcher_CompCurveEdition"; sStatusTip = sToolTipText; + sAccel = "G, T"; eType = ForEdit; setCheckable(false); - addCommand("Sketcher_CreateFillet"); - addCommand("Sketcher_CreateChamfer"); + addCommand("Sketcher_Trimming"); + addCommand("Sketcher_Split"); + addCommand("Sketcher_Extend"); } const char* className() const override { - return "CmdSketcherCompCreateFillets"; + return "CmdSketcherCompCurveEdition"; } bool isActive() override @@ -1309,8 +1614,7 @@ public: } }; - -// ====================================================================================== +// Trim edge ================================================================ DEF_STD_CMD_A(CmdSketcherTrimming) @@ -1339,8 +1643,7 @@ bool CmdSketcherTrimming::isActive() return isCommandActive(getActiveGuiDocument()); } - -// ====================================================================================== +// Extend edge ================================================================ DEF_STD_CMD_A(CmdSketcherExtend) @@ -1370,8 +1673,7 @@ bool CmdSketcherExtend::isActive() return isCommandActive(getActiveGuiDocument()); } - -// ====================================================================================== +// Split edge ================================================================ DEF_STD_CMD_A(CmdSketcherSplit) @@ -1401,41 +1703,8 @@ bool CmdSketcherSplit::isActive() return isCommandActive(getActiveGuiDocument()); } -// Comp for curve edition tools ======================================================= - -class CmdSketcherCompCurveEdition: public Gui::GroupCommand -{ -public: - CmdSketcherCompCurveEdition() - : GroupCommand("Sketcher_CompCurveEdition") - { - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Curve Edition"); - sToolTipText = QT_TR_NOOP("Curve Edition tools."); - sWhatsThis = "Sketcher_CompCurveEdition"; - sStatusTip = sToolTipText; - eType = ForEdit; - - setCheckable(false); - - addCommand("Sketcher_Trimming"); - addCommand("Sketcher_Split"); - addCommand("Sketcher_Extend"); - } - - const char* className() const override - { - return "CmdSketcherCompCurveEdition"; - } - - bool isActive() override - { - return isCommandActive(getActiveGuiDocument()); - } -}; - -// Group for external tools ============================================= +// ====================================================================================== +// Comp for curve external tools ============================================= class CmdSketcherCompExternal: public Gui::GroupCommand { @@ -1449,6 +1718,7 @@ public: sToolTipText = QT_TR_NOOP("Create external edges linked to external geometries."); sWhatsThis = "Sketcher_CompExternal"; sStatusTip = sToolTipText; + sAccel = "G, X"; eType = ForEdit; setCheckable(false); @@ -1567,6 +1837,7 @@ bool CmdSketcherIntersection::isActive() } // ====================================================================================== +// Carbon copy ============================================= DEF_STD_CMD_AU(CmdSketcherCarbonCopy) @@ -1597,531 +1868,6 @@ bool CmdSketcherCarbonCopy::isActive() return isCommandActive(getActiveGuiDocument()); } -// Comp for slot tools ============================================= - -class CmdSketcherCompSlot: public Gui::GroupCommand -{ -public: - CmdSketcherCompSlot() - : GroupCommand("Sketcher_CompSlot") - { - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Slots"); - sToolTipText = QT_TR_NOOP("Slot tools."); - sWhatsThis = "Sketcher_CompSlot"; - sStatusTip = sToolTipText; - eType = ForEdit; - - setCheckable(false); - - addCommand("Sketcher_CreateSlot"); - addCommand("Sketcher_CreateArcSlot"); - } - - 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_CreateSlot")); - al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot")); - getAction()->setIcon(al[index]->icon()); - break; - case GeometryCreationMode::Construction: - al[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSlot_Constr")); - al[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateArcSlot_Constr")); - getAction()->setIcon(al[index]->icon()); - break; - } - } - - const char* className() const override - { - return "CmdSketcherCompSlot"; - } - - bool isActive() override - { - return isCommandActive(getActiveGuiDocument()); - } -}; - -/* Create Slot =============================================================*/ - -DEF_STD_CMD_AU(CmdSketcherCreateSlot) - -CmdSketcherCreateSlot::CmdSketcherCreateSlot() - : Command("Sketcher_CreateSlot") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create slot"); - sToolTipText = QT_TR_NOOP("Create a slot in the sketch"); - sWhatsThis = "Sketcher_CreateSlot"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateSlot"; - sAccel = "G, S"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateSlot, "Sketcher_CreateSlot") - -void CmdSketcherCreateSlot::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique()); -} - -bool CmdSketcherCreateSlot::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -/* Create Arc Slot =========================================================*/ - -DEF_STD_CMD_AU(CmdSketcherCreateArcSlot) - -CmdSketcherCreateArcSlot::CmdSketcherCreateArcSlot() - : Command("Sketcher_CreateArcSlot") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create arc slot"); - sToolTipText = QT_TR_NOOP("Create an arc slot in the sketch"); - sWhatsThis = "Sketcher_CreateArcSlot"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateArcSlot"; - sAccel = "G, S, 2"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateArcSlot, "Sketcher_CreateArcSlot") - -void CmdSketcherCreateArcSlot::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique()); -} - -bool CmdSketcherCreateArcSlot::isActive(void) -{ - return isCommandActive(getActiveGuiDocument()); -} - -/* Create Regular Polygon ==============================================*/ - -DEF_STD_CMD_AU(CmdSketcherCreateTriangle) - -CmdSketcherCreateTriangle::CmdSketcherCreateTriangle() - : Command("Sketcher_CreateTriangle") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create equilateral triangle"); - sToolTipText = QT_TR_NOOP("Create an equilateral triangle in the sketch"); - sWhatsThis = "Sketcher_CreateTriangle"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateTriangle"; - sAccel = "G, P, 3"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateTriangle, "Sketcher_CreateTriangle") - -void CmdSketcherCreateTriangle::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique(3)); -} - -bool CmdSketcherCreateTriangle::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_AU(CmdSketcherCreateSquare) - -CmdSketcherCreateSquare::CmdSketcherCreateSquare() - : Command("Sketcher_CreateSquare") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create square"); - sToolTipText = QT_TR_NOOP("Create a square in the sketch"); - sWhatsThis = "Sketcher_CreateSquare"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateSquare"; - sAccel = "G, P, 4"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateSquare, "Sketcher_CreateSquare") - -void CmdSketcherCreateSquare::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique(4)); -} - -bool CmdSketcherCreateSquare::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_AU(CmdSketcherCreatePentagon) - -CmdSketcherCreatePentagon::CmdSketcherCreatePentagon() - : Command("Sketcher_CreatePentagon") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create pentagon"); - sToolTipText = QT_TR_NOOP("Create a pentagon in the sketch"); - sWhatsThis = "Sketcher_CreatePentagon"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreatePentagon"; - sAccel = "G, P, 5"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreatePentagon, "Sketcher_CreatePentagon") - -void CmdSketcherCreatePentagon::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique(5)); -} - -bool CmdSketcherCreatePentagon::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - - -DEF_STD_CMD_AU(CmdSketcherCreateHexagon) - -CmdSketcherCreateHexagon::CmdSketcherCreateHexagon() - : Command("Sketcher_CreateHexagon") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create hexagon"); - sToolTipText = QT_TR_NOOP("Create a hexagon in the sketch"); - sWhatsThis = "Sketcher_CreateHexagon"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateHexagon"; - sAccel = "G, P, 6"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateHexagon, "Sketcher_CreateHexagon") - -void CmdSketcherCreateHexagon::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique(6)); -} - -bool CmdSketcherCreateHexagon::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_AU(CmdSketcherCreateHeptagon) - -CmdSketcherCreateHeptagon::CmdSketcherCreateHeptagon() - : Command("Sketcher_CreateHeptagon") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create heptagon"); - sToolTipText = QT_TR_NOOP("Create a heptagon in the sketch"); - sWhatsThis = "Sketcher_CreateHeptagon"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateHeptagon"; - sAccel = "G, P, 7"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateHeptagon, "Sketcher_CreateHeptagon") - -void CmdSketcherCreateHeptagon::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique(7)); -} - -bool CmdSketcherCreateHeptagon::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_AU(CmdSketcherCreateOctagon) - -CmdSketcherCreateOctagon::CmdSketcherCreateOctagon() - : Command("Sketcher_CreateOctagon") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create octagon"); - sToolTipText = QT_TR_NOOP("Create an octagon in the sketch"); - sWhatsThis = "Sketcher_CreateOctagon"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateOctagon"; - sAccel = "G, P, 8"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateOctagon, "Sketcher_CreateOctagon") - -void CmdSketcherCreateOctagon::activated(int iMsg) -{ - Q_UNUSED(iMsg); - ActivateHandler(getActiveGuiDocument(), std::make_unique(8)); -} - -bool CmdSketcherCreateOctagon::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_AU(CmdSketcherCreateRegularPolygon) - -CmdSketcherCreateRegularPolygon::CmdSketcherCreateRegularPolygon() - : Command("Sketcher_CreateRegularPolygon") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create regular polygon"); - sToolTipText = QT_TR_NOOP("Create a regular polygon in the sketch"); - sWhatsThis = "Sketcher_CreateRegularPolygon"; - sStatusTip = sToolTipText; - sPixmap = "Sketcher_CreateRegularPolygon"; - sAccel = "G, P, R"; - eType = ForEdit; -} - -CONSTRUCTION_UPDATE_ACTION(CmdSketcherCreateRegularPolygon, "Sketcher_CreateRegularPolygon") - -void CmdSketcherCreateRegularPolygon::activated(int iMsg) -{ - Q_UNUSED(iMsg); - - // Pop-up asking for values - SketcherRegularPolygonDialog srpd; - if (srpd.exec() == QDialog::Accepted) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique(srpd.sides)); - } -} - -bool CmdSketcherCreateRegularPolygon::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - -DEF_STD_CMD_ACLU(CmdSketcherCompCreateRegularPolygon) - -CmdSketcherCompCreateRegularPolygon::CmdSketcherCompCreateRegularPolygon() - : Command("Sketcher_CompCreateRegularPolygon") -{ - sAppModule = "Sketcher"; - sGroup = "Sketcher"; - sMenuText = QT_TR_NOOP("Create regular polygon"); - sToolTipText = QT_TR_NOOP("Create a regular polygon in the sketcher"); - sWhatsThis = "Sketcher_CompCreateRegularPolygon"; - sStatusTip = sToolTipText; - sAccel = "G, P, P"; - eType = ForEdit; -} - -void CmdSketcherCompCreateRegularPolygon::activated(int iMsg) -{ - switch (iMsg) { - case 0: - ActivateHandler(getActiveGuiDocument(), std::make_unique(3)); - break; - case 1: - ActivateHandler(getActiveGuiDocument(), std::make_unique(4)); - break; - case 2: - ActivateHandler(getActiveGuiDocument(), std::make_unique(5)); - break; - case 3: - ActivateHandler(getActiveGuiDocument(), std::make_unique(6)); - break; - case 4: - ActivateHandler(getActiveGuiDocument(), std::make_unique(7)); - break; - case 5: - ActivateHandler(getActiveGuiDocument(), std::make_unique(8)); - break; - case 6: { - // Pop-up asking for values - SketcherRegularPolygonDialog srpd; - if (srpd.exec() == QDialog::Accepted) { - ActivateHandler(getActiveGuiDocument(), - std::make_unique(srpd.sides)); - } - } break; - default: - return; - } - - // Since the default icon is reset when enabling/disabling the command we have - // to explicitly set the icon of the used command. - Gui::ActionGroup* pcAction = qobject_cast(_pcAction); - QList a = pcAction->actions(); - - assert(iMsg < a.size()); - pcAction->setIcon(a[iMsg]->icon()); -} - -Gui::Action* CmdSketcherCompCreateRegularPolygon::createAction() -{ - Gui::ActionGroup* pcAction = new Gui::ActionGroup(this, Gui::getMainWindow()); - pcAction->setDropDownMenu(true); - applyCommandData(this->className(), pcAction); - - QAction* triangle = pcAction->addAction(QString()); - triangle->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateTriangle")); - QAction* square = pcAction->addAction(QString()); - square->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSquare")); - QAction* pentagon = pcAction->addAction(QString()); - pentagon->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePentagon")); - QAction* hexagon = pcAction->addAction(QString()); - hexagon->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHexagon")); - QAction* heptagon = pcAction->addAction(QString()); - heptagon->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHeptagon")); - QAction* octagon = pcAction->addAction(QString()); - octagon->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOctagon")); - QAction* regular = pcAction->addAction(QString()); - regular->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRegularPolygon")); - - _pcAction = pcAction; - languageChange(); - - pcAction->setIcon(hexagon->icon()); - int defaultId = 3; - pcAction->setProperty("defaultAction", QVariant(defaultId)); - - return pcAction; -} - -void CmdSketcherCompCreateRegularPolygon::updateAction(int mode) -{ - Gui::ActionGroup* pcAction = qobject_cast(getAction()); - if (!pcAction) { - return; - } - - QList a = pcAction->actions(); - int index = pcAction->property("defaultAction").toInt(); - switch (static_cast(mode)) { - case GeometryCreationMode::Normal: - a[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateTriangle")); - a[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSquare")); - a[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePentagon")); - a[3]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHexagon")); - a[4]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHeptagon")); - a[5]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOctagon")); - a[6]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRegularPolygon")); - getAction()->setIcon(a[index]->icon()); - break; - case GeometryCreationMode::Construction: - a[0]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateTriangle_Constr")); - a[1]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateSquare_Constr")); - a[2]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreatePentagon_Constr")); - a[3]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHexagon_Constr")); - a[4]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateHeptagon_Constr")); - a[5]->setIcon(Gui::BitmapFactory().iconFromTheme("Sketcher_CreateOctagon_Constr")); - a[6]->setIcon( - Gui::BitmapFactory().iconFromTheme("Sketcher_CreateRegularPolygon_Constr")); - getAction()->setIcon(a[index]->icon()); - break; - } -} - -void CmdSketcherCompCreateRegularPolygon::languageChange() -{ - Command::languageChange(); - - if (!_pcAction) { - return; - } - Gui::ActionGroup* pcAction = qobject_cast(_pcAction); - QList a = pcAction->actions(); - - QAction* triangle = a[0]; - triangle->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Triangle")); - triangle->setToolTip( - QApplication::translate("Sketcher_CreateTriangle", - "Create an equilateral triangle by its center and by one corner")); - triangle->setStatusTip( - QApplication::translate("Sketcher_CreateTriangle", - "Create an equilateral triangle by its center and by one corner")); - QAction* square = a[1]; - square->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Square")); - square->setToolTip(QApplication::translate("Sketcher_CreateSquare", - "Create a square by its center and by one corner")); - square->setStatusTip( - QApplication::translate("Sketcher_CreateSquare", - "Create a square by its center and by one corner")); - QAction* pentagon = a[2]; - pentagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Pentagon")); - pentagon->setToolTip( - QApplication::translate("Sketcher_CreatePentagon", - "Create a pentagon by its center and by one corner")); - pentagon->setStatusTip( - QApplication::translate("Sketcher_CreatePentagon", - "Create a pentagon by its center and by one corner")); - QAction* hexagon = a[3]; - hexagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Hexagon")); - hexagon->setToolTip( - QApplication::translate("Sketcher_CreateHexagon", - "Create a hexagon by its center and by one corner")); - hexagon->setStatusTip( - QApplication::translate("Sketcher_CreateHexagon", - "Create a hexagon by its center and by one corner")); - QAction* heptagon = a[4]; - heptagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Heptagon")); - heptagon->setToolTip( - QApplication::translate("Sketcher_CreateHeptagon", - "Create a heptagon by its center and by one corner")); - heptagon->setStatusTip( - QApplication::translate("Sketcher_CreateHeptagon", - "Create a heptagon by its center and by one corner")); - QAction* octagon = a[5]; - octagon->setText(QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Octagon")); - octagon->setToolTip( - QApplication::translate("Sketcher_CreateOctagon", - "Create an octagon by its center and by one corner")); - octagon->setStatusTip( - QApplication::translate("Sketcher_CreateOctagon", - "Create an octagon by its center and by one corner")); - QAction* regular = a[6]; - regular->setText( - QApplication::translate("CmdSketcherCompCreateRegularPolygon", "Regular polygon")); - regular->setToolTip( - QApplication::translate("Sketcher_CreateOctagon", - "Create a regular polygon by its center and by one corner")); - regular->setStatusTip( - QApplication::translate("Sketcher_CreateOctagon", - "Create a regular polygon by its center and by one corner")); -} - -bool CmdSketcherCompCreateRegularPolygon::isActive() -{ - return isCommandActive(getActiveGuiDocument()); -} - void CreateSketcherCommandsCreateGeo() { Gui::CommandManager& rcCmdMgr = Gui::Application::Instance->commandManager(); @@ -2133,22 +1879,18 @@ void CreateSketcherCommandsCreateGeo() rcCmdMgr.addCommand(new CmdSketcherCreate3PointCircle()); rcCmdMgr.addCommand(new CmdSketcherCreateEllipseByCenter()); rcCmdMgr.addCommand(new CmdSketcherCreateEllipseBy3Points()); - rcCmdMgr.addCommand(new CmdSketcherCompCreateConic()); rcCmdMgr.addCommand(new CmdSketcherCreateArcOfEllipse()); rcCmdMgr.addCommand(new CmdSketcherCreateArcOfHyperbola()); rcCmdMgr.addCommand(new CmdSketcherCreateArcOfParabola()); - rcCmdMgr.addCommand(new CmdSketcherCompCreateArc()); rcCmdMgr.addCommand(new CmdSketcherCreateBSpline()); rcCmdMgr.addCommand(new CmdSketcherCreatePeriodicBSpline()); rcCmdMgr.addCommand(new CmdSketcherCreateBSplineByInterpolation()); rcCmdMgr.addCommand(new CmdSketcherCreatePeriodicBSplineByInterpolation()); - rcCmdMgr.addCommand(new CmdSketcherCompCreateBSpline()); rcCmdMgr.addCommand(new CmdSketcherCreateLine()); rcCmdMgr.addCommand(new CmdSketcherCreatePolyline()); rcCmdMgr.addCommand(new CmdSketcherCreateRectangle()); rcCmdMgr.addCommand(new CmdSketcherCreateRectangleCenter()); rcCmdMgr.addCommand(new CmdSketcherCreateOblong()); - rcCmdMgr.addCommand(new CmdSketcherCompCreateRegularPolygon()); rcCmdMgr.addCommand(new CmdSketcherCreateTriangle()); rcCmdMgr.addCommand(new CmdSketcherCreateSquare()); rcCmdMgr.addCommand(new CmdSketcherCreatePentagon()); @@ -2156,22 +1898,28 @@ void CreateSketcherCommandsCreateGeo() rcCmdMgr.addCommand(new CmdSketcherCreateHeptagon()); rcCmdMgr.addCommand(new CmdSketcherCreateOctagon()); rcCmdMgr.addCommand(new CmdSketcherCreateRegularPolygon()); - rcCmdMgr.addCommand(new CmdSketcherCompCreateRectangles()); rcCmdMgr.addCommand(new CmdSketcherCreateSlot()); rcCmdMgr.addCommand(new CmdSketcherCreateArcSlot()); - rcCmdMgr.addCommand(new CmdSketcherCompSlot()); rcCmdMgr.addCommand(new CmdSketcherCreateFillet()); rcCmdMgr.addCommand(new CmdSketcherCreateChamfer()); - rcCmdMgr.addCommand(new CmdSketcherCompCreateFillets()); // rcCmdMgr.addCommand(new CmdSketcherCreateText()); // rcCmdMgr.addCommand(new CmdSketcherCreateDraftLine()); rcCmdMgr.addCommand(new CmdSketcherTrimming()); rcCmdMgr.addCommand(new CmdSketcherExtend()); rcCmdMgr.addCommand(new CmdSketcherSplit()); - rcCmdMgr.addCommand(new CmdSketcherCompCurveEdition()); rcCmdMgr.addCommand(new CmdSketcherProjection()); rcCmdMgr.addCommand(new CmdSketcherIntersection()); - rcCmdMgr.addCommand(new CmdSketcherCompExternal()); rcCmdMgr.addCommand(new CmdSketcherCarbonCopy()); + + // Group command must be added after its subcommands. rcCmdMgr.addCommand(new CmdSketcherCompLine()); + rcCmdMgr.addCommand(new CmdSketcherCompCreateArc()); + rcCmdMgr.addCommand(new CmdSketcherCompCreateConic()); + rcCmdMgr.addCommand(new CmdSketcherCompCreateRectangles()); + rcCmdMgr.addCommand(new CmdSketcherCompCreateRegularPolygon()); + rcCmdMgr.addCommand(new CmdSketcherCompSlot()); + rcCmdMgr.addCommand(new CmdSketcherCompCreateBSpline()); + rcCmdMgr.addCommand(new CmdSketcherCompCreateFillets()); + rcCmdMgr.addCommand(new CmdSketcherCompCurveEdition()); + rcCmdMgr.addCommand(new CmdSketcherCompExternal()); }