Allow arbitrary method prefix for BasicHandler
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 19 Oct 2010 18:56:21 +0000 (20:56 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 19 Oct 2010 21:49:01 +0000 (23:49 +0200)
This is mainly for making things a bit more readable in some cases. "handle" is still the
default.

src/common/basichandler.cpp
src/common/basichandler.h

index 59fba8a..fe80c33 100644 (file)
 
 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<QString, int> &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);
 }
index 5bfafe9..e62d128 100644 (file)
@@ -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<QString, int> &handlerHash();
   QHash<QString, int> _handlerHash;
-  int defaultHandler;
-  bool initDone;
+  int _defaultHandler;
+  bool _initDone;
+  QString _methodPrefix;
 };
 #endif