Provide (de)serialization for all event types
[quassel.git] / src / common / event.h
index 85081c5..e0fb8e3 100644 (file)
 
 #include "eventmanager.h"
 
+class Network;
+
 class Event {
 
 public:
   explicit Event(EventManager::EventType type = EventManager::Invalid);
-  virtual ~Event() {};
+  virtual ~Event() {}
 
   inline EventManager::EventType type() const { return _type; }
 
@@ -39,6 +41,7 @@ public:
   inline bool testFlag(EventManager::EventFlag flag) { return _flags.testFlag(flag); }
   inline EventManager::EventFlags flags() const { return _flags; }
 
+  inline bool isValid() const { return _valid; }
   inline void stop() { setFlag(EventManager::Stopped); }
   inline bool isStopped() { return _flags.testFlag(EventManager::Stopped); }
 
@@ -48,15 +51,28 @@ public:
   //inline void setData(const QVariant &data) { _data = data; }
   //inline QVariant data() const { return _data; }
 
+  // call EventManager::createEvent(map) instead!
+  static Event *fromVariantMap(QVariantMap &map, Network *network);
+  QVariantMap toVariantMap() const;
+
 protected:
   virtual inline QString className() const { return "Event"; }
   virtual inline void debugInfo(QDebug &dbg) const { Q_UNUSED(dbg); }
 
+  explicit Event(EventManager::EventType type, QVariantMap &map);
+
+  // must only use primitive types: string, int, double, list, hash
+  // we want to convert this to JSON in the future!
+  virtual void toVariantMap(QVariantMap &map) const;
+
+  inline void setValid(bool valid) { _valid = valid; }
+
 private:
   EventManager::EventType _type;
   EventManager::EventFlags _flags;
   QDateTime _timestamp;
   //QVariant _data;
+  bool _valid;
 
   friend QDebug operator<<(QDebug dbg, Event *e);
 };