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@5
|
48 QueryThemeModel::QueryThemeModel(const QString &name, const QString &label) :
|
lbajardsilogic@5
|
49 m_name(name),
|
lbajardsilogic@5
|
50 m_label(label),
|
lbajardsilogic@5
|
51 m_curGroupName(""),
|
lbajardsilogic@5
|
52 m_curGroupLabel("")
|
lbajardsilogic@5
|
53 {
|
lbajardsilogic@5
|
54 setObjectName(name);
|
lbajardsilogic@5
|
55 }
|
lbajardsilogic@5
|
56
|
lbajardsilogic@5
|
57 QueryThemeModel::~QueryThemeModel()
|
lbajardsilogic@5
|
58 {
|
lbajardsilogic@5
|
59 m_propertiesName.clear();
|
lbajardsilogic@5
|
60
|
lbajardsilogic@5
|
61 while (!m_properties.empty())
|
lbajardsilogic@5
|
62 {
|
lbajardsilogic@5
|
63 delete m_properties.begin()->second;
|
lbajardsilogic@5
|
64 m_properties.erase(m_properties.begin());
|
lbajardsilogic@5
|
65 }
|
lbajardsilogic@5
|
66 }
|
lbajardsilogic@5
|
67
|
lbajardsilogic@5
|
68 void QueryThemeModel::newGroup(const QString &name, const QString &label)
|
lbajardsilogic@5
|
69 {
|
lbajardsilogic@5
|
70 m_curGroupName = name;
|
lbajardsilogic@5
|
71 m_curGroupLabel = label;
|
lbajardsilogic@5
|
72 }
|
lbajardsilogic@5
|
73
|
lbajardsilogic@5
|
74 void QueryThemeModel::addProperty(const QString &name, const QString &label, const QString &type,
|
lbajardsilogic@5
|
75 const QString &range, const QString &unit, const QString &comment)
|
lbajardsilogic@5
|
76 {
|
lbajardsilogic@5
|
77 PropertyModel* newProperty = new PropertyModel(name, label, type, range, unit, comment,
|
lbajardsilogic@5
|
78 m_curGroupName, m_curGroupLabel);
|
lbajardsilogic@5
|
79
|
lbajardsilogic@5
|
80 m_properties[name] = newProperty;
|
lbajardsilogic@5
|
81
|
lbajardsilogic@5
|
82 m_propertiesName.push_back(name);
|
lbajardsilogic@5
|
83 }
|
lbajardsilogic@5
|
84
|
lbajardsilogic@5
|
85 QueryThemeModel::PropertyList QueryThemeModel::getProperties() const
|
lbajardsilogic@5
|
86 {
|
lbajardsilogic@5
|
87 return m_propertiesName;
|
lbajardsilogic@5
|
88 }
|
lbajardsilogic@5
|
89
|
lbajardsilogic@5
|
90 QString QueryThemeModel::getPropertyLabel(const PropertyName &name) const
|
lbajardsilogic@5
|
91 {
|
lbajardsilogic@5
|
92 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
93 iter = m_properties.find(name);
|
lbajardsilogic@5
|
94
|
lbajardsilogic@5
|
95 if (iter != m_properties.end())
|
lbajardsilogic@5
|
96 return iter->second->getLabel();
|
lbajardsilogic@5
|
97
|
lbajardsilogic@5
|
98 return "";
|
lbajardsilogic@5
|
99 }
|
lbajardsilogic@5
|
100
|
lbajardsilogic@5
|
101 QueryThemeModel::PropertyType QueryThemeModel::getPropertyType(const PropertyName &name) const
|
lbajardsilogic@5
|
102 {
|
lbajardsilogic@5
|
103 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
104 iter = m_properties.find(name);
|
lbajardsilogic@5
|
105
|
lbajardsilogic@5
|
106 if (iter != m_properties.end())
|
lbajardsilogic@5
|
107 return iter->second->getType();
|
lbajardsilogic@5
|
108
|
lbajardsilogic@5
|
109 return InvalidProperty;
|
lbajardsilogic@5
|
110 }
|
lbajardsilogic@5
|
111
|
lbajardsilogic@5
|
112 int QueryThemeModel::getPropertyRangeAndValue(const PropertyName &name, int *min, int *max) const
|
lbajardsilogic@5
|
113 {
|
lbajardsilogic@5
|
114 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
115 iter = m_properties.find(name);
|
lbajardsilogic@5
|
116
|
lbajardsilogic@5
|
117 if (iter != m_properties.end())
|
lbajardsilogic@5
|
118 {
|
lbajardsilogic@5
|
119 *min = iter->second->getMinRange();
|
lbajardsilogic@5
|
120 *max = iter->second->getMaxRange();
|
lbajardsilogic@32
|
121 if (iter->second->getType() != StringProperty)
|
lbajardsilogic@5
|
122 return iter->second->getValue().toInt();
|
lbajardsilogic@5
|
123 }
|
lbajardsilogic@5
|
124
|
lbajardsilogic@5
|
125 return 0;
|
lbajardsilogic@5
|
126 }
|
lbajardsilogic@5
|
127
|
lbajardsilogic@5
|
128 QString QueryThemeModel::getPropertyValue(const PropertyName &name) const
|
lbajardsilogic@5
|
129 {
|
lbajardsilogic@5
|
130 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
131 iter = m_properties.find(name);
|
lbajardsilogic@5
|
132
|
lbajardsilogic@5
|
133 if (iter != m_properties.end())
|
lbajardsilogic@5
|
134 {
|
lbajardsilogic@5
|
135 return iter->second->getValue();
|
lbajardsilogic@5
|
136 }
|
lbajardsilogic@5
|
137
|
lbajardsilogic@5
|
138 return "";
|
lbajardsilogic@5
|
139 }
|
lbajardsilogic@5
|
140
|
lbajardsilogic@5
|
141 QStringList QueryThemeModel::getPropertyRange(const PropertyName &name) const
|
lbajardsilogic@5
|
142 {
|
lbajardsilogic@5
|
143 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
144 iter = m_properties.find(name);
|
lbajardsilogic@5
|
145
|
lbajardsilogic@5
|
146 if (iter != m_properties.end())
|
lbajardsilogic@5
|
147 return iter->second->getRange();
|
lbajardsilogic@5
|
148
|
lbajardsilogic@5
|
149 return QStringList();
|
lbajardsilogic@5
|
150 }
|
lbajardsilogic@5
|
151
|
lbajardsilogic@5
|
152 QString QueryThemeModel::getPropertyValueLabel(const PropertyName &name, int value) const
|
lbajardsilogic@5
|
153 {
|
lbajardsilogic@5
|
154 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
155 iter = m_properties.find(name);
|
lbajardsilogic@5
|
156
|
lbajardsilogic@5
|
157 if (iter != m_properties.end())
|
lbajardsilogic@5
|
158 return iter->second->getValueLabel(value);
|
lbajardsilogic@5
|
159
|
lbajardsilogic@5
|
160 return "";
|
lbajardsilogic@5
|
161 }
|
lbajardsilogic@5
|
162
|
lbajardsilogic@5
|
163 QString QueryThemeModel::getPropertyGroup(const PropertyName &name) const
|
lbajardsilogic@5
|
164 {
|
lbajardsilogic@5
|
165 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
166 iter = m_properties.find(name);
|
lbajardsilogic@5
|
167
|
lbajardsilogic@5
|
168 if (iter != m_properties.end())
|
lbajardsilogic@5
|
169 return iter->second->getGroupName();
|
lbajardsilogic@5
|
170
|
lbajardsilogic@5
|
171 return "";
|
lbajardsilogic@5
|
172 }
|
lbajardsilogic@5
|
173
|
lbajardsilogic@5
|
174 QString QueryThemeModel::getPropertyGroupLabel(const PropertyName &name) const
|
lbajardsilogic@5
|
175 {
|
lbajardsilogic@5
|
176 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
177 iter = m_properties.find(name);
|
lbajardsilogic@5
|
178
|
lbajardsilogic@5
|
179 if (iter != m_properties.end())
|
lbajardsilogic@5
|
180 return iter->second->getGroupLabel();
|
lbajardsilogic@5
|
181
|
lbajardsilogic@5
|
182 return "";
|
lbajardsilogic@5
|
183 }
|
lbajardsilogic@5
|
184
|
lbajardsilogic@5
|
185 QString QueryThemeModel::getPropertyUnit(const PropertyName &name) const
|
lbajardsilogic@5
|
186 {
|
lbajardsilogic@5
|
187 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
188 iter = m_properties.find(name);
|
lbajardsilogic@5
|
189
|
lbajardsilogic@5
|
190 if (iter != m_properties.end())
|
lbajardsilogic@5
|
191 return iter->second->getUnit();
|
lbajardsilogic@5
|
192
|
lbajardsilogic@5
|
193 return "";
|
lbajardsilogic@5
|
194 }
|
lbajardsilogic@5
|
195
|
lbajardsilogic@5
|
196 QString QueryThemeModel::getPropertyComment(const PropertyName &name) const
|
lbajardsilogic@5
|
197 {
|
lbajardsilogic@5
|
198 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
199 iter = m_properties.find(name);
|
lbajardsilogic@5
|
200
|
lbajardsilogic@5
|
201 if (iter != m_properties.end())
|
lbajardsilogic@5
|
202 return iter->second->getComment();
|
lbajardsilogic@5
|
203
|
lbajardsilogic@5
|
204 return "";
|
lbajardsilogic@5
|
205 }
|
lbajardsilogic@5
|
206
|
lbajardsilogic@5
|
207 void QueryThemeModel::setProperty(const PropertyName &name, int value)
|
lbajardsilogic@5
|
208 {
|
lbajardsilogic@5
|
209 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
210 iter = m_properties.find(name);
|
lbajardsilogic@5
|
211
|
lbajardsilogic@5
|
212 if (iter != m_properties.end())
|
lbajardsilogic@5
|
213 iter->second->setValue(value);
|
lbajardsilogic@5
|
214 }
|
lbajardsilogic@5
|
215
|
lbajardsilogic@5
|
216 void QueryThemeModel::setProperty(const PropertyName &name, QString value)
|
lbajardsilogic@5
|
217 {
|
lbajardsilogic@5
|
218 std::map<QString, PropertyModel*>::const_iterator iter;
|
lbajardsilogic@5
|
219 iter = m_properties.find(name);
|
lbajardsilogic@5
|
220
|
lbajardsilogic@5
|
221 if (iter != m_properties.end())
|
lbajardsilogic@5
|
222 iter->second->setValue(value);
|
lbajardsilogic@5
|
223 }
|
lbajardsilogic@5
|
224
|
lbajardsilogic@5
|
225 void QueryThemeModel::setProperty(int value)
|
lbajardsilogic@5
|
226 {
|
lbajardsilogic@5
|
227 QString name = sender()->objectName();
|
lbajardsilogic@5
|
228 setProperty(name, value);
|
lbajardsilogic@5
|
229 }
|
lbajardsilogic@5
|
230
|
lbajardsilogic@5
|
231 void QueryThemeModel::setProperty(QString 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 QueryThemeModel::PropertyModel::PropertyModel(const QString &name, const QString &label, const QString &type,
|
lbajardsilogic@5
|
238 const QString &range, const QString &unit, const QString &comment,
|
lbajardsilogic@5
|
239 const QString &groupName, const QString &groupLabel) :
|
lbajardsilogic@5
|
240 m_name(name),
|
lbajardsilogic@5
|
241 m_label(label),
|
lbajardsilogic@5
|
242 m_unit(unit),
|
lbajardsilogic@5
|
243 m_comment(comment),
|
lbajardsilogic@5
|
244 m_groupName(groupName),
|
lbajardsilogic@5
|
245 m_groupLabel(groupLabel),
|
lbajardsilogic@5
|
246 m_min(0),
|
lbajardsilogic@5
|
247 m_max(0),
|
lbajardsilogic@5
|
248 m_value("")
|
lbajardsilogic@5
|
249 {
|
lbajardsilogic@5
|
250 if (type == "int")
|
lbajardsilogic@5
|
251 {
|
lbajardsilogic@32
|
252 m_type = RangeProperty;
|
lbajardsilogic@5
|
253
|
lbajardsilogic@5
|
254 if (range != "")
|
lbajardsilogic@5
|
255 {
|
lbajardsilogic@5
|
256 int pos = range.indexOf("-");
|
lbajardsilogic@5
|
257
|
lbajardsilogic@5
|
258 m_min = range.left(pos).toInt();
|
lbajardsilogic@5
|
259 m_max = range.right(range.length()-pos-1).toInt();
|
lbajardsilogic@5
|
260 }
|
lbajardsilogic@5
|
261 } else if (type == "string")
|
lbajardsilogic@5
|
262 {
|
lbajardsilogic@5
|
263 if (range == "") {
|
lbajardsilogic@32
|
264 m_type = StringProperty;
|
lbajardsilogic@5
|
265 } else {
|
lbajardsilogic@32
|
266 m_type = ValueProperty;
|
lbajardsilogic@5
|
267
|
lbajardsilogic@5
|
268 if (range != "")
|
lbajardsilogic@5
|
269 {
|
lbajardsilogic@5
|
270 m_value = "0";
|
lbajardsilogic@5
|
271 m_range = range.split("/");
|
lbajardsilogic@5
|
272 m_min = 0;
|
lbajardsilogic@5
|
273 m_max = m_range.size();
|
lbajardsilogic@5
|
274 }
|
lbajardsilogic@5
|
275 }
|
lbajardsilogic@5
|
276 } else if (type == "gYear")
|
lbajardsilogic@5
|
277 {
|
lbajardsilogic@32
|
278 m_type = RangeProperty;
|
lbajardsilogic@5
|
279
|
lbajardsilogic@5
|
280 m_min = 0;
|
lbajardsilogic@5
|
281 m_max = 2007;
|
lbajardsilogic@5
|
282
|
lbajardsilogic@5
|
283 } else
|
lbajardsilogic@5
|
284 {
|
lbajardsilogic@32
|
285 m_type = InvalidProperty;
|
lbajardsilogic@5
|
286 }
|
lbajardsilogic@5
|
287 } |