treemodel.cpp
author insilmaril
Tue, 05 Aug 2008 07:36:53 +0000
changeset 725 7ea31701156e
child 726 7f43b93242aa
permissions -rw-r--r--
Preview: Added QTreeView to mainwindow (not yet functional)
insilmaril@725
     1
#include <QtGui>
insilmaril@725
     2
insilmaril@725
     3
#include "treeitem.h"
insilmaril@725
     4
#include "treemodel.h"
insilmaril@725
     5
insilmaril@725
     6
TreeModel::TreeModel(QObject *parent)
insilmaril@725
     7
    : QAbstractItemModel(parent)
insilmaril@725
     8
{
insilmaril@725
     9
    QList<QVariant> rootData;
insilmaril@725
    10
    rootData << "Heading" << "Type" <<"Note";
insilmaril@725
    11
    rootItem = new TreeItem(rootData);
insilmaril@725
    12
    setupModelData(rootItem);
insilmaril@725
    13
}
insilmaril@725
    14
insilmaril@725
    15
TreeModel::~TreeModel()
insilmaril@725
    16
{
insilmaril@725
    17
    delete rootItem;
insilmaril@725
    18
}
insilmaril@725
    19
insilmaril@725
    20
int TreeModel::columnCount(const QModelIndex &parent) const
insilmaril@725
    21
{
insilmaril@725
    22
    if (parent.isValid())
insilmaril@725
    23
        return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
insilmaril@725
    24
    else
insilmaril@725
    25
        return rootItem->columnCount();
insilmaril@725
    26
}
insilmaril@725
    27
insilmaril@725
    28
QVariant TreeModel::data(const QModelIndex &index, int role) const
insilmaril@725
    29
{
insilmaril@725
    30
    if (!index.isValid())
insilmaril@725
    31
        return QVariant();
insilmaril@725
    32
insilmaril@725
    33
    if (role != Qt::DisplayRole)
insilmaril@725
    34
        return QVariant();
insilmaril@725
    35
insilmaril@725
    36
    TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
insilmaril@725
    37
insilmaril@725
    38
    return item->data(index.column());
insilmaril@725
    39
}
insilmaril@725
    40
insilmaril@725
    41
Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
insilmaril@725
    42
{
insilmaril@725
    43
    if (!index.isValid())
insilmaril@725
    44
        return Qt::ItemIsEnabled;
insilmaril@725
    45
insilmaril@725
    46
    return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
insilmaril@725
    47
}
insilmaril@725
    48
insilmaril@725
    49
QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
insilmaril@725
    50
                               int role) const
insilmaril@725
    51
{
insilmaril@725
    52
    if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
insilmaril@725
    53
        return rootItem->data(section);
insilmaril@725
    54
insilmaril@725
    55
    return QVariant();
insilmaril@725
    56
}
insilmaril@725
    57
insilmaril@725
    58
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
insilmaril@725
    59
            const
insilmaril@725
    60
{
insilmaril@725
    61
    TreeItem *parentItem;
insilmaril@725
    62
insilmaril@725
    63
    if (!parent.isValid())
insilmaril@725
    64
        parentItem = rootItem;
insilmaril@725
    65
    else
insilmaril@725
    66
        parentItem = static_cast<TreeItem*>(parent.internalPointer());
insilmaril@725
    67
insilmaril@725
    68
    TreeItem *childItem = parentItem->child(row);
insilmaril@725
    69
    if (childItem)
insilmaril@725
    70
        return createIndex(row, column, childItem);
insilmaril@725
    71
    else
insilmaril@725
    72
        return QModelIndex();
insilmaril@725
    73
}
insilmaril@725
    74
insilmaril@725
    75
QModelIndex TreeModel::parent(const QModelIndex &index) const
insilmaril@725
    76
{
insilmaril@725
    77
    if (!index.isValid())
insilmaril@725
    78
        return QModelIndex();
insilmaril@725
    79
insilmaril@725
    80
    TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
insilmaril@725
    81
    TreeItem *parentItem = childItem->parent();
insilmaril@725
    82
insilmaril@725
    83
    if (parentItem == rootItem)
insilmaril@725
    84
        return QModelIndex();
insilmaril@725
    85
insilmaril@725
    86
    return createIndex(parentItem->row(), 0, parentItem);
insilmaril@725
    87
}
insilmaril@725
    88
insilmaril@725
    89
int TreeModel::rowCount(const QModelIndex &parent) const
insilmaril@725
    90
{
insilmaril@725
    91
    TreeItem *parentItem;
insilmaril@725
    92
insilmaril@725
    93
    if (!parent.isValid())
insilmaril@725
    94
        parentItem = rootItem;
insilmaril@725
    95
    else
insilmaril@725
    96
        parentItem = static_cast<TreeItem*>(parent.internalPointer());
insilmaril@725
    97
insilmaril@725
    98
    return parentItem->childCount();
insilmaril@725
    99
}
insilmaril@725
   100
insilmaril@725
   101
void TreeModel::setupModelData(TreeItem *root)
insilmaril@725
   102
{
insilmaril@725
   103
	QList<QVariant> cData;
insilmaril@725
   104
insilmaril@725
   105
	cData << "Center of map" << "MapCenter"<<"Data 1";
insilmaril@725
   106
	TreeItem *mco=new TreeItem (cData,root);
insilmaril@725
   107
	root->appendChild (mco);
insilmaril@725
   108
insilmaril@725
   109
	cData.clear();
insilmaril@725
   110
	cData << "Main A" << "Branch"<<"Data 2";
insilmaril@725
   111
	TreeItem *bo=new TreeItem (cData,mco);
insilmaril@725
   112
	mco->appendChild (bo);
insilmaril@725
   113
	TreeItem *mainA=bo;
insilmaril@725
   114
insilmaril@725
   115
	cData.clear();
insilmaril@725
   116
	cData << "Sub a" << "Branch"<<"Data";
insilmaril@725
   117
	bo=new TreeItem (cData,mainA);
insilmaril@725
   118
	mainA->appendChild (bo);
insilmaril@725
   119
insilmaril@725
   120
	cData.clear();
insilmaril@725
   121
	cData << "Sub b" << "Branch"<<"Data";
insilmaril@725
   122
	bo=new TreeItem (cData,mainA);
insilmaril@725
   123
	mainA->appendChild (bo);
insilmaril@725
   124
insilmaril@725
   125
	cData.clear();
insilmaril@725
   126
	cData << "Main B"<<"Branch" <<"Data 3";
insilmaril@725
   127
	mco->appendChild(new TreeItem(cData, mco));
insilmaril@725
   128
insilmaril@725
   129
	//QModelIndex ix=index (0,0,QModelIndex() );
insilmaril@725
   130
}