diff options
author | renatofilho <renato.filho@openbossa.org> | 2010-09-14 13:03:39 -0300 |
---|---|---|
committer | renatofilho <renato.filho@openbossa.org> | 2010-09-14 18:31:02 -0300 |
commit | 42f917666904f4eb93002eae2de70d1f225f438f (patch) | |
tree | 533fd8c378cea9331c6e0d41bdcbe88245746ca6 | |
parent | 149646c766fd46f7f59922436c0323fd6a2d78a4 (diff) |
Increased global receiver maximun slots support.
Fixes bug #312.
Reviewer: Hugo Parente Lima <hugo.pl@gmail.com>
Luciano Wolf <luciano.wolf@openbossa.org>
-rw-r--r-- | libpyside/dynamicqmetaobject.cpp | 47 | ||||
-rw-r--r-- | libpyside/globalreceiver.cpp | 3 |
2 files changed, 41 insertions, 9 deletions
diff --git a/libpyside/dynamicqmetaobject.cpp b/libpyside/dynamicqmetaobject.cpp index 8ca983ed7..c2e7f04bb 100644 --- a/libpyside/dynamicqmetaobject.cpp +++ b/libpyside/dynamicqmetaobject.cpp @@ -36,6 +36,11 @@ #define MAX_SIGNALS_COUNT 50 #define MAX_SLOTS_COUNT 50 +#define MAX_GLOBAL_SIGNALS_COUNT 500 +#define MAX_GLOBAL_SLOTS_COUNT 500 + +#define GLOBAL_RECEIVER_CLASS_NAME "__GlobalReceiver__" + using namespace PySide; enum PropertyFlags { @@ -110,6 +115,27 @@ static bool isQRealType(const char *type) return strcmp(type, "qreal") == 0; } + + +/* + * Avoid API break keep this on cpp + */ +static int maxSlotsCount(const QString& className) +{ + int maxSlots = MAX_SLOTS_COUNT; + if (className == GLOBAL_RECEIVER_CLASS_NAME) + maxSlots = MAX_GLOBAL_SIGNALS_COUNT; + return maxSlots; +} + +static int maxSignalsCount(const QString& className) +{ + int maxSignals = MAX_SIGNALS_COUNT; + if (className == GLOBAL_RECEIVER_CLASS_NAME) + maxSignals = MAX_GLOBAL_SIGNALS_COUNT; + return maxSignals; +} + uint PropertyData::flags() const { const char* typeName = type().data(); @@ -271,8 +297,9 @@ void DynamicQMetaObject::addSignal(const char* signal, const char* type) return; } - if (m_signals.size() >= MAX_SIGNALS_COUNT) { - qWarning() << "Fail to add dynamic signal to QObject. PySide support at most" << MAX_SIGNALS_COUNT << "dynamic signals."; + int maxSignals = maxSignalsCount(m_className); + if (m_signals.size() >= maxSignals) { + qWarning() << "Fail to add dynamic signal to QObject. PySide support at most" << maxSignals << "dynamic signals."; return; } @@ -286,8 +313,9 @@ void DynamicQMetaObject::addSlot(const char* slot, const char* type) if (i != m_slots.end()) return; - if (m_slots.size() >= MAX_SLOTS_COUNT) { - qWarning() << "Fail to add dynamic slot to QObject. PySide support at most" << MAX_SLOTS_COUNT << "dynamic slots."; + int maxSlots = maxSlotsCount(m_className); + if (m_slots.size() >= maxSlots) { + qWarning() << "Fail to add dynamic slot to QObject. PySide support at most" << maxSlots << "dynamic slots."; return; } @@ -439,8 +467,11 @@ void DynamicQMetaObject::updateMetaObject() MethodScriptable = 0x40 }; - uint n_signals = MAX_SIGNALS_COUNT; - uint n_methods = n_signals + MAX_SLOTS_COUNT; + int maxSignals = maxSignalsCount(m_className); + int maxSlots = maxSlotsCount(m_className); + + uint n_signals = maxSignals; + uint n_methods = n_signals + maxSlots; uint n_properties = m_properties.size(); int header[] = {5, // revision 0, // class name index in m_metadata @@ -465,10 +496,10 @@ void DynamicQMetaObject::updateMetaObject() int index = HEADER_LENGHT; //write signals - writeMethodsData(m_signals, &data, &strings, &index, MAX_SIGNALS_COUNT, NULL_INDEX, AccessPublic | MethodSignal); + writeMethodsData(m_signals, &data, &strings, &index, maxSignals, NULL_INDEX, AccessPublic | MethodSignal); //write slots - writeMethodsData(m_slots, &data, &strings, &index, MAX_SLOTS_COUNT, NULL_INDEX, AccessPublic | MethodSlot); + writeMethodsData(m_slots, &data, &strings, &index, maxSlots, NULL_INDEX, AccessPublic | MethodSlot); if (m_properties.size()) data[7] = index; diff --git a/libpyside/globalreceiver.cpp b/libpyside/globalreceiver.cpp index 1b658e230..2dd82aab4 100644 --- a/libpyside/globalreceiver.cpp +++ b/libpyside/globalreceiver.cpp @@ -32,6 +32,7 @@ #include "signalmanager.h" #define RECEIVER_DESTROYED_SLOT_NAME "__receiverDestroyed__(QObject*)" +#define GLOBAL_RECEIVER_CLASS_NAME "__GlobalReceiver__" namespace PySide { @@ -108,7 +109,7 @@ DynamicSlotData::~DynamicSlotData() GlobalReceiver::GlobalReceiver() - : m_metaObject("GlobalReceiver", &QObject::staticMetaObject) + : m_metaObject(GLOBAL_RECEIVER_CLASS_NAME, &QObject::staticMetaObject) { //slot used to be notifyed of object destrouction m_metaObject.addSlot(RECEIVER_DESTROYED_SLOT_NAME); |