diff --git a/src/Gui/Application.cpp b/src/Gui/Application.cpp index 2e812f2bdaa1..dd0a5df988da 100644 --- a/src/Gui/Application.cpp +++ b/src/Gui/Application.cpp @@ -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(); diff --git a/src/Gui/ViewProviderExtension.cpp b/src/Gui/ViewProviderExtension.cpp index 4b6f677744e6..784ac76ebbe0 100644 --- a/src/Gui/ViewProviderExtension.cpp +++ b/src/Gui/ViewProviderExtension.cpp @@ -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; +} \ No newline at end of file diff --git a/src/Gui/ViewProviderExtension.h b/src/Gui/ViewProviderExtension.h index ae8e0d75e904..d69e44a0d4ba 100644 --- a/src/Gui/ViewProviderExtension.h +++ b/src/Gui/ViewProviderExtension.h @@ -85,6 +85,31 @@ class GuiExport ViewProviderExtension : public App::Extension 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 ViewProviderExtensionPythonT : public ExtensionT +{ + PROPERTY_HEADER(Gui::ViewProviderExtensionPythonT); + +public: + typedef ExtensionT Inherited; + + ViewProviderExtensionPythonT() { + ExtensionT::m_isPythonExtension = true; + + ADD_PROPERTY(Proxy,(Py::Object())); + } + virtual ~ViewProviderExtensionPythonT() { + } + + App::PropertyPythonObject Proxy; +}; + +typedef ViewProviderExtensionPythonT ViewProviderExtensionPython; + +} //Gui #endif // GUI_VIEWPROVIDEREXTENSION_H diff --git a/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp b/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp index 217f73bd135c..ba532f0cb358 100644 --- a/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp +++ b/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp @@ -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; } \ No newline at end of file diff --git a/src/Gui/ViewProviderGeoFeatureGroupExtension.h b/src/Gui/ViewProviderGeoFeatureGroupExtension.h index 575a4e39967d..e5dc29e0dad9 100644 --- a/src/Gui/ViewProviderGeoFeatureGroupExtension.h +++ b/src/Gui/ViewProviderGeoFeatureGroupExtension.h @@ -62,6 +62,8 @@ class GuiExport ViewProviderGeoFeatureGroupExtension : public ViewProviderGroupE SoGroup *pcGroupChildren; }; +typedef ViewProviderExtensionPythonT ViewProviderGeoFeatureGroupExtensionPython; + } //namespace Gui #endif // GUI_VIEWPROVIDERGEOFEATUREGROUPEXTENSION_H diff --git a/src/Gui/ViewProviderGroupExtension.cpp b/src/Gui/ViewProviderGroupExtension.cpp index 085ac38748b1..11ded42ac6a2 100644 --- a/src/Gui/ViewProviderGroupExtension.cpp +++ b/src/Gui/ViewProviderGroupExtension.cpp @@ -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; +} \ No newline at end of file diff --git a/src/Gui/ViewProviderGroupExtension.h b/src/Gui/ViewProviderGroupExtension.h index 93dcd9a0e365..a77c033a29f8 100644 --- a/src/Gui/ViewProviderGroupExtension.h +++ b/src/Gui/ViewProviderGroupExtension.h @@ -58,6 +58,8 @@ class GuiExport ViewProviderGroupExtension : public ViewProviderExtension std::vector nodes; }; +typedef ViewProviderExtensionPythonT ViewProviderGroupExtensionPython; + } //namespace Gui #endif // GUI_VIEWPROVIDERGROUPEXTENSION_H diff --git a/src/Gui/ViewProviderOriginGroupExtension.cpp b/src/Gui/ViewProviderOriginGroupExtension.cpp index 02b91bd3503e..e22121b23c94 100644 --- a/src/Gui/ViewProviderOriginGroupExtension.cpp +++ b/src/Gui/ViewProviderOriginGroupExtension.cpp @@ -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; +} \ No newline at end of file diff --git a/src/Gui/ViewProviderOriginGroupExtension.h b/src/Gui/ViewProviderOriginGroupExtension.h index 8647978192f3..fb5bb11b0b13 100644 --- a/src/Gui/ViewProviderOriginGroupExtension.h +++ b/src/Gui/ViewProviderOriginGroupExtension.h @@ -60,6 +60,8 @@ class GuiExport ViewProviderOriginGroupExtension : public ViewProviderGeoFeature boost::signals::connection connectChangedObjectGui; }; +typedef ViewProviderExtensionPythonT ViewProviderOriginGroupExtensionPython; + } //namespace Gui #endif // GUI_VIEWPROVIDERORIGINGROUPEXTENSION_H