git-svn-id: file:///svnroot/family-shop-mgr@10 26eb2498-383b-47a6-be48-5d6f36779e85
authoronil <u.irigoyen@gmail.com>
Thu, 10 Dec 2009 16:08:17 +0000 (16:08 +0000)
committeronil <u.irigoyen@gmail.com>
Thu, 10 Dec 2009 16:08:17 +0000 (16:08 +0000)
code/family-shop-mgr/FamilyShoppingManagerStartView.ui
code/family-shop-mgr/GoShopping.ui [new file with mode: 0644]
code/family-shop-mgr/ListManager.ui [new file with mode: 0644]
code/family-shop-mgr/ShoppingTreeItem.cpp
code/family-shop-mgr/ShoppingTreeItem.h
code/family-shop-mgr/ShoppingTreeModel.cpp
code/family-shop-mgr/ShoppingTreeModel.h
code/family-shop-mgr/family-shop-mgr.pro
code/family-shop-mgr/family-shop-mgr.pro.user

index 9ebce74..bbc601d 100644 (file)
@@ -8,7 +8,7 @@
     <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
@@ -98,6 +105,21 @@ shopping list</string>
      </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
diff --git a/code/family-shop-mgr/GoShopping.ui b/code/family-shop-mgr/GoShopping.ui
new file mode 100644 (file)
index 0000000..1bfdd43
--- /dev/null
@@ -0,0 +1,45 @@
+<?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
diff --git a/code/family-shop-mgr/ListManager.ui b/code/family-shop-mgr/ListManager.ui
new file mode 100644 (file)
index 0000000..c7bf143
--- /dev/null
@@ -0,0 +1,21 @@
+<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
index e66a4ed..69daf33 100644 (file)
@@ -74,20 +74,6 @@ bool ShoppingTreeItem::insertChildren(int position, int count, int columns)
     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
@@ -104,20 +90,6 @@ bool ShoppingTreeItem::removeChildren(int position, int count)
     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
index 73475a3..71b71fe 100644 (file)
@@ -37,10 +37,8 @@ public:
     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
index 6727fdd..4690694 100644 (file)
@@ -33,7 +33,8 @@ QAbstractItemModel(parent), m_document("ShoppingList")
     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
@@ -150,17 +151,6 @@ QModelIndex ShoppingTreeModel::index(int row, int column, const QModelIndex &par
         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
@@ -187,20 +177,6 @@ QModelIndex ShoppingTreeModel::parent(const QModelIndex &index) const
     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
@@ -230,7 +206,14 @@ bool ShoppingTreeModel::setData(const QModelIndex &index, const QVariant &value,
         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
@@ -324,3 +307,67 @@ QVector<QVariant> ShoppingTreeModel::getColumnsFromItemElement(const QDomElement
     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
index 278edfa..5270732 100644 (file)
@@ -54,10 +54,6 @@ public:
     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
@@ -71,11 +67,14 @@ protected:
     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
index 36d9221..8283873 100644 (file)
@@ -11,4 +11,6 @@ SOURCES += main.cpp \
 HEADERS += FamilyShoppingManagerStartView.h \\r
     ShoppingTreeModel.h \\r
     ShoppingTreeItem.h\r
-FORMS += FamilyShoppingManagerStartView.ui\r
+FORMS += FamilyShoppingManagerStartView.ui \\r
+    ListManager.ui \\r
+    GoShopping.ui\r
index 8c57c52..80aec0c 100644 (file)
@@ -67,7 +67,7 @@
   <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>