diff --git a/src/Mod/Sketcher/Gui/Command.cpp b/src/Mod/Sketcher/Gui/Command.cpp index 85202e480edc..825594bd4be2 100644 --- a/src/Mod/Sketcher/Gui/Command.cpp +++ b/src/Mod/Sketcher/Gui/Command.cpp @@ -328,6 +328,45 @@ bool CmdSketcherLeaveSketch::isActive(void) return false; } +DEF_STD_CMD_A(CmdSketcherStopOperation) + +CmdSketcherStopOperation::CmdSketcherStopOperation() + : Command("Sketcher_StopOperation") +{ + sAppModule = "Sketcher"; + sGroup = QT_TR_NOOP("Sketcher"); + sMenuText = QT_TR_NOOP("Stop operation"); + sToolTipText = QT_TR_NOOP("Stop current operation"); + sWhatsThis = "Sketcher_StopOperation"; + sStatusTip = sToolTipText; + sPixmap = "process-stop"; + eType = 0; +} + +void CmdSketcherStopOperation::activated(int iMsg) +{ + Q_UNUSED(iMsg); + Gui::Document *doc = getActiveGuiDocument(); + + if (doc) { + SketcherGui::ViewProviderSketch* vp = dynamic_cast(doc->getInEdit()); + if (vp) { + vp->purgeHandler(); + } + } +} + +bool CmdSketcherStopOperation::isActive(void) +{ + Gui::Document *doc = getActiveGuiDocument(); + if (doc) { + SketcherGui::ViewProviderSketch* vp = dynamic_cast(doc->getInEdit()); + if (vp) + return true; + } + return false; +} + DEF_STD_CMD_A(CmdSketcherReorientSketch) CmdSketcherReorientSketch::CmdSketcherReorientSketch() @@ -872,6 +911,7 @@ void CreateSketcherCommands(void) rcCmdMgr.addCommand(new CmdSketcherNewSketch()); rcCmdMgr.addCommand(new CmdSketcherEditSketch()); rcCmdMgr.addCommand(new CmdSketcherLeaveSketch()); + rcCmdMgr.addCommand(new CmdSketcherStopOperation()); rcCmdMgr.addCommand(new CmdSketcherReorientSketch()); rcCmdMgr.addCommand(new CmdSketcherMapSketch()); rcCmdMgr.addCommand(new CmdSketcherViewSketch()); diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 0558750bcd80..a09b0c2df323 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -401,6 +401,7 @@ void ViewProviderSketch::deactivateHandler() std::vector editCurve; editCurve.clear(); drawEdit(editCurve); // erase any line + resetPositionText(); edit->sketchHandler->deactivated(this); edit->sketchHandler->unsetCursor(); delete(edit->sketchHandler); diff --git a/src/Mod/Sketcher/Gui/Workbench.cpp b/src/Mod/Sketcher/Gui/Workbench.cpp index 5168c85275eb..d9d784bfc4c9 100644 --- a/src/Mod/Sketcher/Gui/Workbench.cpp +++ b/src/Mod/Sketcher/Gui/Workbench.cpp @@ -90,6 +90,7 @@ Gui::MenuItem* Workbench::setupMenuBar() const addSketcherWorkbenchVirtualSpace(*virtualspace); addSketcherWorkbenchSketchActions( *sketch ); + *sketch << "Sketcher_StopOperation"; *sketch << geom << cons << consaccel