lbajardsilogic@5: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@5: lbajardsilogic@5: /* Sound Access lbajardsilogic@5: EASAIER client application. lbajardsilogic@5: Silogic 2007. Laure Bajard. lbajardsilogic@5: lbajardsilogic@5: This program is free software; you can redistribute it and/or lbajardsilogic@5: modify it under the terms of the GNU General Public License as lbajardsilogic@5: published by the Free Software Foundation; either version 2 of the lbajardsilogic@5: License, or (at your option) any later version. See the file lbajardsilogic@5: COPYING included with this distribution for more information. lbajardsilogic@5: */ lbajardsilogic@5: lbajardsilogic@5: #include "QueryModel.h" lbajardsilogic@5: lbajardsilogic@5: QueryModel::QueryModel() lbajardsilogic@5: {} lbajardsilogic@5: lbajardsilogic@5: QueryModel::~QueryModel() lbajardsilogic@5: { lbajardsilogic@5: while (!m_themeModels.empty()) lbajardsilogic@5: { lbajardsilogic@5: delete m_themeModels.begin()->second; lbajardsilogic@5: m_themeModels.erase(m_themeModels.begin()); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: m_curThemeModel = 0; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryModel::addTheme(const QString &name, const QString &label) lbajardsilogic@5: { lbajardsilogic@5: m_curThemeModel = new QueryThemeModel(name, label); lbajardsilogic@5: lbajardsilogic@5: m_themeModels[name] = m_curThemeModel; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryModel::newGroup(const QString &name, const QString &label) lbajardsilogic@5: { lbajardsilogic@5: m_curThemeModel->newGroup(name, label); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryModel::addProperty(const QString &name, const QString &label, const QString &type, lbajardsilogic@5: const QString &range, const QString &unit, const QString &comment) lbajardsilogic@5: { lbajardsilogic@5: m_curThemeModel->addProperty(name, label, type, range, unit, comment); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@227: void QueryModel::addRange(const QString &propertyName, const QString &range) lbajardsilogic@227: { lbajardsilogic@227: m_curThemeModel->addRange(propertyName, range); lbajardsilogic@227: } lbajardsilogic@227: lbajardsilogic@5: QueryThemeModel::QueryThemeModel(const QString &name, const QString &label) : lbajardsilogic@5: m_name(name), lbajardsilogic@5: m_label(label), lbajardsilogic@5: m_curGroupName(""), lbajardsilogic@5: m_curGroupLabel("") lbajardsilogic@5: { lbajardsilogic@5: setObjectName(name); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QueryThemeModel::~QueryThemeModel() lbajardsilogic@5: { lbajardsilogic@5: m_propertiesName.clear(); lbajardsilogic@5: lbajardsilogic@5: while (!m_properties.empty()) lbajardsilogic@5: { lbajardsilogic@5: delete m_properties.begin()->second; lbajardsilogic@5: m_properties.erase(m_properties.begin()); lbajardsilogic@5: } lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryThemeModel::newGroup(const QString &name, const QString &label) lbajardsilogic@5: { lbajardsilogic@5: m_curGroupName = name; lbajardsilogic@5: m_curGroupLabel = label; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryThemeModel::addProperty(const QString &name, const QString &label, const QString &type, lbajardsilogic@5: const QString &range, const QString &unit, const QString &comment) lbajardsilogic@5: { lbajardsilogic@5: PropertyModel* newProperty = new PropertyModel(name, label, type, range, unit, comment, lbajardsilogic@5: m_curGroupName, m_curGroupLabel); lbajardsilogic@5: lbajardsilogic@5: m_properties[name] = newProperty; lbajardsilogic@5: lbajardsilogic@5: m_propertiesName.push_back(name); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QueryThemeModel::PropertyList QueryThemeModel::getProperties() const lbajardsilogic@5: { lbajardsilogic@5: return m_propertiesName; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyLabel(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getLabel(); lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QueryThemeModel::PropertyType QueryThemeModel::getPropertyType(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getType(); lbajardsilogic@5: lbajardsilogic@5: return InvalidProperty; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: int QueryThemeModel::getPropertyRangeAndValue(const PropertyName &name, int *min, int *max) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: { lbajardsilogic@5: *min = iter->second->getMinRange(); lbajardsilogic@5: *max = iter->second->getMaxRange(); lbajardsilogic@32: if (iter->second->getType() != StringProperty) lbajardsilogic@5: return iter->second->getValue().toInt(); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: return 0; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyValue(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: { lbajardsilogic@242: PropertyModel * propModel = iter->second; lbajardsilogic@242: return propModel->getValue(); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QStringList QueryThemeModel::getPropertyRange(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getRange(); lbajardsilogic@5: lbajardsilogic@5: return QStringList(); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyValueLabel(const PropertyName &name, int value) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getValueLabel(value); lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyGroup(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getGroupName(); lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyGroupLabel(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getGroupLabel(); lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyUnit(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getUnit(); lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: QString QueryThemeModel::getPropertyComment(const PropertyName &name) const lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: return iter->second->getComment(); lbajardsilogic@5: lbajardsilogic@5: return ""; lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryThemeModel::setProperty(const PropertyName &name, int value) lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: iter->second->setValue(value); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryThemeModel::setProperty(const PropertyName &name, QString value) lbajardsilogic@5: { lbajardsilogic@5: std::map::const_iterator iter; lbajardsilogic@5: iter = m_properties.find(name); lbajardsilogic@5: lbajardsilogic@5: if (iter != m_properties.end()) lbajardsilogic@5: iter->second->setValue(value); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryThemeModel::setProperty(int value) lbajardsilogic@5: { lbajardsilogic@5: QString name = sender()->objectName(); lbajardsilogic@5: setProperty(name, value); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@5: void QueryThemeModel::setProperty(QString value) lbajardsilogic@5: { lbajardsilogic@5: QString name = sender()->objectName(); lbajardsilogic@5: setProperty(name, value); lbajardsilogic@5: } lbajardsilogic@5: lbajardsilogic@227: void QueryThemeModel::addRange(const QString &propertyName, const QString &range) lbajardsilogic@227: { lbajardsilogic@227: std::map::iterator iter = m_properties.find(propertyName); lbajardsilogic@227: if (iter != m_properties.end()) lbajardsilogic@227: { lbajardsilogic@227: PropertyModel* model = iter->second; lbajardsilogic@227: model->addRange(range); lbajardsilogic@227: } lbajardsilogic@227: } lbajardsilogic@227: lbajardsilogic@5: QueryThemeModel::PropertyModel::PropertyModel(const QString &name, const QString &label, const QString &type, lbajardsilogic@5: const QString &range, const QString &unit, const QString &comment, lbajardsilogic@5: const QString &groupName, const QString &groupLabel) : lbajardsilogic@5: m_name(name), lbajardsilogic@5: m_label(label), lbajardsilogic@5: m_unit(unit), lbajardsilogic@5: m_comment(comment), lbajardsilogic@5: m_groupName(groupName), lbajardsilogic@5: m_groupLabel(groupLabel), lbajardsilogic@5: m_min(0), lbajardsilogic@5: m_max(0), lbajardsilogic@5: m_value("") lbajardsilogic@5: { lbajardsilogic@5: if (type == "int") lbajardsilogic@5: { lbajardsilogic@32: m_type = RangeProperty; lbajardsilogic@5: lbajardsilogic@5: if (range != "") lbajardsilogic@5: { lbajardsilogic@5: int pos = range.indexOf("-"); lbajardsilogic@5: lbajardsilogic@5: m_min = range.left(pos).toInt(); lbajardsilogic@5: m_max = range.right(range.length()-pos-1).toInt(); lbajardsilogic@5: } lbajardsilogic@5: } else if (type == "string") lbajardsilogic@5: { lbajardsilogic@5: if (range == "") { lbajardsilogic@32: m_type = StringProperty; lbajardsilogic@5: } else { lbajardsilogic@32: m_type = ValueProperty; lbajardsilogic@5: lbajardsilogic@5: if (range != "") lbajardsilogic@5: { lbajardsilogic@5: m_range = range.split("/"); lbajardsilogic@5: m_min = 0; lbajardsilogic@5: m_max = m_range.size(); lbajardsilogic@242: m_value = m_range.at(0); lbajardsilogic@5: } lbajardsilogic@5: } lbajardsilogic@228: } else if (type == "file") lbajardsilogic@228: { lbajardsilogic@228: m_type = FileProperty; lbajardsilogic@228: lbajardsilogic@5: } else if (type == "gYear") lbajardsilogic@5: { lbajardsilogic@32: m_type = RangeProperty; lbajardsilogic@5: lbajardsilogic@5: m_min = 0; lbajardsilogic@5: m_max = 2007; lbajardsilogic@5: lbajardsilogic@5: } else lbajardsilogic@5: { lbajardsilogic@32: m_type = InvalidProperty; lbajardsilogic@5: } lbajardsilogic@227: } lbajardsilogic@227: lbajardsilogic@227: lbajardsilogic@227: void QueryThemeModel::PropertyModel::addRange(const QString &range) lbajardsilogic@227: { lbajardsilogic@227: m_range << range; lbajardsilogic@227: m_type = ValueProperty; lbajardsilogic@227: m_min = 0; lbajardsilogic@227: m_max = m_range.size(); lbajardsilogic@242: m_value = m_range.at(0); lbajardsilogic@5: }