annotate data/model/QueryModel.cpp @ 150:c946c19e6329

(none)
author ivand_qmul
date Wed, 14 Nov 2007 15:11:46 +0000
parents 50d04702da36
children 59d84a8bb76c
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@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 }