#ifndef AUTOPROPERTY_H #define AUTOPROPERTY_H #include //See Gist Comment for description, usage, warnings and license information #define US_PROPERTY(TYPE, NAME, DEFAULT_VALUE) \ Q_PROPERTY(TYPE NAME READ NAME WRITE NAME NOTIFY NAME ## Changed) \ public: \ TYPE NAME() const { return _ ## NAME; } \ void NAME ## Internal(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ emit NAME ## Changed(value); \ } \ void NAME(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ emit NAME ## Changed(value); \ send(); \ } \ Q_SIGNAL void NAME ## Changed(TYPE value); \ private: \ TYPE _ ## NAME = DEFAULT_VALUE; \ /*************************************************************************************************/ #define US_PROPERTY_CUSTOM_SETTER(TYPE, NAME, DEFAULT_VALUE) \ Q_PROPERTY(TYPE NAME READ NAME WRITE NAME NOTIFY NAME ## Changed) \ public: \ TYPE NAME() const { return _ ## NAME; } \ void NAME ## Internal(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ emit NAME ## Changed(value); \ } \ void NAME(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ NAME ## Handle(); \ emit NAME ## Changed(value); \ send(); \ } \ Q_SIGNAL void NAME ## Changed(TYPE value); \ private: \ TYPE _ ## NAME = DEFAULT_VALUE; \ void NAME ## Handle(); /*************************************************************************************************/ #define US_PROPERTY_VIEW_ONLY(TYPE, NAME, DEFAULT_VALUE) \ Q_PROPERTY(TYPE NAME READ NAME WRITE NAME NOTIFY NAME ## Changed) \ public: \ TYPE NAME() const { return _ ## NAME; } \ void NAME(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ emit NAME ## Changed(value); \ } \ Q_SIGNAL void NAME ## Changed(TYPE value); \ protected: \ TYPE _ ## NAME = DEFAULT_VALUE; \ /*************************************************************************************************/ #define US_PROPERTY_INTERNAL(TYPE, NAME, DEFAULT_VALUE) \ Q_PROPERTY(TYPE NAME READ NAME WRITE NAME NOTIFY NAME ## Changed) \ public: \ TYPE NAME() const { return _ ## NAME; } \ void NAME(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ emit NAME ## Changed(value); \ } \ Q_SIGNAL void NAME ## Changed(TYPE value); \ private: \ TYPE _ ## NAME = DEFAULT_VALUE; \ /*************************************************************************************************/ #define US_PROPERTY_CUSTOM_SETTER_INTERNAL(TYPE, NAME, DEFAULT_VALUE) \ Q_PROPERTY(TYPE NAME READ NAME WRITE NAME NOTIFY NAME ## Changed) \ public: \ TYPE NAME() const { return _ ## NAME; } \ void NAME(TYPE value) { \ if(_ ## NAME == value)return; \ _ ## NAME = value; \ NAME ## Handle(); \ emit NAME ## Changed(value); \ } \ Q_SIGNAL void NAME ## Changed(TYPE value); \ private: \ TYPE _ ## NAME = DEFAULT_VALUE; \ void NAME ## Handle(); #endif //AUTOPROPERTY_H