You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

94 lines
2.9 KiB

#ifndef AUTOPROPERTY_H
#define AUTOPROPERTY_H
#include <QObject>
//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