diff options
author | Luciano Wolf <luciano.wolf@openbossa.org> | 2010-02-04 16:59:52 -0300 |
---|---|---|
committer | Renato Filho <renato.filho@openbossa.org> | 2010-02-05 11:15:47 -0300 |
commit | af9f990d61600a6746567b44352986b2c575430a (patch) | |
tree | 3f0a80eb55a933ef54a49b13c76b437fb586b3a0 /libpyside/signalmanager.cpp | |
parent | 41744e427a8bd5d04c25e5849f83115ff927cfd4 (diff) |
Backporting Qt4.6 support from PySide (Boost) to Shiboken, plus:
Implemented inject code for QState.addTransition - by Renato Araujo.
QState test - by Renato Araujo.
Diffstat (limited to 'libpyside/signalmanager.cpp')
-rw-r--r-- | libpyside/signalmanager.cpp | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/libpyside/signalmanager.cpp b/libpyside/signalmanager.cpp index 22b6d80fc..7a3236fd1 100644 --- a/libpyside/signalmanager.cpp +++ b/libpyside/signalmanager.cpp @@ -42,6 +42,7 @@ #include <QDebug> #include <limits> #include <typeresolver.h> +#include <basewrapper.h> #if QSLOT_CODE != 1 || QSIGNAL_CODE != 2 #error QSLOT_CODE and/or QSIGNAL_CODE changed! change the hardcoded stuff to the correct value! @@ -289,3 +290,24 @@ int PySide::SignalManager::qt_metacall(QObject* object, QMetaObject::Call call, } return -1; } + +bool SignalManager::registerMetaMethod(QObject* source, const char* signature, QMetaMethod::MethodType type) +{ + const QMetaObject* metaObject = source->metaObject(); + int methodIndex = metaObject->indexOfMethod(signature); + // Create the dynamic signal is needed + if (methodIndex == -1) { + Shiboken::SbkBaseWrapper* self = (Shiboken::SbkBaseWrapper*) Shiboken::BindingManager::instance().retrieveWrapper(source); + if (!self->containsCppWrapper) { + qWarning() << "You can't add dynamic signals or slots on an object originated from C++."; + return false; + } else { + PySide::DynamicQMetaObject* dynMetaObj = reinterpret_cast<PySide::DynamicQMetaObject*>(const_cast<QMetaObject*>(metaObject)); + if (type == QMetaMethod::Signal) + dynMetaObj->addSignal(signature); + else + dynMetaObj->addSlot(signature); + } + } + return true; +} |