From 51ab8caace237b9897c6d133ddaeccb368707914 Mon Sep 17 00:00:00 2001 From: "Zheng, Lei" Date: Fri, 12 Jul 2019 08:53:26 +0800 Subject: [PATCH] Gui: improve deletion handling in origin feature --- src/Gui/ViewProviderOrigin.cpp | 12 ++++++++---- src/Gui/ViewProviderOriginGroupExtension.cpp | 16 ++++++++-------- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/Gui/ViewProviderOrigin.cpp b/src/Gui/ViewProviderOrigin.cpp index 7bce98c617..d2e3038849 100644 --- a/src/Gui/ViewProviderOrigin.cpp +++ b/src/Gui/ViewProviderOrigin.cpp @@ -64,10 +64,11 @@ PROPERTY_SOURCE(Gui::ViewProviderOrigin, Gui::ViewProviderDocumentObject) */ ViewProviderOrigin::ViewProviderOrigin() { - ADD_PROPERTY_TYPE ( Size, (Base::Vector3d(10,10,10)), 0, App::Prop_ReadOnly, - QT_TRANSLATE_NOOP("App::Property", "The displayed size of the origin")); + ADD_PROPERTY_TYPE ( Size, (Base::Vector3d(10,10,10)), 0, App::Prop_None, + QT_TRANSLATE_NOOP("App::Property", "The displayed size of the origin")); + Size.setStatus(App::Property::ReadOnly, true); - sPixmap = "CoordinateSystem"; + sPixmap = "Std_CoordinateSystem"; Visibility.setValue(false); pcGroupChildren = new SoGroup(); @@ -212,7 +213,10 @@ bool ViewProviderOrigin::onDelete(const std::vector &) { return false; } - for (auto obj: origin->OriginFeatures.getValues() ) { + auto objs = origin->OriginFeatures.getValues(); + origin->OriginFeatures.setValues({}); + + for (auto obj: objs ) { Gui::Command::doCommand( Gui::Command::Doc, "App.getDocument(\"%s\").removeObject(\"%s\")", obj->getDocument()->getName(), obj->getNameInDocument() ); } diff --git a/src/Gui/ViewProviderOriginGroupExtension.cpp b/src/Gui/ViewProviderOriginGroupExtension.cpp index 02577a0253..450360fddc 100644 --- a/src/Gui/ViewProviderOriginGroupExtension.cpp +++ b/src/Gui/ViewProviderOriginGroupExtension.cpp @@ -134,12 +134,14 @@ void ViewProviderOriginGroupExtension::slotChangedObjectGui ( const Gui::ViewPro } void ViewProviderOriginGroupExtension::updateOriginSize () { + auto owner = getExtendedViewProvider()->getObject(); - if(getExtendedViewProvider()->getObject()->isRemoving() || - getExtendedViewProvider()->getObject()->getDocument()->testStatus(App::Document::Restoring)) + if(!owner->getNameInDocument() || + owner->isRemoving() || + owner->getDocument()->testStatus(App::Document::Restoring)) return; - auto* group = getExtendedViewProvider()->getObject()->getExtensionByType(); + auto* group = owner->getExtensionByType(); if(!group) return; @@ -152,18 +154,16 @@ void ViewProviderOriginGroupExtension::updateOriginSize () { Gui::ViewProvider *vp = Gui::Application::Instance->getViewProvider(origin); if (!vp) { - throw Base::RuntimeError ("No view provider linked to the Origin"); + Base::Console().Error ("No view provider linked to the Origin\n"); + return; } assert ( vp->isDerivedFrom ( Gui::ViewProviderOrigin::getClassTypeId () ) ); vpOrigin = static_cast ( vp ); } catch (const Base::Exception &ex) { - // if is restoring it is normal that the origin property is null until after restored, so no need to report this. - if(!getExtendedViewProvider()->getDocument()->getDocument()->testStatus(App::Document::Restoring)) - Base::Console().Error ("%s\n", ex.what() ); + Base::Console().Error ("%s\n", ex.what() ); return; } - Gui::Document* gdoc = getExtendedViewProvider()->getDocument(); if(!gdoc) return;