TaskTransformedParameters derives from Gui::DocumentObserver to handle deletion of view provider when clicking Cancel button

This commit is contained in:
wmayer 2017-01-22 19:07:07 +01:00
parent bc84e88e31
commit 27c4136f58
3 changed files with 28 additions and 10 deletions

View File

@ -370,18 +370,18 @@ unsigned TaskLinearPatternParameters::getOccurrences(void) const
return ui->spinOccurrences->value(); return ui->spinOccurrences->value();
} }
TaskLinearPatternParameters::~TaskLinearPatternParameters() TaskLinearPatternParameters::~TaskLinearPatternParameters()
{ {
//hide the parts coordinate system axis for selection //hide the parts coordinate system axis for selection
PartDesign::Body * body = PartDesign::Body::findBodyOf ( getObject() ); PartDesign::Body * body = PartDesign::Body::findBodyOf(getObject());
if(body) { if (body) {
try { try {
App::Origin *origin = body->getOrigin(); App::Origin *origin = body->getOrigin();
ViewProviderOrigin* vpOrigin; ViewProviderOrigin* vpOrigin;
vpOrigin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->getViewProvider(origin)); vpOrigin = static_cast<ViewProviderOrigin*>(Gui::Application::Instance->getViewProvider(origin));
vpOrigin->resetTemporaryVisibility(); vpOrigin->resetTemporaryVisibility();
} catch (const Base::Exception &ex) { }
catch (const Base::Exception &ex) {
Base::Console().Error ("%s\n", ex.what () ); Base::Console().Error ("%s\n", ex.what () );
} }
} }

View File

@ -72,6 +72,12 @@ TaskTransformedParameters::TaskTransformedParameters(ViewProviderTransformed *Tr
blockUpdate(false) blockUpdate(false)
{ {
selectionMode = none; selectionMode = none;
if (TransformedView) {
Gui::Document* doc = TransformedView->getDocument();
this->attachDocument(doc);
this->enableNotifications(DocumentObserver::Delete);
}
} }
TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters *parentTask) TaskTransformedParameters::TaskTransformedParameters(TaskMultiTransformParameters *parentTask)
@ -92,6 +98,12 @@ TaskTransformedParameters::~TaskTransformedParameters()
Gui::Selection().rmvSelectionGate(); Gui::Selection().rmvSelectionGate();
} }
void TaskTransformedParameters::slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj)
{
if (TransformedView == &Obj)
TransformedView = nullptr;
}
bool TaskTransformedParameters::isViewUpdated() const bool TaskTransformedParameters::isViewUpdated() const
{ {
return (blockUpdate == false); return (blockUpdate == false);
@ -264,17 +276,18 @@ PartDesignGui::ViewProviderTransformed *TaskTransformedParameters::getTopTransfo
} }
PartDesign::Transformed *TaskTransformedParameters::getTopTransformedObject() const { PartDesign::Transformed *TaskTransformedParameters::getTopTransformedObject() const {
App::DocumentObject *transform = getTopTransformedView()->getObject(); App::DocumentObject *transform = getTopTransformedView()->getObject();
assert (transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId())); assert (transform->isDerivedFrom(PartDesign::Transformed::getClassTypeId()));
return static_cast<PartDesign::Transformed*>(transform); return static_cast<PartDesign::Transformed*>(transform);
} }
PartDesign::Transformed *TaskTransformedParameters::getObject() const { PartDesign::Transformed *TaskTransformedParameters::getObject() const {
if (insideMultiTransform) if (insideMultiTransform)
return parentTask->getSubFeature(); return parentTask->getSubFeature();
else else if (TransformedView)
return static_cast<PartDesign::Transformed*>(TransformedView->getObject()); return static_cast<PartDesign::Transformed*>(TransformedView->getObject());
else
return nullptr;
} }
Part::Feature *TaskTransformedParameters::getBaseObject() const { Part::Feature *TaskTransformedParameters::getBaseObject() const {

View File

@ -30,6 +30,7 @@
#include <Gui/TaskView/TaskView.h> #include <Gui/TaskView/TaskView.h>
#include <Gui/Selection.h> #include <Gui/Selection.h>
#include <Gui/DocumentObserver.h>
#include "TaskFeatureParameters.h" #include "TaskFeatureParameters.h"
#include "TaskTransformedMessages.h" #include "TaskTransformedMessages.h"
@ -114,7 +115,9 @@ private:
Because in the second case there is no ViewProvider, some special methods are required to Because in the second case there is no ViewProvider, some special methods are required to
access the underlying FeatureTransformed object in two different ways. access the underlying FeatureTransformed object in two different ways.
**/ **/
class TaskTransformedParameters : public Gui::TaskView::TaskBox, public Gui::SelectionObserver class TaskTransformedParameters : public Gui::TaskView::TaskBox,
public Gui::SelectionObserver,
public Gui::DocumentObserver
{ {
Q_OBJECT Q_OBJECT
@ -184,6 +187,8 @@ protected:
int getUpdateViewTimeout() const; int getUpdateViewTimeout() const;
protected: protected:
/** Notifies when the object is about to be removed. */
virtual void slotDeletedObject(const Gui::ViewProviderDocumentObject& Obj);
virtual void changeEvent(QEvent *e) = 0; virtual void changeEvent(QEvent *e) = 0;
virtual void onSelectionChanged(const Gui::SelectionChanges& msg) = 0; virtual void onSelectionChanged(const Gui::SelectionChanges& msg) = 0;
virtual void clearButtons()=0; virtual void clearButtons()=0;