+void TreeModel::itemDataChanged(int column) {
+ AbstractTreeItem *item = qobject_cast<AbstractTreeItem *>(sender());
+ QModelIndex itemIndex;
+
+ if(item == rootItem)
+ itemIndex = QModelIndex();
+ else
+ itemIndex = createIndex(item->row(), column, item);
+
+ emit dataChanged(itemIndex, itemIndex);
+}
+
+void TreeModel::appendChild(AbstractTreeItem *parent, AbstractTreeItem *child) {
+ if(parent == 0 or child == 0) {
+ qWarning() << "TreeModel::appendChild(parent, child) parent and child have to be valid pointers!" << parent << child;
+ return;
+ }
+
+ int nextRow = parent->childCount();
+ beginInsertRows(indexByItem(parent), nextRow, nextRow);
+ parent->appendChild(child);
+ endInsertRows();
+
+ connect(child, SIGNAL(dataChanged(int)),
+ this, SLOT(itemDataChanged(int)));
+
+ connect(child, SIGNAL(newChild(AbstractTreeItem *)),
+ this, SLOT(newChild(AbstractTreeItem *)));
+
+ connect(child, SIGNAL(childDestroyed(int)),
+ this, SLOT(childDestroyed(int)));
+}
+
+void TreeModel::newChild(AbstractTreeItem *child) {
+ appendChild(static_cast<AbstractTreeItem *>(sender()), child);
+}
+
+void TreeModel::childDestroyed(int row) {
+ QModelIndex parent = indexByItem(static_cast<AbstractTreeItem *>(sender()));
+ beginRemoveRows(parent, row, row);
+ endRemoveRows();
+}
+