aboutsummaryrefslogtreecommitdiffstats
path: root/PySide/QtCore
diff options
context:
space:
mode:
authorLauro Neto <lauro.neto@openbossa.org>2010-02-11 16:13:11 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2010-02-12 14:07:17 -0300
commit50d8761aa8ec6e6bba62edabec084c25b2791bab (patch)
tree94577ce7f07d35bedd4592b8edbf9769d3a3c248 /PySide/QtCore
parentd39d8d6b5eba15e755451624b77a7601e94fc5d9 (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.h42
-rw-r--r--PySide/QtCore/typesystem_core.xml9
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*" >