git-svn-id: file:///svnroot/family-shop-mgr@31 26eb2498-383b-47a6-be48-5d6f36779e85
[family-shop-mgr] / code / family-shop-mgr / ShoppingTreeModel.h
1 /*\r
2  * This file is part of family-shop-mgr.\r
3  *\r
4  * family-shop-mgr is free software: you can redistribute it and/or modify\r
5  * it under the terms of the GNU General Public License as published by\r
6  * the Free Software Foundation, either version 3 of the License, or\r
7  * (at your option) any later version.\r
8  *\r
9  * family-shop-mgr is distributed in the hope that it will be useful,\r
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
12  * GNU General Public License for more details.\r
13  *\r
14  * You should have received a copy of the GNU General Public License\r
15  * along with family-shop-mgr.  If not, see <http://www.gnu.org/licenses/>.\r
16  *\r
17  * Author: Unai IRIGOYEN\r
18  * Date: 12/07/2009\r
19  *\r
20  */\r
21 \r
22 #ifndef SHOPPINGTREEMODEL_H\r
23 #define SHOPPINGTREEMODEL_H\r
24 \r
25 #include <QAbstractItemModel>\r
26 #include <QDomDocument>\r
27 #include <QModelIndex>\r
28 #include <QVector>\r
29 #include <QVariant>\r
30 #include <QHash>\r
31 \r
32 class ShoppingTreeItem;\r
33 \r
34 class ShoppingTreeModel : public QAbstractItemModel\r
35 {\r
36 Q_OBJECT\r
37 \r
38 public:\r
39     ShoppingTreeModel(const QString &xmlFileName, QObject *parent = 0);\r
40     ~ShoppingTreeModel();\r
41 \r
42     bool addCategory(QString name);\r
43     bool addSubCategory(QString name, int position,\r
44                         const QModelIndex &parent = QModelIndex());\r
45     bool addItem(QString name, int position,\r
46                  const QModelIndex &parent = QModelIndex());\r
47     bool removeCategoryOrItem(const QModelIndex &index = QModelIndex());\r
48 \r
49     QVariant data(const QModelIndex &index, int role) const;\r
50     QVariant headerData(int section, Qt::Orientation orientation,\r
51                         int role = Qt::DisplayRole) const;\r
52     QModelIndex index(int row, int column,\r
53                       const QModelIndex &parent = QModelIndex()) const;\r
54     QModelIndex parent(const QModelIndex &index) const;\r
55 \r
56     int rowCount(const QModelIndex &parent = QModelIndex()) const;\r
57     int columnCount(const QModelIndex &parent = QModelIndex()) const;\r
58 \r
59     Qt::ItemFlags flags(const QModelIndex &index) const;\r
60     bool setData(const QModelIndex &index, const QVariant &value,\r
61                  int role = Qt::EditRole);\r
62     bool setHeaderData(int section, Qt::Orientation orientation,\r
63                        const QVariant &value, int role = Qt::EditRole);\r
64     void sort(int column, Qt::SortOrder order);\r
65 \r
66 private:\r
67     bool insertColumns(int position, int columns,\r
68                            const QModelIndex &parent = QModelIndex());\r
69     bool removeColumns(int position, int columns,\r
70                            const QModelIndex &parent = QModelIndex());\r
71     bool insertRows(int position, int rows,\r
72                     const QModelIndex &parent = QModelIndex());\r
73     bool removeRows(int position, int rows,\r
74                     const QModelIndex &parent = QModelIndex());\r
75 \r
76 signals:\r
77     void xmlParseError(QString error, int line, int column);\r
78     void invalidDocument();\r
79 \r
80 public slots:\r
81     void registerInsertedChild(ShoppingTreeItem *item);\r
82     void deleteRemovedChild(ShoppingTreeItem *item);\r
83 \r
84 protected:\r
85     void parseCategoryElement(const QDomElement &element,\r
86                               ShoppingTreeItem *parentItem = 0);\r
87     QVector<QVariant> getColumnsFromItemElement(const QDomElement &element);\r
88     bool updateDomElement(ShoppingTreeItem *item, int column);\r
89     void updateXmlFile() const;\r
90 \r
91 private:\r
92     ShoppingTreeItem *getItem(const QModelIndex &index) const;\r
93 \r
94     ShoppingTreeItem *rootItem;\r
95     QString m_xmlFileName;\r
96     QDomDocument m_document;\r
97     QHash<ShoppingTreeItem *, QDomElement> m_domElementForItem;\r
98 };\r
99 \r
100 #endif // SHOPPINGTREEMODEL_H\r