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
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
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
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
\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