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: #ifndef _QUERY_MODEL_H_ lbajardsilogic@5: #define _QUERY_MODEL_H_ lbajardsilogic@5: lbajardsilogic@5: #include lbajardsilogic@5: lbajardsilogic@5: #include lbajardsilogic@5: lbajardsilogic@5: #include "base/PropertyContainer.h" lbajardsilogic@5: lbajardsilogic@5: class QueryThemeModel; lbajardsilogic@5: lbajardsilogic@5: class QueryModel { lbajardsilogic@5: lbajardsilogic@5: public: lbajardsilogic@5: QueryModel(); lbajardsilogic@5: virtual ~QueryModel(); lbajardsilogic@5: lbajardsilogic@5: void addTheme(const QString &name, const QString &label); lbajardsilogic@5: void newGroup(const QString &name, const QString &label); lbajardsilogic@5: void addProperty(const QString &name, const QString &label, const QString &type, const QString &range="", const QString &unit="", const QString &comment=""); lbajardsilogic@5: lbajardsilogic@227: void addRange(const QString &propertyName, const QString &range); lbajardsilogic@227: lbajardsilogic@5: inline std::map& getThemes(){return m_themeModels;} lbajardsilogic@5: lbajardsilogic@5: protected: lbajardsilogic@5: lbajardsilogic@5: std::map m_themeModels; lbajardsilogic@5: lbajardsilogic@5: QueryThemeModel *m_curThemeModel; lbajardsilogic@5: lbajardsilogic@5: }; lbajardsilogic@5: lbajardsilogic@5: class QueryThemeModel : public PropertyContainer { lbajardsilogic@5: lbajardsilogic@5: Q_OBJECT lbajardsilogic@5: public: lbajardsilogic@5: QueryThemeModel(const QString &name, const QString &label); lbajardsilogic@5: virtual ~QueryThemeModel(); lbajardsilogic@5: lbajardsilogic@5: void newGroup(const QString &name, const QString &label); lbajardsilogic@5: lbajardsilogic@5: void addProperty(const QString &name, const QString &label, const QString &type, const QString &range, const QString &unit, const QString &comment); lbajardsilogic@5: lbajardsilogic@5: inline QString getName() const {return m_name;} lbajardsilogic@5: inline QString getLabel() const {return m_label;} lbajardsilogic@5: lbajardsilogic@5: virtual PropertyList getProperties() const; lbajardsilogic@5: virtual QString getPropertyLabel(const PropertyName &name) const; lbajardsilogic@5: virtual PropertyType getPropertyType(const PropertyName &name) const; lbajardsilogic@5: virtual int getPropertyRangeAndValue(const PropertyName &name, int *min, int *max) const; lbajardsilogic@5: virtual QString getPropertyValueLabel(const PropertyName &name, int value) const; lbajardsilogic@5: lbajardsilogic@5: QString getPropertyValue(const PropertyName &name) const; lbajardsilogic@5: QStringList getPropertyRange(const PropertyName &name) const; lbajardsilogic@5: lbajardsilogic@5: virtual QString getPropertyContainerName() const {return objectName();} lbajardsilogic@5: virtual QString getPropertyContainerIconName() const {return "";} lbajardsilogic@5: lbajardsilogic@5: QString getPropertyGroup(const PropertyName &name) const; lbajardsilogic@5: QString getPropertyGroupLabel(const PropertyName &name) const; lbajardsilogic@5: lbajardsilogic@5: QString getPropertyUnit(const PropertyName &name) const; lbajardsilogic@5: QString getPropertyComment(const PropertyName &name) const; lbajardsilogic@5: lbajardsilogic@5: virtual void setProperty(const PropertyName &name, int value); lbajardsilogic@5: lbajardsilogic@227: void addRange(const QString &propertyName, const QString &range); lbajardsilogic@227: lbajardsilogic@5: public slots: lbajardsilogic@5: void setProperty(const PropertyName &name, QString value); lbajardsilogic@5: void setProperty(int value); lbajardsilogic@5: void setProperty(QString value); lbajardsilogic@5: lbajardsilogic@5: protected: lbajardsilogic@5: lbajardsilogic@5: class PropertyModel lbajardsilogic@5: { lbajardsilogic@5: public: lbajardsilogic@5: 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: virtual ~PropertyModel(){}; lbajardsilogic@5: lbajardsilogic@5: inline QString getLabel() const {return m_label;} lbajardsilogic@5: inline PropertyType getType() const {return m_type;} lbajardsilogic@5: inline QStringList getRange() const {return m_range;} lbajardsilogic@5: inline QString getUnit() const {return m_unit;} lbajardsilogic@5: inline QString getComment() const {return m_comment;} lbajardsilogic@5: inline QString getValueLabel(int value) const {return m_range.at(value);} lbajardsilogic@5: inline int getMinRange() const {return m_min;} lbajardsilogic@5: inline int getMaxRange() const {return m_max;} lbajardsilogic@5: lbajardsilogic@5: inline QString getGroupName() const {return m_groupName;} lbajardsilogic@5: inline QString getGroupLabel() const {return m_groupLabel;} lbajardsilogic@5: lbajardsilogic@5: inline QString getValue() const {return m_value;} lbajardsilogic@5: lbajardsilogic@242: void setValue(int value){if (m_type == ValueProperty) {m_value = m_range.at(value);} else {m_value = QString::number(value);}} lbajardsilogic@5: void setValue(QString value){m_value = value;} lbajardsilogic@5: lbajardsilogic@227: void addRange(const QString &range); lbajardsilogic@227: lbajardsilogic@5: protected: lbajardsilogic@5: QString m_name; lbajardsilogic@5: QString m_label; lbajardsilogic@5: PropertyType m_type; lbajardsilogic@5: QString m_unit; lbajardsilogic@5: QString m_comment; lbajardsilogic@5: lbajardsilogic@5: QStringList m_range; lbajardsilogic@5: int m_min; lbajardsilogic@5: int m_max; lbajardsilogic@5: lbajardsilogic@5: QString m_groupName; lbajardsilogic@5: QString m_groupLabel; lbajardsilogic@5: lbajardsilogic@5: QString m_value; lbajardsilogic@5: }; lbajardsilogic@5: lbajardsilogic@5: PropertyList m_propertiesName; lbajardsilogic@5: std::map m_properties; lbajardsilogic@5: lbajardsilogic@5: QString m_name; lbajardsilogic@5: QString m_label; lbajardsilogic@5: lbajardsilogic@5: QString m_curGroupName; lbajardsilogic@5: QString m_curGroupLabel; lbajardsilogic@5: }; lbajardsilogic@5: lbajardsilogic@5: #endif