Make the EventType meta enum and related accessors static
authorManuel Nickschas <sputnick@quassel-irc.org>
Sat, 17 Mar 2012 13:50:55 +0000 (14:50 +0100)
committerManuel Nickschas <sputnick@quassel-irc.org>
Mon, 21 May 2012 21:36:14 +0000 (23:36 +0200)
That way, we can use methods like eventTypeByName() without having an object
instance.

src/common/eventmanager.cpp
src/common/eventmanager.h

index 13614f3..03e891f 100644 (file)
@@ -44,27 +44,31 @@ EventManager::EventManager(QObject *parent)
   : QObject(parent) {
 }
 
   : QObject(parent) {
 }
 
-QMetaEnum EventManager::eventEnum() const {
+QMetaEnum EventManager::eventEnum() {
   if(!_enum.isValid()) {
   if(!_enum.isValid()) {
-    int eventEnumIndex = metaObject()->indexOfEnumerator("EventType");
+    int eventEnumIndex = staticMetaObject.indexOfEnumerator("EventType");
     Q_ASSERT(eventEnumIndex >= 0);
     Q_ASSERT(eventEnumIndex >= 0);
-    _enum = metaObject()->enumerator(eventEnumIndex);
+    _enum = staticMetaObject.enumerator(eventEnumIndex);
     Q_ASSERT(_enum.isValid());
   }
   return _enum;
 }
 
     Q_ASSERT(_enum.isValid());
   }
   return _enum;
 }
 
-EventManager::EventType EventManager::eventTypeByName(const QString &name) const {
+EventManager::EventType EventManager::eventTypeByName(const QString &name) {
   int val = eventEnum().keyToValue(name.toLatin1());
   return (val == -1) ? Invalid : static_cast<EventType>(val);
 }
 
   int val = eventEnum().keyToValue(name.toLatin1());
   return (val == -1) ? Invalid : static_cast<EventType>(val);
 }
 
-EventManager::EventType EventManager::eventGroupByName(const QString &name) const {
+EventManager::EventType EventManager::eventGroupByName(const QString &name) {
   EventType type = eventTypeByName(name);
   return type == Invalid? Invalid : static_cast<EventType>(type & EventGroupMask);
 }
 
   EventType type = eventTypeByName(name);
   return type == Invalid? Invalid : static_cast<EventType>(type & EventGroupMask);
 }
 
-QString EventManager::enumName(EventType type) const {
+QString EventManager::enumName(EventType type) {
+  return eventEnum().valueToKey(type);
+}
+
+QString EventManager::enumName(int type) {
   return eventEnum().valueToKey(type);
 }
 
   return eventEnum().valueToKey(type);
 }
 
@@ -295,3 +299,5 @@ void EventManager::insertFilters(const QList<Handler> &newFilters, QHash<QObject
       existing[filter.object] = filter;
   }
 }
       existing[filter.object] = filter;
   }
 }
+
+QMetaEnum EventManager::_enum;
index 1a952fb..7ead8ba 100644 (file)
@@ -112,10 +112,10 @@ public:
 
   EventManager(QObject *parent = 0);
 
 
   EventManager(QObject *parent = 0);
 
-  EventType eventTypeByName(const QString &name) const;
-  EventType eventGroupByName(const QString &name) const;
-
-  QString enumName(EventType type) const;
+  static EventType eventTypeByName(const QString &name);
+  static EventType eventGroupByName(const QString &name);
+  static QString enumName(EventType type);
+  static QString enumName(int type); // for sanity tests
 
 public slots:
   void registerObject(QObject *object, Priority priority = NormalPriority,
 
 public slots:
   void registerObject(QObject *object, Priority priority = NormalPriority,
@@ -171,12 +171,12 @@ private:
   void dispatchEvent(Event *event);
 
   //! @return the EventType enum
   void dispatchEvent(Event *event);
 
   //! @return the EventType enum
-  QMetaEnum eventEnum() const;
+  static QMetaEnum eventEnum();
 
   HandlerHash _registeredHandlers;
   HandlerHash _registeredFilters;
 
   HandlerHash _registeredHandlers;
   HandlerHash _registeredFilters;
-  mutable QMetaEnum _enum;
   QList<Event *> _eventQueue;
   QList<Event *> _eventQueue;
+  static QMetaEnum _enum;
 };
 
 Q_DECLARE_OPERATORS_FOR_FLAGS(EventManager::EventFlags);
 };
 
 Q_DECLARE_OPERATORS_FOR_FLAGS(EventManager::EventFlags);