aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/dynamicqmetaobject.cpp
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-05-12 17:21:19 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-05-17 19:53:26 -0300
commitfde014f5db8f35727585e4402849ef565987c63a (patch)
treeb1e01f16ab127948d8548a08993da9e2664374dd /libpyside/dynamicqmetaobject.cpp
parentac217286e20644cd2519cde6c2588761b6a39cd6 (diff)
Implemented support to slot decoration.
Reviewer: Marcelo Lira <marcelo.lira@openbossa.org>, Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside/dynamicqmetaobject.cpp')
-rw-r--r--libpyside/dynamicqmetaobject.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/libpyside/dynamicqmetaobject.cpp b/libpyside/dynamicqmetaobject.cpp
index dbc51803c..a2e6bef0f 100644
--- a/libpyside/dynamicqmetaobject.cpp
+++ b/libpyside/dynamicqmetaobject.cpp
@@ -123,6 +123,30 @@ void DynamicQMetaObject::removeSlot(uint index)
}
}
+DynamicQMetaObject* DynamicQMetaObject::createBasedOn(PyTypeObject *type, const QMetaObject *base)
+{
+ PyObject *key, *value;
+ Py_ssize_t pos = 0;
+
+ QString className(type->tp_name);
+ className = className.mid(className.lastIndexOf(".")+1);
+ DynamicQMetaObject *mo = new PySide::DynamicQMetaObject(className.toAscii(), base);
+
+ while (PyDict_Next(type->tp_dict, &pos, &key, &value)) {
+ if (!PyFunction_Check(value))
+ continue;
+
+ if (PyObject_HasAttrString(value, PYSIDE_SLOT_LIST_ATTR)) {
+ PyObject *signature_list = PyObject_GetAttrString(value, PYSIDE_SLOT_LIST_ATTR);
+ for(Py_ssize_t i=0, i_max=PyList_Size(signature_list); i < i_max; i++) {
+ PyObject *signature = PyList_GET_ITEM(signature_list, i);
+ mo->addSlot(PyString_AsString(signature));
+ }
+ }
+ }
+ return mo;
+}
+
void DynamicQMetaObject::removeSignal(uint index)
{
//Current Qt implementation does not support runtime remove signal