From 3a4bb6ec4fafe5a3428b90ea73777c2111dcc967 Mon Sep 17 00:00:00 2001 From: wmayer Date: Sun, 11 Dec 2011 21:20:00 +0000 Subject: [PATCH] 0000535: request for python editible Properties panels git-svn-id: https://free-cad.svn.sourceforge.net/svnroot/free-cad/trunk@5271 e8eeb9e2-ec13-0410-a4a9-efa5cf37419d --- src/App/PropertyContainer.cpp | 26 ++++++++++++++++++++++++++ src/App/PropertyContainer.h | 10 ++++++++-- src/App/PropertyContainerPy.xml | 9 +++++++-- src/App/PropertyContainerPyImp.cpp | 11 +++++++++++ 4 files changed, 52 insertions(+), 4 deletions(-) diff --git a/src/App/PropertyContainer.cpp b/src/App/PropertyContainer.cpp index bc89e5a9b..07a59b135 100644 --- a/src/App/PropertyContainer.cpp +++ b/src/App/PropertyContainer.cpp @@ -103,6 +103,16 @@ short PropertyContainer::getPropertyType(const char *name) const return getPropertyData().getType(this,name); } +void PropertyContainer::setPropertyType(const Property* prop, short attr) +{ + getPropertyData().setType(this,prop,attr); +} + +void PropertyContainer::setPropertyType(const char *name, short attr) +{ + getPropertyData().setType(this,name,attr); +} + const char* PropertyContainer::getPropertyGroup(const Property* prop) const { return getPropertyData().getGroup(this,prop); @@ -359,6 +369,22 @@ short PropertyData::getType(const PropertyContainer *container,const char* name) return 0; } +void PropertyData::setType(const PropertyContainer *container,const Property* prop, short attr) const +{ + const PropertyData::PropertySpec* Spec = findProperty(container,prop); + + if (Spec) + const_cast< PropertyData::PropertySpec*>(Spec)->Type = attr; +} + +void PropertyData::setType(const PropertyContainer *container,const char* name, short attr) const +{ + const PropertyData::PropertySpec* Spec = findProperty(container,name); + + if (Spec) + const_cast< PropertyData::PropertySpec*>(Spec)->Type = attr; +} + const char* PropertyData::getGroup(const PropertyContainer *container,const Property* prop) const { const PropertyData::PropertySpec* Spec = findProperty(container,prop); diff --git a/src/App/PropertyContainer.h b/src/App/PropertyContainer.h index e81ba1de5..88419ce3e 100644 --- a/src/App/PropertyContainer.h +++ b/src/App/PropertyContainer.h @@ -70,6 +70,8 @@ struct AppExport PropertyData 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; + void setType (const PropertyContainer *container,const Property* prop, short) const; + void setType (const PropertyContainer *container,const char* name, short) const; const char* getDocumentation(const PropertyContainer *container,const char* name) const; const char* getDocumentation(const PropertyContainer *container,const Property* prop) const; @@ -116,6 +118,10 @@ public: virtual short getPropertyType(const Property* prop) const; /// get the Type of a named Property virtual short getPropertyType(const char *name) const; + /// set the Type of a Property + virtual void setPropertyType(const Property* prop, short); + /// set the Type of a named Property + virtual void setPropertyType(const char *name, short); /// get the Group of a Property virtual const char* getPropertyGroup(const Property* prop) const; /// get the Group of a named Property @@ -218,7 +224,7 @@ void _class_::init(void){\ initSubclass(_class_::classTypeId, #_class_ , #_parentclass_, &(_class_::create) ); \ _class_::propertyData.parentPropertyData = _parentclass_::getPropertyDataPtr();\ } - + #define TYPESYSTEM_SOURCE_TEMPLATE(_class_) \ template<> Base::Type _class_::getClassTypeId(void) { return _class_::classTypeId; } \ template<> Base::Type _class_::getTypeId(void) const { return _class_::classTypeId; } \ @@ -226,7 +232,7 @@ template<> Base::Type _class_::classTypeId = Base::Type::badType(); \ template<> void * _class_::create(void){\ return new _class_ ();\ } - + #define PROPERTY_SOURCE_TEMPLATE(_class_, _parentclass_) \ TYPESYSTEM_SOURCE_TEMPLATE(_class_);\ template<> const App::PropertyData * _class_::getPropertyDataPtr(void){return &propertyData;} \ diff --git a/src/App/PropertyContainerPy.xml b/src/App/PropertyContainerPy.xml index 594ed4eb0..d982ab6dc 100644 --- a/src/App/PropertyContainerPy.xml +++ b/src/App/PropertyContainerPy.xml @@ -23,7 +23,12 @@ Return the type of a named property. This can be (Hidden,ReadOnly,Output) or any combination. - + + + Set the type of a named property. This can be (Hidden,ReadOnly,Output) or any combination. + + + Return the name of the group which the property belongs to in this class. The properties sorted in differnt named groups for convenience. @@ -41,4 +46,4 @@ - + diff --git a/src/App/PropertyContainerPyImp.cpp b/src/App/PropertyContainerPyImp.cpp index f8816efa6..9499bccc7 100644 --- a/src/App/PropertyContainerPyImp.cpp +++ b/src/App/PropertyContainerPyImp.cpp @@ -78,6 +78,17 @@ PyObject* PropertyContainerPy::getTypeOfProperty(PyObject *args) return Py::new_reference_to(ret); } +PyObject* PropertyContainerPy::setTypeOfProperty(PyObject *args) +{ + char* name; + short type; + if (!PyArg_ParseTuple(args, "sh", &name, &type)) // convert args: Python->C + return NULL; // NULL triggers exception + + getPropertyContainerPtr()->setPropertyType(name, type); + Py_Return; +} + PyObject* PropertyContainerPy::getGroupOfProperty(PyObject *args) { char *pstr;