aboutsummaryrefslogtreecommitdiffstats
path: root/PySide
diff options
context:
space:
mode:
authorHugo Lima <hugo.lima@openbossa.org>2009-10-27 11:32:27 -0200
committerHugo Lima <hugo.lima@openbossa.org>2009-10-27 11:32:27 -0200
commit568683ea4b2ff7a8209333ddf5ee5e166f4aee25 (patch)
tree9456452e899c8c090e1c836fc9a2561aee8b1350 /PySide
parent5b440adbbcc6ae8468c869dfd68b25950a12abe2 (diff)
- Added isConvertible methods to all custom converters.
- Added a custom converter for QString.
Diffstat (limited to 'PySide')
-rw-r--r--PySide/QtCore/qhash_conversions.h4
-rw-r--r--PySide/QtCore/qlist_conversions.h6
-rw-r--r--PySide/QtCore/qmap_conversions.h4
-rw-r--r--PySide/QtCore/qpair_conversions.h3
-rw-r--r--PySide/QtCore/qstring_conversions.h35
-rw-r--r--PySide/QtCore/qvector_conversions.h3
-rw-r--r--PySide/QtCore/typesystem_core.xml1
7 files changed, 55 insertions, 1 deletions
diff --git a/PySide/QtCore/qhash_conversions.h b/PySide/QtCore/qhash_conversions.h
index 1f5e506dd..49b4c461b 100644
--- a/PySide/QtCore/qhash_conversions.h
+++ b/PySide/QtCore/qhash_conversions.h
@@ -1,6 +1,10 @@
template <typename qhash>
struct Converter_qhash
{
+ static bool isConvertible(const PyObject* pyObj) {
+ return PyDict_Check(const_cast<PyObject*>(pyObj));
+ }
+
static PyObject* toPython(qhash hash)
{
PyObject* result = PyDict_New();
diff --git a/PySide/QtCore/qlist_conversions.h b/PySide/QtCore/qlist_conversions.h
index 0f72b3ccd..8662305dd 100644
--- a/PySide/QtCore/qlist_conversions.h
+++ b/PySide/QtCore/qlist_conversions.h
@@ -1,7 +1,11 @@
template <typename qlist>
struct Converter_qlist
{
- static PyObject* toPython(qlist holder)
+ static bool isConvertible(const PyObject* pyObj) {
+ return PySequence_Check(const_cast<PyObject*>(pyObj));
+ }
+
+ static PyObject* toPython(const qlist holder)
{
PyObject* result = PyList_New(holder.size());
for (int i = 0; i < holder.size(); i++) {
diff --git a/PySide/QtCore/qmap_conversions.h b/PySide/QtCore/qmap_conversions.h
index c1c262405..a3067f679 100644
--- a/PySide/QtCore/qmap_conversions.h
+++ b/PySide/QtCore/qmap_conversions.h
@@ -1,6 +1,10 @@
template <typename qmap>
struct Converter_qmap
{
+ static bool isConvertible(const PyObject* pyObj) {
+ return PyDict_Check(const_cast<PyObject*>(pyObj));
+ }
+
static PyObject* toPython(qmap map)
{
PyObject* result = PyDict_New();
diff --git a/PySide/QtCore/qpair_conversions.h b/PySide/QtCore/qpair_conversions.h
index de9904630..c3be87826 100644
--- a/PySide/QtCore/qpair_conversions.h
+++ b/PySide/QtCore/qpair_conversions.h
@@ -1,6 +1,9 @@
template <typename qpair>
struct Converter_qpair
{
+ static bool isConvertible(const PyObject* pyObj) {
+ return PySequence_Check(const_cast<PyObject*>(pyObj));
+ }
static PyObject* toPython(qpair holder)
{
typename qpair::first_type first(holder.first);
diff --git a/PySide/QtCore/qstring_conversions.h b/PySide/QtCore/qstring_conversions.h
new file mode 100644
index 000000000..760800038
--- /dev/null
+++ b/PySide/QtCore/qstring_conversions.h
@@ -0,0 +1,35 @@
+inline bool Converter< QString >::isConvertible(const PyObject* pyObj)
+{
+ return PyObject_TypeCheck(pyObj, &PyQString_Type) || PyUnicode_Check(pyObj) || PyString_Check(pyObj);
+}
+
+inline PyObject* Converter< QString >::toPython(const QString cppobj)
+{
+ PyObject* pyobj;
+ void* holder = (void*) new QString(cppobj);
+ pyobj = Shiboken::PyBaseWrapper_New(&PyQString_Type, &PyQString_Type, holder);
+ return pyobj;
+}
+
+inline QString Converter< QString >::toCpp(PyObject* pyobj)
+{
+ if (Converter<QChar>::isConvertible(pyobj)) {
+ return QString(Converter< QChar >::toCpp(pyobj));
+ } else if (Converter<QByteArray>::isConvertible(pyobj)) {
+ return QString(Converter< QByteArray >::toCpp(pyobj));
+ } else if (Converter<QLatin1String>::isConvertible(pyobj)) {
+ return QString(Converter< QLatin1String >::toCpp(pyobj));
+ } else if (PyUnicode_Check(pyobj)) {
+#if defined(Py_UNICODE_WIDE)
+ Py_UNICODE* unicode = PyUnicode_AS_UNICODE(pyobj);
+ return QString::fromUcs4(unicode);
+#else
+ PyObject* str = PyUnicode_AsUTF8String(pyobj);
+ QString result = QString::fromUtf8(PyString_AS_STRING(str));
+ Py_DECREF(str);
+ return result;
+#endif
+ } else if (PyString_Check(pyobj))
+ return QString(Converter< char * >::toCpp(pyobj));
+ return *((QString*) ((Shiboken::PyBaseWrapper*)pyobj)->cptr);
+}
diff --git a/PySide/QtCore/qvector_conversions.h b/PySide/QtCore/qvector_conversions.h
index c1cc304c1..5b4a10f60 100644
--- a/PySide/QtCore/qvector_conversions.h
+++ b/PySide/QtCore/qvector_conversions.h
@@ -1,6 +1,9 @@
template <typename qvector>
struct Converter_qvector
{
+ static bool isConvertible(const PyObject* pyObj) {
+ return PySequence_Check(const_cast<PyObject*>(pyObj));
+ }
static PyObject* toPython(qvector vector)
{
PyObject* result = PyList_New(vector.size());
diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml
index 2b36e354d..d3e0c2011 100644
--- a/PySide/QtCore/typesystem_core.xml
+++ b/PySide/QtCore/typesystem_core.xml
@@ -893,6 +893,7 @@
<extra-includes>
<include file-name="QTextCodec" location="global"/>
</extra-includes>
+ <conversion-rule file="qstring_conversions.h" />
<modify-documentation xpath="/description/section[@id='initializing-a-string']/para[2]" />
<modify-documentation xpath="/description/section[@id='initializing-a-string']/para[3]" />