git-svn-id: file:///svnroot/family-shop-mgr@27 26eb2498-383b-47a6-be48-5d6f36779e85
authoronil <u.irigoyen@gmail.com>
Sun, 21 Mar 2010 23:49:18 +0000 (23:49 +0000)
committeronil <u.irigoyen@gmail.com>
Sun, 21 Mar 2010 23:49:18 +0000 (23:49 +0000)
code/family-shop-mgr/ShoppingTreeItem.cpp
code/family-shop-mgr/ShoppingTreeItem.h
code/family-shop-mgr/ShoppingTreeModel.cpp

index 6407767..c5a74e7 100644 (file)
@@ -69,7 +69,8 @@ QVariant ShoppingTreeItem::data(int column) const
 }\r
 \r
 /*******************************************************************/\r
-bool ShoppingTreeItem::insertChildren(int position, int count, int columns)\r
+bool ShoppingTreeItem::insertChildren(int position, int count, int columns,\r
+                                      ShoppingTreeModel* model)\r
 {\r
     if (position < 0 || position > childItems.size())\r
         return false;\r
@@ -78,7 +79,13 @@ bool ShoppingTreeItem::insertChildren(int position, int count, int columns)
         QVector<QVariant> data(columns);\r
         ShoppingTreeItem *item = new ShoppingTreeItem(data, this);\r
         childItems.insert(position, item);\r
-        emit childInserted(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
@@ -158,10 +165,12 @@ bool ShoppingTreeItem::setItemType(ItemType type)
 \r
     m_itemType = type;\r
 \r
-    // release enough resources in case we call wait more than once\r
-    m_typeSemaphore.release(1000);\r
-\r
-    return (m_itemType == type) ? true : false;\r
+    if(m_itemType == type)\r
+    {\r
+        emit childItemSet(this);\r
+        return true;\r
+    }\r
+    return false;\r
 }\r
 \r
 /*******************************************************************/\r
@@ -169,9 +178,3 @@ ShoppingTreeItem::ItemType ShoppingTreeItem::getItemType() const
 {\r
     return m_itemType;\r
 }\r
-\r
-/*******************************************************************/\r
-void ShoppingTreeItem::waitItemTypeDefinition()\r
-{\r
-    m_typeSemaphore.acquire();\r
-}\r
index 2ff73b0..214db12 100644 (file)
@@ -25,7 +25,8 @@
 #include <QList>\r
 #include <QVariant>\r
 #include <QVector>\r
-#include <QSemaphore>\r
+\r
+#include "ShoppingTreeModel.h"\r
 \r
 class ShoppingTreeItem : public QObject\r
 {\r
@@ -48,7 +49,8 @@ public:
     int childCount() const;\r
     int columnCount() const;\r
     QVariant data(int column) const;\r
-    bool insertChildren(int position, int count, int columns);\r
+    bool insertChildren(int position, int count, int columns,\r
+                        ShoppingTreeModel* model = 0);\r
     bool insertColumns(int position, int columns);\r
     ShoppingTreeItem *parent();\r
     bool removeChildren(int position, int count);\r
@@ -57,10 +59,9 @@ public:
     bool setData(int column, const QVariant &value);\r
     bool setItemType(const ItemType type);\r
     ItemType getItemType() const;\r
-    void waitItemTypeDefinition();\r
 \r
 signals:\r
-    void childInserted(ShoppingTreeItem *item);\r
+    void childItemSet(ShoppingTreeItem *item);\r
     void dataChanged(int column);\r
     void childRemoved(ShoppingTreeItem *item);\r
 \r
@@ -70,7 +71,6 @@ private:
     ShoppingTreeItem *parentItem;\r
 \r
     ItemType m_itemType;\r
-    QSemaphore m_typeSemaphore;\r
 };\r
 \r
 #endif // SHOPPINGTREEITEM_H\r
index 2bdde16..2ee4df1 100644 (file)
@@ -90,7 +90,8 @@ QAbstractItemModel(parent), m_document("ShoppingList")
                 setItemType(ShoppingTreeItem::Item);\r
         for(int column = 0; column < columnData.size(); column++)\r
         {\r
-            rootItem->child(rootItem->childCount() - 1)->setData(column, columnData[column]);\r
+            rootItem->child(rootItem->childCount() - 1)->\r
+                    setData(column, columnData[column]);\r
         }\r
         m_domElementForItem.insert(rootItem->child(rootItem->childCount() - 1),\r
                                    child);\r
@@ -98,7 +99,7 @@ QAbstractItemModel(parent), m_document("ShoppingList")
     }\r
 \r
 \r
-    connect(rootItem, SIGNAL(childInserted(ShoppingTreeItem*)), this,\r
+    connect(rootItem, SIGNAL(childItemSet(ShoppingTreeItem*)), this,\r
             SLOT(registerInsertedChild(ShoppingTreeItem*)));\r
     connect(rootItem, SIGNAL(childRemoved(ShoppingTreeItem*)), this,\r
             SLOT(deleteRemovedChild(ShoppingTreeItem*)));\r
@@ -107,7 +108,7 @@ QAbstractItemModel(parent), m_document("ShoppingList")
     while(i.hasNext())\r
     {\r
         i.next();\r
-        connect(i.key(), SIGNAL(childInserted(ShoppingTreeItem*)), this,\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
@@ -210,7 +211,8 @@ ShoppingTreeItem *ShoppingTreeModel::getItem(const QModelIndex &index) const
 }\r
 \r
 /*******************************************************************/\r
-QVariant ShoppingTreeModel::headerData(int section, Qt::Orientation orientation,\r
+QVariant ShoppingTreeModel::headerData(int section,\r
+                                       Qt::Orientation orientation,\r
                                        int role) const\r
 {\r
     if(orientation == Qt::Horizontal && role == Qt::DisplayRole)\r
@@ -220,7 +222,8 @@ QVariant ShoppingTreeModel::headerData(int section, Qt::Orientation orientation,
 }\r
 \r
 /*******************************************************************/\r
-QModelIndex ShoppingTreeModel::index(int row, int column, const QModelIndex &parent) const\r
+QModelIndex ShoppingTreeModel::index(int row, int column,\r
+                                     const QModelIndex &parent) const\r
 {\r
     if(parent.isValid() && parent.column() != 0)\r
         return QModelIndex();\r
@@ -235,7 +238,8 @@ QModelIndex ShoppingTreeModel::index(int row, int column, const QModelIndex &par
 }\r
 \r
 /*******************************************************************/\r
-bool ShoppingTreeModel::insertColumns(int position, int columns, const QModelIndex &parent)\r
+bool ShoppingTreeModel::insertColumns(int position, int columns,\r
+                                      const QModelIndex &parent)\r
 {\r
     bool success;\r
 \r
@@ -247,13 +251,15 @@ bool ShoppingTreeModel::insertColumns(int position, int columns, const QModelInd
 }\r
 \r
 /*******************************************************************/\r
-bool ShoppingTreeModel::insertRows(int position, int rows, const QModelIndex &parent)\r
+bool ShoppingTreeModel::insertRows(int position, int rows,\r
+                                   const QModelIndex &parent)\r
 {\r
     ShoppingTreeItem *parentItem = getItem(parent);\r
     bool success;\r
 \r
     beginInsertRows(parent, position, position + rows - 1);\r
-    success = parentItem->insertChildren(position, rows, rootItem->columnCount());\r
+    success = parentItem->insertChildren(position, rows,\r
+                                         rootItem->columnCount(), this);\r
     endInsertRows();\r
 \r
     return success;\r
@@ -359,9 +365,6 @@ bool ShoppingTreeModel::setHeaderData(int section, Qt::Orientation orientation,
 /*******************************************************************/\r
 void ShoppingTreeModel::registerInsertedChild(ShoppingTreeItem *item)\r
 {\r
-    // wait until item type is defined\r
-    item->waitItemTypeDefinition();\r
-\r
     QDomElement parentElement = m_domElementForItem.value(item->parent());\r
     QDomElement element;\r
     if(item->getItemType() == ShoppingTreeItem::Category)\r
@@ -374,10 +377,6 @@ void ShoppingTreeModel::registerInsertedChild(ShoppingTreeItem *item)
     parentElement.appendChild(element);\r
     updateXmlFile();\r
     m_domElementForItem.insert(item, element);\r
-    connect(item, SIGNAL(childInserted(ShoppingTreeItem*)), this,\r
-            SLOT(registerInsertedChild(ShoppingTreeItem*)));\r
-    connect(item, SIGNAL(childRemoved(ShoppingTreeItem*)), this,\r
-            SLOT(deleteRemovedChild(ShoppingTreeItem*)));\r
 }\r
 \r
 /*******************************************************************/\r