aboutsummaryrefslogtreecommitdiffstats
path: root/PySide
diff options
context:
space:
mode:
authorMarcelo Lira <marcelo.lira@openbossa.org>2009-09-15 14:52:50 -0300
committerMarcelo Lira <marcelo.lira@openbossa.org>2009-09-15 15:02:05 -0300
commitd753c1cf52dfda27fb251366ee754017e2f68a44 (patch)
tree0044940f8285c1303cdeae34494a4b21de4409c3 /PySide
parent96bc2011c8762c117fb2d71d3feba4678690ac49 (diff)
added conversion rules for QList and QPair containers
Diffstat (limited to 'PySide')
-rw-r--r--PySide/QtCore/qbool_conversions.h (renamed from PySide/QtCore/qtcore_conversions.h)4
-rw-r--r--PySide/QtCore/qlist_conversions.h24
-rw-r--r--PySide/QtCore/qpair_conversions.h25
-rw-r--r--PySide/QtCore/typesystem_core.xml13
4 files changed, 61 insertions, 5 deletions
diff --git a/PySide/QtCore/qtcore_conversions.h b/PySide/QtCore/qbool_conversions.h
index c6546cefb..73215ffac 100644
--- a/PySide/QtCore/qtcore_conversions.h
+++ b/PySide/QtCore/qbool_conversions.h
@@ -2,9 +2,9 @@
template <>
struct Converter<QBool>
{
- static PyObject* toPython(QBool holder)
+ static PyObject* toPython(QBool cppobj)
{
- return PyBool_FromLong(bool(holder));
+ return PyBool_FromLong((bool) cppobj);
}
static QBool toCpp(PyObject* pyobj)
{
diff --git a/PySide/QtCore/qlist_conversions.h b/PySide/QtCore/qlist_conversions.h
new file mode 100644
index 000000000..b305d1468
--- /dev/null
+++ b/PySide/QtCore/qlist_conversions.h
@@ -0,0 +1,24 @@
+template <typename StdList>
+struct Converter_qlist
+{
+ static PyObject* toPython(StdList holder)
+ {
+ PyObject* result = PyList_New(holder.size());
+ for (int i = 0; i < holder.size(); i++) {
+ PyList_SET_ITEM(result, i, Converter<typename StdList::value_type>::toPython(holder.at(i)));
+ }
+ return result;
+ }
+ static StdList toCpp(PyObject* pyobj)
+ {
+ StdList result;
+ for (int i = 0; i < PySequence_Size(pyobj); i++) {
+ PyObject* pyItem = PySequence_GetItem(pyobj, i);
+ result.append(Converter<typename StdList::value_type>::toCpp(pyItem));
+ }
+ return result;
+ }
+};
+
+template<typename T>
+struct Converter<QList<T> > : Converter_qlist<QList<T> > {};
diff --git a/PySide/QtCore/qpair_conversions.h b/PySide/QtCore/qpair_conversions.h
new file mode 100644
index 000000000..4d9f21351
--- /dev/null
+++ b/PySide/QtCore/qpair_conversions.h
@@ -0,0 +1,25 @@
+template <typename StdPair>
+struct Converter_qpair
+{
+ static PyObject* toPython(StdPair holder)
+ {
+ typename StdPair::first_type first(holder.first);
+ typename StdPair::second_type second(holder.second);
+ PyObject* tuple = PyTuple_New(2);
+ PyTuple_SET_ITEM(tuple, 0, Converter<typename StdPair::first_type>::toPython(first));
+ PyTuple_SET_ITEM(tuple, 1, Converter<typename StdPair::second_type>::toPython(second));
+ return tuple;
+ }
+ static StdPair toCpp(PyObject* pyobj)
+ {
+ StdPair result;
+ PyObject* pyFirst = PySequence_GetItem(pyobj, 0);
+ PyObject* pySecond = PySequence_GetItem(pyobj, 1);
+ result.first = Converter<typename StdPair::first_type>::toCpp(pyFirst);
+ result.second = Converter<typename StdPair::second_type>::toCpp(pySecond);
+ return result;
+ }
+};
+
+template<typename FT, typename ST>
+struct Converter<QPair<FT, ST> > : Converter_qpair<QPair<FT, ST> > {};
diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml
index 87640ab68..76d74fb15 100644
--- a/PySide/QtCore/typesystem_core.xml
+++ b/PySide/QtCore/typesystem_core.xml
@@ -286,15 +286,19 @@
<include file-name="QTextDocument" location="global"/>
</primitive-type>
<primitive-type name="QBool" target-lang-api-name="PyBool">
- <conversion-rule file="qtcore_conversions.h"/>
+ <conversion-rule file="qbool_conversions.h"/>
<!-- FIXME This is a workaround to include some headers needed by some includes (nothing to do with QBool) -->
<include file-name="QtConcurrentFilter" location="global"/>
</primitive-type>
+
<primitive-type name="std::string"/>
<primitive-type name="std::wstring"/>
<primitive-type name="QStdWString"/>
- <container-type name="QList" type="list"/>
+ <container-type name="QList" type="list">
+ <conversion-rule file="qlist_conversions.h"/>
+ <include file-name="QList" location="global"/>
+ </container-type>
<rejection class="QList" function-name="back"/>
<rejection class="QList" function-name="begin"/>
<rejection class="QList" function-name="constBegin"/>
@@ -351,7 +355,10 @@
<container-type name="QLinkedList" type="linked-list"/>
<container-type name="QMap" type="map"/>
<container-type name="QMultiMap" type="multi-map"/>
- <container-type name="QPair" type="pair"/>
+ <container-type name="QPair" type="pair">
+ <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"/>