#define SHOPPINGTREEMODEL_H\r
\r
#include <QAbstractItemModel>\r
+#include <QDomDocument>\r
+#include <QModelIndex>\r
+#include <QVector>\r
+#include <QVariant>\r
+#include <QHash>\r
+\r
+class ShoppingTreeItem;\r
\r
class ShoppingTreeModel : public QAbstractItemModel\r
{\r
+Q_OBJECT\r
+\r
public:\r
- ShoppingTreeModel();\r
+ ShoppingTreeModel(const QString &xmlFileName, QObject *parent = 0);\r
+ ~ShoppingTreeModel();\r
+\r
+ QVariant data(const QModelIndex &index, int role) const;\r
+ QVariant headerData(int section, Qt::Orientation orientation,\r
+ int role = Qt::DisplayRole) const;\r
+ QModelIndex index(int row, int column,\r
+ const QModelIndex &parent = QModelIndex()) const;\r
+ QModelIndex parent(const QModelIndex &index) const;\r
+\r
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;\r
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;\r
+\r
+ Qt::ItemFlags flags(const QModelIndex &index) const;\r
+ bool setData(const QModelIndex &index, const QVariant &value,\r
+ int role = Qt::EditRole);\r
+ bool setHeaderData(int section, Qt::Orientation orientation,\r
+ const QVariant &value, int role = Qt::EditRole);\r
+\r
+ bool insertColumns(int position, int columns,\r
+ const QModelIndex &parent = QModelIndex());\r
+ bool removeColumns(int position, int columns,\r
+ const QModelIndex &parent = QModelIndex());\r
+ bool insertRows(int position, int rows,\r
+ const QModelIndex &parent = QModelIndex());\r
+ bool removeRows(int position, int rows,\r
+ const QModelIndex &parent = QModelIndex());\r
+\r
+signals:\r
+ void xmlParseError(QString error, int line, int column);\r
+ void invalidDocument();\r
+\r
+public slots:\r
+ void registerInsertedChild(ShoppingTreeItem *item);\r
+ void deleteRemovedChild(ShoppingTreeItem *item);\r
+\r
+protected:\r
+ void parseCategoryElement(const QDomElement &element,\r
+ ShoppingTreeItem *parentItem = 0);\r
+ QVector<QVariant> getColumnsFromItemElement(const QDomElement &element);\r
+ bool updateDomElement(ShoppingTreeItem *item, int column);\r
+ void updateXmlFile() const;\r
\r
private:\r
+ ShoppingTreeItem *getItem(const QModelIndex &index) const;\r
+\r
+ ShoppingTreeItem *rootItem;\r
+ QString m_xmlFileName;\r
QDomDocument m_document;\r
+ QHash<ShoppingTreeItem *, QDomElement> m_domElementForItem;\r
};\r
\r
#endif // SHOPPINGTREEMODEL_H\r