+ return _parentItem->_childItems[column()].indexOf(const_cast<AbstractTreeItem*>(this));
+}
+
+AbstractTreeItem *AbstractTreeItem::parent() {
+ return _parentItem;
+}
+
+Qt::ItemFlags AbstractTreeItem::flags() const {
+ return _flags;
+}
+
+void AbstractTreeItem::setFlags(Qt::ItemFlags flags) {
+ _flags = flags;
+}
+
+void AbstractTreeItem::childDestroyed() {
+ AbstractTreeItem *item = static_cast<AbstractTreeItem*>(sender());
+
+ if(!item) {
+ qWarning() << "AbstractTreeItem::childDestroyed() received null pointer!";
+ return;
+ }
+
+ QHash<int, QList<AbstractTreeItem*> >::const_iterator iter = _childItems.constBegin();
+ int column, row = -1;
+ while(iter != _childItems.constEnd()) {
+ row = iter.value().indexOf(item);
+ if(row != -1) {
+ column = iter.key();
+ break;
+ }
+ iter++;
+ }
+
+ if(row == -1) {
+ qWarning() << "AbstractTreeItem::childDestroyed(): unknown Child died:" << item << "parent:" << this;
+ return;
+ }
+
+ _childItems[column].removeAt(row);
+ _childHash[column].remove(_childHash[column].key(item));
+ emit childDestroyed(row);
+}
+
+/*****************************************
+ * SimpleTreeItem
+ *****************************************/
+SimpleTreeItem::SimpleTreeItem(const QList<QVariant> &data, AbstractTreeItem *parent)
+ : AbstractTreeItem(parent),
+ _itemData(data)
+{
+}
+
+SimpleTreeItem::~SimpleTreeItem() {
+}
+
+QVariant SimpleTreeItem::data(int column, int role) const {
+ if(role == Qt::DisplayRole && column < _itemData.count())
+ return _itemData[column];
+ else
+ return QVariant();
+}
+
+int SimpleTreeItem::columnCount() const {
+ return _itemData.count();
+}
+
+/*****************************************
+ * PropertyMapItem
+ *****************************************/
+PropertyMapItem::PropertyMapItem(const QStringList &propertyOrder, AbstractTreeItem *parent)
+ : AbstractTreeItem(parent),
+ _propertyOrder(propertyOrder)
+{
+}
+
+PropertyMapItem::PropertyMapItem(AbstractTreeItem *parent)
+ : AbstractTreeItem(parent),
+ _propertyOrder(QStringList())
+{
+}
+
+
+PropertyMapItem::~PropertyMapItem() {
+}
+
+QVariant PropertyMapItem::data(int column, int role) const {
+ if(column >= columnCount())