X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsyncableobject.h;h=bec189a62c29e37bdee99adbf3609955c9fcbb58;hp=92746f870237165cff29683e94d6c6677e26ca50;hb=3f7cb44fffb2beea003892fa2709025d23040c17;hpb=2a00e8f57d66d9913a10c30408b89676a74010a1 diff --git a/src/common/syncableobject.h b/src/common/syncableobject.h index 92746f87..bec189a6 100644 --- a/src/common/syncableobject.h +++ b/src/common/syncableobject.h @@ -28,13 +28,36 @@ #include "signalproxy.h" + + +#define SYNCABLE_OBJECT static const int _classNameOffset__; +#define INIT_SYNCABLE_OBJECT(x) const int x ::_classNameOffset__ = QByteArray(staticMetaObject.className()).length() + 2; + +#ifdef Q_CC_MSVC +# 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_CC_MSVC + +#define SYNC_OTHER(x, ...) sync_call__(SignalProxy::Server, #x, __VA_ARGS__); +#define REQUEST_OTHER(x, ...) sync_call__(SignalProxy::Client, #x, __VA_ARGS__); + + +#define ARG(x) const_cast(reinterpret_cast(&x)) +#define NO_ARG 0 + + class SyncableObject : public QObject { + SYNCABLE_OBJECT Q_OBJECT public: SyncableObject(QObject *parent = 0); SyncableObject(const QString &objectName, QObject *parent = 0); SyncableObject(const SyncableObject &other, QObject *parent = 0); + ~SyncableObject(); //! Stores the object's state into a QVariantMap. /** The default implementation takes dynamic properties as well as getters that have @@ -67,7 +90,7 @@ public slots: virtual void update(const QVariantMap &properties); protected: - void sync_call__(SignalProxy::ProxyMode modeType, const char *funcname, ...); + void sync_call__(SignalProxy::ProxyMode modeType, const char *funcname, ...) const; void renameObject(const QString &newName); SyncableObject &operator=(const SyncableObject &other); @@ -75,12 +98,11 @@ protected: signals: void initDone(); void updatedRemotely(); - void updated(const QVariantMap &properties); - void updateRequested(const QVariantMap &properties); - void objectRenamed(QString newName, QString oldName); + void updated(); private: void synchronize(SignalProxy *proxy); + void stopSynchronize(SignalProxy *proxy); bool setInitValue(const QString &property, const QVariant &value); @@ -92,19 +114,4 @@ private: 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