X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fbasichandler.cpp;h=6ad7828982ae317a5e6442ca325a669c8f29f751;hp=59fba8a29e54f4f7646c63191d6b6629c323d390;hb=ab7ef4d24f62b5848b628482b7762ebfc0b53e1a;hpb=513c0edce6f4c69f16e6a00c144877e8d5940096 diff --git a/src/common/basichandler.cpp b/src/common/basichandler.cpp index 59fba8a2..6ad78289 100644 --- a/src/common/basichandler.cpp +++ b/src/common/basichandler.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-10 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,70 +15,87 @@ * You should have received a copy of the GNU General Public License * * along with this program; if not, write to the * * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ + #include "basichandler.h" +#include #include -#include "logger.h" - BasicHandler::BasicHandler(QObject *parent) - : QObject(parent), - defaultHandler(-1), - initDone(false) + : QObject(parent), + _defaultHandler(-1), + _initDone(false), + _methodPrefix("handle") +{ +} + + +BasicHandler::BasicHandler(const QString &methodPrefix, QObject *parent) + : QObject(parent), + _defaultHandler(-1), + _initDone(false), + _methodPrefix(methodPrefix) { } -QStringList BasicHandler::providesHandlers() { - return handlerHash().keys(); + +QStringList BasicHandler::providesHandlers() +{ + return handlerHash().keys(); } -const QHash &BasicHandler::handlerHash() { - if(!initDone) { - for(int i = metaObject()->methodOffset(); i < metaObject()->methodCount(); i++) { - QString methodSignature(metaObject()->method(i).signature()); - if(methodSignature.startsWith("defaultHandler")) { - defaultHandler = i; - continue; - } - - if(!methodSignature.startsWith("handle")) - continue; - - methodSignature = methodSignature.section('(',0,0); // chop the attribute list - methodSignature = methodSignature.mid(6); // strip "handle" - _handlerHash[methodSignature] = i; + +const QHash &BasicHandler::handlerHash() +{ + if (!_initDone) { + for (int i = metaObject()->methodOffset(); i < metaObject()->methodCount(); i++) { + QString methodSignature = metaObject()->method(i).methodSignature(); + if (methodSignature.startsWith("defaultHandler")) { + _defaultHandler = i; + continue; + } + + if (!methodSignature.startsWith(_methodPrefix)) + continue; + + methodSignature = methodSignature.section('(', 0, 0); // chop the attribute list + methodSignature = methodSignature.mid(_methodPrefix.length()); // strip "handle" or whatever the prefix is + _handlerHash[methodSignature] = i; + } + _initDone = true; } - initDone = true; - } - return _handlerHash; + 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) { - // 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! - - QString handler = member.toLower(); - handler[0] = handler[0].toUpper(); - - if(!handlerHash().contains(handler)) { - if(defaultHandler == -1) { - qWarning() << QString("No such Handler: %1::handle%2").arg(metaObject()->className(), 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); - return; + 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! + + QString handler = member.toLower(); + handler[0] = handler[0].toUpper(); + + if (!handlerHash().contains(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); + 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}; - qt_metacall(QMetaObject::InvokeMetaMethod, handlerHash()[handler], param); + void *param[] = { 0, val0.data(), val1.data(), val2.data(), val3.data(), val4.data(), + val5.data(), val6.data(), val7.data(), val8.data(), val8.data(), 0 }; + qt_metacall(QMetaObject::InvokeMetaMethod, handlerHash()[handler], param); }