X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcommon%2Fsyncableobject.h;h=9031f1368b02edf40556b13f66586aef148ac7a8;hp=3ddef14ca852955ece59e66c130dd7f8c5b07baf;hb=158443f71d48215eea8b47b836b61afd77654b78;hpb=9d54503555534a2c554f09a33df6afa33d6308ec diff --git a/src/common/syncableobject.h b/src/common/syncableobject.h index 3ddef14c..9031f136 100644 --- a/src/common/syncableobject.h +++ b/src/common/syncableobject.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2014 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,8 +18,9 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef SYNCABLEOBJECT_H -#define SYNCABLEOBJECT_H +#pragma once + +#include "common-export.h" #include #include @@ -28,16 +29,22 @@ #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 +/** + * This macro needs to be declared in syncable objects, next to the Q_OBJECT macro. + * + * @note: Specializations of a base syncable object for core/client must not use the macro; + * i.e., if you have Foo, ClientFoo and/or CoreFoo, the SYNCABLE_OBJECT macro would + * only be declared in the class declaration of Foo. + */ +#define SYNCABLE_OBJECT \ + public: \ + const QMetaObject *syncMetaObject() const final override { \ + return &staticMetaObject; \ + } \ + private: \ + +#define SYNC(...) sync_call__(SignalProxy::Server, __func__, __VA_ARGS__); +#define REQUEST(...) sync_call__(SignalProxy::Client, __func__, __VA_ARGS__); #define SYNC_OTHER(x, ...) sync_call__(SignalProxy::Server, #x, __VA_ARGS__); #define REQUEST_OTHER(x, ...) sync_call__(SignalProxy::Client, #x, __VA_ARGS__); @@ -45,16 +52,15 @@ #define ARG(x) const_cast(reinterpret_cast(&x)) #define NO_ARG 0 -class SyncableObject : public QObject +class COMMON_EXPORT SyncableObject : public QObject { - SYNCABLE_OBJECT - Q_OBJECT + Q_OBJECT public: - SyncableObject(QObject *parent = 0); - SyncableObject(const QString &objectName, QObject *parent = 0); - SyncableObject(const SyncableObject &other, QObject *parent = 0); - ~SyncableObject(); + SyncableObject(QObject *parent = nullptr); + SyncableObject(const QString &objectName, QObject *parent = nullptr); + SyncableObject(const SyncableObject &other, QObject *parent = nullptr); + ~SyncableObject() override; //! Stores the object's state into a QVariantMap. /** The default implementation takes dynamic properties as well as getters that have @@ -76,7 +82,7 @@ public: virtual bool isInitialized() const; - virtual const QMetaObject *syncMetaObject() const { return metaObject(); }; + virtual const QMetaObject *syncMetaObject() const { return metaObject(); } inline void setAllowClientUpdates(bool allow) { _allowClientUpdates = allow; } inline bool allowClientUpdates() const { return _allowClientUpdates; } @@ -103,13 +109,10 @@ private: bool setInitValue(const QString &property, const QVariant &value); - bool _initialized; - bool _allowClientUpdates; + bool _initialized{false}; + bool _allowClientUpdates{false}; QList _signalProxies; friend class SignalProxy; }; - - -#endif