Extensions: Add ViewProvider extension python types

This commit is contained in:
Stefan Tröger
2016-08-28 11:44:49 +02:00
committed by wmayer
parent 51632426a0
commit ed32752674
9 changed files with 65 additions and 1 deletions

View File

@@ -1472,9 +1472,13 @@ void Application::initTypes(void)
// View Provider
Gui::ViewProvider ::init();
Gui::ViewProviderExtension ::init();
Gui::ViewProviderExtensionPython ::init();
Gui::ViewProviderGroupExtension ::init();
Gui::ViewProviderGroupExtensionPython ::init();
Gui::ViewProviderGeoFeatureGroupExtension ::init();
Gui::ViewProviderGeoFeatureGroupExtensionPython::init();
Gui::ViewProviderOriginGroupExtension ::init();
Gui::ViewProviderOriginGroupExtensionPython ::init();
Gui::ViewProviderExtern ::init();
Gui::ViewProviderDocumentObject ::init();
Gui::ViewProviderFeature ::init();

View File

@@ -61,3 +61,9 @@ void ViewProviderExtension::extensionUpdateData(const App::Property*) {
}
namespace Gui {
PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderExtensionPython, Gui::ViewProviderExtension)
// explicit template instantiation
template class GuiExport ViewProviderExtensionPythonT<ViewProviderExtension>;
}

View File

@@ -85,6 +85,31 @@ private:
Gui::ViewProviderDocumentObject* m_viewBase = nullptr;
};
} //App
/**
* Generic Python extension class which allows to behave every extension
* derived class as Python extension -- simply by subclassing.
*/
template <class ExtensionT>
class ViewProviderExtensionPythonT : public ExtensionT
{
PROPERTY_HEADER(Gui::ViewProviderExtensionPythonT<ExtensionT>);
public:
typedef ExtensionT Inherited;
ViewProviderExtensionPythonT() {
ExtensionT::m_isPythonExtension = true;
ADD_PROPERTY(Proxy,(Py::Object()));
}
virtual ~ViewProviderExtensionPythonT() {
}
App::PropertyPythonObject Proxy;
};
typedef ViewProviderExtensionPythonT<Gui::ViewProviderExtension> ViewProviderExtensionPython;
} //Gui
#endif // GUI_VIEWPROVIDEREXTENSION_H

View File

@@ -89,4 +89,12 @@ void ViewProviderGeoFeatureGroupExtension::extensionUpdateData(const App::Proper
} else {
ViewProviderGroupExtension::extensionUpdateData ( prop );
}
}
namespace Gui {
PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGeoFeatureGroupExtensionPython, Gui::ViewProviderGeoFeatureGroupExtension)
// explicit template instantiation
template class GuiExport ViewProviderExtensionPythonT<ViewProviderGeoFeatureGroupExtension>;
}

View File

@@ -62,6 +62,8 @@ protected:
SoGroup *pcGroupChildren;
};
typedef ViewProviderExtensionPythonT<Gui::ViewProviderGeoFeatureGroupExtension> ViewProviderGeoFeatureGroupExtensionPython;
} //namespace Gui
#endif // GUI_VIEWPROVIDERGEOFEATUREGROUPEXTENSION_H

View File

@@ -204,3 +204,10 @@ void ViewProviderGroupExtension::extensionRestore(Base::XMLReader& reader) {
getExtendedViewProvider()->Visibility.setStatus(App::Property::User1, false); // unset
}
namespace Gui {
PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGroupExtensionPython, Gui::ViewProviderGroupExtension)
// explicit template instantiation
template class GuiExport ViewProviderExtensionPythonT<ViewProviderGroupExtension>;
}

View File

@@ -58,6 +58,8 @@ private:
std::vector<ViewProvider*> nodes;
};
typedef ViewProviderExtensionPythonT<Gui::ViewProviderGroupExtension> ViewProviderGroupExtensionPython;
} //namespace Gui
#endif // GUI_VIEWPROVIDERGROUPEXTENSION_H

View File

@@ -190,3 +190,11 @@ void ViewProviderOriginGroupExtension::updateOriginSize () {
vpOrigin->Size.setValue ( size * 1.3 );
}
namespace Gui {
PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderOriginGroupExtensionPython, Gui::ViewProviderOriginGroupExtension)
// explicit template instantiation
template class GuiExport ViewProviderExtensionPythonT<ViewProviderOriginGroupExtension>;
}

View File

@@ -60,6 +60,8 @@ private:
boost::signals::connection connectChangedObjectGui;
};
typedef ViewProviderExtensionPythonT<Gui::ViewProviderOriginGroupExtension> ViewProviderOriginGroupExtensionPython;
} //namespace Gui
#endif // GUI_VIEWPROVIDERORIGINGROUPEXTENSION_H