}\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
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
\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
{\r
return m_itemType;\r
}\r
-\r
-/*******************************************************************/\r
-void ShoppingTreeItem::waitItemTypeDefinition()\r
-{\r
- m_typeSemaphore.acquire();\r
-}\r
#include <QList>\r
#include <QVariant>\r
#include <QVector>\r
-#include <QSemaphore>\r
+\r
+#include "ShoppingTreeModel.h"\r
\r
class ShoppingTreeItem : public QObject\r
{\r
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
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
ShoppingTreeItem *parentItem;\r
\r
ItemType m_itemType;\r
- QSemaphore m_typeSemaphore;\r
};\r
\r
#endif // SHOPPINGTREEITEM_H\r
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
}\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
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
}\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
}\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
}\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
}\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
/*******************************************************************/\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
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