src/config.h

changeset 603
47e7773c7841
parent 600
209e3f1f7b2c
child 606
3dd6f343ec06
equal deleted inserted replaced
602:ac1744536b33 603:47e7773c7841
39 39
40 #define extern_cfg(T, NAME) extern Config::T##Type NAME; 40 #define extern_cfg(T, NAME) extern Config::T##Type NAME;
41 41
42 // ========================================================= 42 // =========================================================
43 class Config 43 class Config
44 { PROPERTY (private, str, Name, STR_OPS, STOCK_WRITE) 44 {
45 PROPERTY (private, str, Name, STR_OPS, STOCK_WRITE)
45 46
46 public: 47 public:
47 enum Type 48 enum Type
48 { Int, 49 {
50 Int,
49 String, 51 String,
50 Float, 52 Float,
51 Bool, 53 Bool,
52 KeySequence, 54 KeySequence,
53 List, 55 List,
79 protected: 81 protected:
80 static void addToArray (Config* ptr); 82 static void addToArray (Config* ptr);
81 }; 83 };
82 84
83 // ============================================================================= 85 // =============================================================================
84 #define IMPLEMENT_CONFIG(NAME) \ 86 #define IMPLEMENT_CONFIG(NAME) \
85 public: \ 87 public: \
86 using ValueType = Config::NAME##Type; \ 88 using ValueType = Config::NAME##Type; \
87 \ 89 \
88 NAME##Config (ValueType* valueptr, str name, ValueType def) : \ 90 NAME##Config (ValueType* valueptr, str name, ValueType def) : \
89 Config (name), \ 91 Config (name), \
90 m_valueptr (valueptr), \ 92 m_valueptr (valueptr), \
91 m_default (def) \ 93 m_default (def) \
92 { Config::addToArray (this); \ 94 { \
95 Config::addToArray (this); \
93 *m_valueptr = def; \ 96 *m_valueptr = def; \
94 } \ 97 } \
95 \ 98 \
96 inline ValueType getValue() const \ 99 inline ValueType getValue() const \
97 { return *m_valueptr; \ 100 { \
98 } \ 101 return *m_valueptr; \
99 \ 102 } \
100 inline void setValue (ValueType val) \ 103 \
101 { *m_valueptr = val; \ 104 inline void setValue (ValueType val) \
102 } \ 105 { \
103 \ 106 *m_valueptr = val; \
104 virtual Config::Type getType() const \ 107 } \
105 { return Config::NAME; \ 108 \
106 } \ 109 virtual Config::Type getType() const \
107 \ 110 { \
111 return Config::NAME; \
112 } \
113 \
108 virtual void resetValue() \ 114 virtual void resetValue() \
109 { *m_valueptr = m_default; \ 115 { \
110 } \ 116 *m_valueptr = m_default; \
111 \ 117 } \
112 virtual const ValueType& getDefault() const \ 118 \
113 { return m_default; \ 119 virtual const ValueType& getDefault() const \
114 } \ 120 { \
115 \ 121 return m_default; \
116 virtual bool isDefault() const \ 122 } \
117 { return *m_valueptr == m_default; \ 123 \
118 } \ 124 virtual bool isDefault() const \
119 \ 125 { \
120 virtual void loadFromVariant (const QVariant& val) \ 126 return *m_valueptr == m_default; \
121 { *m_valueptr = val.value<ValueType>(); \ 127 } \
122 } \ 128 \
123 \ 129 virtual void loadFromVariant (const QVariant& val) \
124 virtual QVariant toVariant() const \ 130 { \
125 { return QVariant::fromValue<ValueType> (*m_valueptr); \ 131 *m_valueptr = val.value<ValueType>(); \
126 } \ 132 } \
127 \ 133 \
128 virtual QVariant getDefaultAsVariant() const \ 134 virtual QVariant toVariant() const \
129 { return QVariant::fromValue<ValueType> (m_default); \ 135 { \
130 } \ 136 return QVariant::fromValue<ValueType> (*m_valueptr); \
131 \ 137 } \
132 static NAME##Config* getByName (str name); \ 138 \
133 \ 139 virtual QVariant getDefaultAsVariant() const \
134 private: \ 140 { \
141 return QVariant::fromValue<ValueType> (m_default); \
142 } \
143 \
144 static NAME##Config* getByName (str name); \
145 \
146 private: \
135 ValueType* m_valueptr; \ 147 ValueType* m_valueptr; \
136 ValueType m_default; 148 ValueType m_default;
137 149
138 // ============================================================================= 150 // =============================================================================
139 class IntConfig : public Config 151 class IntConfig : public Config
140 { IMPLEMENT_CONFIG (Int) 152 {
153 IMPLEMENT_CONFIG (Int)
141 }; 154 };
142 155
143 // ============================================================================= 156 // =============================================================================
144 class StringConfig : public Config 157 class StringConfig : public Config
145 { IMPLEMENT_CONFIG (String) 158 {
159 IMPLEMENT_CONFIG (String)
146 }; 160 };
147 161
148 // ============================================================================= 162 // =============================================================================
149 class FloatConfig : public Config 163 class FloatConfig : public Config
150 { IMPLEMENT_CONFIG (Float) 164 {
165 IMPLEMENT_CONFIG (Float)
151 }; 166 };
152 167
153 // ============================================================================= 168 // =============================================================================
154 class BoolConfig : public Config 169 class BoolConfig : public Config
155 { IMPLEMENT_CONFIG (Bool) 170 {
171 IMPLEMENT_CONFIG (Bool)
156 }; 172 };
157 173
158 // ============================================================================= 174 // =============================================================================
159 class KeySequenceConfig : public Config 175 class KeySequenceConfig : public Config
160 { IMPLEMENT_CONFIG (KeySequence) 176 {
177 IMPLEMENT_CONFIG (KeySequence)
161 }; 178 };
162 179
163 // ============================================================================= 180 // =============================================================================
164 class ListConfig : public Config 181 class ListConfig : public Config
165 { IMPLEMENT_CONFIG (List) 182 {
183 IMPLEMENT_CONFIG (List)
166 }; 184 };
167 185
168 #endif // LDFORGE_CONFIG_H 186 #endif // LDFORGE_CONFIG_H

mercurial