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 |