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 /PySide/QtCore | |
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 'PySide/QtCore')
-rw-r--r-- | PySide/QtCore/CMakeLists.txt | 29 | ||||
-rw-r--r-- | PySide/QtCore/glue/qobject_connect.cpp | 25 | ||||
-rw-r--r-- | PySide/QtCore/typesystem_core.xml | 225 |
3 files changed, 257 insertions, 22 deletions
diff --git a/PySide/QtCore/CMakeLists.txt b/PySide/QtCore/CMakeLists.txt index 25d8fb75c..e642544e8 100644 --- a/PySide/QtCore/CMakeLists.txt +++ b/PySide/QtCore/CMakeLists.txt @@ -1,5 +1,32 @@ project(QtCore) +if (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6) + set (QtCore_46_SRC ) +else (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6) + set(QtCore_46_SRC + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qeasingcurve_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qabstractanimation_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qabstractstate_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qabstracttransition_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qanimationgroup_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qeventtransition_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qfinalstate_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qhistorystate_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qmargins_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qparallelanimationgroup_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qpauseanimation_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qprocessenvironment_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qpropertyanimation_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qsequentialanimationgroup_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qsignaltransition_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qstate_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qstatemachine_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qstatemachine_signalevent_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qstatemachine_wrappedevent_wrapper.cpp + ${CMAKE_CURRENT_BINARY_DIR}/${BINDING_NAME}/QtCore/qvariantanimation_wrapper.cpp + ) +endif (${QT_VERSION_MAJOR} EQUAL 4 AND ${QT_VERSION_MINOR} LESS 6) + set(QtCore_SRC ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qabstracteventdispatcher_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qabstractfileengine_wrapper.cpp @@ -99,6 +126,8 @@ ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamnamespacedeclaration_wrapper ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamnotationdeclaration_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamreader_wrapper.cpp ${CMAKE_CURRENT_BINARY_DIR}/PySide/QtCore/qxmlstreamwriter_wrapper.cpp + +${QtCore_46_SRC} ) execute_generator(core QtCore_SRC "") diff --git a/PySide/QtCore/glue/qobject_connect.cpp b/PySide/QtCore/glue/qobject_connect.cpp index 5d9143f7c..4fc120a78 100644 --- a/PySide/QtCore/glue/qobject_connect.cpp +++ b/PySide/QtCore/glue/qobject_connect.cpp @@ -1,33 +1,14 @@ -static void registerDynSignalSlot(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) { - SbkBaseWrapper* self = (SbkBaseWrapper*) BindingManager::instance().retrieveWrapper(source); - if (!self->containsCppWrapper) { - qWarning() << "You can't add dynamic signals or slots on an object originated from C++."; - } else { - PySide::DynamicQMetaObject* dynMetaObj = reinterpret_cast<PySide::DynamicQMetaObject*>(const_cast<QMetaObject*>(metaObject)); - if (type == QMetaMethod::Signal) - dynMetaObj->addSignal(signature); - else - dynMetaObj->addSlot(signature); - } - } -} - static bool qobjectConnect(QObject* source, const char* signal, QObject* receiver, const char* slot, Qt::ConnectionType type) { if (!PySide::checkSignal(signal)) return false; signal++; - registerDynSignalSlot(source, signal, QMetaMethod::Signal); + PySide::SignalManager::registerMetaMethod(source, signal, QMetaMethod::Signal); bool isSignal = PySide::isSignal(slot); slot++; - registerDynSignalSlot(receiver, slot, isSignal ? QMetaMethod::Signal : QMetaMethod::Slot); + PySide::SignalManager::registerMetaMethod(receiver, slot, isSignal ? QMetaMethod::Signal : QMetaMethod::Slot); return QObject::connect(source, signal - 1, receiver, slot - 1, type); } @@ -37,7 +18,7 @@ static bool qobjectConnectCallback(QObject* source, const char* signal, PyObject return false; signal++; - registerDynSignalSlot(source, signal, QMetaMethod::Signal); + PySide::SignalManager::registerMetaMethod(source, signal, QMetaMethod::Signal); int signalIndex = source->metaObject()->indexOfMethod(signal); PySide::SignalManager& signalManager = PySide::SignalManager::instance(); diff --git a/PySide/QtCore/typesystem_core.xml b/PySide/QtCore/typesystem_core.xml index 100ae118c..02aa6ff5a 100644 --- a/PySide/QtCore/typesystem_core.xml +++ b/PySide/QtCore/typesystem_core.xml @@ -267,6 +267,20 @@ <rejection class="" function-name="qvsnprintf"/> <rejection class="" function-name="qWarning"/> <rejection class="QThreadPool"/> + <!-- From Qt4.6 --> + <rejection class="*" field-name="d_ptr"/> + <rejection class="*" function-name="qobject_interface_iid"/> + <rejection class="*" function-name="qGetPtrHelper"/> + <rejection class="*" function-name="q_check_ptr"/> + <rejection class="*" function-name="qobject_interface_iid<QTextCodecFactoryInterface*>"/> + <rejection class="*" function-name="qobject_interface_iid<QFactoryInterface*>"/> + <rejection class="*" function-name="qRegisterAnimationInterpolator"/> + <rejection class="*" function-name="qvariant_cast<QVariant>"/> + <rejection class="*" function-name="qVariantSetValue<QVariant>"/> + <rejection class="*" function-name="qReallocAligned"/> + <rejection class="*" function-name="qMallocAligned"/> + <rejection class="*" function-name="qFreeAligned"/> + <!-- From Qt4.6 ^^^ --> <enum-type name="QXmlStreamReader::Error"/> <enum-type name="QXmlStreamReader::TokenType"/> <enum-type name="QString::NormalizationForm" /> @@ -280,6 +294,26 @@ <enum-type name="QChar::CombiningClass" /> <enum-type name="QLineF::IntersectType" /> <enum-type name="QVariant::Type" /> + <!-- From Qt4.6 --> + <enum-type name="QXmlStreamReader::ReadElementTextBehaviour"/> + <enum-type name="QDataStream::FloatingPointPrecision"/> + <enum-type name="QtValidLicenseForOpenVGModule"/> + <enum-type name="QtValidLicenseForMultimediaModule"/> + <enum-type name="Qt::GestureFlag" flags="Qt::GestureFlags"/> + <enum-type name="Qt::GestureType"/> + <enum-type name="Qt::GestureState"/> + <enum-type name="Qt::CoordinateSystem"/> + <enum-type name="Qt::TileRule"/> + <enum-type name="Qt::Initialization"/> + <enum-type name="Qt::AnchorPoint"/> + <enum-type name="Qt::NavigationMode"/> + <enum-type name="Qt::InputMethodHint"/> + <enum-type name="Qt::TouchPointState"/> + <enum-type name="QEasingCurve::Type"/> + <enum-type name="QAbstractAnimation::DeletionPolicy"/> + <enum-type name="QAbstractAnimation::Direction"/> + <enum-type name="QAbstractAnimation::State"/> + <!-- From Qt4.6 ^^^ --> <primitive-type name="qint8"/> <primitive-type name="qint16"/> <primitive-type name="qint32"/> @@ -2746,6 +2780,197 @@ <value-type name="QMetaEnum"> <modify-function signature="enclosingMetaObject()const" remove="all" /> </value-type> + <!-- From Qt4.6 --> + <object-type name="QAbstractAnimation"/> + + <object-type name="QAbstractState"/> + + <object-type name="QAbstractTransition"> + <modify-function signature="QAbstractTransition(QState*)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="addAnimation(QAbstractAnimation*)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="removeAnimation(QAbstractAnimation*)"> + <modify-argument index="1"> + <parent index="this" action="remove"/> + </modify-argument> + </modify-function> + + <!-- http://bugs.openbossa.org/show_bug.cgi?id=123 + <modify-function signature="setTargetStates(QList<QAbstractState*>)" remove="all"/> + <modify-function signature="targetStates() const " remove="all"/>--> + </object-type> + + <object-type name="QAnimationGroup"> + <modify-function signature="addAnimation(QAbstractAnimation*)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="insertAnimation(int, QAbstractAnimation*)"> + <modify-argument index="2"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="removeAnimation(QAbstractAnimation*)"> + <modify-argument index="1"> + <parent index="this" action="remove"/> + </modify-argument> + </modify-function> + + <modify-function signature="takeAnimation(int)"> + <modify-argument index="return"> + <parent index="this" action="remove"/> + </modify-argument> + </modify-function> + + <modify-function signature="clear()" > + <inject-code class="target" position="beginning"> + for(int counter = 0; counter < %CPPSELF.animationCount(); ++counter ) { + PyObject* obj = %CONVERTTOPYTHON[QAbstractAnimation*](%CPPSELF.animationAt(counter)); + Shiboken::setParent(NULL, obj); + Py_DECREF(obj); + } + %CPPSELF.clear(); + </inject-code> + </modify-function> + </object-type> + + <rejection class="QContiguousCache"/> + + <value-type name="QEasingCurve"> + <modify-function signature="customType() const" remove="all"/> + <modify-function signature="setCustomType(double)" remove="all"/> + </value-type> + + <object-type name="QEventTransition"> + <modify-function signature="QEventTransition(QState*)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="QEventTransition(QObject*, QEvent::Type, QState*)"> + <modify-argument index="3"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + </object-type> + + <object-type name="QFinalState"/> + + <enum-type name="QHistoryState::HistoryType" /> + <object-type name="QHistoryState"/> + + <value-type name="QMargins"/> + + <object-type name="QParallelAnimationGroup"/> + + <object-type name="QPauseAnimation"/> + + <value-type name="QProcessEnvironment"/> + + <object-type name="QPropertyAnimation"/> + + <rejection class="QScopedPointer"/> + + <object-type name="QSequentialAnimationGroup"/> + + <object-type name="QSignalTransition"/> + + <enum-type name="QState::ChildMode"/> + <object-type name="QState"> + <modify-function signature="addTransition(QAbstractTransition*)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="addTransition(QObject*, const char*, QAbstractState*)"> + <modify-argument index="return"> + <parent index="this" action="add"/> + </modify-argument> + <inject-code class="target" position="beginning"> + QString signalName(%2); + if (PySide::SignalManager::registerMetaMethod(%1, signalName.mid(1).toAscii().data(), QMetaMethod::Signal)) { + %PYARG_0 = %CONVERTTOPYTHON[QSignalTransition*](%CPPSELF->addTransition(%1, %2, %3)); + } else { + %PYARG_0 = Py_None; + } + </inject-code> + </modify-function> + + <modify-function signature="addTransition(QAbstractState*)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + + <modify-function signature="removeTransition(QAbstractTransition*)"> + <modify-argument index="1"> + <parent index="this" action="remove"/> + </modify-argument> + </modify-function> + </object-type> + + <enum-type name="QStateMachine::Error"/> + <enum-type name="QStateMachine::EventPriority"/> + <enum-type name="QStateMachine::RestorePolicy"/> + <object-type name="QStateMachine"> + <modify-function signature="addState(QAbstractState *)"> + <modify-argument index="1"> + <parent index="this" action="add"/> + </modify-argument> + </modify-function> + <modify-function signature="removeState(QAbstractState *)"> + <modify-argument index="1"> + <parent index="this" action="remove"/> + </modify-argument> + </modify-function> + + <!-- http://bugs.openbossa.org/show_bug.cgi?id=123 --> + <modify-function signature="configuration() const" remove="all"/> + <modify-function signature="defaultAnimations() const" remove="all"/> + + <add-function signature="configuration()" return-type="PySequence*" > + <inject-code class="target" position="beginning"> + %PYARG_0 = PySet_New(0); + foreach(QAbstractState* abs_state, %CPPSELF.configuration()) { + Shiboken::AutoDecRef obj(%CONVERTTOPYTHON[QAbstractState*](abs_state)); + Shiboken::setParent(self, obj); + PySet_Add(%PYARG_0, obj); + } + </inject-code> + </add-function> + + <add-function signature="defaultAnimations()" return-type="PySequence*" > + <inject-code class="target" position="beginning"> + %PYARG_0 = PyList_New(0); + foreach(QAbstractAnimation* abs_anim, %CPPSELF.defaultAnimations()) { + Shiboken::AutoDecRef obj(%CONVERTTOPYTHON[QAbstractAnimation*](abs_anim)); + Shiboken::setParent(self, obj); + PyList_Append(%PYARG_0, obj); + } + </inject-code> + </add-function> + </object-type> + <value-type name="QStateMachine::SignalEvent"/> + <value-type name="QStateMachine::WrappedEvent"/> + + <object-type name="QVariantAnimation"/> + + <!-- From Qt4.6 ^^^ --> <add-function signature="SIGNAL(const char*)" return-type="PyString*"> <inject-code class="target" position="beginning"> |