1.1 --- a/treemodel.cpp Thu Mar 19 11:45:28 2009 +0000
1.2 +++ b/treemodel.cpp Mon Mar 23 09:06:51 2009 +0000
1.3 @@ -27,7 +27,7 @@
1.4 if (role != Qt::DisplayRole)
1.5 return QVariant();
1.6
1.7 - TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
1.8 + TreeItem *item = getItem (index);
1.9
1.10 return item->data(index.column());
1.11 }
1.12 @@ -57,7 +57,7 @@
1.13 if (!parent.isValid())
1.14 parentItem = rootItem;
1.15 else
1.16 - parentItem = static_cast<TreeItem*>(parent.internalPointer());
1.17 + parentItem = getItem (parent);
1.18
1.19 TreeItem *childItem = parentItem->child(row);
1.20 if (childItem)
1.21 @@ -71,13 +71,20 @@
1.22 if (!index.isValid())
1.23 return QModelIndex();
1.24
1.25 - TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
1.26 - TreeItem *parentItem = childItem->parent();
1.27 + TreeItem *ti= getItem (index);
1.28 + TreeItem *parentItem = ti->parent();
1.29
1.30 + //cout << "TreeModel::parent ti="<<ti<<" "<<ti->getHeading().toStdString()<<" pi="<<parentItem<<" "<<endl;
1.31 if (parentItem == rootItem)
1.32 return QModelIndex();
1.33
1.34 - return createIndex(parentItem->row(), 0, parentItem);
1.35 + if (!parentItem)
1.36 + {
1.37 + cout <<"TreeModel::parent ti=="<<ti<<" "<<ti->getHeading().toStdString()<<endl;
1.38 + return QModelIndex(); // FIXME do this to avoid segfault, but why?
1.39 + }
1.40 +
1.41 + return createIndex(parentItem->childNumber(), 0, parentItem);
1.42 }
1.43
1.44 int TreeModel::rowCount(const QModelIndex &parent) const
1.45 @@ -87,7 +94,7 @@
1.46 if (!parent.isValid())
1.47 parentItem = rootItem;
1.48 else
1.49 - parentItem = static_cast<TreeItem*>(parent.internalPointer());
1.50 + parentItem = getItem (parent);
1.51
1.52 return parentItem->childCount();
1.53 }
1.54 @@ -95,7 +102,7 @@
1.55 int TreeModel::columnCount(const QModelIndex &parent) const
1.56 {
1.57 if (parent.isValid())
1.58 - return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
1.59 + return getItem (parent)->columnCount();
1.60 else
1.61 return rootItem->columnCount();
1.62 }
1.63 @@ -158,20 +165,47 @@
1.64 return current;
1.65 }
1.66
1.67 +bool TreeModel::insertRows ( int row, int count, const QModelIndex & parent)
1.68 +{
1.69 + std::cout << "TreeModel insertRows()\n";
1.70 + int last=row+count-1;
1.71 + beginInsertRows (parent,row,last);
1.72 +
1.73 + for (int i=row; i<=last; i++)
1.74 + {
1.75 + std::cout << "TreeModel::insertRows inserting i="<<i<<std::endl;
1.76 + }
1.77 + endInsertRows ();
1.78 + return true;
1.79 +}
1.80 +
1.81 bool TreeModel::removeRows ( int row, int count, const QModelIndex & parent)
1.82 {
1.83 int last=row+count-1;
1.84 + cout << "TreeModel::removeRows row="<<row<<" count="<<count<<" last="<<last<<endl;
1.85 + TreeItem *pi= getItem (parent);
1.86 + cout << " pi="<<pi<<" "<<pi->getHeading().toStdString()<<endl;
1.87 + cout << " ok0\n";
1.88 beginRemoveRows (parent,row,last);
1.89 + cout << " ok1\n";
1.90
1.91 - TreeItem *pi= static_cast<TreeItem*>(parent.internalPointer());
1.92 for (int i=row; i<=last; i++)
1.93 {
1.94 - std::cout << "TreeModel::removeRows removing i="<<i<<std::endl;
1.95 + cout << "TreeModel::removeRows removing i="<<i<<std::endl;
1.96 pi->removeChild (row);
1.97 }
1.98 + endRemoveRows ();
1.99 + return true;
1.100 +}
1.101
1.102 - endRemoveRows ();
1.103 -
1.104 +TreeItem *TreeModel::getItem(const QModelIndex &index) const
1.105 +{
1.106 + if (index.isValid()) {
1.107 + TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
1.108 +
1.109 + if (item) return item;
1.110 + }
1.111 + return rootItem;
1.112 }
1.113
1.114 QModelIndex TreeModel::index (TreeItem* ti)