Big, big, major commit this time:
[quassel.git] / main / quassel.h
index 3d2b541..ad4cb1d 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#ifndef _QUASSEL_H_
-#define _QUASSEL_H_
+#ifndef _GLOBAL_H_
+#define _GLOBAL_H_
 
-class Quassel;
+/** The protocol version we use fo the communication between core and GUI */
+#define GUI_PROTOCOL 1
+
+class Global;
 
 #include <QtCore>
 //#include <QMutex>
 
 /* Some global stuff */
 typedef QMap<QString, QVariant> VarMap;
-extern Quassel *quassel;
+extern Global *global;
 
 /**
- * A static class containing global data.
- * This is used in both core and GUI modules. Where appropriate, accessors are thread-safe
- * to account for that fact.
- */
-class Quassel : public QObject {
+ * This class is mostly a globally synchronized data store, meant for storing systemwide settings such
+ * as identities or network lists. This class is a singleton, but not static as we'd like to use signals and
+ * slots with it.
+ * The global object is used in both Core and GUI clients. Storing and retrieving data is thread-safe.
+ * \note While updated data is propagated to all the remote parts of Quassel quite quickly, the synchronization
+ *       protocol is in no way designed to guarantee strict consistency at all times. In other words, it may
+ *       well happen that different instances of global data differ from one another for a little while until
+ *       all update messages have been processed. You should never rely on all global data stores being consistent.
+*/
+class Global : public QObject {
   Q_OBJECT
 
   public:
-    Quassel();
+    Global();
     //static Logger *getLogger();
     //static void setLogger(Logger *);
 
 //    static QIcon *getIcon(QString symbol);
 
-    QVariant getData(QString key);
+    QVariant getData(QString key, QVariant defaultValue = QVariant());
+    QStringList getKeys();
 
   public slots:
-    void putData(QString key, const QVariant &data);
+    void putData(QString key, QVariant data);      ///< Store data changed locally, will be propagated to all other clients and the core
+    void updateData(QString key, QVariant data);   ///< Update stored data if requested by the core or other clients
 
   signals:
-    void dataChanged(QString key, const QVariant &data);
+    void dataPutLocally(QString key);
+    void dataUpdatedRemotely(QString key);  // sent by remote update only!
 
   public:
     enum RunMode { Monolithic, GUIOnly, CoreOnly };
@@ -59,7 +70,7 @@ class Quassel : public QObject {
 
   private:
     static void initIconMap();
-    
+
     //static Logger *logger;
 
 //    static QString iconPath;