aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/dynamicqmetaobject.cpp
diff options
context:
space:
mode:
authorRenato Filho <renato.filho@openbossa.org>2010-05-17 17:37:52 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-05-17 19:54:59 -0300
commitf976c831fd89c09e116465538f0a3888bba543e2 (patch)
tree81a852cd34c390807e19ef8af3e2e1a7e41cb327 /libpyside/dynamicqmetaobject.cpp
parent367536b2aad4c076141d6075b766c246a102d763 (diff)
Register Signal objects on MetaObject.
Reviewer: Hugo Parente Lima <hugo.lima@openbossa.org>, Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside/dynamicqmetaobject.cpp')
-rw-r--r--libpyside/dynamicqmetaobject.cpp36
1 files changed, 23 insertions, 13 deletions
diff --git a/libpyside/dynamicqmetaobject.cpp b/libpyside/dynamicqmetaobject.cpp
index cb4ec194b..facdc83e7 100644
--- a/libpyside/dynamicqmetaobject.cpp
+++ b/libpyside/dynamicqmetaobject.cpp
@@ -61,7 +61,7 @@ static int registerString(const QByteArray& s, QList<QByteArray>* strings)
return idx;
}
-MethodData::MethodData(const char *signature, const char *type)
+MethodData::MethodData(const char* signature, const char* type)
: m_signature(signature), m_type(type)
{
}
@@ -72,11 +72,16 @@ void MethodData::clear()
m_type.clear();
}
-bool MethodData::operator==(const MethodData &other) const
+bool MethodData::operator==(const MethodData& other) const
{
return m_signature == other.signature();
}
+bool MethodData::operator==(const char* other) const
+{
+ return m_signature == other;
+}
+
QByteArray MethodData::signature() const
{
return m_signature;
@@ -107,9 +112,13 @@ DynamicQMetaObject::~DynamicQMetaObject()
void DynamicQMetaObject::addSignal(const char* signal, const char* type)
{
+ QLinkedList<MethodData>::iterator i = qFind(m_signals.begin(), m_signals.end(), signal);
+ if (i != m_signals.end())
+ return;
+
//search for a empty space
MethodData blank;
- QLinkedList<MethodData>::iterator i = qFind(m_signals.begin(), m_signals.end(), blank);
+ i = qFind(m_signals.begin(), m_signals.end(), blank);
if (i != m_signals.end()) {
*i = MethodData(signal, type);
updateMetaObject();
@@ -127,9 +136,13 @@ void DynamicQMetaObject::addSignal(const char* signal, const char* type)
void DynamicQMetaObject::addSlot(const char* slot, const char* type)
{
+ QLinkedList<MethodData>::iterator i = qFind(m_slots.begin(), m_slots.end(), slot);
+ if (i != m_slots.end())
+ return;
+
//search for a empty space
MethodData blank;
- QLinkedList<MethodData>::iterator i = qFind(m_slots.begin(), m_slots.end(), blank);
+ i = qFind(m_slots.begin(), m_slots.end(), blank);
if (i != m_slots.end()) {
*i = MethodData(slot, type);
} else {
@@ -162,18 +175,15 @@ DynamicQMetaObject* DynamicQMetaObject::createBasedOn(PyObject* pyObj, PyTypeObj
while (PyDict_Next(type->tp_dict, &pos, &key, &value)) {
-#if 0
//Register signals
- if (value->ob_type == &PySideSignal_Type) {
- SignalData *data = reinterpret_cast<SignalData*>(value);
-
- for(int i=0, i_max=data->signatures_size; i < i_max; i++) {
- mo->addSignal(data->signatures[i]);
- printf("QObject with signal:[%s][%s]\n",
- PyString_AS_STRING(PyObject_Str(key)), data->signatures[i]);
+ if (value->ob_type == &Signal_Type) {
+ PyObject *attr = PyObject_GetAttr(pyObj, key);
+ SignalInstanceData *data = reinterpret_cast<SignalInstanceData*>(attr);
+ while(data) {
+ mo->addSignal(data->signature);
+ data = reinterpret_cast<SignalInstanceData*>(data->next);
}
}
-#endif
if (!PyFunction_Check(value))
continue;