aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside/signalmanager.cpp
diff options
context:
space:
mode:
authorLuciano Wolf <luciano.wolf@openbossa.org>2010-02-04 16:59:52 -0300
committerRenato Filho <renato.filho@openbossa.org>2010-02-05 11:15:47 -0300
commitaf9f990d61600a6746567b44352986b2c575430a (patch)
tree3f0a80eb55a933ef54a49b13c76b437fb586b3a0 /libpyside/signalmanager.cpp
parent41744e427a8bd5d04c25e5849f83115ff927cfd4 (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.cpp22
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;
+}