Gui: improve deletion handling in origin feature
This commit is contained in:
@@ -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<std::string> &) {
|
||||
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() );
|
||||
}
|
||||
|
||||
@@ -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<App::OriginGroupExtension>();
|
||||
auto* group = owner->getExtensionByType<App::OriginGroupExtension>();
|
||||
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 <Gui::ViewProviderOrigin *> ( 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;
|
||||
|
||||
Reference in New Issue
Block a user