/***************************************************************************
- * Copyright (C) 2005-08 by the Quassel IRC Team *
+ * Copyright (C) 2005-09 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
-#ifndef _SYNCABLEOBJECT_H_
-#define _SYNCABLEOBJECT_H_
+#ifndef SYNCABLEOBJECT_H
+#define SYNCABLEOBJECT_H
#include <QDataStream>
#include <QMetaType>
#include <QObject>
#include <QVariantMap>
+#include "signalproxy.h"
+
class SyncableObject : public QObject {
Q_OBJECT
public:
SyncableObject(QObject *parent = 0);
+ SyncableObject(const QString &objectName, QObject *parent = 0);
SyncableObject(const SyncableObject &other, QObject *parent = 0);
+ void synchronize(SignalProxy *proxy);
+
//! Stores the object's state into a QVariantMap.
/** The default implementation takes dynamic properties as well as getters that have
* names starting with "init" and stores them in a QVariantMap. Override this method in
* \return The object's state in a QVariantMap
*/
virtual QVariantMap toVariantMap();
-
+
//! Initialize the object's state from a given QVariantMap.
/** \see toVariantMap() for important information concerning this method.
*/
public slots:
virtual void setInitialized();
void requestUpdate(const QVariantMap &properties);
- void update(const QVariantMap &properties);
+ virtual void update(const QVariantMap &properties);
protected:
+ void sync_call__(SignalProxy::ProxyMode modeType, const char *funcname, ...);
+
void renameObject(const QString &newName);
+ SyncableObject &operator=(const SyncableObject &other);
signals:
void initDone();
private:
bool setInitValue(const QString &property, const QVariant &value);
-
+
bool _initialized;
bool _allowClientUpdates;
+ QList<SignalProxy *> _signalProxies;
};
+#define so_sync(...) sync_call__(SignalProxy::Server, __func__, __VA_ARGS__);
+#define so_request(...) sync_call__(SignalProxy::Client, __func__, __VA_ARGS__);
+#define so_arg_cast(x) const_cast<void *>(reinterpret_cast<const void*>(&x))
+
+
#endif