Changeset View
Changeset View
Standalone View
Standalone View
kcms/keyboard/xkb_rules.h
Show All 31 Lines | |||||
32 | }; | 32 | }; | ||
33 | 33 | | |||
34 | template <class T> | 34 | template <class T> | ||
35 | inline T* findByName(QList<T*> list, QString name) { | 35 | inline T* findByName(QList<T*> list, QString name) { | ||
36 | foreach(T* info, list) { | 36 | foreach(T* info, list) { | ||
37 | if( info->name == name ) | 37 | if( info->name == name ) | ||
38 | return info; | 38 | return info; | ||
39 | } | 39 | } | ||
40 | return NULL; | 40 | return nullptr; | ||
41 | } | 41 | } | ||
42 | 42 | | |||
43 | struct VariantInfo: public ConfigItem { | 43 | struct VariantInfo: public ConfigItem { | ||
44 | QList<QString> languages; | 44 | QList<QString> languages; | ||
45 | const bool fromExtras; | 45 | const bool fromExtras; | ||
46 | 46 | | |||
47 | VariantInfo(bool fromExtras_): | 47 | VariantInfo(bool fromExtras_): | ||
48 | fromExtras(fromExtras_) {} | 48 | fromExtras(fromExtras_) {} | ||
Show All 32 Lines | 78 | struct OptionGroupInfo: public ConfigItem { | |||
81 | 81 | | |||
82 | ~OptionGroupInfo() { foreach(OptionInfo* opt, optionInfos) delete opt; } | 82 | ~OptionGroupInfo() { foreach(OptionInfo* opt, optionInfos) delete opt; } | ||
83 | 83 | | |||
84 | const OptionInfo* getOptionInfo(const QString& optionName) const { | 84 | const OptionInfo* getOptionInfo(const QString& optionName) const { | ||
85 | return findByName(optionInfos, optionName); | 85 | return findByName(optionInfos, optionName); | ||
86 | } | 86 | } | ||
87 | }; | 87 | }; | ||
88 | 88 | | |||
89 | struct Rules { | 89 | struct XkbRules { | ||
90 | enum ExtrasFlag { NO_EXTRAS, READ_EXTRAS }; | 90 | enum ExtrasFlag { NO_EXTRAS, READ_EXTRAS }; | ||
91 | 91 | | |||
92 | static const char XKB_OPTION_GROUP_SEPARATOR; | 92 | static const char XKB_OPTION_GROUP_SEPARATOR; | ||
93 | 93 | | |||
94 | QList<LayoutInfo*> layoutInfos; | 94 | QList<LayoutInfo*> layoutInfos; | ||
95 | QList<ModelInfo*> modelInfos; | 95 | QList<ModelInfo*> modelInfos; | ||
96 | QList<OptionGroupInfo*> optionGroupInfos; | 96 | QList<OptionGroupInfo*> optionGroupInfos; | ||
97 | QString version; | 97 | QString version; | ||
98 | 98 | | |||
99 | Rules(); | | |||
100 | | ||||
101 | ~Rules() { | | |||
102 | foreach(LayoutInfo* layoutInfo, layoutInfos) delete layoutInfo; | | |||
103 | foreach(ModelInfo* modelInfo, modelInfos) delete modelInfo; | | |||
104 | foreach(OptionGroupInfo* optionGroupInfo, optionGroupInfos) delete optionGroupInfo; | | |||
105 | } | | |||
106 | | ||||
107 | const LayoutInfo* getLayoutInfo(const QString& layoutName) const { | 99 | const LayoutInfo* getLayoutInfo(const QString& layoutName) const { | ||
108 | return findByName(layoutInfos, layoutName); | 100 | return findByName(layoutInfos, layoutName); | ||
109 | } | 101 | } | ||
110 | 102 | | |||
111 | const OptionGroupInfo* getOptionGroupInfo(const QString& optionGroupName) const { | 103 | const OptionGroupInfo* getOptionGroupInfo(const QString& optionGroupName) const { | ||
112 | return findByName(optionGroupInfos, optionGroupName); | 104 | return findByName(optionGroupInfos, optionGroupName); | ||
113 | } | 105 | } | ||
114 | 106 | | |||
115 | static Rules* readRules(ExtrasFlag extrasFlag); | | |||
116 | static Rules* readRules(Rules* rules, const QString& filename, bool fromExtras); | | |||
117 | static QString getRulesName(); | 107 | static QString getRulesName(); | ||
118 | static QString findXkbDir(); | 108 | static QString findXkbDir(); | ||
119 | 109 | | |||
120 | #ifdef NEW_GEOMETRY | 110 | static XkbRules* self() { | ||
121 | class GeometryId { | 111 | static QScopedPointer<XkbRules> v(XkbRules::readRules(XkbRules::READ_EXTRAS)); | ||
122 | public: | 112 | return v.get(); | ||
123 | QString fileName; | 113 | } | ||
124 | QString geoName; | | |||
125 | | ||||
126 | GeometryId(const QString& fileName_, const QString& geoName_): | | |||
127 | fileName(fileName_), | | |||
128 | geoName(geoName_) {} | | |||
129 | 114 | | |||
130 | GeometryId& operator=(const GeometryId& geoId) { | 115 | ~XkbRules() { | ||
131 | fileName = geoId.fileName; | 116 | foreach(LayoutInfo* layoutInfo, layoutInfos) delete layoutInfo; | ||
132 | geoName = geoId.geoName; | 117 | foreach(ModelInfo* modelInfo, modelInfos) delete modelInfo; | ||
133 | return *this; | 118 | foreach(OptionGroupInfo* optionGroupInfo, optionGroupInfos) delete optionGroupInfo; | ||
134 | } | 119 | } | ||
135 | }; | | |||
136 | 120 | | |||
137 | static GeometryId getGeometryId(const QString& model); | 121 | private: | ||
138 | #endif | 122 | XkbRules(); | ||
139 | 123 | | |||
124 | static XkbRules* readRules(ExtrasFlag extrasFlag); | ||||
125 | static XkbRules* readRules(XkbRules* rules, const QString& filename, bool fromExtras); | ||||
140 | }; | 126 | }; | ||
141 | 127 | | |||
142 | #endif /* XKB_RULES_H_ */ | 128 | #endif /* XKB_RULES_H_ */ |