Fix non-Delete of Graphic on DocObject delete
- While the source document obj was "removing", the graphic was being deleted and readded by the view provider.
This commit is contained in:
@@ -70,27 +70,25 @@ DrawViewArch::~DrawViewArch()
|
||||
{
|
||||
}
|
||||
|
||||
void DrawViewArch::onChanged(const App::Property* prop)
|
||||
short DrawViewArch::mustExecute() const
|
||||
{
|
||||
short result = 0;
|
||||
if (!isRestoring()) {
|
||||
if (prop == &Source ||
|
||||
prop == &AllOn ||
|
||||
prop == &RenderMode ||
|
||||
prop == &ShowHidden ||
|
||||
prop == &ShowFill ||
|
||||
prop == &LineWidth ||
|
||||
prop == &FontSize) {
|
||||
try {
|
||||
App::DocumentObjectExecReturn *ret = recompute();
|
||||
delete ret;
|
||||
}
|
||||
catch (...) {
|
||||
}
|
||||
}
|
||||
result = (Source.isTouched() ||
|
||||
AllOn.isTouched() ||
|
||||
RenderMode.isTouched() ||
|
||||
ShowHidden.isTouched() ||
|
||||
ShowFill.isTouched() ||
|
||||
LineWidth.isTouched() ||
|
||||
FontSize.isTouched());
|
||||
}
|
||||
TechDraw::DrawViewSymbol::onChanged(prop);
|
||||
if ((bool) result) {
|
||||
return result;
|
||||
}
|
||||
return DrawViewSymbol::mustExecute();
|
||||
}
|
||||
|
||||
|
||||
App::DocumentObjectExecReturn *DrawViewArch::execute(void)
|
||||
{
|
||||
if (!keepUpdated()) {
|
||||
@@ -123,7 +121,7 @@ App::DocumentObjectExecReturn *DrawViewArch::execute(void)
|
||||
Base::Interpreter().runStringArg("App.activeDocument().%s.Symbol = '%s' + svgBody + '%s'",
|
||||
FeatName.c_str(),svgHead.c_str(),svgTail.c_str());
|
||||
}
|
||||
requestPaint();
|
||||
// requestPaint();
|
||||
return DrawView::execute();
|
||||
}
|
||||
|
||||
|
||||
@@ -60,11 +60,14 @@ public:
|
||||
virtual const char* getViewProviderName(void) const override {
|
||||
return "TechDrawGui::ViewProviderArch";
|
||||
}
|
||||
|
||||
virtual short mustExecute() const override;
|
||||
|
||||
void Restore(Base::XMLReader &reader) override;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void onChanged(const App::Property* prop) override;
|
||||
/* virtual void onChanged(const App::Property* prop) override;*/
|
||||
Base::BoundBox3d bbox;
|
||||
std::string getSVGHead(void);
|
||||
std::string getSVGTail(void);
|
||||
|
||||
@@ -66,29 +66,29 @@ DrawViewDraft::~DrawViewDraft()
|
||||
{
|
||||
}
|
||||
|
||||
void DrawViewDraft::onChanged(const App::Property* prop)
|
||||
short DrawViewDraft::mustExecute() const
|
||||
{
|
||||
short result = 0;
|
||||
if (!isRestoring()) {
|
||||
if (prop == &Source ||
|
||||
prop == &LineWidth ||
|
||||
prop == &FontSize ||
|
||||
prop == &Direction ||
|
||||
prop == &Color ||
|
||||
prop == &LineStyle ||
|
||||
prop == &LineSpacing) {
|
||||
try {
|
||||
App::DocumentObjectExecReturn *ret = recompute();
|
||||
delete ret;
|
||||
}
|
||||
catch (...) {
|
||||
}
|
||||
}
|
||||
result = Source.isTouched() ||
|
||||
LineWidth.isTouched() ||
|
||||
FontSize.isTouched() ||
|
||||
Direction.isTouched() ||
|
||||
Color.isTouched() ||
|
||||
LineStyle.isTouched() ||
|
||||
LineSpacing.isTouched();
|
||||
}
|
||||
TechDraw::DrawViewSymbol::onChanged(prop);
|
||||
if ((bool) result) {
|
||||
return result;
|
||||
}
|
||||
return DrawViewSymbol::mustExecute();
|
||||
}
|
||||
|
||||
|
||||
|
||||
App::DocumentObjectExecReturn *DrawViewDraft::execute(void)
|
||||
{
|
||||
// Base::Console().Message("DVDr::execute() \n");
|
||||
if (!keepUpdated()) {
|
||||
return App::DocumentObject::StdReturn;
|
||||
}
|
||||
@@ -125,7 +125,7 @@ App::DocumentObjectExecReturn *DrawViewDraft::execute(void)
|
||||
Base::Interpreter().runStringArg("App.activeDocument().%s.Symbol = '%s' + svgBody + '%s'",
|
||||
FeatName.c_str(),svgHead.c_str(),svgTail.c_str());
|
||||
}
|
||||
requestPaint();
|
||||
// requestPaint();
|
||||
return DrawView::execute();
|
||||
}
|
||||
|
||||
|
||||
@@ -61,11 +61,14 @@ public:
|
||||
virtual const char* getViewProviderName(void) const override {
|
||||
return "TechDrawGui::ViewProviderDraft";
|
||||
}
|
||||
|
||||
virtual short mustExecute() const override;
|
||||
|
||||
void Restore(Base::XMLReader &reader) override;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void onChanged(const App::Property* prop) override;
|
||||
/* virtual void onChanged(const App::Property* prop) override;*/
|
||||
Base::BoundBox3d bbox;
|
||||
std::string getSVGHead(void);
|
||||
std::string getSVGTail(void);
|
||||
|
||||
@@ -66,6 +66,7 @@ DrawViewSymbol::~DrawViewSymbol()
|
||||
|
||||
void DrawViewSymbol::onChanged(const App::Property* prop)
|
||||
{
|
||||
// Base::Console().Message("DVS::onChanged(%s) \n",prop->getName());
|
||||
if (prop == &Symbol) {
|
||||
if (!isRestoring()) {
|
||||
//this pulls the initial values from svg into editabletexts
|
||||
@@ -83,7 +84,7 @@ void DrawViewSymbol::onChanged(const App::Property* prop)
|
||||
tbegin = twhat[0].second;
|
||||
}
|
||||
EditableTexts.setValues(eds);
|
||||
requestPaint();
|
||||
// requestPaint();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -92,6 +93,7 @@ void DrawViewSymbol::onChanged(const App::Property* prop)
|
||||
|
||||
App::DocumentObjectExecReturn *DrawViewSymbol::execute(void)
|
||||
{
|
||||
// Base::Console().Message("DVS::execute() \n");
|
||||
if (!keepUpdated()) {
|
||||
return App::DocumentObject::StdReturn;
|
||||
}
|
||||
@@ -120,7 +122,7 @@ App::DocumentObjectExecReturn *DrawViewSymbol::execute(void)
|
||||
|
||||
}
|
||||
Symbol.setValue(newsvg);
|
||||
requestPaint();
|
||||
// requestPaint();
|
||||
return DrawView::execute();
|
||||
}
|
||||
|
||||
|
||||
@@ -239,14 +239,18 @@ MDIViewPage* ViewProviderDrawingView::getMDIViewPage() const
|
||||
|
||||
void ViewProviderDrawingView::onGuiRepaint(const TechDraw::DrawView* dv)
|
||||
{
|
||||
// Base::Console().Message("VPDV::onGuiRepaint(%s)\n",dv->getNameInDocument());
|
||||
if (dv == getViewObject()) {
|
||||
QGIView* qgiv = getQView();
|
||||
if (qgiv) {
|
||||
qgiv->updateView(true);
|
||||
} else { //we are not part of the Gui page yet. ask page to add us.
|
||||
MDIViewPage* page = getMDIViewPage();
|
||||
if (page != nullptr) {
|
||||
page->addView(dv);
|
||||
if (!dv->isRemoving() &&
|
||||
!dv->isRestoring()) {
|
||||
QGIView* qgiv = getQView();
|
||||
if (qgiv) {
|
||||
qgiv->updateView(true);
|
||||
} else { //we are not part of the Gui page yet. ask page to add us.
|
||||
MDIViewPage* page = getMDIViewPage();
|
||||
if (page != nullptr) {
|
||||
page->addView(dv);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user