lbajardsilogic@5
|
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
|
lbajardsilogic@5
|
2
|
lbajardsilogic@5
|
3 /* Sound Access
|
lbajardsilogic@5
|
4 EASAIER client application.
|
lbajardsilogic@5
|
5 Silogic 2007. Laure Bajard.
|
lbajardsilogic@5
|
6
|
lbajardsilogic@5
|
7 This program is free software; you can redistribute it and/or
|
lbajardsilogic@5
|
8 modify it under the terms of the GNU General Public License as
|
lbajardsilogic@5
|
9 published by the Free Software Foundation; either version 2 of the
|
lbajardsilogic@5
|
10 License, or (at your option) any later version. See the file
|
lbajardsilogic@5
|
11 COPYING included with this distribution for more information.
|
lbajardsilogic@5
|
12 */
|
lbajardsilogic@5
|
13
|
lbajardsilogic@5
|
14 #include "QueryModel.h"
|
lbajardsilogic@5
|
15
|
lbajardsilogic@5
|
16 QueryModel::QueryModel()
|
lbajardsilogic@5
|
17 {}
|
lbajardsilogic@5
|
18
|
lbajardsilogic@5
|
19 QueryModel::~QueryModel()
|
lbajardsilogic@5
|
20 {
|
lbajardsilogic@5
|
21 while (!m_themeModels.empty())
|
lbajardsilogic@5
|
22 {
|
lbajardsilogic@5
|
23 delete m_themeModels.begin()->second;
|
lbajardsilogic@5
|
24 m_themeModels.erase(m_themeModels.begin());
|
lbajardsilogic@5
|
25 }
|
lbajardsilogic@5
|
26
|
lbajardsilogic@5
|
27 m_curThemeModel = 0;
|
lbajardsilogic@5
|
28 }
|
lbajardsilogic@5
|
29
|
lbajardsilogic@5
|
30 void QueryModel::addTheme(const QString &name, const QString &label)
|
lbajardsilogic@5
|
31 {
|
lbajardsilogic@5
|
32 m_curThemeModel = new QueryThemeModel(name, label);
|
lbajardsilogic@5
|
33
|
lbajardsilogic@5
|
34 m_themeModels[name] = m_curThemeModel;
|
lbajardsilogic@5
|
35 }
|
lbajardsilogic@5
|
36
|
lbajardsilogic@5
|
37 void QueryModel::newGroup(const QString &name, const QString &label)
|
lbajardsilogic@5
|
38 {
|
lbajardsilogic@5
|
39 m_curThemeModel->newGroup(name, label);
|
lbajardsilogic@5
|
40 }
|
lbajardsilogic@5
|
41
|
lbajardsilogic@5
|
42 void QueryModel::addProperty(const QString &name, const QString &label, const QString &type,
|
lbajardsilogic@5
|
43 const QString &range, const QString &unit, const QString &comment)
|
lbajardsilogic@5
|
44 {
|
lbajardsilogic@5
|
45 m_curThemeModel->addProperty(name, label, type, range, unit, comment);
|
lbajardsilogic@5
|
46 }
|
lbajardsilogic@5
|
47
|
lbajardsilogic@227
|
48 void QueryModel::addRange(const QString &propertyName, const QString &range)
|
lbajardsilogic@227
|
49 {
|
lbajardsilogic@227
|
50 m_curThemeModel->addRange(propertyName, range);
|
lbajardsilogic@227
|
51 }
|
lbajardsilogic@227
|
52
|
lbajardsilogic@5
|
53 QueryThemeModel::QueryThemeModel(const QString &name, const QString &label) :
|
lbajardsilogic@5
|
54 m_name(name),
|
lbajardsilogic@5
|
55 m_label(label),
|
lbajardsilogic@5
|
56 m_curGroupName(""),
|
lbajardsilogic@5
|
57 m_curGroupLabel("")
|
lbajardsilogic@5
|
58 {
|
lbajardsilogic@5
|
59 setObjectName(name);
|
lbajardsilogic@5
|
60 }
|
lbajardsilogic@5
|
61
|
lbajardsilogic@5
|
62 QueryThemeModel::~QueryThemeModel()
|
lbajardsilogic@5
|
63 {
|
lbajardsilogic@5
|
64 m_propertiesName.clear();
|
lbajardsilogic@5
|
65
|
lbajardsilogic@5
|
66 while (!m_properties.empty())
|
lbajardsilogic@5
|
67 {
|
lbajardsilogic@5
|
68 delete m_properties.begin()->second;
|
lbajardsilogic@5
|
69 m_properties.erase(m_properties.begin());
|
lbajardsilogic@5
|
70 }
|
lbajardsilogic@5
|
71 }
|
lbajardsilogic@5
|
72
|
lbajardsilogic@5
|
73 void QueryThemeModel::newGroup(const QString &name, const QString &label)
|
lbajardsilogic@5
|
74 {
|
lbajardsilogic@5
|
75 m_curGroupName = name;
|
lbajardsilogic@5
|
76 m_curGroupLabel = label;
|
lbajardsilogic@5
|
77 }
|
lbajardsilogic@5
|
78
|
lbajardsilogic@5
|
79 void QueryThemeModel::addProperty(const QString &name, const QString &label, const QString &type,
|
lbajardsilogic@5
|
80 const QString &range, const QString &unit, const QString &comment)
|
lbajardsilogic@5
|
81 {
|
lbajardsilogic@5
|
82 PropertyModel* newProperty = new PropertyModel(name, label, type, range, unit, comment,
|
lbajardsilogic@5
|
83 m_curGroupName, m_curGroupLabel);
|
lbajardsilogic@5
|
84
|
lbajardsilogic@5
|
85 m_properties[name] = newProperty;
|
lbajardsilogic@5
|
86
|
lbajardsilogic@5
|
87 m_propertiesName.push_back(name);
|
lbajardsilogic@5
|
88 }
|
lbajardsilogic@5
|
89
|
lbajardsilogic@5
|
90 QueryThemeModel::PropertyList QueryThemeModel::getProperties() const
|
lbajardsilogic@5
|
91 {
|
lbajardsilogic@5
|
92 return m_propertiesName;
|
lbajardsilogic@5
|
93 }
|
lbajardsilogic@5
|
94
|
lbajardsilogic@5
|
95 QString QueryThemeModel::getPropertyLabel(const PropertyName &name) const
|
lbajardsilogic@5
|
96 {
|
lbajardsilogic@5
|
97 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
98 iter = m_properties.find(name);
|
lbajardsilogic@5
|
99
|
lbajardsilogic@5
|
100 if (iter != m_properties.end())
|
lbajardsilogic@5
|
101 return iter->second->getLabel();
|
lbajardsilogic@5
|
102
|
lbajardsilogic@5
|
103 return "";
|
lbajardsilogic@5
|
104 }
|
lbajardsilogic@5
|
105
|
lbajardsilogic@5
|
106 QueryThemeModel::PropertyType QueryThemeModel::getPropertyType(const PropertyName &name) const
|
lbajardsilogic@5
|
107 {
|
lbajardsilogic@5
|
108 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
109 iter = m_properties.find(name);
|
lbajardsilogic@5
|
110
|
lbajardsilogic@5
|
111 if (iter != m_properties.end())
|
lbajardsilogic@5
|
112 return iter->second->getType();
|
lbajardsilogic@5
|
113
|
lbajardsilogic@5
|
114 return InvalidProperty;
|
lbajardsilogic@5
|
115 }
|
lbajardsilogic@5
|
116
|
lbajardsilogic@5
|
117 int QueryThemeModel::getPropertyRangeAndValue(const PropertyName &name, int *min, int *max) const
|
lbajardsilogic@5
|
118 {
|
lbajardsilogic@5
|
119 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
120 iter = m_properties.find(name);
|
lbajardsilogic@5
|
121
|
lbajardsilogic@5
|
122 if (iter != m_properties.end())
|
lbajardsilogic@5
|
123 {
|
lbajardsilogic@5
|
124 *min = iter->second->getMinRange();
|
lbajardsilogic@5
|
125 *max = iter->second->getMaxRange();
|
lbajardsilogic@32
|
126 if (iter->second->getType() != StringProperty)
|
lbajardsilogic@5
|
127 return iter->second->getValue().toInt();
|
lbajardsilogic@5
|
128 }
|
lbajardsilogic@5
|
129
|
lbajardsilogic@5
|
130 return 0;
|
lbajardsilogic@5
|
131 }
|
lbajardsilogic@5
|
132
|
lbajardsilogic@5
|
133 QString QueryThemeModel::getPropertyValue(const PropertyName &name) const
|
lbajardsilogic@5
|
134 {
|
lbajardsilogic@5
|
135 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
136 iter = m_properties.find(name);
|
lbajardsilogic@5
|
137
|
lbajardsilogic@5
|
138 if (iter != m_properties.end())
|
lbajardsilogic@5
|
139 {
|
lbajardsilogic@242
|
140 PropertyModel * propModel = iter->second;
|
lbajardsilogic@242
|
141 return propModel->getValue();
|
lbajardsilogic@5
|
142 }
|
lbajardsilogic@5
|
143
|
lbajardsilogic@5
|
144 return "";
|
lbajardsilogic@5
|
145 }
|
lbajardsilogic@5
|
146
|
lbajardsilogic@5
|
147 QStringList QueryThemeModel::getPropertyRange(const PropertyName &name) const
|
lbajardsilogic@5
|
148 {
|
lbajardsilogic@5
|
149 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
150 iter = m_properties.find(name);
|
lbajardsilogic@5
|
151
|
lbajardsilogic@5
|
152 if (iter != m_properties.end())
|
lbajardsilogic@5
|
153 return iter->second->getRange();
|
lbajardsilogic@5
|
154
|
lbajardsilogic@5
|
155 return QStringList();
|
lbajardsilogic@5
|
156 }
|
lbajardsilogic@5
|
157
|
lbajardsilogic@5
|
158 QString QueryThemeModel::getPropertyValueLabel(const PropertyName &name, int value) const
|
lbajardsilogic@5
|
159 {
|
lbajardsilogic@5
|
160 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
161 iter = m_properties.find(name);
|
lbajardsilogic@5
|
162
|
lbajardsilogic@5
|
163 if (iter != m_properties.end())
|
lbajardsilogic@5
|
164 return iter->second->getValueLabel(value);
|
lbajardsilogic@5
|
165
|
lbajardsilogic@5
|
166 return "";
|
lbajardsilogic@5
|
167 }
|
lbajardsilogic@5
|
168
|
lbajardsilogic@5
|
169 QString QueryThemeModel::getPropertyGroup(const PropertyName &name) const
|
lbajardsilogic@5
|
170 {
|
lbajardsilogic@5
|
171 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
172 iter = m_properties.find(name);
|
lbajardsilogic@5
|
173
|
lbajardsilogic@5
|
174 if (iter != m_properties.end())
|
lbajardsilogic@5
|
175 return iter->second->getGroupName();
|
lbajardsilogic@5
|
176
|
lbajardsilogic@5
|
177 return "";
|
lbajardsilogic@5
|
178 }
|
lbajardsilogic@5
|
179
|
lbajardsilogic@5
|
180 QString QueryThemeModel::getPropertyGroupLabel(const PropertyName &name) const
|
lbajardsilogic@5
|
181 {
|
lbajardsilogic@5
|
182 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
183 iter = m_properties.find(name);
|
lbajardsilogic@5
|
184
|
lbajardsilogic@5
|
185 if (iter != m_properties.end())
|
lbajardsilogic@5
|
186 return iter->second->getGroupLabel();
|
lbajardsilogic@5
|
187
|
lbajardsilogic@5
|
188 return "";
|
lbajardsilogic@5
|
189 }
|
lbajardsilogic@5
|
190
|
lbajardsilogic@5
|
191 QString QueryThemeModel::getPropertyUnit(const PropertyName &name) const
|
lbajardsilogic@5
|
192 {
|
lbajardsilogic@5
|
193 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
194 iter = m_properties.find(name);
|
lbajardsilogic@5
|
195
|
lbajardsilogic@5
|
196 if (iter != m_properties.end())
|
lbajardsilogic@5
|
197 return iter->second->getUnit();
|
lbajardsilogic@5
|
198
|
lbajardsilogic@5
|
199 return "";
|
lbajardsilogic@5
|
200 }
|
lbajardsilogic@5
|
201
|
lbajardsilogic@5
|
202 QString QueryThemeModel::getPropertyComment(const PropertyName &name) const
|
lbajardsilogic@5
|
203 {
|
lbajardsilogic@5
|
204 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
205 iter = m_properties.find(name);
|
lbajardsilogic@5
|
206
|
lbajardsilogic@5
|
207 if (iter != m_properties.end())
|
lbajardsilogic@5
|
208 return iter->second->getComment();
|
lbajardsilogic@5
|
209
|
lbajardsilogic@5
|
210 return "";
|
lbajardsilogic@5
|
211 }
|
lbajardsilogic@5
|
212
|
lbajardsilogic@5
|
213 void QueryThemeModel::setProperty(const PropertyName &name, int value)
|
lbajardsilogic@5
|
214 {
|
lbajardsilogic@5
|
215 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
216 iter = m_properties.find(name);
|
lbajardsilogic@5
|
217
|
lbajardsilogic@5
|
218 if (iter != m_properties.end())
|
lbajardsilogic@5
|
219 iter->second->setValue(value);
|
lbajardsilogic@5
|
220 }
|
lbajardsilogic@5
|
221
|
lbajardsilogic@5
|
222 void QueryThemeModel::setProperty(const PropertyName &name, QString value)
|
lbajardsilogic@5
|
223 {
|
lbajardsilogic@5
|
224 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
225 iter = m_properties.find(name);
|
lbajardsilogic@5
|
226
|
lbajardsilogic@5
|
227 if (iter != m_properties.end())
|
lbajardsilogic@5
|
228 iter->second->setValue(value);
|
lbajardsilogic@5
|
229 }
|
lbajardsilogic@5
|
230
|
lbajardsilogic@5
|
231 void QueryThemeModel::setProperty(int value)
|
lbajardsilogic@5
|
232 {
|
lbajardsilogic@5
|
233 QString name = sender()->objectName();
|
lbajardsilogic@5
|
234 setProperty(name, value);
|
lbajardsilogic@5
|
235 }
|
lbajardsilogic@5
|
236
|
lbajardsilogic@5
|
237 void QueryThemeModel::setProperty(QString value)
|
lbajardsilogic@5
|
238 {
|
lbajardsilogic@5
|
239 QString name = sender()->objectName();
|
lbajardsilogic@5
|
240 setProperty(name, value);
|
lbajardsilogic@5
|
241 }
|
lbajardsilogic@5
|
242
|
lbajardsilogic@227
|
243 void QueryThemeModel::addRange(const QString &propertyName, const QString &range)
|
lbajardsilogic@227
|
244 {
|
lbajardsilogic@227
|
245 std::map<QString, PropertyModel*>::iterator iter = m_properties.find(propertyName);
|
lbajardsilogic@227
|
246 if (iter != m_properties.end())
|
lbajardsilogic@227
|
247 {
|
lbajardsilogic@227
|
248 PropertyModel* model = iter->second;
|
lbajardsilogic@227
|
249 model->addRange(range);
|
lbajardsilogic@227
|
250 }
|
lbajardsilogic@227
|
251 }
|
lbajardsilogic@227
|
252
|
lbajardsilogic@5
|
253 QueryThemeModel::PropertyModel::PropertyModel(const QString &name, const QString &label, const QString &type,
|
lbajardsilogic@5
|
254 const QString &range, const QString &unit, const QString &comment,
|
lbajardsilogic@5
|
255 const QString &groupName, const QString &groupLabel) :
|
lbajardsilogic@5
|
256 m_name(name),
|
lbajardsilogic@5
|
257 m_label(label),
|
lbajardsilogic@5
|
258 m_unit(unit),
|
lbajardsilogic@5
|
259 m_comment(comment),
|
lbajardsilogic@5
|
260 m_groupName(groupName),
|
lbajardsilogic@5
|
261 m_groupLabel(groupLabel),
|
lbajardsilogic@5
|
262 m_min(0),
|
lbajardsilogic@5
|
263 m_max(0),
|
lbajardsilogic@5
|
264 m_value("")
|
lbajardsilogic@5
|
265 {
|
lbajardsilogic@5
|
266 if (type == "int")
|
lbajardsilogic@5
|
267 {
|
lbajardsilogic@32
|
268 m_type = RangeProperty;
|
lbajardsilogic@5
|
269
|
lbajardsilogic@5
|
270 if (range != "")
|
lbajardsilogic@5
|
271 {
|
lbajardsilogic@5
|
272 int pos = range.indexOf("-");
|
lbajardsilogic@5
|
273
|
lbajardsilogic@5
|
274 m_min = range.left(pos).toInt();
|
lbajardsilogic@5
|
275 m_max = range.right(range.length()-pos-1).toInt();
|
lbajardsilogic@5
|
276 }
|
lbajardsilogic@5
|
277 } else if (type == "string")
|
lbajardsilogic@5
|
278 {
|
lbajardsilogic@5
|
279 if (range == "") {
|
lbajardsilogic@32
|
280 m_type = StringProperty;
|
lbajardsilogic@5
|
281 } else {
|
lbajardsilogic@32
|
282 m_type = ValueProperty;
|
lbajardsilogic@5
|
283
|
lbajardsilogic@5
|
284 if (range != "")
|
lbajardsilogic@5
|
285 {
|
lbajardsilogic@5
|
286 m_range = range.split("/");
|
lbajardsilogic@5
|
287 m_min = 0;
|
lbajardsilogic@5
|
288 m_max = m_range.size();
|
lbajardsilogic@242
|
289 m_value = m_range.at(0);
|
lbajardsilogic@5
|
290 }
|
lbajardsilogic@5
|
291 }
|
lbajardsilogic@228
|
292 } else if (type == "file")
|
lbajardsilogic@228
|
293 {
|
lbajardsilogic@228
|
294 m_type = FileProperty;
|
lbajardsilogic@228
|
295
|
lbajardsilogic@5
|
296 } else if (type == "gYear")
|
lbajardsilogic@5
|
297 {
|
lbajardsilogic@32
|
298 m_type = RangeProperty;
|
lbajardsilogic@5
|
299
|
lbajardsilogic@5
|
300 m_min = 0;
|
lbajardsilogic@5
|
301 m_max = 2007;
|
lbajardsilogic@5
|
302
|
lbajardsilogic@5
|
303 } else
|
lbajardsilogic@5
|
304 {
|
lbajardsilogic@32
|
305 m_type = InvalidProperty;
|
lbajardsilogic@5
|
306 }
|
lbajardsilogic@227
|
307 }
|
lbajardsilogic@227
|
308
|
lbajardsilogic@227
|
309
|
lbajardsilogic@227
|
310 void QueryThemeModel::PropertyModel::addRange(const QString &range)
|
lbajardsilogic@227
|
311 {
|
lbajardsilogic@227
|
312 m_range << range;
|
lbajardsilogic@227
|
313 m_type = ValueProperty;
|
lbajardsilogic@227
|
314 m_min = 0;
|
lbajardsilogic@227
|
315 m_max = m_range.size();
|
lbajardsilogic@242
|
316 m_value = m_range.at(0);
|
lbajardsilogic@5
|
317 } |