diff options
author | renatofilho <renato.filho@openbossa.org> | 2010-10-21 13:15:04 -0300 |
---|---|---|
committer | renatofilho <renato.filho@openbossa.org> | 2010-10-21 15:20:36 -0300 |
commit | 26750d345c61148d45b500e891b970b8e4e79661 (patch) | |
tree | d7af8dcd0cbe1819ca16f88a4a55b97b037df16d /libpyside/qsignal.cpp | |
parent | 4f1a11b61f1488921eb2d5de339d92afec8fbc9f (diff) |
Implemented support to notify argument on Properties.
Reviewer: Luciano Wolf <luciano.wolf@openbossa.org>
Marcelo Lira <marcelo.lira@openbossa.org>
Diffstat (limited to 'libpyside/qsignal.cpp')
-rw-r--r-- | libpyside/qsignal.cpp | 54 |
1 files changed, 49 insertions, 5 deletions
diff --git a/libpyside/qsignal.cpp b/libpyside/qsignal.cpp index 4d1559e6d..f6902619f 100644 --- a/libpyside/qsignal.cpp +++ b/libpyside/qsignal.cpp @@ -54,12 +54,14 @@ struct SignalData { int signaturesSize; PyObject* homonymousMethod; }; - +//Signal methods static int signalTpInit(PyObject*, PyObject*, PyObject*); static void signalFree(void*); static void signalInstanceFree(void*); +static PyObject* signalGetItem(PyObject* self, PyObject* key); +static PyObject* signalToString(PyObject* self); -//methods +//Signal Instance methods static PyObject* signalInstanceConnect(PyObject*, PyObject*, PyObject*); static PyObject* signalInstanceDisconnect(PyObject*, PyObject*); static PyObject* signalInstanceEmit(PyObject*, PyObject*); @@ -68,6 +70,13 @@ static PyObject* signalInstanceGetItem(PyObject*, PyObject*); static PyObject* signalInstanceCall(PyObject* self, PyObject* args, PyObject* kw); static PyObject* signalCall(PyObject*, PyObject*, PyObject*); +static PyMappingMethods Signal_as_mapping = { + 0, + signalGetItem, + 0 +}; + + PyTypeObject PySideSignalType = { PyObject_HEAD_INIT(0) /*ob_size*/ 0, @@ -82,10 +91,10 @@ PyTypeObject PySideSignalType = { /*tp_repr*/ 0, /*tp_as_number*/ 0, /*tp_as_sequence*/ 0, - /*tp_as_mapping*/ 0, + /*tp_as_mapping*/ &Signal_as_mapping, /*tp_hash*/ 0, /*tp_call*/ signalCall, - /*tp_str*/ 0, + /*tp_str*/ signalToString, /*tp_getattro*/ 0, /*tp_setattro*/ 0, /*tp_as_buffer*/ 0, @@ -234,6 +243,31 @@ void signalFree(void *self) pySelf->ob_type->tp_base->tp_free(self); } +PyObject* signalGetItem(PyObject* self, PyObject* key) +{ + SignalData* data = reinterpret_cast<SignalData*>(self); + char* sigKey; + if (key) { + sigKey = PySide::signalParseSignature(key); + } else { + if (data->signatures[0]) + sigKey = strdup(data->signatures[0]); + else + sigKey = strdup("void"); + } + char* sig = PySide::signalBuildSignature(data->signalName, sigKey); + free(sigKey); + PyObject* pySignature = PyString_FromString(sig); + free(sig); + return pySignature; +} + + +PyObject* signalToString(PyObject* self) +{ + return signalGetItem(self, 0); +} + void signalInstanceFree(void* self) { PyObject* pySelf = reinterpret_cast<PyObject*>(self); @@ -543,8 +577,10 @@ void signalInstanceInitialize(PyObject* instance, PyObject* name, SignalData* da selfPvt->next = 0; if (data->signalName) selfPvt->signalName = strdup(data->signalName); - else + else { selfPvt->signalName = strdup(PyString_AsString(name)); + data->signalName = strdup(selfPvt->signalName); + } selfPvt->source = source; selfPvt->signature = signalBuildSignature(self->d->signalName, data->signatures[index]); @@ -628,4 +664,12 @@ const char* getSignalSignature(PySideSignalInstanceData* signal) return signal->d->signature; } + +const char** getSignalSignatures(PyObject* signal, int *size) +{ + SignalData *self = reinterpret_cast<SignalData*>(signal); + *size = self->signaturesSize; + return (const char**) self->signatures; +} + } //namespace PySide |