*\r
*/\r
\r
-#include "ShoppingTreeItem.h"\r
-\r
-/*******************************************************************/\r
-ShoppingTreeItem::ShoppingTreeItem(const QVector<QVariant> &data,\r
- ShoppingTreeItem *parent) : m_itemType(NotDefined)\r
-{\r
- parentItem = parent;\r
- itemData = data;\r
-}\r
-\r
-/*******************************************************************/\r
-ShoppingTreeItem::~ShoppingTreeItem()\r
-{\r
- qDeleteAll(childItems);\r
-}\r
-\r
-/*******************************************************************/\r
-ShoppingTreeItem *ShoppingTreeItem::child(int number)\r
-{\r
- return childItems.value(number);\r
-}\r
+#include <QtXml>\r
\r
-/*******************************************************************/\r
-int ShoppingTreeItem::childCount() const\r
-{\r
- return childItems.count();\r
-}\r
-\r
-/*******************************************************************/\r
-int ShoppingTreeItem::childNumber() const\r
-{\r
- if (parentItem)\r
- return parentItem->childItems.indexOf(const_cast<ShoppingTreeItem*>(this));\r
+#include "ShoppingTreeItem.h"\r
\r
- return 0;\r
-}\r
\r
-/*******************************************************************/\r
-int ShoppingTreeItem::columnCount() const\r
+DomItem::DomItem(QDomNode &node, int row, DomItem *parent)\r
{\r
- return itemData.count();\r
+ domNode = node;\r
+ rowNumber = row;\r
+ parentItem = parent;\r
}\r
\r
/*******************************************************************/\r
-QVariant ShoppingTreeItem::data(int column) const\r
+DomItem::~DomItem()\r
{\r
- return itemData.value(column);\r
+ QHash<int,DomItem*>::iterator it;\r
+ for (it = childItems.begin(); it != childItems.end(); ++it)\r
+ delete it.value();\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeItem::insertChildren(int position, int count, int columns,\r
- ShoppingTreeModel* model)\r
+QDomNode DomItem::node() const\r
{\r
- if (position < 0 || position > childItems.size())\r
- return false;\r
-\r
- for (int row = 0; row < count; ++row) {\r
- QVector<QVariant> data(columns);\r
- ShoppingTreeItem *item = new ShoppingTreeItem(data, this);\r
- childItems.insert(position, item);\r
- if(model)\r
- {\r
- connect(item, SIGNAL(childItemSet(ShoppingTreeItem*)), model,\r
- SLOT(registerInsertedChild(ShoppingTreeItem*)));\r
- connect(item, SIGNAL(childRemoved(ShoppingTreeItem*)), model,\r
- SLOT(deleteRemovedChild(ShoppingTreeItem*)));\r
- }\r
- }\r
-\r
- return true;\r
+ return domNode;\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeItem::insertColumns(int position, int columns)\r
-{\r
- if (position < 0 || position > itemData.size())\r
- return false;\r
-\r
- for (int column = 0; column < columns; ++column)\r
- itemData.insert(position, QVariant());\r
-\r
- foreach (ShoppingTreeItem *child, childItems)\r
- child->insertColumns(position, columns);\r
-\r
- return true;\r
-}\r
-\r
-/*******************************************************************/\r
-ShoppingTreeItem *ShoppingTreeItem::parent()\r
+DomItem *DomItem::parent()\r
{\r
return parentItem;\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeItem::removeChildren(int position, int count)\r
+DomItem *DomItem::child(int i)\r
{\r
- if (position < 0 || position + count > childItems.size())\r
- return false;\r
+ if (childItems.contains(i))\r
+ return childItems[i];\r
\r
- for (int row = 0; row < count; ++row)\r
+ QDomNodeList childNodesList = domNode.childNodes();\r
+ QList<QDomNode> childElementsList;\r
+ QDomNode childNode;\r
+ for(int j = 0; !(childNode = childNodesList.at(j)).isNull(); j++)\r
{\r
- ShoppingTreeItem *item = childItems.takeAt(position);\r
- emit childRemoved(item);\r
- delete item;\r
+ if(childNode.isElement())\r
+ {\r
+ if(childNode.toElement().nodeName() == "category" ||\r
+ childNode.toElement().nodeName() == "item")\r
+ childElementsList.append(childNode);\r
+ }\r
}\r
-\r
- return true;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeItem::removeColumns(int position, int columns)\r
-{\r
- if (position < 0 || position + columns > itemData.size())\r
- return false;\r
-\r
- for (int column = 0; column < columns; ++column)\r
- itemData.remove(position);\r
-\r
- foreach (ShoppingTreeItem *child, childItems)\r
- child->removeColumns(position, columns);\r
-\r
- return true;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeItem::setData(int column, const QVariant &value)\r
-{\r
- if (column < 0 || column >= itemData.size())\r
- return false;\r
-\r
- if(m_itemType == Category && column != 0)\r
- return false;\r
-\r
- itemData[column] = value;\r
- emit dataChanged(column);\r
- return true;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeItem::setItemType(ItemType type)\r
-{\r
- if(type == NotDefined)\r
- return false;\r
-\r
- m_itemType = type;\r
-\r
- if(m_itemType == type)\r
- {\r
- emit childItemSet(this);\r
- return true;\r
+ if (i >= 0 && i < childElementsList.count()) {\r
+ childNode = childElementsList.at(i);\r
+ DomItem *childItem = new DomItem(childNode, i, this);\r
+ childItems[i] = childItem;\r
+ return childItem;\r
}\r
- return false;\r
+ return 0;\r
}\r
\r
/*******************************************************************/\r
-ShoppingTreeItem::ItemType ShoppingTreeItem::getItemType() const\r
+int DomItem::row()\r
{\r
- return m_itemType;\r
+ return rowNumber;\r
}\r
*\r
*/\r
\r
-#include "ShoppingTreeModel.h"\r
+#include <QtXml>\r
\r
#include "ShoppingTreeItem.h"\r
-#include <QFile>\r
-#include <QApplication>\r
-#include <QtGui>\r
+#include "ShoppingTreeModel.h"\r
\r
-/*******************************************************************/\r
-ShoppingTreeModel::ShoppingTreeModel(const QString &xmlFileName,\r
- QObject *parent) :\r
-QAbstractItemModel(parent), m_document("ShoppingList")\r
+DomModel::DomModel(QDomDocument document, QObject *parent)\r
+ : QAbstractItemModel(parent), domDocument(document),\r
+ rootItemNode(domDocument.firstChildElement("shoppingList"))\r
{\r
- QString error;\r
- int errLine;\r
- int errColumn;\r
-\r
- m_xmlFileName = QApplication::applicationDirPath() + "/" + xmlFileName;\r
- QFile file(m_xmlFileName);\r
- if(!file.open(QIODevice::ReadOnly))\r
- return;\r
- // Parse xml file\r
- if(!m_document.setContent(&file, true, &error, &errLine, &errColumn))\r
- {\r
- emit xmlParseError(error, errLine, errColumn);\r
- file.close();\r
- return;\r
- }\r
- file.close();\r
-\r
- QDomElement root = m_document.documentElement();\r
- if(root.tagName() != "shoppingList" || !root.hasAttribute("version"))\r
- {\r
- emit invalidDocument();\r
- return;\r
- }\r
- else if(root.attribute("version") == "1.0")\r
- {\r
- // set column titles\r
- QVector<QVariant> rootData;\r
- rootData << "Category/Item name"\r
- << "Quantity" << "Store";\r
-\r
- rootItem = new ShoppingTreeItem(rootData);\r
- m_domElementForItem.insert(rootItem, root);\r
- }\r
- else\r
- {\r
- // upgrade document version if possible\r
- ;\r
- }\r
-\r
- QDomElement child = root.firstChildElement("category");\r
- while(!child.isNull())\r
- {\r
- // Parse all categories\r
- parseCategoryElement(child);\r
- child = child.nextSiblingElement("category");\r
- }\r
-\r
- child = root.firstChildElement("item");\r
- while(!child.isNull())\r
- {\r
- // parse all items which don't have category\r
- rootItem->insertChildren(\r
- rootItem->childCount(), 1,\r
- rootItem->columnCount());\r
- QVector<QVariant> columnData =\r
- getColumnsFromItemElement(child);\r
- rootItem->child(rootItem->childCount() - 1)->\r
- setItemType(ShoppingTreeItem::Item);\r
- for(int column = 0; column < columnData.size(); column++)\r
- {\r
- rootItem->child(rootItem->childCount() - 1)->\r
- setData(column, columnData[column]);\r
- }\r
- m_domElementForItem.insert(rootItem->child(rootItem->childCount() - 1),\r
- child);\r
- child = child.nextSiblingElement("item");\r
- }\r
-\r
-\r
- connect(rootItem, SIGNAL(childItemSet(ShoppingTreeItem*)), this,\r
- SLOT(registerInsertedChild(ShoppingTreeItem*)));\r
- connect(rootItem, SIGNAL(childRemoved(ShoppingTreeItem*)), this,\r
- SLOT(deleteRemovedChild(ShoppingTreeItem*)));\r
-\r
- QHashIterator<ShoppingTreeItem*,QDomElement> i(m_domElementForItem);\r
- while(i.hasNext())\r
- {\r
- i.next();\r
- connect(i.key(), SIGNAL(childItemSet(ShoppingTreeItem*)), this,\r
- SLOT(registerInsertedChild(ShoppingTreeItem*)));\r
- connect(i.key(), SIGNAL(childRemoved(ShoppingTreeItem*)), this,\r
- SLOT(deleteRemovedChild(ShoppingTreeItem*)));\r
- }\r
+ rootItem = new DomItem(rootItemNode, 0);\r
}\r
\r
/*******************************************************************/\r
-ShoppingTreeModel::~ShoppingTreeModel()\r
+DomModel::~DomModel()\r
{\r
delete rootItem;\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeModel::addCategory(QString name)\r
-{\r
- QModelIndex parent = QModelIndex();\r
-\r
- if (!this->insertRow(parent.row()+1, parent))\r
- return false;\r
-\r
- int column = 0;\r
- QModelIndex child = this->index(parent.row()+1, column, parent);\r
- ShoppingTreeItem* item = this->getItem(child);\r
- item->setItemType(ShoppingTreeItem::Category);\r
- this->setData(child, QVariant(name), Qt::EditRole);\r
- return true;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::addSubCategory(QString name, int position,\r
- const QModelIndex &parent)\r
+int DomModel::columnCount(const QModelIndex &/*parent*/) const\r
{\r
- if (!this->insertRow(position, parent))\r
- return false;\r
-\r
- for(int column = 0; column < this->columnCount(parent); ++column)\r
- {\r
- QModelIndex child = this->index(parent.row()+1, column, parent);\r
- ShoppingTreeItem* item = this->getItem(child);\r
- item->setItemType(ShoppingTreeItem::Category);\r
- this->setData(child, QVariant(name), Qt::EditRole);\r
- }\r
- return true;\r
+ return 4;\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeModel::addItem(QString name, int position,\r
- const QModelIndex &parent)\r
+QVariant DomModel::data(const QModelIndex &index, int role) const\r
{\r
- if (!this->insertRow(position, parent))\r
- return false;\r
-\r
- int column = 0;\r
- QModelIndex child = this->index(parent.row()+1, column, parent);\r
- ShoppingTreeItem* item = this->getItem(child);\r
- item->setItemType(ShoppingTreeItem::Item);\r
- this->setData(child, QVariant(name), Qt::EditRole);\r
-\r
- return true;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::removeCategoryOrItem(const QModelIndex &index)\r
-{\r
- return this->removeRow(index.row(), index.parent());\r
-}\r
-\r
-/*******************************************************************/\r
-QVariant ShoppingTreeModel::data(const QModelIndex &index, int role) const\r
-{\r
- if(!index.isValid())\r
+ if (!index.isValid())\r
return QVariant();\r
\r
- if(role != Qt::DisplayRole && role != Qt::EditRole)\r
+ if (role != Qt::DisplayRole)\r
return QVariant();\r
\r
- ShoppingTreeItem *item = getItem(index);\r
- return item->data(index.column());\r
-}\r
+ DomItem *item = static_cast<DomItem*>(index.internalPointer());\r
\r
-/*******************************************************************/\r
-Qt::ItemFlags ShoppingTreeModel::flags(const QModelIndex &index) const\r
-{\r
- if(!index.isValid())\r
- return 0;\r
+ QDomNode node = item->node();\r
\r
- return Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemIsSelectable;\r
+ switch (index.column()) {\r
+ case 0:\r
+ return node.firstChildElement("title").text();\r
+ case 1:\r
+ if(node.toElement().nodeName() == "item")\r
+ {\r
+ return node.firstChildElement("quantity").text();\r
+ }\r
+ return QVariant();\r
+ case 2:\r
+ if(node.toElement().nodeName() == "item")\r
+ {\r
+ return node.firstChildElement("store").text();\r
+ }\r
+ return QVariant();\r
+ case 3:\r
+ if(node.toElement().nodeName() == "item")\r
+ {\r
+ return (bool) node.firstChildElement("checked").text().toInt();\r
+ }\r
+ return QVariant();\r
+ default:\r
+ return QVariant();\r
+ }\r
}\r
\r
/*******************************************************************/\r
-ShoppingTreeItem *ShoppingTreeModel::getItem(const QModelIndex &index) const\r
+Qt::ItemFlags DomModel::flags(const QModelIndex &index) const\r
{\r
- if(index.isValid()){\r
- ShoppingTreeItem *item =\r
- static_cast<ShoppingTreeItem*>(index.internalPointer());\r
- if(item) return item;\r
- }\r
+ if (!index.isValid())\r
+ return 0;\r
\r
- return rootItem;\r
+ return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;\r
}\r
\r
/*******************************************************************/\r
-QVariant ShoppingTreeModel::headerData(int section,\r
- Qt::Orientation orientation,\r
- int role) const\r
+QVariant DomModel::headerData(int section, Qt::Orientation orientation,\r
+ int role) const\r
{\r
- if(orientation == Qt::Horizontal && role == Qt::DisplayRole)\r
- return rootItem->data(section);\r
+ if (orientation == Qt::Horizontal && role == Qt::DisplayRole) {\r
+ switch (section) {\r
+ case 0:\r
+ return tr("Category/Item name");\r
+ case 1:\r
+ return tr("Quantity");\r
+ case 2:\r
+ return tr("Store");\r
+ case 3:\r
+ return tr("Checked");\r
+ default:\r
+ return QVariant();\r
+ }\r
+ }\r
\r
return QVariant();\r
}\r
\r
/*******************************************************************/\r
-QModelIndex ShoppingTreeModel::index(int row, int column,\r
- const QModelIndex &parent) const\r
+QModelIndex DomModel::index(int row, int column, const QModelIndex &parent)\r
+ const\r
{\r
- if(parent.isValid() && parent.column() != 0)\r
+ if (!hasIndex(row, column, parent))\r
return QModelIndex();\r
\r
- ShoppingTreeItem *parentItem = getItem(parent);\r
+ DomItem *parentItem;\r
\r
- ShoppingTreeItem *childItem = parentItem->child(row);\r
- if(childItem)\r
+ if (!parent.isValid())\r
+ parentItem = rootItem;\r
+ else\r
+ parentItem = static_cast<DomItem*>(parent.internalPointer());\r
+\r
+ DomItem *childItem = parentItem->child(row);\r
+ if (childItem)\r
return createIndex(row, column, childItem);\r
else\r
return QModelIndex();\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeModel::insertColumns(int position, int columns,\r
- const QModelIndex &parent)\r
+QModelIndex DomModel::parent(const QModelIndex &child) const\r
{\r
- bool success;\r
-\r
- beginInsertColumns(parent, position, position + columns - 1);\r
- success = rootItem->insertColumns(position, columns);\r
- endInsertColumns();\r
-\r
- return success;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::insertRows(int position, int rows,\r
- const QModelIndex &parent)\r
-{\r
- ShoppingTreeItem *parentItem = getItem(parent);\r
- bool success = false;\r
-\r
- beginInsertRows(parent, position, position + rows - 1);\r
- success = parentItem->insertChildren(position, rows,\r
- rootItem->columnCount(), this);\r
- endInsertRows();\r
-\r
- return success;\r
-}\r
-\r
-/*******************************************************************/\r
-QModelIndex ShoppingTreeModel::parent(const QModelIndex &index) const\r
-{\r
- if(!index.isValid())\r
+ if (!child.isValid())\r
return QModelIndex();\r
\r
- ShoppingTreeItem *childItem = getItem(index);\r
- ShoppingTreeItem *parentItem = childItem->parent();\r
+ DomItem *childItem = static_cast<DomItem*>(child.internalPointer());\r
+ DomItem *parentItem = childItem->parent();\r
\r
- if(parentItem == rootItem)\r
+ if (!parentItem || parentItem == rootItem)\r
return QModelIndex();\r
\r
- return createIndex(parentItem->childNumber(), 0, parentItem);\r
+ return createIndex(parentItem->row(), 0, parentItem);\r
}\r
\r
/*******************************************************************/\r
-bool ShoppingTreeModel::removeColumns(int position, int columns, const QModelIndex &parent)\r
+int DomModel::rowCount(const QModelIndex &parent) const\r
{\r
- bool success;\r
-\r
- beginRemoveColumns(parent, position, position + columns - 1);\r
- success = rootItem->removeColumns(position, columns);\r
- endRemoveColumns();\r
-\r
- if (rootItem->columnCount() == 0)\r
- removeRows(0, rowCount());\r
-\r
- return success;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::removeRows(int position, int rows, const QModelIndex &parent)\r
-{\r
- ShoppingTreeItem *parentItem = getItem(parent);\r
- bool success;\r
-\r
- beginRemoveRows(parent, position, position + rows - 1);\r
- success = parentItem->removeChildren(position, rows);\r
- endRemoveRows();\r
-\r
- return success;\r
-}\r
-\r
-/*******************************************************************/\r
-int ShoppingTreeModel::rowCount(const QModelIndex &parent) const\r
-{\r
- ShoppingTreeItem *parentItem = getItem(parent);\r
-\r
- return parentItem->childCount();\r
-}\r
-\r
-/*******************************************************************/\r
-int ShoppingTreeModel::columnCount(const QModelIndex &parent) const\r
-{\r
- if(parent.isValid())\r
- return getItem(parent)->columnCount();\r
- else\r
- return rootItem->columnCount();\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::setData(const QModelIndex &index, const QVariant &value, int role)\r
-{\r
- if(role != Qt::EditRole)\r
- return false;\r
-\r
- ShoppingTreeItem *item = getItem(index);\r
-\r
- // only "items" have more than one editable column\r
- if(index.column() != 0 && m_domElementForItem.value(item).tagName() != "item")\r
- return false;\r
-\r
- // edit item\r
- bool result = (item->setData(index.column(),value) &&\r
- updateDomElement(item, index.column()));\r
-\r
- if(result)\r
- emit dataChanged(index, index);\r
-\r
- return result;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::setHeaderData(int section, Qt::Orientation orientation,\r
- const QVariant &value, int role)\r
-{\r
- if(role != Qt::EditRole || orientation != Qt::Horizontal)\r
- return false;\r
-\r
- bool result = rootItem->setData(section, value);\r
-\r
- if(result)\r
- emit headerDataChanged(orientation, section, section);\r
-\r
- return result;\r
-}\r
-\r
-/*******************************************************************/\r
-void ShoppingTreeModel::registerInsertedChild(ShoppingTreeItem *item)\r
-{\r
- QDomElement parentElement = m_domElementForItem.value(item->parent());\r
- QDomElement childElement;\r
- if(item->getItemType() == ShoppingTreeItem::Category)\r
- {\r
- childElement = m_document.createElement("category");\r
- QDomElement title = m_document.createElement("title");\r
- QDomText newTitleText = m_document.createTextNode("new category");\r
- title.appendChild(newTitleText);\r
- childElement.appendChild(title);\r
- }\r
- else if(item->getItemType() == ShoppingTreeItem::Item)\r
- {\r
- childElement = m_document.createElement("category");\r
- QDomElement title = m_document.createElement("title");\r
- QDomText newTitleText = m_document.createTextNode("new category");\r
- title.appendChild(newTitleText);\r
- childElement.appendChild(title);\r
- QDomElement quantity = m_document.createElement("quantity");\r
- QDomText newQuantityText = m_document.createTextNode("0");\r
- quantity.appendChild(newQuantityText);\r
- childElement.appendChild(quantity);\r
- QDomElement store = m_document.createElement("store");\r
- QDomText newStoreText = m_document.createTextNode("");\r
- store.appendChild(newStoreText);\r
- childElement.appendChild(store);\r
- QDomElement lastModified = m_document.createElement("lastModified");\r
- QDomText newDateText = m_document.createTextNode(\r
- QDateTime::currentDateTime().toString("dd/MM/yyyy-hh:mm:ss"));\r
- lastModified.appendChild(newDateText);\r
- childElement.appendChild(lastModified);\r
- }\r
- else\r
- return;\r
-\r
- parentElement.appendChild(childElement);\r
- m_domElementForItem.insert(item, childElement);\r
- updateXmlFile();\r
-}\r
+ if (parent.column() > 0)\r
+ return 0;\r
\r
-/*******************************************************************/\r
-void ShoppingTreeModel::deleteRemovedChild(ShoppingTreeItem *item)\r
-{\r
- QDomElement element = m_domElementForItem.value(item);\r
- QDomNode parentNode = element.parentNode();\r
- parentNode.removeChild(element);\r
- updateXmlFile();\r
- m_domElementForItem.remove(item);\r
-}\r
+ DomItem *parentItem;\r
\r
-/*******************************************************************/\r
-void ShoppingTreeModel::parseCategoryElement(const QDomElement &element,\r
- ShoppingTreeItem *parentItem)\r
-{\r
- // if parent is null then add category to root\r
- if(!parentItem)\r
+ if (!parent.isValid())\r
parentItem = rootItem;\r
-\r
- ShoppingTreeItem *item;\r
- QDomElement child = element.firstChildElement("title");\r
- QString title = child.text();\r
- if(!title.isEmpty())\r
- {\r
- parentItem->insertChildren(parentItem->childCount(), 1,\r
- rootItem->columnCount());\r
-\r
- parentItem->child(parentItem->childCount() - 1)->\r
- setItemType(ShoppingTreeItem::Category);\r
- parentItem->child(parentItem->childCount() - 1)->setData(0, title);\r
- m_domElementForItem.insert(parentItem->child(parentItem->childCount() - 1),\r
- element);\r
- item = parentItem->child(parentItem->childCount() - 1);\r
- }\r
else\r
- {\r
- emit invalidDocument();\r
- return;\r
- }\r
+ parentItem = static_cast<DomItem*>(parent.internalPointer());\r
\r
- // add each sub category and item to the tree\r
- child = child.nextSiblingElement();\r
- while(!child.isNull())\r
+ int childCount = 0;\r
+ for(QDomElement childElement = parentItem->node().firstChildElement();\r
+ !childElement.isNull(); childElement = childElement.nextSiblingElement())\r
{\r
- if(child.tagName() == "category")\r
- {\r
- parseCategoryElement(child, parentItem);\r
- }\r
- else if(child.tagName() == "item")\r
- {\r
- item->insertChildren(\r
- item->childCount(), 1,\r
- rootItem->columnCount());\r
- QVector<QVariant> columnData =\r
- getColumnsFromItemElement(child);\r
- item->child(item->childCount() - 1)->setItemType(ShoppingTreeItem::Item);\r
- for(int column = 0; column < columnData.size(); column++)\r
- {\r
- item->child(item->childCount() - 1)->setData(column, columnData[column]);\r
- }\r
- m_domElementForItem.insert(item->child(item->childCount() - 1),\r
- child);\r
- }\r
- else\r
- {\r
- emit invalidDocument();\r
- return;\r
- }\r
-\r
- child = child.nextSiblingElement();\r
- }\r
-}\r
-\r
-/*******************************************************************/\r
-QVector<QVariant> ShoppingTreeModel::getColumnsFromItemElement(const QDomElement &element)\r
-{\r
- QVector<QVariant> data;\r
- QString title = element.firstChildElement("title").text();\r
- int quantity = element.firstChildElement("quantity").text().toInt();\r
- QString store = element.firstChildElement("store").text();\r
- if(title.isEmpty() || quantity < 0)\r
- {\r
- emit invalidDocument();\r
- return data;\r
- }\r
-\r
- data << title << quantity << store;\r
- return data;\r
-}\r
-\r
-/*******************************************************************/\r
-bool ShoppingTreeModel::updateDomElement(ShoppingTreeItem *item, int column)\r
-{\r
- QDomElement element = m_domElementForItem.value(item);\r
-\r
- if(element.isNull())\r
- return false;\r
-\r
- bool success = false;\r
- switch(column)\r
- {\r
- case 0:\r
- {\r
- QDomElement oldTitleElement = element.firstChildElement("title");\r
- QDomElement newTitleElement = m_document.createElement("title");\r
-\r
- QDomText newTitleText = m_document.createTextNode(item->data(0).toString());\r
- newTitleElement.appendChild(newTitleText);\r
-\r
- element.replaceChild(newTitleElement, oldTitleElement);\r
- success = true;\r
- break;\r
- }\r
- case 1:\r
- {\r
- QDomElement oldQuantityElement = element.firstChildElement("quantity");\r
- QDomElement newQuantityElement = m_document.createElement("quantity");\r
-\r
- QDomText newQuantityText = m_document.createTextNode(item->data(1).toString());\r
- newQuantityElement.appendChild(newQuantityText);\r
-\r
- element.replaceChild(newQuantityElement, oldQuantityElement);\r
- success = true;\r
- break;\r
- }\r
- case 2:\r
- {\r
- QDomElement oldStoreElement = element.firstChildElement("store");\r
- QDomElement newStoreElement = m_document.createElement("store");\r
-\r
- QDomText newStoreText = m_document.createTextNode(item->data(0).toString());\r
- newStoreElement.appendChild(newStoreText);\r
-\r
- element.replaceChild(newStoreElement, oldStoreElement);\r
- success = true;\r
- break;\r
- }\r
- default:\r
- success = false;\r
+ if(childElement.nodeName() == "category" || childElement.nodeName() == "item")\r
+ childCount++;\r
}\r
-\r
- QDomElement oldDateElement = element.firstChildElement("lastModified");\r
- if(!oldDateElement.isNull())\r
- {\r
- QDomElement newDateElement = m_document.createElement("lastModified");\r
-\r
- QDomText newDateText = m_document.createTextNode(\r
- QDateTime::currentDateTime().toString("dd/MM/yyyy-hh:mm:ss"));\r
- newDateElement.appendChild(newDateText);\r
-\r
- element.replaceChild(newDateElement, oldDateElement);\r
- }\r
-\r
- updateXmlFile();\r
-\r
- return success;\r
-}\r
-\r
-/*******************************************************************/\r
-void ShoppingTreeModel::updateXmlFile() const\r
-{\r
- QFile xmlFile(m_xmlFileName);\r
- xmlFile.remove();\r
- xmlFile.open(QIODevice::WriteOnly);\r
- xmlFile.write(m_document.toByteArray(4));\r
- xmlFile.close();\r
-}\r
-\r
-/*******************************************************************/\r
-void ShoppingTreeModel::sort(int column, Qt::SortOrder order)\r
-{\r
- // TODO: implement sorting\r
- ;\r
+ return childCount;\r
}\r