diff options
author | Lauro Neto <lauro.neto@openbossa.org> | 2010-02-11 16:13:11 -0300 |
---|---|---|
committer | Marcelo Lira <marcelo.lira@openbossa.org> | 2010-02-12 14:07:17 -0300 |
commit | 50d8761aa8ec6e6bba62edabec084c25b2791bab (patch) | |
tree | 94577ce7f07d35bedd4592b8edbf9769d3a3c248 /PySide/QtCore | |
parent | d39d8d6b5eba15e755451624b77a7601e94fc5d9 (diff) |
Adding QSet conversions plus test in qstatemachine
Reviewed by Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'PySide/QtCore')
-rw-r--r-- | PySide/QtCore/qset_conversions.h | 42 | ||||
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 9 |
2 files changed, 47 insertions, 4 deletions
diff --git a/PySide/QtCore/qset_conversions.h b/PySide/QtCore/qset_conversions.h new file mode 100644 index 000000000..183f2ce06 --- /dev/null +++ b/PySide/QtCore/qset_conversions.h @@ -0,0 +1,42 @@ +template <typename qset> +struct Converter_qset +{ + static bool isConvertible(PyObject* pyobj) { + return PyIter_Check(pyobj); + } + + static PyObject* toPython(const qset& set) + { + PyObject* result = PySet_New(NULL); + foreach(typename qset::value_type x, set) { + PyObject *pyObj = Converter<typename qset::value_type>::toPython(x); + PySet_Add(result, pyObj); + Py_DECREF(pyObj); + } + return result; + } + static qset toCpp(PyObject* pyobj) + { + qset result; + PyObject *iterator = PyObject_GetIter(pyobj); + + if (iterator == NULL) + return NULL; + + PyObject *pyItem = NULL; + while (pyItem = PyIter_Next(iterator)) { + result.insert(Converter<typename qset::value_type>::toCpp(pyItem)); + Py_DECREF(pyItem); + } + + Py_XDECREF(iterator); + + if (PyErr_Occurred()) + return NULL; + + return result; + } +}; + +template<typename T> +struct Converter<QSet<T> > : Converter_qset<QSet<T> > {}; diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index ae12a7089..7f207af3b 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -365,6 +365,11 @@ <primitive-type name="std::wstring"/> <primitive-type name="QStdWString"/> + <container-type name="QSet" type="set"> + <conversion-rule file="qset_conversions.h"/> + <include file-name="QSet" location="global"/> + </container-type> + <container-type name="QList" type="list"> <conversion-rule file="qlist_conversions.h"/> <include file-name="QList" location="global"/> @@ -438,7 +443,6 @@ <conversion-rule file="qpair_conversions.h"/> <include file-name="QPair" location="global"/> </container-type> - <container-type name="QSet" type="set"/> <container-type name="QStack" type="stack"/> <rejection class="*" function-name="d_func"/> @@ -681,7 +685,6 @@ <rejection class="QObjectUserData"/> <rejection class="QPluginLoader"/> <rejection class="QPointer"/> - <rejection class="QSet"/> <rejection class="QSetIterator"/> <rejection class="QSharedData"/> <rejection class="QSharedDataPointer"/> @@ -2982,8 +2985,6 @@ </modify-argument> </modify-function> - <!-- http://bugs.openbossa.org/show_bug.cgi?id=123 --> - <modify-function signature="configuration() const" remove="all"/> <modify-function signature="defaultAnimations() const" remove="all"/> <add-function signature="configuration()" return-type="PySequence*" > |