Expose PropertyEnumeration values list to python.
This commit is contained in:
@@ -97,6 +97,11 @@ text names of the status.
|
||||
<UserDocu>Return the documentation string of the property of this class.</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="getEnumerationsOfProperty">
|
||||
<Documentation>
|
||||
<UserDocu>Return all enumeration strings of the property of this class or None if not a PropertyEnumeration.</UserDocu>
|
||||
</Documentation>
|
||||
</Methode>
|
||||
<Methode Name="dumpPropertyContent" Keyword="true" Const="true">
|
||||
<Documentation>
|
||||
<UserDocu>Dumps the content of the property, both the XML representation as well as the additional datafiles
|
||||
|
||||
@@ -357,7 +357,34 @@ PyObject* PropertyContainerPy::getDocumentationOfProperty(PyObject *args)
|
||||
else
|
||||
return Py::new_reference_to(Py::String(""));
|
||||
}
|
||||
|
||||
|
||||
PyObject* PropertyContainerPy::getEnumerationsOfProperty(PyObject *args)
|
||||
{
|
||||
char *pstr;
|
||||
if (!PyArg_ParseTuple(args, "s", &pstr)) // convert args: Python->C
|
||||
return NULL; // NULL triggers exception
|
||||
|
||||
Property* prop = getPropertyContainerPtr()->getPropertyByName(pstr);
|
||||
if (!prop) {
|
||||
PyErr_Format(PyExc_AttributeError, "Property container has no property '%s'", pstr);
|
||||
return 0;
|
||||
}
|
||||
|
||||
PropertyEnumeration *enumProp = dynamic_cast<PropertyEnumeration*>(prop);
|
||||
if (!enumProp) {
|
||||
Py_INCREF(Py_None);
|
||||
return Py_None;
|
||||
}
|
||||
|
||||
std::vector<std::string> enumerations = enumProp->getEnumVector();
|
||||
|
||||
Py::List ret;
|
||||
for (std::vector<std::string>::const_iterator it = enumerations.begin(); it != enumerations.end(); ++it) {
|
||||
ret.append(Py::String(*it));
|
||||
}
|
||||
return Py::new_reference_to(ret);
|
||||
}
|
||||
|
||||
Py::List PropertyContainerPy::getPropertiesList(void) const
|
||||
{
|
||||
Py::List ret;
|
||||
|
||||
@@ -80,6 +80,9 @@ class DocumentObject(object):
|
||||
def getDocumentationOfProperty(self,attr):
|
||||
"returns the documentation string of a given property"
|
||||
return self.__object__.getDocumentationOfProperty(attr)
|
||||
def getEnumerationsOfProperty(self,attr):
|
||||
"returns the documentation string of a given property"
|
||||
return self.__object__.getEnumerationsOfProperty(attr)
|
||||
def touch(self):
|
||||
"marks this object to be recomputed"
|
||||
return self.__object__.touch()
|
||||
|
||||
@@ -143,6 +143,7 @@ class DocumentBasicCases(unittest.TestCase):
|
||||
self.failUnless(not L1.getDocumentationOfProperty("Source1") == "")
|
||||
self.failUnless(L1.getGroupOfProperty("Source1") == "Feature Test")
|
||||
self.failUnless(L1.getTypeOfProperty("Source1") == [])
|
||||
self.failUnless(L1.getEnumerationsOfProperty("Source1") is None)
|
||||
|
||||
|
||||
# test the constraint types ( both are constraint to percent range)
|
||||
@@ -170,6 +171,7 @@ class DocumentBasicCases(unittest.TestCase):
|
||||
FreeCAD.Console.PrintLog(" exception thrown, OK\n")
|
||||
else:
|
||||
self.fail("no exception thrown")
|
||||
self.failUnless(sorted(L1.getEnumerationsOfProperty('Enum')) == sorted(['Zero', 'One', 'Two', 'Three', 'Four']))
|
||||
|
||||
#self.failUnless(L1.IntegerList == [4711] )
|
||||
#f = L1.FloatList
|
||||
|
||||
Reference in New Issue
Block a user