diff --git a/src/App/DocumentObjectExtension.cpp b/src/App/DocumentObjectExtension.cpp index 9c6bd5bff..9976fde10 100644 --- a/src/App/DocumentObjectExtension.cpp +++ b/src/App/DocumentObjectExtension.cpp @@ -33,7 +33,7 @@ using namespace App; -PROPERTY_SOURCE(App::DocumentObjectExtension, App::Extension) +EXTENSION_PROPERTY_SOURCE(App::DocumentObjectExtension, App::Extension) DocumentObjectExtension::DocumentObjectExtension() { diff --git a/src/App/DocumentObjectExtension.h b/src/App/DocumentObjectExtension.h index eac9af906..7cba330a0 100644 --- a/src/App/DocumentObjectExtension.h +++ b/src/App/DocumentObjectExtension.h @@ -38,7 +38,7 @@ class AppExport DocumentObjectExtension : public App::Extension //The cass does not have properties itself, but it is important to provide the property access //functions. see cpp file for details - PROPERTY_HEADER(App::DocumentObjectExtension ); + EXTENSION_PROPERTY_HEADER(App::DocumentObjectExtension ); public: diff --git a/src/App/DocumentObjectGroup.cpp b/src/App/DocumentObjectGroup.cpp index 818134018..3f52cb986 100644 --- a/src/App/DocumentObjectGroup.cpp +++ b/src/App/DocumentObjectGroup.cpp @@ -33,7 +33,7 @@ using namespace App; -PROPERTY_SOURCE_WITH_EXTENSIONS(App::DocumentObjectGroup, App::DocumentObject, (App::GroupExtension)) +PROPERTY_SOURCE_WITH_EXTENSIONS(App::DocumentObjectGroup, App::DocumentObject) DocumentObjectGroup::DocumentObjectGroup(void): DocumentObject(), GroupExtension() { diff --git a/src/App/DynamicProperty.cpp b/src/App/DynamicProperty.cpp index 8d691bdc5..a58b411d4 100644 --- a/src/App/DynamicProperty.cpp +++ b/src/App/DynamicProperty.cpp @@ -30,6 +30,7 @@ #include "Property.h" #include "PropertyContainer.h" #include "Application.h" +#include "ExtensionContainer.h" #include #include #include @@ -69,6 +70,10 @@ Property *DynamicProperty::getPropertyByName(const char* name) const std::map::const_iterator it = props.find(name); if (it != props.end()) return it->second.property; + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyByName(name); + return this->pc->PropertyContainer::getPropertyByName(name); } @@ -113,6 +118,10 @@ const char* DynamicProperty::getPropertyName(const Property* prop) const if (it->second.property == prop) return it->first.c_str(); } + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyName(prop); + return this->pc->PropertyContainer::getPropertyName(prop); } @@ -139,6 +148,10 @@ short DynamicProperty::getPropertyType(const Property* prop) const return attr; } } + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyType(prop); + return this->pc->PropertyContainer::getPropertyType(prop); } @@ -153,6 +166,10 @@ short DynamicProperty::getPropertyType(const char *name) const attr |= Prop_ReadOnly; return attr; } + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyType(name); + return this->pc->PropertyContainer::getPropertyType(name); } @@ -162,6 +179,10 @@ const char* DynamicProperty::getPropertyGroup(const Property* prop) const if (it->second.property == prop) return it->second.group.c_str(); } + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyGroup(prop); + return this->pc->PropertyContainer::getPropertyGroup(prop); } @@ -170,6 +191,10 @@ const char* DynamicProperty::getPropertyGroup(const char *name) const std::map::const_iterator it = props.find(name); if (it != props.end()) return it->second.group.c_str(); + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyGroup(name); + return this->pc->PropertyContainer::getPropertyGroup(name); } @@ -179,6 +204,10 @@ const char* DynamicProperty::getPropertyDocumentation(const Property* prop) cons if (it->second.property == prop) return it->second.doc.c_str(); } + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyDocumentation(prop); + return this->pc->PropertyContainer::getPropertyDocumentation(prop); } @@ -187,6 +216,10 @@ const char* DynamicProperty::getPropertyDocumentation(const char *name) const std::map::const_iterator it = props.find(name); if (it != props.end()) return it->second.doc.c_str(); + + if(this->pc->isDerivedFrom(App::ExtensionContainer::getClassTypeId())) + return static_cast(this->pc)->ExtensionContainer::getPropertyDocumentation(name); + return this->pc->PropertyContainer::getPropertyDocumentation(name); } diff --git a/src/App/Extension.cpp b/src/App/Extension.cpp index e63bfd59c..d99f0b49a 100644 --- a/src/App/Extension.cpp +++ b/src/App/Extension.cpp @@ -34,19 +34,15 @@ #include #include -/* We do not use a standart property macro for type initiation. The reason is that we want to expose all property functions, - * to allow the derived classes to access the private property data, but we do not want to have our - * property data a reference to the parent data. That is because the extension is used in a multi - * inheritance way, and hence our propertydata partent data would point to the same property data - * as any other parent of the inherited class. It makes more sense to create a total unrelated line - * of property datas which are added as additional parent to the extended class. +/* We do not use a standart property macro for type initiation. The reason is that we have the first + * PropertyData in the extension chain, there is no parent property data. */ TYPESYSTEM_SOURCE_P(App::Extension); -const App::PropertyData * App::Extension::getPropertyDataPtr(void){return &propertyData;} -const App::PropertyData & App::Extension::getPropertyData(void) const{return propertyData;} +const App::PropertyData * App::Extension::extensionGetPropertyDataPtr(void){return &propertyData;} +const App::PropertyData & App::Extension::extensionGetPropertyData(void) const{return propertyData;} App::PropertyData App::Extension::propertyData; void App::Extension::init(void){ - initSubclass(App::Extension::classTypeId, "App::Extension" , "App::PropertyContainer", &(App::Extension::create) ); + initSubclass(App::Extension::classTypeId, "App::Extension" , "Base::Persistence", &(App::Extension::create) ); } using namespace App; @@ -57,7 +53,6 @@ Extension::Extension() Extension::~Extension() { - Base::Console().Message("Delete extension\n"); if (!ExtensionPythonObject.is(Py::_None())){ // Remark: The API of Py::Object has been changed to set whether the wrapper owns the passed // Python object or not. In the constructor we forced the wrapper to own the object so we need @@ -82,6 +77,13 @@ void Extension::initExtension(ExtensionContainer* obj) { if(m_extensionType.isBad()) throw Base::Exception("Extension: Extension type not set"); + //all properties are initialised without PropertyContainer father. Now that we know it we can + //finaly finsih the property initialisation + std::vector list; + extensionGetPropertyData().getPropertyList(this, list); + for(Property* prop : list) + prop->setContainer(obj); + m_base = obj; m_base->registerExtension( m_extensionType, this ); } @@ -106,8 +108,62 @@ const char* Extension::name() { return std::string().c_str(); } + + +Property* Extension::extensionGetPropertyByName(const char* name) const { + + return extensionGetPropertyData().getPropertyByName(this, name); +} + +short int Extension::extensionGetPropertyType(const Property* prop) const { + + return extensionGetPropertyData().getType(this, prop); +} + +short int Extension::extensionGetPropertyType(const char* name) const { + + return extensionGetPropertyData().getType(this, name); +} + +const char* Extension::extensionGetPropertyName(const Property* prop) const { + + return extensionGetPropertyData().getName(this,prop); +} + +const char* Extension::extensionGetPropertyGroup(const Property* prop) const { + + return extensionGetPropertyData().getGroup(this,prop); +} + +const char* Extension::extensionGetPropertyGroup(const char* name) const { + + return extensionGetPropertyData().getGroup(this,name); +} + + +const char* Extension::extensionGetPropertyDocumentation(const Property* prop) const { + + return extensionGetPropertyData().getDocumentation(this, prop); +} + +const char* Extension::extensionGetPropertyDocumentation(const char* name) const { + + return extensionGetPropertyData().getDocumentation(this, name); +} + +void Extension::extensionGetPropertyList(std::vector< Property* >& List) const { + + extensionGetPropertyData().getPropertyList(this, List); +} + +void Extension::extensionGetPropertyMap(std::map< std::string, Property* >& Map) const { + + extensionGetPropertyData().getPropertyMap(this, Map); +} + + namespace App { -PROPERTY_SOURCE_TEMPLATE(App::ExtensionPython, App::ExtensionPython::Inherited) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(App::ExtensionPython, App::ExtensionPython::Inherited) // explicit template instantiation template class AppExport ExtensionPythonT; diff --git a/src/App/Extension.h b/src/App/Extension.h index 2029ca2f4..d4cdfc843 100644 --- a/src/App/Extension.h +++ b/src/App/Extension.h @@ -33,6 +33,35 @@ namespace App { class ExtensionContainer; +// init property stuff +#define EXTENSION_PROPERTY_HEADER(_class_) \ + TYPESYSTEM_HEADER(); \ +protected: \ + static const App::PropertyData * extensionGetPropertyDataPtr(void); \ + virtual const App::PropertyData &extensionGetPropertyData(void) const; \ +private: \ + static App::PropertyData propertyData + +#define EXTENSION_PROPERTY_SOURCE(_class_, _parentclass_) \ +TYPESYSTEM_SOURCE_P(_class_);\ +const App::PropertyData * _class_::extensionGetPropertyDataPtr(void){return &propertyData;} \ +const App::PropertyData & _class_::extensionGetPropertyData(void) const{return propertyData;} \ +App::PropertyData _class_::propertyData; \ +void _class_::init(void){\ + initSubclass(_class_::classTypeId, #_class_ , #_parentclass_, &(_class_::create) ); \ + _class_::propertyData.addParentPropertyData(_parentclass_::extensionGetPropertyDataPtr());\ +} + +#define EXTENSION_PROPERTY_SOURCE_TEMPLATE(_class_, _parentclass_) \ +TYPESYSTEM_SOURCE_TEMPLATE(_class_);\ +template<> App::PropertyData _class_::propertyData = App::PropertyData(); \ +template<> const App::PropertyData * _class_::extensionGetPropertyDataPtr(void){return &propertyData;} \ +template<> const App::PropertyData & _class_::extensionGetPropertyData(void) const{return propertyData;} \ +template<> void _class_::init(void){\ + initSubclass(_class_::classTypeId, #_class_ , #_parentclass_, &(_class_::create) ); \ + _class_::propertyData.addParentPropertyData(_parentclass_::extensionGetPropertyDataPtr());\ +} + /** * @brief Base class for all extension that can be added to a DocumentObject * @@ -41,15 +70,22 @@ class ExtensionContainer; * * Extensions are like every other FreeCAD object and based on properties. All information storage * and persistance should be achieved by use of those. Additional any number of methods can be - * added to provide funtionality around the proerties. The only difference to normal objects is that - * extensions must derive from the Extension class and that the tye needs to be initialised. This - * works as simple as + * added to provide funtionality around the properties. There are 3 samll difference to normal objects: + * 1. They must be derived from Extension class + * 2. Properties must be handled with special extension macros + * 3. Extensions must be initialised + * This works as simple as * @code * class MyExtension : public Extension { + * EXTENSION_PROPERTY_HEADER(MyExtension); + * PropertyInt MyProp; * virtual bool overridableMethod(DocumentObject* obj) {}; * }; * + * EXTENSION_PROPERTY_SOURCE(App::MyExtension, App::Extension) * MyExtension::MyExtension() { + * + * EXTENSION_ADD_PROPERTY(MyProp, (0)) * * initExtension(MyExtension::getClassTypeId()); * } * typedef ExtensionPythonT MyExtensionPython; @@ -125,40 +161,79 @@ class ExtensionContainer; * exension creators responsibility to ensure full implementation. * */ -class AppExport Extension : public virtual App::PropertyContainer +class AppExport Extension : public virtual Base::Persistence { - //The cass does not have properties itself, but it is important to provide the property access - //functions. see cpp file for details - PROPERTY_HEADER(App::Extension); + //The cass does not have properties itself, but it is important to provide the property access + //functions. see cpp file for details + EXTENSION_PROPERTY_HEADER(App::Extension); public: - Extension(); - virtual ~Extension(); + Extension(); + virtual ~Extension(); - void initExtension(App::ExtensionContainer* obj); + void initExtension(App::ExtensionContainer* obj); - App::ExtensionContainer* getExtendedContainer() {return m_base;}; - const App::ExtensionContainer* getExtendedContainer() const {return m_base;}; + App::ExtensionContainer* getExtendedContainer() {return m_base;}; + const App::ExtensionContainer* getExtendedContainer() const {return m_base;}; - //get extension name without namespace - const char* name(); - - bool isPythonExtension() {return m_isPythonExtension;}; + //get extension name without namespace + const char* name(); + + bool isPythonExtension() {return m_isPythonExtension;}; - virtual PyObject* getExtensionPyObject(void); + virtual PyObject* getExtensionPyObject(void); + + + /** @name Access properties */ + //@{ + /// find a property by its name + virtual Property *extensionGetPropertyByName(const char* name) const; + /// get the name of a property + virtual const char* extensionGetPropertyName(const Property* prop) const; + /// get all properties of the class (including properties of the parent) + virtual void extensionGetPropertyMap(std::map &Map) const; + /// get all properties of the class (including properties of the parent) + virtual void extensionGetPropertyList(std::vector &List) const; + + /// get the Type of a Property + virtual short extensionGetPropertyType(const Property* prop) const; + /// get the Type of a named Property + virtual short extensionGetPropertyType(const char *name) const; + /// get the Group of a Property + virtual const char* extensionGetPropertyGroup(const Property* prop) const; + /// get the Group of a named Property + virtual const char* extensionGetPropertyGroup(const char *name) const; + /// get the Group of a Property + virtual const char* extensionGetPropertyDocumentation(const Property* prop) const; + /// get the Group of a named Property + virtual const char* extensionGetPropertyDocumentation(const char *name) const; + //@} protected: - void initExtension(Base::Type type); - bool m_isPythonExtension = false; - Py::Object ExtensionPythonObject; + void initExtension(Base::Type type); + bool m_isPythonExtension = false; + Py::Object ExtensionPythonObject; private: - Base::Type m_extensionType; - App::ExtensionContainer* m_base = nullptr; + Base::Type m_extensionType; + App::ExtensionContainer* m_base = nullptr; }; +// Property define +#define EXTENSION_ADD_PROPERTY(_prop_, _defaultval_) \ + do { \ + this->_prop_.setValue _defaultval_;\ + propertyData.addProperty(static_cast(this), #_prop_, &this->_prop_); \ + } while (0) + +#define EXTENSION_ADD_PROPERTY_TYPE(_prop_, _defaultval_, _group_,_type_,_Docu_) \ + do { \ + this->_prop_.setValue _defaultval_;\ + propertyData.addProperty(static_cast(this), #_prop_, &this->_prop_, (_group_),(_type_),(_Docu_)); \ + } while (0) + /** * Generic Python extension class which allows to behave every extension @@ -167,7 +242,7 @@ private: template class ExtensionPythonT : public ExtensionT { - PROPERTY_HEADER(App::ExtensionPythonT); + EXTENSION_PROPERTY_HEADER(App::ExtensionPythonT); public: typedef ExtensionT Inherited; @@ -175,7 +250,7 @@ public: ExtensionPythonT() { ExtensionT::m_isPythonExtension = true; - ADD_PROPERTY(ExtensionProxy,(Py::Object())); + EXTENSION_ADD_PROPERTY(ExtensionProxy,(Py::Object())); } virtual ~ExtensionPythonT() { } @@ -185,12 +260,12 @@ public: typedef ExtensionPythonT ExtensionPython; -//helper macros to define python extensions +// Helper macros to define python extensions #define EXTENSION_PROXY_FIRST(function) \ Base::PyGILStateLocker lock;\ Py::Object result;\ try {\ - Property* proxy = this->getPropertyByName("ExtensionProxy");\ + Property* proxy = this->extensionGetPropertyByName("ExtensionProxy");\ if (proxy && proxy->getTypeId() == PropertyPythonObject::getClassTypeId()) {\ Py::Object feature = static_cast(proxy)->getValue();\ if (feature.hasAttr(std::string("function"))) {\ diff --git a/src/App/ExtensionContainer.cpp b/src/App/ExtensionContainer.cpp index b3329f118..6fd4e9487 100644 --- a/src/App/ExtensionContainer.cpp +++ b/src/App/ExtensionContainer.cpp @@ -133,18 +133,14 @@ std::vector< Extension* > ExtensionContainer::getExtensionsDerivedFrom(Base::Typ void ExtensionContainer::getPropertyList(std::vector< Property* >& List) const { App::PropertyContainer::getPropertyList(List); - for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) - entry.second->getPropertyList(List); - } + for(auto entry : _extensions) + entry.second->extensionGetPropertyList(List); } void ExtensionContainer::getPropertyMap(std::map< std::string, Property* >& Map) const { App::PropertyContainer::getPropertyMap(Map); - for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) - entry.second->getPropertyMap(Map); - } + for(auto entry : _extensions) + entry.second->extensionGetPropertyMap(Map); } Property* ExtensionContainer::getPropertyByName(const char* name) const { @@ -153,11 +149,9 @@ Property* ExtensionContainer::getPropertyByName(const char* name) const { return prop; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()){ - auto prop = entry.second->getPropertyByName(name); - if(prop) - return prop; - } + auto prop = entry.second->extensionGetPropertyByName(name); + if(prop) + return prop; } return nullptr; @@ -170,11 +164,9 @@ short int ExtensionContainer::getPropertyType(const Property* prop) const { return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyType(prop); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyType(prop); + if(res != 0) + return res; } return 0; @@ -187,11 +179,9 @@ short int ExtensionContainer::getPropertyType(const char* name) const { return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyType(name); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyType(name); + if(res != 0) + return res; } return 0; @@ -205,11 +195,9 @@ const char* ExtensionContainer::getPropertyName(const Property* prop) const { return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyName(prop); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyName(prop); + if(res != 0) + return res; } return 0; @@ -222,11 +210,9 @@ const char* ExtensionContainer::getPropertyGroup(const Property* prop) const { return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyGroup(prop); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyGroup(prop); + if(res != 0) + return res; } return 0; @@ -239,11 +225,9 @@ const char* ExtensionContainer::getPropertyGroup(const char* name) const { return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyGroup(name); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyGroup(name); + if(res != 0) + return res; } return 0; @@ -257,11 +241,9 @@ const char* ExtensionContainer::getPropertyDocumentation(const Property* prop) c return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyDocumentation(prop); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyDocumentation(prop); + if(res != 0) + return res; } return 0; @@ -274,11 +256,9 @@ const char* ExtensionContainer::getPropertyDocumentation(const char* name) const return res; for(auto entry : _extensions) { - if(entry.second->isPythonExtension()) { - res = entry.second->getPropertyDocumentation(name); - if(res != 0) - return res; - } + res = entry.second->extensionGetPropertyDocumentation(name); + if(res != 0) + return res; } return 0; @@ -294,7 +274,7 @@ void ExtensionContainer::onChanged(const Property* prop) { //if a extension gets registered from python. This is only for synchronisation. if(strcmp(prop->getName(), "Proxy")) { for(auto entry : _extensions) - entry.second->getExtensionPyObject().setValue(static_cast(prop)->getValue()); + entry.second->extensionGetExtensionPyObject().setValue(static_cast(prop)->getValue()); }*/ App::PropertyContainer::onChanged(prop); diff --git a/src/App/ExtensionContainer.h b/src/App/ExtensionContainer.h index 1eeb09d00..0cbbae40d 100644 --- a/src/App/ExtensionContainer.h +++ b/src/App/ExtensionContainer.h @@ -30,8 +30,6 @@ #include "DynamicProperty.h" #include -#include - namespace App { /** @@ -73,14 +71,18 @@ namespace App { * access the universal extension API. As DocumentObject itself derives from ExtensionContainer this * should be the case automatically in most circumstances. * - * Note that a small boilerplate change is needed next to the multiple inheritance when adding - * extensions from c++. It must be ensured that the type registration is aware of the extensions. + * Note that two small boilerplate changes are needed next to the multiple inheritance when adding + * extensions from c++. + * 1. It must be ensured that the property and type registration is aware of the extensions by using + * special macros. + * 2. The extensions need to be initialised in the constructor + * * Here a working example: * @code * class AppExport Part : public App::DocumentObject, public App::FirstExtension, public App::SecondExtension { * PROPERTY_HEADER_WITH_EXTENSIONS(App::Part); * }; - * PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject, (App::FirstExtension)(App::SecondExtension)) + * PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject) * Part::Part(void) { * FirstExtension::initExtension(this); * SecondExtension::initExtension(this); @@ -107,7 +109,7 @@ namespace App { * * For information on howto create extension see the documentation of Extension */ -class AppExport ExtensionContainer : public virtual App::PropertyContainer +class AppExport ExtensionContainer : public App::PropertyContainer { TYPESYSTEM_HEADER(); @@ -179,24 +181,18 @@ private: std::map _extensions; }; - #define PROPERTY_HEADER_WITH_EXTENSIONS(_class_) \ PROPERTY_HEADER(_class) -//helper macro to add parent to property data -#define ADD_PARENT(r, data, elem)\ - data::propertyData.parentPropertyData.push_back(elem::getPropertyDataPtr()); - -/// -#define PROPERTY_SOURCE_WITH_EXTENSIONS(_class_, _parentclass_, _extensions_) \ +/// We make sur that the PropertyData of the container is not connected to the one of the extension +#define PROPERTY_SOURCE_WITH_EXTENSIONS(_class_, _parentclass_) \ TYPESYSTEM_SOURCE_P(_class_);\ const App::PropertyData * _class_::getPropertyDataPtr(void){return &propertyData;} \ const App::PropertyData & _class_::getPropertyData(void) const{return propertyData;} \ App::PropertyData _class_::propertyData; \ void _class_::init(void){\ initSubclass(_class_::classTypeId, #_class_ , #_parentclass_, &(_class_::create) ); \ - ADD_PARENT(0, _class_, _parentclass_)\ - BOOST_PP_SEQ_FOR_EACH(ADD_PARENT, _class_, _extensions_)\ + _class_::propertyData.addParentPropertyData(_parentclass_::getPropertyDataPtr());\ } } //App diff --git a/src/App/ExtensionContainerPyImp.cpp b/src/App/ExtensionContainerPyImp.cpp index d218ae9af..afe3e386c 100644 --- a/src/App/ExtensionContainerPyImp.cpp +++ b/src/App/ExtensionContainerPyImp.cpp @@ -152,7 +152,7 @@ PyObject* ExtensionContainerPy::addExtension(PyObject *args) { ext->initExtension(getExtensionContainerPtr()); //set the proxy to allow python overrides - App::Property* pp = ext->getPropertyByName("ExtensionProxy"); + App::Property* pp = ext->extensionGetPropertyByName("ExtensionProxy"); if(!pp) { std::stringstream str; str << "Accessing the proxy property failed!" << std::ends; diff --git a/src/App/GeoFeatureGroupExtension.cpp b/src/App/GeoFeatureGroupExtension.cpp index 180368f94..243aed3f7 100644 --- a/src/App/GeoFeatureGroupExtension.cpp +++ b/src/App/GeoFeatureGroupExtension.cpp @@ -36,7 +36,7 @@ using namespace App; -PROPERTY_SOURCE(App::GeoFeatureGroupExtension, App::GroupExtension) +EXTENSION_PROPERTY_SOURCE(App::GeoFeatureGroupExtension, App::GroupExtension) //=========================================================================== @@ -47,7 +47,7 @@ GeoFeatureGroupExtension::GeoFeatureGroupExtension(void) { initExtension(GeoFeatureGroupExtension::getClassTypeId()); - ADD_PROPERTY(Placement,(Base::Placement())); + EXTENSION_ADD_PROPERTY(Placement,(Base::Placement())); } GeoFeatureGroupExtension::~GeoFeatureGroupExtension(void) @@ -148,7 +148,7 @@ DocumentObject* GeoFeatureGroupExtension::getGroupOfObject(const DocumentObject* // Python feature --------------------------------------------------------- namespace App { -PROPERTY_SOURCE_TEMPLATE(App::GeoFeatureGroupExtensionPython, App::GeoFeatureGroupExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(App::GeoFeatureGroupExtensionPython, App::GeoFeatureGroupExtension) // explicit template instantiation template class AppExport ExtensionPythonT>; diff --git a/src/App/GeoFeatureGroupExtension.h b/src/App/GeoFeatureGroupExtension.h index 6f3bbeab8..f26382c62 100644 --- a/src/App/GeoFeatureGroupExtension.h +++ b/src/App/GeoFeatureGroupExtension.h @@ -38,7 +38,7 @@ namespace App */ class AppExport GeoFeatureGroupExtension : public App::GroupExtension { - PROPERTY_HEADER(App::GeoFeatureGroupExtension); + EXTENSION_PROPERTY_HEADER(App::GeoFeatureGroupExtension); public: PropertyPlacement Placement; diff --git a/src/App/GroupExtension.cpp b/src/App/GroupExtension.cpp index 7162a6d41..391fd7efb 100644 --- a/src/App/GroupExtension.cpp +++ b/src/App/GroupExtension.cpp @@ -34,13 +34,13 @@ using namespace App; -PROPERTY_SOURCE(App::GroupExtension, App::DocumentObjectExtension) +EXTENSION_PROPERTY_SOURCE(App::GroupExtension, App::DocumentObjectExtension) GroupExtension::GroupExtension() { initExtension(GroupExtension::getClassTypeId()); - ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects"); + EXTENSION_ADD_PROPERTY_TYPE(Group,(0),"Base",(App::PropertyType)(Prop_Output),"List of referenced objects"); } GroupExtension::~GroupExtension() @@ -202,7 +202,7 @@ PyObject* GroupExtension::getExtensionPyObject(void) { namespace App { -PROPERTY_SOURCE_TEMPLATE(App::GroupExtensionPython, App::GroupExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(App::GroupExtensionPython, App::GroupExtension) // explicit template instantiation template class AppExport ExtensionPythonT>; diff --git a/src/App/GroupExtension.h b/src/App/GroupExtension.h index 84b0b9c88..589f72854 100644 --- a/src/App/GroupExtension.h +++ b/src/App/GroupExtension.h @@ -37,7 +37,7 @@ class GroupExtensionPy; class AppExport GroupExtension : public DocumentObjectExtension { - PROPERTY_HEADER(App::GroupExtension); + EXTENSION_PROPERTY_HEADER(App::GroupExtension); public: /// Constructor diff --git a/src/App/OriginGroupExtension.cpp b/src/App/OriginGroupExtension.cpp index afe14a519..302ea76b1 100644 --- a/src/App/OriginGroupExtension.cpp +++ b/src/App/OriginGroupExtension.cpp @@ -35,13 +35,13 @@ using namespace App; -PROPERTY_SOURCE(App::OriginGroupExtension, App::GeoFeatureGroupExtension); +EXTENSION_PROPERTY_SOURCE(App::OriginGroupExtension, App::GeoFeatureGroupExtension); OriginGroupExtension::OriginGroupExtension () { initExtension(OriginGroupExtension::getClassTypeId()); - ADD_PROPERTY_TYPE ( Origin, (0), 0, App::Prop_Hidden, "Origin linked to the group" ); + EXTENSION_ADD_PROPERTY_TYPE ( Origin, (0), 0, App::Prop_Hidden, "Origin linked to the group" ); } OriginGroupExtension::~OriginGroupExtension () @@ -131,7 +131,7 @@ void OriginGroupExtension::onExtendedUnsetupObject () { // Python feature --------------------------------------------------------- namespace App { -PROPERTY_SOURCE_TEMPLATE(App::OriginGroupExtensionPython, App::OriginGroupExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(App::OriginGroupExtensionPython, App::OriginGroupExtension) // explicit template instantiation template class AppExport ExtensionPythonT>; diff --git a/src/App/OriginGroupExtension.h b/src/App/OriginGroupExtension.h index e254648f1..fe5cb89f3 100644 --- a/src/App/OriginGroupExtension.h +++ b/src/App/OriginGroupExtension.h @@ -34,7 +34,8 @@ class Origin; */ class AppExport OriginGroupExtension : public App::GeoFeatureGroupExtension { - PROPERTY_HEADER(App::OriginGroupExtension); + EXTENSION_PROPERTY_HEADER(App::OriginGroupExtension); + public: OriginGroupExtension (); virtual ~OriginGroupExtension (); diff --git a/src/App/Part.cpp b/src/App/Part.cpp index 656e49e11..96303bad4 100644 --- a/src/App/Part.cpp +++ b/src/App/Part.cpp @@ -35,7 +35,7 @@ using namespace App; -PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject, (App::OriginGroupExtension)) +PROPERTY_SOURCE_WITH_EXTENSIONS(App::Part, App::DocumentObject) //=========================================================================== diff --git a/src/App/PropertyContainer.cpp b/src/App/PropertyContainer.cpp index 3d4353a86..0581e3203 100644 --- a/src/App/PropertyContainer.cpp +++ b/src/App/PropertyContainer.cpp @@ -259,7 +259,7 @@ void PropertyContainer::Restore(Base::XMLReader &reader) reader.readEndElement("Properties"); } -void PropertyData::addProperty(const PropertyContainer *container,const char* PropName, Property *Prop, const char* PropertyGroup , PropertyType Type, const char* PropertyDocu) +void PropertyData::addProperty(const void* container,const char* PropName, Property *Prop, const char* PropertyGroup , PropertyType Type, const char* PropertyDocu) { bool IsIn = false; for (vector::const_iterator It = propertyData.begin(); It != propertyData.end(); ++It) @@ -285,7 +285,7 @@ void PropertyData::addParentPropertyData(const PropertyData* data) { } -const PropertyData::PropertySpec *PropertyData::findProperty(const PropertyContainer *container,const char* PropName) const +const PropertyData::PropertySpec *PropertyData::findProperty(const void* container,const char* PropName) const { for (vector::const_iterator It = propertyData.begin(); It != propertyData.end(); ++It) if(strcmp(It->Name,PropName)==0) @@ -300,13 +300,13 @@ const PropertyData::PropertySpec *PropertyData::findProperty(const PropertyConta return 0; } -const PropertyData::PropertySpec *PropertyData::findProperty(const PropertyContainer *container,const Property* prop) const +const PropertyData::PropertySpec *PropertyData::findProperty(const void* container,const Property* prop) const { const int diff = (int) ((char*)prop - (char*)container); for (vector::const_iterator It = propertyData.begin(); It != propertyData.end(); ++It) if(diff == It->Offset) - return &(*It); + return &(*It); for(auto data : parentPropertyData) { auto res = data->findProperty(container,prop); @@ -317,7 +317,7 @@ const PropertyData::PropertySpec *PropertyData::findProperty(const PropertyConta return 0; } -const char* PropertyData::getName(const PropertyContainer *container,const Property* prop) const +const char* PropertyData::getName(const void* container,const Property* prop) const { const PropertyData::PropertySpec* Spec = findProperty(container,prop); @@ -338,7 +338,7 @@ const char* PropertyData::getName(const PropertyContainer *container,const Prope */ } -short PropertyData::getType(const PropertyContainer *container,const Property* prop) const +short PropertyData::getType(const void* container,const Property* prop) const { const PropertyData::PropertySpec* Spec = findProperty(container,prop); @@ -361,7 +361,7 @@ short PropertyData::getType(const PropertyContainer *container,const Property* p */ } -short PropertyData::getType(const PropertyContainer *container,const char* name) const +short PropertyData::getType(const void* container,const char* name) const { const PropertyData::PropertySpec* Spec = findProperty(container,name); @@ -371,7 +371,7 @@ short PropertyData::getType(const PropertyContainer *container,const char* name) return 0; } -const char* PropertyData::getGroup(const PropertyContainer *container,const Property* prop) const +const char* PropertyData::getGroup(const void* container,const Property* prop) const { const PropertyData::PropertySpec* Spec = findProperty(container,prop); @@ -394,7 +394,7 @@ const char* PropertyData::getGroup(const PropertyContainer *container,const Prop */ } -const char* PropertyData::getGroup(const PropertyContainer *container,const char* name) const +const char* PropertyData::getGroup(const void* container,const char* name) const { const PropertyData::PropertySpec* Spec = findProperty(container,name); @@ -404,7 +404,7 @@ const char* PropertyData::getGroup(const PropertyContainer *container,const char return 0; } -const char* PropertyData::getDocumentation(const PropertyContainer *container,const Property* prop) const +const char* PropertyData::getDocumentation(const void* container,const Property* prop) const { const PropertyData::PropertySpec* Spec = findProperty(container,prop); @@ -414,7 +414,7 @@ const char* PropertyData::getDocumentation(const PropertyContainer *container,co return 0; } -const char* PropertyData::getDocumentation(const PropertyContainer *container,const char* name) const +const char* PropertyData::getDocumentation(const void* container,const char* name) const { const PropertyData::PropertySpec* Spec = findProperty(container,name); @@ -426,7 +426,7 @@ const char* PropertyData::getDocumentation(const PropertyContainer *container,co -Property *PropertyData::getPropertyByName(const PropertyContainer *container,const char* name) const +Property *PropertyData::getPropertyByName(const void* container,const char* name) const { const PropertyData::PropertySpec* Spec = findProperty(container,name); @@ -449,7 +449,7 @@ Property *PropertyData::getPropertyByName(const PropertyContainer *container,con }*/ } -void PropertyData::getPropertyMap(const PropertyContainer *container,std::map &Map) const +void PropertyData::getPropertyMap(const void* container,std::map &Map) const { for (vector::const_iterator It = propertyData.begin(); It != propertyData.end(); ++It) Map[It->Name] = (Property *) (It->Offset + (char *)container); @@ -467,7 +467,7 @@ void PropertyData::getPropertyMap(const PropertyContainer *container,std::map &List) const +void PropertyData::getPropertyList(const void* container,std::vector &List) const { for (vector::const_iterator It = propertyData.begin(); It != propertyData.end(); ++It) List.push_back((Property *) (It->Offset + (char *)container) ); diff --git a/src/App/PropertyContainer.h b/src/App/PropertyContainer.h index 512680ec9..c38d54726 100644 --- a/src/App/PropertyContainer.h +++ b/src/App/PropertyContainer.h @@ -60,29 +60,29 @@ struct AppExport PropertyData std::vector propertyData; std::vector parentPropertyData; - void addProperty(const PropertyContainer *container,const char* PropName, Property *Prop, const char* PropertyGroup= 0, PropertyType = Prop_None, const char* PropertyDocu= 0 ); + void addProperty(const void* container,const char* PropName, Property *Prop, const char* PropertyGroup= 0, PropertyType = Prop_None, const char* PropertyDocu= 0 ); void addParentPropertyData(const PropertyData* data); - const PropertySpec *findProperty(const PropertyContainer *container,const char* PropName) const; - const PropertySpec *findProperty(const PropertyContainer *container,const Property* prop) const; + const PropertySpec *findProperty(const void* container,const char* PropName) const; + const PropertySpec *findProperty(const void* container,const Property* prop) const; - const char* getName (const PropertyContainer *container,const Property* prop) const; - short getType (const PropertyContainer *container,const Property* prop) const; - short getType (const PropertyContainer *container,const char* name) const; - const char* getGroup (const PropertyContainer *container,const char* name) const; - const char* getGroup (const PropertyContainer *container,const Property* prop) const; - const char* getDocumentation(const PropertyContainer *container,const char* name) const; - const char* getDocumentation(const PropertyContainer *container,const Property* prop) const; + const char* getName (const void* container,const Property* prop) const; + short getType (const void* container,const Property* prop) const; + short getType (const void* container,const char* name) const; + const char* getGroup (const void* container,const char* name) const; + const char* getGroup (const void* container,const Property* prop) const; + const char* getDocumentation(const void* container,const char* name) const; + const char* getDocumentation(const void* container,const Property* prop) const; - Property *getPropertyByName(const PropertyContainer *container,const char* name) const; - void getPropertyMap(const PropertyContainer *container,std::map &Map) const; - void getPropertyList(const PropertyContainer *container,std::vector &List) const; + Property *getPropertyByName(const void* container,const char* name) const; + void getPropertyMap(const void* container,std::map &Map) const; + void getPropertyList(const void* container,std::vector &List) const; }; /** Base class of all classes with properties */ -class AppExport PropertyContainer: public Base::Persistence +class AppExport PropertyContainer: public virtual Base::Persistence { TYPESYSTEM_HEADER(); @@ -191,14 +191,14 @@ private: do { \ this->_prop_.setValue _defaultval_;\ this->_prop_.setContainer(this); \ - propertyData.addProperty(this, #_prop_, &this->_prop_); \ + propertyData.addProperty(static_cast(this), #_prop_, &this->_prop_); \ } while (0) #define ADD_PROPERTY_TYPE(_prop_, _defaultval_, _group_,_type_,_Docu_) \ do { \ this->_prop_.setValue _defaultval_;\ this->_prop_.setContainer(this); \ - propertyData.addProperty(this, #_prop_, &this->_prop_, (_group_),(_type_),(_Docu_)); \ + propertyData.addProperty(static_cast(this), #_prop_, &this->_prop_, (_group_),(_type_),(_Docu_)); \ } while (0) diff --git a/src/Base/Persistence.h b/src/Base/Persistence.h index f3901153b..1b92e9c6e 100644 --- a/src/Base/Persistence.h +++ b/src/Base/Persistence.h @@ -48,7 +48,7 @@ public: * It is not meant to have the exact size, it is more or less an estimation * which runs fast! Is it two bytes or a GB? */ - virtual unsigned int getMemSize (void) const = 0; + virtual unsigned int getMemSize (void) const; /** This method is used to save properties to an XML document. * A good example you'll find in PropertyStandard.cpp, e.g. the vector: * \code @@ -65,7 +65,7 @@ public: * is written. This means closing tags and writing UTF-8. * @see Base::Writer */ - virtual void Save (Writer &/*writer*/) const = 0; + virtual void Save (Writer &/*writer*/) const; /** This method is used to restore properties from an XML document. * It uses the XMLReader class, which bases on SAX, to read the in Save() * written information. Again the Vector as an example: @@ -81,7 +81,7 @@ public: * } * \endcode */ - virtual void Restore(XMLReader &/*reader*/) = 0; + virtual void Restore(XMLReader &/*reader*/); /** This method is used to save large amounts of data to a binary file. * Sometimes it makes no sense to write property data as XML. In case the * amount of data is too big or the data type has a more effective way to diff --git a/src/Gui/ViewProviderDocumentObjectGroup.cpp b/src/Gui/ViewProviderDocumentObjectGroup.cpp index 018755f13..32a372d82 100644 --- a/src/Gui/ViewProviderDocumentObjectGroup.cpp +++ b/src/Gui/ViewProviderDocumentObjectGroup.cpp @@ -47,7 +47,7 @@ using namespace Gui; -PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderDocumentObjectGroup, Gui::ViewProviderDocumentObject, (Gui::ViewProviderGroupExtension)) +PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderDocumentObjectGroup, Gui::ViewProviderDocumentObject) /** diff --git a/src/Gui/ViewProviderExtension.cpp b/src/Gui/ViewProviderExtension.cpp index 784ac76eb..2ee8d94c7 100644 --- a/src/Gui/ViewProviderExtension.cpp +++ b/src/Gui/ViewProviderExtension.cpp @@ -33,7 +33,7 @@ using namespace Gui; -PROPERTY_SOURCE(Gui::ViewProviderExtension, App::Extension) +EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderExtension, App::Extension) ViewProviderExtension::ViewProviderExtension() { @@ -62,7 +62,7 @@ void ViewProviderExtension::extensionUpdateData(const App::Property*) { } namespace Gui { -PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderExtensionPython, Gui::ViewProviderExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderExtensionPython, Gui::ViewProviderExtension) // explicit template instantiation template class GuiExport ViewProviderExtensionPythonT; diff --git a/src/Gui/ViewProviderExtension.h b/src/Gui/ViewProviderExtension.h index 9a2cc0239..cc8218e23 100644 --- a/src/Gui/ViewProviderExtension.h +++ b/src/Gui/ViewProviderExtension.h @@ -39,7 +39,7 @@ class GuiExport ViewProviderExtension : public App::Extension //The cass does not have properties itself, but it is important to provide the property access //functions. - PROPERTY_HEADER(Gui::ViewProviderExtension); + EXTENSION_PROPERTY_HEADER(Gui::ViewProviderExtension); public: @@ -90,7 +90,7 @@ private: template class ViewProviderExtensionPythonT : public ExtensionT { - PROPERTY_HEADER(Gui::ViewProviderExtensionPythonT); + EXTENSION_PROPERTY_HEADER(Gui::ViewProviderExtensionPythonT); public: typedef ExtensionT Inherited; @@ -98,7 +98,7 @@ public: ViewProviderExtensionPythonT() { ExtensionT::m_isPythonExtension = true; - ADD_PROPERTY(Proxy,(Py::Object())); + EXTENSION_ADD_PROPERTY(Proxy,(Py::Object())); } virtual ~ViewProviderExtensionPythonT() { } diff --git a/src/Gui/ViewProviderGeoFeatureGroup.cpp b/src/Gui/ViewProviderGeoFeatureGroup.cpp index 4d4f0c6aa..98246fd9c 100644 --- a/src/Gui/ViewProviderGeoFeatureGroup.cpp +++ b/src/Gui/ViewProviderGeoFeatureGroup.cpp @@ -36,7 +36,7 @@ using namespace Gui; -PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderGeoFeatureGroup, Gui::ViewProviderDocumentObject, (Gui::ViewProviderGeoFeatureGroupExtension)) +PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderGeoFeatureGroup, Gui::ViewProviderDocumentObject) ViewProviderGeoFeatureGroup::ViewProviderGeoFeatureGroup() { diff --git a/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp b/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp index 867e2d87f..6217b1b8d 100644 --- a/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp +++ b/src/Gui/ViewProviderGeoFeatureGroupExtension.cpp @@ -34,7 +34,7 @@ using namespace Gui; -PROPERTY_SOURCE(Gui::ViewProviderGeoFeatureGroupExtension, Gui::ViewProviderGroupExtension) +EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGeoFeatureGroupExtension, Gui::ViewProviderGroupExtension) ViewProviderGeoFeatureGroupExtension::ViewProviderGeoFeatureGroupExtension() { @@ -93,7 +93,7 @@ void ViewProviderGeoFeatureGroupExtension::extensionUpdateData(const App::Proper namespace Gui { -PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGeoFeatureGroupExtensionPython, Gui::ViewProviderGeoFeatureGroupExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGeoFeatureGroupExtensionPython, Gui::ViewProviderGeoFeatureGroupExtension) // explicit template instantiation template class GuiExport ViewProviderExtensionPythonT; diff --git a/src/Gui/ViewProviderGeoFeatureGroupExtension.h b/src/Gui/ViewProviderGeoFeatureGroupExtension.h index e5dc29e0d..0521ac0b2 100644 --- a/src/Gui/ViewProviderGeoFeatureGroupExtension.h +++ b/src/Gui/ViewProviderGeoFeatureGroupExtension.h @@ -34,7 +34,7 @@ namespace Gui class GuiExport ViewProviderGeoFeatureGroupExtension : public ViewProviderGroupExtension { - PROPERTY_HEADER(Gui::ViewProviderGeoFeatureGroupExtension); + EXTENSION_PROPERTY_HEADER(Gui::ViewProviderGeoFeatureGroupExtension); public: /// Constructor diff --git a/src/Gui/ViewProviderGroupExtension.cpp b/src/Gui/ViewProviderGroupExtension.cpp index 5415ccf56..c8ed1ed0a 100644 --- a/src/Gui/ViewProviderGroupExtension.cpp +++ b/src/Gui/ViewProviderGroupExtension.cpp @@ -40,7 +40,7 @@ using namespace Gui; -PROPERTY_SOURCE(Gui::ViewProviderGroupExtension, Gui::ViewProviderExtension) +EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderGroupExtension, Gui::ViewProviderExtension) ViewProviderGroupExtension::ViewProviderGroupExtension() : visible(false) { @@ -199,7 +199,7 @@ bool ViewProviderGroupExtension::extensionOnDelete(const std::vector< std::strin namespace Gui { -PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGroupExtensionPython, Gui::ViewProviderGroupExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderGroupExtensionPython, Gui::ViewProviderGroupExtension) // explicit template instantiation template class GuiExport ViewProviderExtensionPythonT; diff --git a/src/Gui/ViewProviderGroupExtension.h b/src/Gui/ViewProviderGroupExtension.h index 7ead76f58..09800a1c4 100644 --- a/src/Gui/ViewProviderGroupExtension.h +++ b/src/Gui/ViewProviderGroupExtension.h @@ -32,7 +32,7 @@ namespace Gui class GuiExport ViewProviderGroupExtension : public ViewProviderExtension { - PROPERTY_HEADER(Gui::ViewProviderGroupExtension); + EXTENSION_PROPERTY_HEADER(Gui::ViewProviderGroupExtension); public: /// Constructor diff --git a/src/Gui/ViewProviderOriginGroup.cpp b/src/Gui/ViewProviderOriginGroup.cpp index bac87aeed..6a423653c 100644 --- a/src/Gui/ViewProviderOriginGroup.cpp +++ b/src/Gui/ViewProviderOriginGroup.cpp @@ -45,7 +45,7 @@ using namespace Gui; -PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderOriginGroup, Gui::ViewProviderDocumentObject, (Gui::ViewProviderOriginGroupExtension)) +PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderOriginGroup, Gui::ViewProviderDocumentObject) ViewProviderOriginGroup::ViewProviderOriginGroup () { diff --git a/src/Gui/ViewProviderOriginGroupExtension.cpp b/src/Gui/ViewProviderOriginGroupExtension.cpp index 45e8a7139..f19ae9655 100644 --- a/src/Gui/ViewProviderOriginGroupExtension.cpp +++ b/src/Gui/ViewProviderOriginGroupExtension.cpp @@ -44,7 +44,7 @@ using namespace Gui; -PROPERTY_SOURCE(Gui::ViewProviderOriginGroupExtension, Gui::ViewProviderGeoFeatureGroupExtension) +EXTENSION_PROPERTY_SOURCE(Gui::ViewProviderOriginGroupExtension, Gui::ViewProviderGeoFeatureGroupExtension) ViewProviderOriginGroupExtension::ViewProviderOriginGroupExtension() { @@ -198,7 +198,7 @@ void ViewProviderOriginGroupExtension::updateOriginSize () { namespace Gui { -PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderOriginGroupExtensionPython, Gui::ViewProviderOriginGroupExtension) +EXTENSION_PROPERTY_SOURCE_TEMPLATE(Gui::ViewProviderOriginGroupExtensionPython, Gui::ViewProviderOriginGroupExtension) // explicit template instantiation template class GuiExport ViewProviderExtensionPythonT; diff --git a/src/Gui/ViewProviderOriginGroupExtension.h b/src/Gui/ViewProviderOriginGroupExtension.h index fb5bb11b0..33137c8a7 100644 --- a/src/Gui/ViewProviderOriginGroupExtension.h +++ b/src/Gui/ViewProviderOriginGroupExtension.h @@ -33,7 +33,7 @@ namespace Gui class GuiExport ViewProviderOriginGroupExtension : public ViewProviderGeoFeatureGroupExtension { - PROPERTY_HEADER(Gui::ViewProviderOriginGroupExtension); + EXTENSION_PROPERTY_HEADER(Gui::ViewProviderOriginGroupExtension); public: /// Constructor diff --git a/src/Gui/ViewProviderPart.cpp b/src/Gui/ViewProviderPart.cpp index 2d7083caa..525c69ab6 100644 --- a/src/Gui/ViewProviderPart.cpp +++ b/src/Gui/ViewProviderPart.cpp @@ -43,7 +43,7 @@ using namespace Gui; -PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderPart, Gui::ViewProviderDocumentObject, (Gui::ViewProviderOriginGroupExtension)) +PROPERTY_SOURCE_WITH_EXTENSIONS(Gui::ViewProviderPart, Gui::ViewProviderDocumentObject) /**