treemodel.cpp
changeset 745 2d4cc445a86a
parent 741 1b4d1ea6ea8c
child 746 ee6b0f3a4c2f
     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)