git-svn-id: file:///svnroot/family-shop-mgr@35 26eb2498-383b-47a6-be48-5d6f36779e85
[family-shop-mgr] / code / family-shop-mgr / model / ShoppingTreeItem.cpp
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 #include <QtXml>\r
23 \r
24 #include "ShoppingTreeItem.h"\r
25 \r
26 \r
27 ShoppingTreeItem::ShoppingTreeItem(QDomNode &node, ShoppingTreeItem *parent)\r
28 {\r
29     domNode = node;\r
30     parentItem = parent;\r
31 }\r
32 \r
33 /*******************************************************************/\r
34 ShoppingTreeItem::~ShoppingTreeItem()\r
35 {\r
36     QHash<int,ShoppingTreeItem*>::iterator it;\r
37     for (it = childItems.begin(); it != childItems.end(); ++it)\r
38         delete it.value();\r
39 }\r
40 \r
41 /*******************************************************************/\r
42 QDomNode ShoppingTreeItem::node() const\r
43 {\r
44     return domNode;\r
45 }\r
46 \r
47 /*******************************************************************/\r
48 ShoppingTreeItem *ShoppingTreeItem::parent()\r
49 {\r
50     return parentItem;\r
51 }\r
52 \r
53 /*******************************************************************/\r
54 ShoppingTreeItem *ShoppingTreeItem::child(int i)\r
55 {\r
56     if (childItems.contains(i))\r
57         return childItems[i];\r
58 \r
59     QDomNodeList childNodesList = domNode.childNodes();\r
60     QList<QDomNode> childElementsList;\r
61     QDomNode childNode;\r
62     for(int j = 0; !(childNode = childNodesList.at(j)).isNull(); j++)\r
63     {\r
64         if(childNode.isElement())\r
65         {\r
66             if(childNode.toElement().nodeName() == "category" ||\r
67                childNode.toElement().nodeName() == "item")\r
68                 childElementsList.append(childNode);\r
69         }\r
70     }\r
71     if (i >= 0 && i < childElementsList.count()) {\r
72         childNode = childElementsList.at(i);\r
73         ShoppingTreeItem *childItem = new ShoppingTreeItem(childNode, this);\r
74         childItems[i] = childItem;\r
75         return childItem;\r
76     }\r
77     return 0;\r
78 }\r
79 \r
80 /*******************************************************************/\r
81 int ShoppingTreeItem::row()\r
82 {\r
83     return parent()->childItems.key(this);\r
84 }\r
85 \r
86 /*******************************************************************/\r
87 bool ShoppingTreeItem::addChild(ShoppingTreeItem *item, int row)\r
88 {\r
89     offsetChildAtAdd(row);\r
90     childItems.insert(row, item);\r
91     return true;\r
92 }\r
93 \r
94 /*******************************************************************/\r
95 bool ShoppingTreeItem::removeChild(int row)\r
96 {\r
97     delete childItems[row];\r
98     childItems.remove(row);\r
99     offsetChildAtRemove(row);\r
100     return true;\r
101 }\r
102 \r
103 /*******************************************************************/\r
104 void ShoppingTreeItem::offsetChildAtAdd(int row)\r
105 {\r
106     if(childItems.contains(row))\r
107     {\r
108         offsetChildAtAdd(row + 1);\r
109         childItems.insert(row + 1, childItems[row]);\r
110     }\r
111 }\r
112 \r
113 /*******************************************************************/\r
114 void ShoppingTreeItem::offsetChildAtRemove(int row)\r
115 {\r
116     if(childItems.contains(row + 1))\r
117     {\r
118         childItems.insert(row, childItems[row + 1]);\r
119         offsetChildAtRemove(row + 1);\r
120     }\r
121 }\r