aboutsummaryrefslogtreecommitdiffstats
path: root/libpyside
diff options
context:
space:
mode:
authorrenatofilho <renato.filho@openbossa.org>2010-09-14 13:03:39 -0300
committerrenatofilho <renato.filho@openbossa.org>2010-09-14 18:31:02 -0300
commit42f917666904f4eb93002eae2de70d1f225f438f (patch)
tree533fd8c378cea9331c6e0d41bdcbe88245746ca6 /libpyside
parent149646c766fd46f7f59922436c0323fd6a2d78a4 (diff)
Increased global receiver maximun slots support.
Fixes bug #312. Reviewer: Hugo Parente Lima <hugo.pl@gmail.com> Luciano Wolf <luciano.wolf@openbossa.org>
Diffstat (limited to 'libpyside')
-rw-r--r--libpyside/dynamicqmetaobject.cpp47
-rw-r--r--libpyside/globalreceiver.cpp3
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);