diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index bfcbb6199..7260fa674 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -51,6 +51,8 @@ #include #include +#include + #include #include "SketchObject.h" diff --git a/src/Mod/Sketcher/App/SketchObject.h b/src/Mod/Sketcher/App/SketchObject.h index f58f15105..921d606a3 100644 --- a/src/Mod/Sketcher/App/SketchObject.h +++ b/src/Mod/Sketcher/App/SketchObject.h @@ -227,7 +227,7 @@ protected: /// get called by the container when a property has changed virtual void onChanged(const App::Property* /*prop*/); virtual void onDocumentRestored(); - + private: std::vector ExternalGeo; diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp index 22839d61e..9cbaaf855 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.cpp @@ -70,6 +70,10 @@ # include #endif +#ifndef _PreComp_ +# include +#endif + #include #include @@ -292,6 +296,22 @@ ViewProviderSketch::~ViewProviderSketch() { delete rubberband; } + +void ViewProviderSketch::slotUndoDocument(const Gui::Document& doc) +{ + if(getSketchObject()->noRecomputes) + getSketchObject()->solve(); // the sketch must be solved to update the DoF of the solver + else + getSketchObject()->getDocument()->recompute(); // or fully recomputed if applicable +} + +void ViewProviderSketch::slotRedoDocument(const Gui::Document& doc) +{ + if(getSketchObject()->noRecomputes) + getSketchObject()->solve(); // the sketch must be solved to update the DoF of the solver + else + getSketchObject()->getDocument()->recompute(); // or fully recomputed if applicable +} // handler management *************************************************************** void ViewProviderSketch::activateHandler(DrawSketchHandler *newHandler) @@ -4205,6 +4225,11 @@ bool ViewProviderSketch::setEdit(int ModNum) getSketchObject()->solve(); // This call to the solver is needed to initialize the DoF and solve time controls //draw(); is not necessary, because a solve triggers an updateData. + + connectUndoDocument = Gui::Application::Instance->activeDocument() + ->signalUndoDocument.connect(boost::bind(&ViewProviderSketch::slotUndoDocument, this, _1)); + connectRedoDocument = Gui::Application::Instance->activeDocument() + ->signalRedoDocument.connect(boost::bind(&ViewProviderSketch::slotRedoDocument, this, _1)); return true; } @@ -4494,7 +4519,10 @@ void ViewProviderSketch::unsetEdit(int ModNum) std::string ObjName = getSketchObject()->getNameInDocument(); std::string DocName = getSketchObject()->getDocument()->getName(); Gui::Selection().addSelection(DocName.c_str(),ObjName.c_str()); - + + connectUndoDocument.disconnect(); + connectRedoDocument.disconnect(); + // when pressing ESC make sure to close the dialog Gui::Control().closeDialog(); } diff --git a/src/Mod/Sketcher/Gui/ViewProviderSketch.h b/src/Mod/Sketcher/Gui/ViewProviderSketch.h index f3cbfb25f..c806e36b2 100644 --- a/src/Mod/Sketcher/Gui/ViewProviderSketch.h +++ b/src/Mod/Sketcher/Gui/ViewProviderSketch.h @@ -32,6 +32,9 @@ #include #include #include +#include + +#include class TopoDS_Shape; class TopoDS_Face; @@ -206,6 +209,7 @@ public: virtual bool mouseButtonPressed(int Button, bool pressed, const SbVec2s& cursorPos, const Gui::View3DInventorViewer* viewer); //@} + friend class DrawSketchHandler; friend struct ::EditData; @@ -240,6 +244,14 @@ protected: EditData *edit; /// build up the visual of the constraints void rebuildConstraintsVisual(void); + + void slotUndoDocument(const Gui::Document&); + void slotRedoDocument(const Gui::Document&); + +protected: + boost::signals::connection connectUndoDocument; + boost::signals::connection connectRedoDocument; + /** @name Protected helpers for drawing constraint icons*/ //@{