annotate data/model/QueryModel.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 60e84bb658bc
children
rev   line source
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 }