aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
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
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')
-rw-r--r--libpyside/dynamicqmetaobject.cpp36
-rw-r--r--libpyside/dynamicqmetaobject.h5
-rw-r--r--libpyside/pyside.h2
-rw-r--r--libpyside/qsignal.cpp5
-rw-r--r--libpyside/qsignal.h4
5 files changed, 32 insertions, 20 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;
diff --git a/libpyside/dynamicqmetaobject.h b/libpyside/dynamicqmetaobject.h
index 5da73a521..36981ec42 100644
--- a/libpyside/dynamicqmetaobject.h
+++ b/libpyside/dynamicqmetaobject.h
@@ -52,11 +52,12 @@ class MethodData
{
public:
MethodData(){}
- MethodData(const char *signature, const char *type);
+ MethodData(const char* signature, const char* type);
void clear();
QByteArray signature() const;
QByteArray type() const;
- bool operator==(const MethodData &other) const;
+ bool operator==(const MethodData& other) const;
+ bool operator==(const char* other) const;
private:
QByteArray m_signature;
diff --git a/libpyside/pyside.h b/libpyside/pyside.h
index aaeeb43d2..3c1c0600c 100644
--- a/libpyside/pyside.h
+++ b/libpyside/pyside.h
@@ -41,7 +41,7 @@
namespace PySide
{
-PYSIDE_API void init(PyObject *module);
+PYSIDE_API void init(PyObject *module);
} //namespace PySide
diff --git a/libpyside/qsignal.cpp b/libpyside/qsignal.cpp
index 508d9e557..9274c483d 100644
--- a/libpyside/qsignal.cpp
+++ b/libpyside/qsignal.cpp
@@ -190,7 +190,7 @@ PyObject* signal_instance_get_item(PyObject* self, PyObject* key)
return 0;
}
-void signal_update_source(PyObject* source)
+void signalUpdateSource(PyObject* source)
{
PyObject* attrs = PyObject_Dir(source);
for(int i = 0, i_max = PyList_Size(attrs); i < i_max; i++) {
@@ -330,6 +330,7 @@ void signal_instance_free(void* self)
void signal_instance_initialize(PyObject* instance, PyObject* name, SignalData* data, PyObject* source, int index)
{
SignalInstanceData *self = reinterpret_cast<SignalInstanceData*>(instance);
+ self->next = 0;
if (data->signalName)
self->signalName = strdup(data->signalName);
else
@@ -452,7 +453,7 @@ PyObject* signal_instance_emit(PyObject* self, PyObject* args)
return PyObject_CallObject(pyMethod, tupleArgs);
}
-PyObject* signal_new(const char* name, ...)
+PyObject* signalNew(const char* name, ...)
{
va_list listSignatures;
char* sig;
diff --git a/libpyside/qsignal.h b/libpyside/qsignal.h
index 2ba5e984e..c6e07da01 100644
--- a/libpyside/qsignal.h
+++ b/libpyside/qsignal.h
@@ -21,10 +21,10 @@ extern "C"
{
PyAPI_DATA(PyTypeObject) Signal_Type;
PyAPI_DATA(PyTypeObject) SignalInstance_Type;
- PYSIDE_API PyAPI_FUNC(PyObject*) signal_new(const char* name, ...);
}; //extern "C"
-PYSIDE_API void signal_update_source(PyObject* source);
+PYSIDE_API PyAPI_FUNC(PyObject*) signalNew(const char* name, ...);
+PYSIDE_API void signalUpdateSource(PyObject* source);
} //namespace PySide