| 22 #include "common.h" |
22 #include "common.h" |
| 23 |
23 |
| 24 // ============================================================================= |
24 // ============================================================================= |
| 25 #include <QString> |
25 #include <QString> |
| 26 #include <QKeySequence> |
26 #include <QKeySequence> |
| |
27 class QSettings; |
| 27 |
28 |
| 28 typedef QChar qchar; |
29 typedef QChar qchar; |
| 29 typedef QString str; |
30 typedef QString str; |
| 30 |
31 |
| 31 #define MAX_INI_LINE 512 |
32 #define MAX_INI_LINE 512 |
| 32 #define MAX_CONFIG 512 |
33 #define MAX_CONFIG 512 |
| 33 |
34 |
| 34 #define cfg(T, NAME, DEFAULT) T##config NAME (DEFAULT, #NAME) |
35 #define cfg(T, NAME, DEFAULT) T##config NAME (DEFAULT, #NAME, #DEFAULT) |
| 35 #define extern_cfg(T, NAME) extern T##config NAME |
36 #define extern_cfg(T, NAME) extern T##config NAME |
| 36 |
37 |
| 37 // ========================================================= |
38 // ========================================================= |
| 38 class config { |
39 class config { |
| 39 public: |
40 public: |
| 44 Type_float, |
45 Type_float, |
| 45 Type_bool, |
46 Type_bool, |
| 46 Type_keyseq, |
47 Type_keyseq, |
| 47 }; |
48 }; |
| 48 |
49 |
| |
50 config (const char* defstring) : m_defstring (defstring) {} |
| 49 const char* name; |
51 const char* name; |
| 50 |
52 |
| 51 virtual Type getType() const { |
53 virtual Type getType() const { |
| 52 return Type_none; |
54 return Type_none; |
| 53 } |
55 } |
| 54 |
56 |
| |
57 str toString() const; |
| |
58 str defaultString() const; |
| 55 virtual void resetValue() {} |
59 virtual void resetValue() {} |
| 56 virtual bool isDefault() const { |
60 virtual void loadFromConfig (const QSettings* cfg) { (void) cfg; } |
| 57 return false; |
61 virtual bool isDefault() const { return false; } |
| 58 } |
62 |
| 59 |
|
| 60 // ------------------------------------------ |
63 // ------------------------------------------ |
| 61 static bool load(); |
64 static bool load(); |
| 62 static bool save(); |
65 static bool save(); |
| 63 static void reset(); |
66 static void reset(); |
| 64 static str dirpath(); |
67 static str dirpath(); |
| 65 static str filepath(); |
68 static str filepath (str file); |
| |
69 |
| |
70 private: |
| |
71 const char* m_defstring; |
| 66 }; |
72 }; |
| 67 |
73 |
| 68 void addConfig (config* ptr); |
74 void addConfig (config* ptr); |
| 69 |
75 |
| 70 // ============================================================================= |
76 // ============================================================================= |
| 111 class T##config : public config |
117 class T##config : public config |
| 112 |
118 |
| 113 #define IMPLEMENT_CONFIG(T) \ |
119 #define IMPLEMENT_CONFIG(T) \ |
| 114 T value, defval; \ |
120 T value, defval; \ |
| 115 \ |
121 \ |
| 116 T##config (T _defval, const char* _name) { \ |
122 T##config (T _defval, const char* _name, const char* defstring) : config (defstring) { \ |
| 117 value = defval = _defval; \ |
123 value = defval = _defval; \ |
| 118 name = _name; \ |
124 name = _name; \ |
| 119 addConfig (this); \ |
125 addConfig (this); \ |
| 120 } \ |
126 } \ |
| 121 operator const T&() const { \ |
127 operator const T&() const { \ |
| 127 virtual void resetValue() { \ |
133 virtual void resetValue() { \ |
| 128 value = defval; \ |
134 value = defval; \ |
| 129 } \ |
135 } \ |
| 130 virtual bool isDefault() const { \ |
136 virtual bool isDefault() const { \ |
| 131 return value == defval; \ |
137 return value == defval; \ |
| 132 } |
138 } \ |
| |
139 virtual void loadFromConfig (const QSettings* cfg) override; |
| 133 |
140 |
| 134 // ============================================================================= |
141 // ============================================================================= |
| 135 CONFIGTYPE (int) { |
142 CONFIGTYPE (int) { |
| 136 public: |
143 public: |
| 137 IMPLEMENT_CONFIG (int) |
144 IMPLEMENT_CONFIG (int) |