X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsyncableobject.h;h=92746f870237165cff29683e94d6c6677e26ca50;hp=c746d8383c273b1a05ba26646ff0daeebffa26bb;hb=2a00e8f57d66d9913a10c30408b89676a74010a1;hpb=f7eb3911860f30e6bccce3c77d03fc25e87d7f93 diff --git a/src/common/syncableobject.h b/src/common/syncableobject.h index c746d838..92746f87 100644 --- a/src/common/syncableobject.h +++ b/src/common/syncableobject.h @@ -1,5 +1,5 @@ /*************************************************************************** - * 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 * @@ -18,19 +18,22 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _SYNCABLEOBJECT_H_ -#define _SYNCABLEOBJECT_H_ +#ifndef SYNCABLEOBJECT_H +#define SYNCABLEOBJECT_H #include #include #include #include +#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); //! Stores the object's state into a QVariantMap. @@ -45,7 +48,7 @@ public: * \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. */ @@ -61,9 +64,11 @@ public: 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); @@ -75,11 +80,31 @@ signals: void objectRenamed(QString newName, QString oldName); private: + void synchronize(SignalProxy *proxy); + bool setInitValue(const QString &property, const QVariant &value); - + bool _initialized; bool _allowClientUpdates; + QList _signalProxies; + + friend class SignalProxy; }; +#define SYNCABLE_OBJECT static const int _classNameOffset__; +#define INIT_SYNCABLE_OBJECT(x) const int x ::_classNameOffset__ = QByteArray(staticMetaObject.className()).length() + 2; + +#ifdef Q_WS_WIN +# define SYNC(...) sync_call__(SignalProxy::Server, (__FUNCTION__ + _classNameOffset__), __VA_ARGS__); +# define REQUEST(...) sync_call__(SignalProxy::Client, (__FUNCTION__ + _classNameOffset__) , __VA_ARGS__); +#else +# define SYNC(...) sync_call__(SignalProxy::Server, __func__, __VA_ARGS__); +# define REQUEST(...) sync_call__(SignalProxy::Client, __func__, __VA_ARGS__); +#endif //Q_WS_WIN + + +#define ARG(x) const_cast(reinterpret_cast(&x)) +#define NO_ARG 0 + #endif