git-svn-id: file:///svnroot/family-shop-mgr@35 26eb2498-383b-47a6-be48-5d6f36779e85
[family-shop-mgr] / code / family-shop-mgr / model / ShoppingTreeModel.cpp
index ee00a89..60314b2 100644 (file)
@@ -59,7 +59,7 @@ QVariant ShoppingTreeModel::data(const QModelIndex &index, int role) const
     if (!index.isValid())\r
         return QVariant();\r
 \r
-    if (role != Qt::DisplayRole)\r
+    if (role != Qt::DisplayRole && role != Qt::EditRole)\r
         return QVariant();\r
 \r
     ShoppingTreeItem *item = static_cast<ShoppingTreeItem*>(index.internalPointer());\r
@@ -72,7 +72,7 @@ QVariant ShoppingTreeModel::data(const QModelIndex &index, int role) const
         case 1:\r
             if(node.toElement().nodeName() == "item")\r
             {\r
-                return node.firstChildElement("quantity").text();\r
+                return node.firstChildElement("quantity").text().toInt();\r
             }\r
             return QVariant();\r
         case 2:\r
@@ -202,7 +202,6 @@ bool ShoppingTreeModel::insertRows(int row, int count, const QModelIndex &parent
             newElement.setTagName("category");\r
             titleElement.setNodeValue(tr("new category"));\r
             newElement.appendChild(titleElement);\r
-            parentItem->node().insertAfter(newElement, parentItem->child(row + i)->node());\r
         }\r
         else if(type == item)\r
         {\r
@@ -223,14 +222,20 @@ bool ShoppingTreeModel::insertRows(int row, int count, const QModelIndex &parent
             lastModifiedElement.setTagName("lastModified");\r
             lastModifiedElement.setNodeValue(QDateTime::currentDateTime().toString("dd/MM/yyyy-hh:mm:ss"));\r
             newElement.appendChild(lastModifiedElement);\r
-            parentItem->node().insertAfter(newElement, parentItem->child(row + i)->node());\r
         }\r
+        else\r
+            return false;\r
+\r
+        parentItem->node().insertAfter(newElement, parentItem->child(row + i)->node());\r
+        ShoppingTreeItem* newItem = new ShoppingTreeItem(newElement, parentItem);\r
+        parentItem->addChild(newItem, row + i);\r
     }\r
     emit documentChanged();\r
+    return true;\r
 }\r
 \r
 /*******************************************************************/\r
-ShoppingTreeModel::removeRows(int row, int count, const QModelIndex &parent)\r
+bool ShoppingTreeModel::removeRows(int row, int count, const QModelIndex &parent)\r
 {\r
     ShoppingTreeItem *parentItem;\r
 \r
@@ -241,52 +246,111 @@ ShoppingTreeModel::removeRows(int row, int count, const QModelIndex &parent)
 \r
     for(int i = 0; i < count; i++)\r
     {\r
-        parentItem->node().removeChild(parentItem->child(i)->node());\r
+        parentItem->node().removeChild(parentItem->child(row)->node());\r
+        parentItem->removeChild(row);\r
     }\r
     emit documentChanged();\r
+    return true;\r
 }\r
 \r
 /*******************************************************************/\r
-ShoppingTreeModel::addCategory(QModelIndex &index)\r
+bool ShoppingTreeModel::addCategory(QModelIndex &index, QString name)\r
 {\r
     ShoppingTreeItem *selectedItem;\r
 \r
-    if (!parent.isValid())\r
+    if (!index.isValid())\r
         selectedItem = rootItem;\r
     else\r
-        selectedItem = static_cast<ShoppingTreeItem*>(parent.internalPointer());\r
+        selectedItem = static_cast<ShoppingTreeItem*>(index.internalPointer());\r
 \r
-    insertRows(selectedItem->row(), 1, parent(index), category);\r
+    bool success = insertRows(selectedItem->row(), 1, parent(index), category);\r
+    if(!name.isEmpty())\r
+    {\r
+        selectedItem->parent()->child(selectedItem->row() + 1)\r
+            ->node().setNodeValue(name);\r
+        emit documentChanged();\r
+    }\r
+    return success;\r
 }\r
 \r
 /*******************************************************************/\r
-ShoppingTreeModel::addItem(QModelIndex &index)\r
+bool ShoppingTreeModel::addItem(QModelIndex &index, QString name)\r
 {\r
     ShoppingTreeItem *selectedItem;\r
 \r
-    if (!parent.isValid())\r
+    if (!index.isValid())\r
         selectedItem = rootItem;\r
     else\r
-        selectedItem = static_cast<ShoppingTreeItem*>(parent.internalPointer());\r
+        selectedItem = static_cast<ShoppingTreeItem*>(index.internalPointer());\r
 \r
-    insertRows(selectedItem->row(), 1, parent(index), item);\r
+    bool success = insertRows(selectedItem->row(), 1, parent(index), item);\r
+    if(!name.isEmpty())\r
+    {\r
+        selectedItem->parent()->child(selectedItem->row() + 1)\r
+            ->node().setNodeValue(name);\r
+        emit documentChanged();\r
+    }\r
+    return success;\r
 }\r
 \r
 /*******************************************************************/\r
-ShoppingTreeModel::removeElement(QModelIndex &index)\r
+bool ShoppingTreeModel::removeElement(QModelIndex &index)\r
 {\r
     ShoppingTreeItem *selectedItem;\r
 \r
-    if (!parent.isValid())\r
+    if (!index.isValid())\r
         selectedItem = rootItem;\r
     else\r
-        selectedItem = static_cast<ShoppingTreeItem*>(parent.internalPointer());\r
+        selectedItem = static_cast<ShoppingTreeItem*>(index.internalPointer());\r
+\r
+    return removeRows(selectedItem->row(), 1, parent(index));\r
+}\r
+\r
+/*******************************************************************/\r
+bool ShoppingTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)\r
+{\r
+    if (!index.isValid())\r
+        return false;\r
+\r
+    if (role != Qt::EditRole)\r
+        return false;\r
+\r
+    ShoppingTreeItem *item = static_cast<ShoppingTreeItem*>(index.internalPointer());\r
+\r
+    QDomNode node = item->node();\r
 \r
-    removeRows(selectedItem->row(), 1, parent(index));\r
+    switch (index.column()) {\r
+        case 0:\r
+            node.firstChildElement("title").setNodeValue(value.toString());\r
+            return true;\r
+        case 1:\r
+            if(node.toElement().nodeName() == "item")\r
+            {\r
+                node.firstChildElement("quantity").setNodeValue(value.toString());\r
+                return true;\r
+            }\r
+            return false;\r
+        case 2:\r
+            if(node.toElement().nodeName() == "item")\r
+            {\r
+                node.firstChildElement("store").setNodeValue(value.toString());\r
+                return true;\r
+            }\r
+            return false;\r
+        case 3:\r
+            if(node.toElement().nodeName() == "item")\r
+            {\r
+                node.firstChildElement("checked").setNodeValue(value.toString());\r
+                return true;\r
+            }\r
+            return false;\r
+        default:\r
+            return false;\r
+    }\r
 }\r
 \r
 /*******************************************************************/\r
-ShoppingTreeModel::save()\r
+void ShoppingTreeModel::save()\r
 {\r
     QFile file(m_fileName);\r
     file.remove();\r