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