treemodel.cpp
author insilmaril
Wed, 04 Feb 2009 16:33:16 +0000
changeset 740 6dc0a20031f7
parent 727 96402b172173
child 741 1b4d1ea6ea8c
permissions -rw-r--r--
started to rewrite first(), next()
     1 #include <QtGui>
     2 
     3 #include "treeitem.h"
     4 #include "treemodel.h"
     5 
     6 QModelIndex TreeModel::ixCur=QModelIndex();
     7 TreeItem* TreeModel::itStartParent=NULL;
     8 
     9 TreeModel::TreeModel(QObject *parent)
    10     : QAbstractItemModel(parent)
    11 {
    12     QList<QVariant> rootData;
    13     rootData << "Heading" << "Type" <<"Note";
    14     rootItem = new TreeItem(rootData);
    15 }
    16 
    17 TreeModel::~TreeModel()
    18 {
    19     delete rootItem;
    20 }
    21 
    22 int TreeModel::columnCount(const QModelIndex &parent) const
    23 {
    24     if (parent.isValid())
    25         return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
    26     else
    27         return rootItem->columnCount();
    28 }
    29 
    30 QVariant TreeModel::data(const QModelIndex &index, int role) const
    31 {
    32     if (!index.isValid())
    33         return QVariant();
    34 
    35     if (role != Qt::DisplayRole)
    36         return QVariant();
    37 
    38     TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
    39 
    40     return item->data(index.column());
    41 }
    42 
    43 Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
    44 {
    45     if (!index.isValid())
    46         return Qt::ItemIsEnabled;
    47 
    48     return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
    49 }
    50 
    51 QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
    52                                int role) const
    53 {
    54     if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
    55         return rootItem->data(section);
    56 
    57     return QVariant();
    58 }
    59 
    60 QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
    61             const
    62 {
    63     TreeItem *parentItem;
    64 
    65     if (!parent.isValid())
    66         parentItem = rootItem;
    67     else
    68         parentItem = static_cast<TreeItem*>(parent.internalPointer());
    69 
    70     TreeItem *childItem = parentItem->child(row);
    71     if (childItem)
    72         return createIndex(row, column, childItem);
    73     else
    74         return QModelIndex();
    75 }
    76 
    77 QModelIndex TreeModel::parent(const QModelIndex &index) const
    78 {
    79     if (!index.isValid())
    80         return QModelIndex();
    81 
    82     TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
    83     TreeItem *parentItem = childItem->parent();
    84 
    85     if (parentItem == rootItem)
    86         return QModelIndex();
    87 
    88     return createIndex(parentItem->row(), 0, parentItem);
    89 }
    90 
    91 int TreeModel::rowCount(const QModelIndex &parent) const
    92 {
    93     TreeItem *parentItem;
    94 
    95     if (!parent.isValid())
    96         parentItem = rootItem;
    97     else
    98         parentItem = static_cast<TreeItem*>(parent.internalPointer());
    99 
   100     return parentItem->childCount();
   101 }
   102 
   103 TreeItem* TreeModel::first()
   104 {
   105 	if (rootItem->childCount()  ==0)
   106 	{
   107 		ixCur=QModelIndex();
   108 		return NULL;
   109 	} 
   110 	ixCur=index (0,0);
   111 	return 	static_cast<TreeItem*>(ixCur.internalPointer());
   112 }
   113 	
   114 TreeItem* TreeModel::next()
   115 {
   116 	if (!ixCur.isValid() )
   117 		return NULL;
   118 
   119 	ixCur=index (ixCur.row()+1,0);
   120 	if (ixCur.isValid())
   121 		return 	static_cast<TreeItem*>(ixCur.internalPointer());
   122 	return NULL;	
   123 
   124 }
   125 
   126 #include <iostream>
   127 bool TreeModel::removeRows ( int row, int count, const QModelIndex & parent)
   128 {
   129 	int last=row+count-1;
   130 	beginRemoveRows (parent,row,last);
   131 
   132     TreeItem *pi= static_cast<TreeItem*>(parent.internalPointer());
   133 	for (int i=row; i<=last; i++)
   134 	{
   135 		std::cout << "TreeModel::removeRows removing i="<<i<<std::endl;
   136 		pi->removeChild (row);
   137 	}
   138 
   139 	endRemoveRows ();
   140 	
   141 }
   142 
   143 QModelIndex TreeModel::index (TreeItem* ti)
   144 {
   145 	return createIndex (ti->row(),ti->column(),ti);
   146 }
   147