<x>0</x>\r
<y>0</y>\r
<width>349</width>\r
- <height>96</height>\r
+ <height>107</height>\r
</rect>\r
</property>\r
<property name="sizePolicy">\r
<height>30</height>\r
</size>\r
</property>\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>10</pointsize>\r
+ <weight>75</weight>\r
+ <bold>true</bold>\r
+ </font>\r
+ </property>\r
<property name="locale">\r
<locale language="English" country="UnitedStates"/>\r
</property>\r
</item>\r
</layout>\r
</item>\r
+ <item>\r
+ <widget class="QLabel" name="label">\r
+ <property name="font">\r
+ <font>\r
+ <pointsize>7</pointsize>\r
+ </font>\r
+ </property>\r
+ <property name="text">\r
+ <string>By Unai Irigoyen</string>\r
+ </property>\r
+ <property name="alignment">\r
+ <set>Qt::AlignBottom|Qt::AlignRight|Qt::AlignTrailing</set>\r
+ </property>\r
+ </widget>\r
+ </item>\r
</layout>\r
</widget>\r
<layoutdefault spacing="6" margin="11"/>\r
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>\r
+<ui version="4.0">\r
+ <class>Form</class>\r
+ <widget class="QWidget" name="Form">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>241</width>\r
+ <height>299</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle">\r
+ <string>Form</string>\r
+ </property>\r
+ <widget class="QTreeView" name="treeView">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>10</x>\r
+ <y>40</y>\r
+ <width>221</width>\r
+ <height>251</height>\r
+ </rect>\r
+ </property>\r
+ </widget>\r
+ <widget class="QPushButton" name="pushButton">\r
+ <property name="geometry">\r
+ <rect>\r
+ <x>60</x>\r
+ <y>10</y>\r
+ <width>121</width>\r
+ <height>21</height>\r
+ </rect>\r
+ </property>\r
+ <property name="text">\r
+ <string>PushButton</string>\r
+ </property>\r
+ <property name="checkable">\r
+ <bool>true</bool>\r
+ </property>\r
+ </widget>\r
+ </widget>\r
+ <resources/>\r
+ <connections/>\r
+</ui>\r
--- /dev/null
+<ui version="4.0" >\r
+ <author></author>\r
+ <comment></comment>\r
+ <exportmacro></exportmacro>\r
+ <class>Form</class>\r
+ <widget class="QWidget" name="Form" >\r
+ <property name="geometry" >\r
+ <rect>\r
+ <x>0</x>\r
+ <y>0</y>\r
+ <width>400</width>\r
+ <height>300</height>\r
+ </rect>\r
+ </property>\r
+ <property name="windowTitle" >\r
+ <string>Form</string>\r
+ </property>\r
+ </widget>\r
+ <pixmapfunction></pixmapfunction>\r
+ <connections/>\r
+</ui>\r
return true;\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
ShoppingTreeItem *ShoppingTreeItem::parent()\r
{\r
return parentItem;\r
return true;\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
bool ShoppingTreeItem::setData(int column, const QVariant &value)\r
{\r
if (column < 0 || column >= itemData.size())\r
int columnCount() const;\r
QVariant data(int column) const;\r
bool insertChildren(int position, int count, int columns);\r
- bool insertColumns(int position, int columns);\r
ShoppingTreeItem *parent();\r
bool removeChildren(int position, int count);\r
- bool removeColumns(int position, int columns);\r
int childNumber() const;\r
bool setData(int column, const QVariant &value);\r
\r
int errLine;\r
int errColumn;\r
\r
- QFile file(xmlFileName);\r
+ m_xmlFileName = xmlFileName;\r
+ QFile file(m_xmlFileName);\r
if(!file.open(QIODevice::ReadOnly))\r
return;\r
// Parse xml file\r
return QModelIndex();\r
}\r
\r
-bool ShoppingTreeModel::insertColumns(int position, int columns, const QModelIndex &parent)\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
bool ShoppingTreeModel::insertRows(int position, int rows, const QModelIndex &parent)\r
{\r
ShoppingTreeItem *parentItem = getItem(parent);\r
return createIndex(parentItem->childNumber(), 0, parentItem);\r
}\r
\r
-bool ShoppingTreeModel::removeColumns(int position, int columns, const QModelIndex &parent)\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
bool ShoppingTreeModel::removeRows(int position, int rows, const QModelIndex &parent)\r
{\r
ShoppingTreeItem *parentItem = getItem(parent);\r
return false;\r
\r
ShoppingTreeItem *item = getItem(index);\r
- bool result = item->setData(index.column(),value);\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
data << title << quantity << store;\r
return data;\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;\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
+ }\r
+\r
+ updateXmlFile();\r
+\r
+ return success;\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
bool setHeaderData(int section, Qt::Orientation orientation,\r
const QVariant &value, int role = Qt::EditRole);\r
\r
- bool insertColumns(int position, int columns,\r
- const QModelIndex &parent = QModelIndex());\r
- bool removeColumns(int position, int columns,\r
- const QModelIndex &parent = QModelIndex());\r
bool insertRows(int position, int rows,\r
const QModelIndex &parent = QModelIndex());\r
bool removeRows(int position, int rows,\r
void parseCategoryElement(const QDomElement &element,\r
ShoppingTreeItem *parentItem = 0);\r
QVector<QVariant> getColumnsFromItemElement(const QDomElement &element);\r
+ bool updateDomElement(ShoppingTreeItem *item, int column);\r
+ void updateXmlFile() const;\r
\r
private:\r
ShoppingTreeItem *getItem(const QModelIndex &index) const;\r
\r
ShoppingTreeItem *rootItem;\r
+ QString m_xmlFileName;\r
QDomDocument m_document;\r
QHash<ShoppingTreeItem *, QDomElement> m_domElementForItem;\r
};\r
HEADERS += FamilyShoppingManagerStartView.h \\r
ShoppingTreeModel.h \\r
ShoppingTreeItem.h\r
-FORMS += FamilyShoppingManagerStartView.ui\r
+FORMS += FamilyShoppingManagerStartView.ui \\r
+ ListManager.ui \\r
+ GoShopping.ui\r
<valuemap type="QVariantMap">
<value key="ProjectExplorer.BuildConfiguration.DisplayName" type="QString">Release</value>
<value key="QtVersionId" type="int">0</value>
- <value key="ToolChain" type="int">2</value>
+ <value key="ToolChain" type="int">202</value>
<value key="addQDumper" type=""></value>
<value key="buildConfiguration" type="int">0</value>
</valuemap>