aboutsummaryrefslogtreecommitdiffstats
path: root/PySide/QtCore/qstring_conversions.h
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/QtCore/qstring_conversions.h
parent5b440adbbcc6ae8468c869dfd68b25950a12abe2 (diff)
- Added isConvertible methods to all custom converters.
- Added a custom converter for QString.
Diffstat (limited to 'PySide/QtCore/qstring_conversions.h')
-rw-r--r--PySide/QtCore/qstring_conversions.h35
1 files changed, 35 insertions, 0 deletions
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);
+}