diff --git a/src/Gui/ViewProvider.cpp b/src/Gui/ViewProvider.cpp index 01496d7c1..2f0e67617 100644 --- a/src/Gui/ViewProvider.cpp +++ b/src/Gui/ViewProvider.cpp @@ -612,9 +612,9 @@ void ViewProvider::dropObject(App::DocumentObject* obj) { void ViewProvider::Restore(Base::XMLReader& reader) { - auto vector = getExtensionsDerivedFromType(); - for(Gui::ViewProviderExtension* ext : vector) - ext->extensionRestore(reader); + setStatus(Gui::isRestoring, true); + TransactionalObject::Restore(reader); + setStatus(Gui::isRestoring, false); } void ViewProvider::updateData(const App::Property* prop) { diff --git a/src/Gui/ViewProvider.h b/src/Gui/ViewProvider.h index 7b54a2757..860657bef 100644 --- a/src/Gui/ViewProvider.h +++ b/src/Gui/ViewProvider.h @@ -71,7 +71,8 @@ class ObjectItem; enum ViewStatus { UpdateData = 0, - Detach = 1 + Detach = 1, + isRestoring = 2 }; @@ -312,6 +313,7 @@ public: //restoring the object from document: this may itnerest extensions, hence call them virtual void Restore(Base::XMLReader& reader); + bool isRestoring() {return testStatus(Gui::isRestoring);}; /** @name Display mask modes diff --git a/src/Gui/ViewProviderExtension.h b/src/Gui/ViewProviderExtension.h index d69e44a0d..9a2cc0239 100644 --- a/src/Gui/ViewProviderExtension.h +++ b/src/Gui/ViewProviderExtension.h @@ -69,8 +69,6 @@ public: /// Shows the view provider virtual void extensionShow(void) { }; - virtual void extensionRestore(Base::XMLReader& reader) { }; - virtual SoSeparator* extensionGetFrontRoot(void) const {return nullptr;} virtual SoGroup* extensionGetChildRoot(void) const {return nullptr;} virtual SoSeparator* extensionGetBackRoot(void) const {return nullptr;} diff --git a/src/Gui/ViewProviderGroupExtension.cpp b/src/Gui/ViewProviderGroupExtension.cpp index 11ded42ac..5415ccf56 100644 --- a/src/Gui/ViewProviderGroupExtension.cpp +++ b/src/Gui/ViewProviderGroupExtension.cpp @@ -140,7 +140,7 @@ void ViewProviderGroupExtension::extensionShow(void) { // when reading the Visibility property from file then do not hide the // objects of this group because they have stored their visibility status, too - if (!getExtendedViewProvider()->Visibility.testStatus(App::Property::User1) && !this->visible) { + if (!getExtendedViewProvider()->isRestoring() && !this->visible) { auto* group = getExtendedViewProvider()->getObject()->getExtensionByType(); const std::vector & links = group->Group.getValues(); @@ -160,7 +160,7 @@ void ViewProviderGroupExtension::extensionHide(void) { // when reading the Visibility property from file then do not hide the // objects of this group because they have stored their visibility status, too - if (!getExtendedViewProvider()->Visibility.testStatus(App::Property::User1) && this->visible) { + if (!getExtendedViewProvider()->isRestoring() && this->visible) { auto* group = getExtendedViewProvider()->getObject()->getExtensionByType(); @@ -197,13 +197,6 @@ bool ViewProviderGroupExtension::extensionOnDelete(const std::vector< std::strin return true; } -void ViewProviderGroupExtension::extensionRestore(Base::XMLReader& reader) { - - getExtendedViewProvider()->Visibility.setStatus(App::Property::User1, true); // tmp. set - ViewProviderExtension::extensionRestore(reader); - getExtendedViewProvider()->Visibility.setStatus(App::Property::User1, false); // unset -} - namespace Gui { PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGroupExtensionPython, Gui::ViewProviderGroupExtension) diff --git a/src/Gui/ViewProviderGroupExtension.h b/src/Gui/ViewProviderGroupExtension.h index a77c033a2..7ead76f58 100644 --- a/src/Gui/ViewProviderGroupExtension.h +++ b/src/Gui/ViewProviderGroupExtension.h @@ -51,7 +51,6 @@ public: virtual void extensionShow(void) override; virtual bool extensionOnDelete(const std::vector &) override; - virtual void extensionRestore(Base::XMLReader& reader); private: bool visible; // helper variable