48 #include <QStringList> 52 #define MQ_NSTXT_FILL_MISSING 0, 0 53 #define MQ_NSTXT_FILL_MISSING_FROM( FromNs) FromNs, 0 57 #define MQ_DECLARE_FLAGSTXT( FEStruct) \ 58 MQ_DECLARE_FLAGS( FEStruct) \ 59 static Arn::EnumTxt& txt() {static Arn::EnumTxt in( &staticMetaObject, true, _setNs(0), _setSe(0), \ 60 #FEStruct); return in;} \ 61 inline static const Arn::_InitEnumTxt* _setNs( const Arn::_InitEnumTxt* ieTxt) {return ieTxt;} \ 62 inline static const Arn::_InitSubEnum* _setSe( const Arn::_InitSubEnum* isEnum) {return isEnum;} \ 63 inline static const char* name() {return txt().name();} \ 64 inline QString toString( quint16 nameSpace = 0) const {return txt().flagsToString( f, nameSpace);} \ 65 inline static FEStruct fromString( const QString& text, quint16 nameSpace = 0) \ 66 {return FEStruct( F( txt().flagsFromString( text, nameSpace)));} 69 #define MQ_DECLARE_FLAGS_NSTXT(...) \ 70 static const Arn::_InitEnumTxt* _setNs(int dummy) { \ 72 static Arn::_InitEnumTxt initTxt[] = { __VA_ARGS__ , { 0, 0, arnNullptr }}; \ 76 #define MQ_DECLARE_SUBETXT(...) \ 77 static const Arn::_InitSubEnum* _setSe( int dummy) { \ 79 static Arn::_InitSubEnum initSubEnum[] = { __VA_ARGS__ , { arnNullptr, 0, 0 }}; \ 83 #define MQ_SUBETXT_ADD_RELDEF( EStruct, Mask, Factor) \ 84 { &EStruct::txt(), Mask, Factor} 86 #define MQ_SUBETXT_ADD_ABSDEF( EStruct, Mask) \ 87 MQ_SUBETXT_ADD_RELDEF( EStruct, Mask, 1) 89 #define MQ_SUBETXT_ADD_RELOP( EStruct, Mask, Factor) \ 90 inline void setSubEnum( EStruct::E v_) { \ 91 setBits( Mask, v_ * Factor); \ 93 inline EStruct::E getSubEnum_##EStruct() { \ 94 return EStruct::E( (f & Mask) / Factor); \ 97 #define MQ_SUBETXT_ADD_ABSOP( EStruct, Mask) \ 98 MQ_SUBETXT_ADD_RELOP( EStruct, Mask, 1) \ 102 #define MQ_DECLARE_ENUMTXT( EStruct) \ 103 MQ_DECLARE_ENUM( EStruct) \ 104 static Arn::EnumTxt& txt() {static Arn::EnumTxt in( &staticMetaObject, false, _setNs(0), arnNullptr, \ 105 #EStruct); return in;} \ 106 inline static const Arn::_InitEnumTxt* _setNs( const Arn::_InitEnumTxt* ieTxt) {return ieTxt;} \ 107 inline static const char* name() {return txt().name();} \ 108 inline QString toString( quint16 nameSpace = 0) const {return txt().getTxtString( e, nameSpace);} \ 109 inline static EStruct fromString( const QString& text, quint16 nameSpace = 0) \ 110 {return EStruct( E( txt().getEnumVal( text, 0, nameSpace)));} 113 #define MQ_DECLARE_ENUM_NSTXT(...) \ 114 static const Arn::_InitEnumTxt* _setNs(int dummy) { \ 116 static Arn::_InitEnumTxt initTxt[] = { __VA_ARGS__ , { 0, 0, 0 }}; \ 242 void setTxtRef(
const char* txt,
int enumVal, quint16 nameSpace);
260 void setTxt(
const char* txt,
int enumVal, quint16 nameSpace);
269 const char*
getTxt(
int enumVal, quint16 nameSpace = 0,
bool* isFound = arnNullptr)
const;
278 void setTxtString(
const QString& txt,
int enumVal, quint16 nameSpace);
288 QString
getTxtString(
int enumVal, quint16 nameSpace = 0,
bool* isFound = arnNullptr)
const;
298 int getEnumVal(
const char* txt,
int defaultVal = 0, quint16 nameSpace = 0,
bool* isFound = arnNullptr)
const;
309 int getEnumVal(
const QString& txt,
int defaultVal = 0, quint16 nameSpace = 0,
bool* isFound = arnNullptr)
const;
328 bool getSubEnumVal(
const char* txt,
int& subEnumVal, uint& bitMask, quint16 nameSpace = 0)
const;
347 bool getSubEnumVal(
const QString& txt,
int& subEnumVal, uint& bitMask, quint16 nameSpace = 0)
const;
364 void addFlagsTo(
Arn::XStringMap& xsm,
const IncludeMode& incMode, quint16 nameSpace = 0,
bool neverHumanize =
false)
const;
411 QString
getBitSet( quint16 nameSpace = 0,
bool neverHumanize =
false)
const;
444 QString
flagsToString(
int val, quint16 nameSpace = 0)
const;
472 int flagsFromString(
const QString& flagString, quint16 nameSpace = 0);
515 QString
getEnumSet( quint16 nameSpace = 0,
bool neverHumanize =
false)
const;
528 QStringList
getBasicTextList( quint16 nameSpace = 0,
bool neverHumanize =
false)
const;
548 const char*
name()
const;
569 void setMissingTxt( quint16 toNameSpace, quint16 fromNameSpace = 0,
bool neverHumanize =
false);
585 static QString
humanize(
const QString& txt);
619 bool loadEnumSet(
const QString& xstr,
const QString&
name = QString());
643 bool loadBitSet(
const QString& xstr,
const QString&
name = QString());
666 QString
subEnumNameAt(
int idx, quint16 nameSpace = 0)
const;
678 bool subEnumPropAt(
int idx, uint& bitMask, uchar& bitPos)
const;
694 static QByteArray
numToStr( uint num);
695 static uint
strToNum(
const QByteArray& str,
bool* isOk = arnNullptr);
696 static uchar
strToBitpos(
const QByteArray& str,
bool* isOk = arnNullptr);
705 EnumTxtKey( uint enumVal, quint16 nameSpace,
bool isFlag);
706 bool operator <(
const EnumTxtKey& other)
const;
708 struct SubEnumEntry {
713 SubEnumEntry(
const EnumTxt& subEnum, uint bitMask, uint factor,
bool isLocalOwn);
716 void setTxtRefAny(
const char* txt,
int enumVal, quint16 nameSpace);
717 void addSubEnumAny(
const EnumTxt& subEnum, uint bitMask, uint factor,
bool isLocalOwn);
718 void setupFromMetaObject();
719 void setupTxt(
const _InitEnumTxt* initTxt);
720 void setupSubEnum(
const _InitSubEnum* initSubEnum);
722 const QMetaObject* _metaObj;
723 QMap<EnumTxtKey,const char*> _enumTxtTab;
724 QList<QByteArray>* _txtStore;
725 QList<SubEnumEntry>* _subEnumTab;
733 #endif // MQFLAGS_HPP QStringList flagsToStringList(int val, quint16 nameSpace=0) const
returns string list for enum flags
QString getEnumSet(quint16 nameSpace=0, bool neverHumanize=false) const
returns the enum set string
static uchar strToBitpos(const QByteArray &str, bool *isOk=arnNullptr)
void addSubEnumPlainTo(Arn::XStringMap &xsm, quint16 nameSpace=0, bool neverHumanize=false) const
Adds all sub enum plain and shifted to a XStringMap.
void setTxt(const char *txt, int enumVal, quint16 nameSpace)
Set an additional text for an enum val in a namespace.
void addEnumSetTo(Arn::XStringMap &xsm, quint16 nameSpace=0, bool neverHumanize=false) const
Adds enum set to a XStringMap.
int flagsFromStringList(const QStringList &flagStrings, quint16 nameSpace=0)
returns enum flags from string list
QStringList getBasicTextList(quint16 nameSpace=0, bool neverHumanize=false) const
returns a string list containing the most basic texts
QString flagsToString(int val, quint16 nameSpace=0) const
returns text string for enum flags
bool isFlag() const
Returns true if this is a flag usage.
QString getBitSet(quint16 nameSpace=0, bool neverHumanize=false) const
returns the bit set string for enum flags
Container class with string representation for serialized data.
bool getSubEnumVal(const char *txt, int &subEnumVal, uint &bitMask, quint16 nameSpace=0) const
Returns the shifted enum value and the mask for a subEnum text in a namespace.
void addEnumSet(Arn::XStringMap &xsm, quint16 nameSpace=0, bool neverHumanize=false) const
void addBitSetTo(Arn::XStringMap &xsm, quint16 nameSpace=0, bool neverHumanize=false) const
Adds bit set for enum flags to a XStringMap.
int enumCount() const
returns number of enumerators in the enum (class)
void addFlagsTo(Arn::XStringMap &xsm, const IncludeMode &incMode, quint16 nameSpace=0, bool neverHumanize=false) const
Adds enum flags to a XStringMap.
static QByteArray numToStr(uint num)
void addSubEnum(const EnumTxt &subEnum, uint bitMask, uint factor)
Adds an other EnumTxt as a subEnum to this flag EnumTxt.
int subEnumCount() const
Returns number of subEnums in this bitSet (class)
void setTxtString(const QString &txt, int enumVal, quint16 nameSpace)
Set an additional text for an enum val in a namespace.
const EnumTxt * subEnumAt(int idx) const
Returns a pointer to a SubEnum.
void setTxtRef(const char *txt, int enumVal, quint16 nameSpace)
bool loadBitSet(const Arn::XStringMap &xsm, const QString &name=QString())
Loads the instance by an bit set (flags) XStringMap.
void addSubEnumTo(Arn::XStringMap &xsm, quint16 nameSpace=0, bool neverHumanize=false) const
Adds sub enum flags to a XStringMap.
int getEnumVal(const char *txt, int defaultVal=0, quint16 nameSpace=0, bool *isFound=arnNullptr) const
Returns the enum value for a text in a namespace.
const char * name() const
returns the name of the enum (class)
void clear()
Clear this dynamic instance to its starting state.
QString getTxtString(int enumVal, quint16 nameSpace=0, bool *isFound=arnNullptr) const
Returns the text for a enum value in a namespace.
bool subEnumPropAt(int idx, uint &bitMask, uchar &bitPos) const
Returns the properties of a SubEnum.
QString subEnumNameAt(int idx, quint16 nameSpace=0) const
Returns the name of a SubEnum.
const char * getTxt(int enumVal, quint16 nameSpace=0, bool *isFound=arnNullptr) const
Returns the text for a enum value in a namespace.
static uint strToNum(const QByteArray &str, bool *isOk=arnNullptr)
void addBitSet(Arn::XStringMap &xsm, quint16 nameSpace=0, bool neverHumanize=false) const
static QString humanize(const QString &txt)
returns the humanized text
int flagsFromString(const QString &flagString, quint16 nameSpace=0)
returns enum flags from string
EnumTxt(const QMetaObject *metaObj, bool isFlag, const _InitEnumTxt *initTxt, const _InitSubEnum *initSubEnum, const char *name)
#define MQ_DECLARE_ENUM(EStruct)
Enums.
bool loadEnumSet(const Arn::XStringMap &xsm, const QString &name=QString())
Loads the instance by an enum set XStringMap.
void setMissingTxt(quint16 toNameSpace, quint16 fromNameSpace=0, bool neverHumanize=false)
Copies missing enum texts from one namespace to another.