Extensions: Fix visibility restore issue

This commit is contained in:
Stefan Tröger 2016-08-28 12:48:08 +02:00 committed by wmayer
parent ed32752674
commit ab692a4c08
5 changed files with 8 additions and 16 deletions

View File

@ -612,9 +612,9 @@ void ViewProvider::dropObject(App::DocumentObject* obj) {
void ViewProvider::Restore(Base::XMLReader& reader) {
auto vector = getExtensionsDerivedFromType<Gui::ViewProviderExtension>();
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) {

View File

@ -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

View File

@ -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;}

View File

@ -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<App::GroupExtension>();
const std::vector<App::DocumentObject*> & 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<App::GroupExtension>();
@ -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)

View File

@ -51,7 +51,6 @@ public:
virtual void extensionShow(void) override;
virtual bool extensionOnDelete(const std::vector<std::string> &) override;
virtual void extensionRestore(Base::XMLReader& reader);
private:
bool visible; // helper variable