From 1a2a0f1880d6c30166928addbfb7b11849ff15cc Mon Sep 17 00:00:00 2001 From: Manuel Nickschas Date: Tue, 19 Oct 2010 20:56:21 +0200 Subject: [PATCH] Allow arbitrary method prefix for BasicHandler This is mainly for making things a bit more readable in some cases. "handle" is still the default. --- src/common/basichandler.cpp | 49 ++++++++++++++++++++++--------------- src/common/basichandler.h | 6 +++-- 2 files changed, 33 insertions(+), 22 deletions(-) diff --git a/src/common/basichandler.cpp b/src/common/basichandler.cpp index 59fba8a2..fe80c33f 100644 --- a/src/common/basichandler.cpp +++ b/src/common/basichandler.cpp @@ -25,8 +25,17 @@ BasicHandler::BasicHandler(QObject *parent) : QObject(parent), - defaultHandler(-1), - initDone(false) + _defaultHandler(-1), + _initDone(false), + _methodPrefix("handle") +{ +} + +BasicHandler::BasicHandler(const QString &methodPrefix, QObject *parent) + : QObject(parent), + _defaultHandler(-1), + _initDone(false), + _methodPrefix(methodPrefix) { } @@ -35,31 +44,31 @@ QStringList BasicHandler::providesHandlers() { } const QHash &BasicHandler::handlerHash() { - if(!initDone) { + if(!_initDone) { for(int i = metaObject()->methodOffset(); i < metaObject()->methodCount(); i++) { QString methodSignature(metaObject()->method(i).signature()); if(methodSignature.startsWith("defaultHandler")) { - defaultHandler = i; - continue; + _defaultHandler = i; + continue; } - - if(!methodSignature.startsWith("handle")) - continue; - + + if(!methodSignature.startsWith(_methodPrefix)) + continue; + methodSignature = methodSignature.section('(',0,0); // chop the attribute list - methodSignature = methodSignature.mid(6); // strip "handle" + methodSignature = methodSignature.mid(_methodPrefix.length()); // strip "handle" or whatever the prefix is _handlerHash[methodSignature] = i; } - initDone = true; + _initDone = true; } return _handlerHash; } void BasicHandler::handle(const QString &member, QGenericArgument val0, - QGenericArgument val1, QGenericArgument val2, - QGenericArgument val3, QGenericArgument val4, - QGenericArgument val5, QGenericArgument val6, - QGenericArgument val7, QGenericArgument val8) { + QGenericArgument val1, QGenericArgument val2, + QGenericArgument val3, QGenericArgument val4, + QGenericArgument val5, QGenericArgument val6, + QGenericArgument val7, QGenericArgument val8) { // Now we try to find a handler for this message. BTW, I do love the Trolltech guys ;-) // and now we even have a fast lookup! Thanks thiago! @@ -67,18 +76,18 @@ void BasicHandler::handle(const QString &member, QGenericArgument val0, handler[0] = handler[0].toUpper(); if(!handlerHash().contains(handler)) { - if(defaultHandler == -1) { - qWarning() << QString("No such Handler: %1::handle%2").arg(metaObject()->className(), handler); + if(_defaultHandler == -1) { + qWarning() << QString("No such Handler: %1::%2%3").arg(metaObject()->className(), _methodPrefix, handler); return; } else { void *param[] = {0, Q_ARG(QString, member).data(), val0.data(), val1.data(), val2.data(), val3.data(), val4.data(), - val5.data(), val6.data(), val7.data(), val8.data(), val8.data()}; - qt_metacall(QMetaObject::InvokeMetaMethod, defaultHandler, param); + val5.data(), val6.data(), val7.data(), val8.data(), val8.data()}; + qt_metacall(QMetaObject::InvokeMetaMethod, _defaultHandler, param); return; } } void *param[] = {0, val0.data(), val1.data(), val2.data(), val3.data(), val4.data(), - val5.data(), val6.data(), val7.data(), val8.data(), val8.data(), 0}; + val5.data(), val6.data(), val7.data(), val8.data(), val8.data(), 0}; qt_metacall(QMetaObject::InvokeMetaMethod, handlerHash()[handler], param); } diff --git a/src/common/basichandler.h b/src/common/basichandler.h index 5bfafe96..e62d128f 100644 --- a/src/common/basichandler.h +++ b/src/common/basichandler.h @@ -32,6 +32,7 @@ class BasicHandler : public QObject { public: BasicHandler(QObject *parent = 0); + BasicHandler(const QString &methodPrefix, QObject *parent = 0); QStringList providesHandlers(); @@ -45,7 +46,8 @@ protected: private: const QHash &handlerHash(); QHash _handlerHash; - int defaultHandler; - bool initDone; + int _defaultHandler; + bool _initDone; + QString _methodPrefix; }; #endif -- 2.20.1