4
#include "treeitemmodel.h"
6
TreeItemModel::TreeItemModel(QObject *parent)
7
: QAbstractItemModel(parent)
10
m_rootItem = new TreeItem("$root","$root");
14
TreeItemModel::~TreeItemModel()
18
//Our Treeview Model supports exactly a single column
19
int TreeItemModel::columnCount(const QModelIndex &parent) const
24
QVariant TreeItemModel::data(const QModelIndex &index, int role) const
29
if (role != Qt::DisplayRole)
32
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
37
Qt::ItemFlags TreeItemModel::flags(const QModelIndex &index) const
42
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
45
QVariant TreeItemModel::headerData(int section, Qt::Orientation orientation, int role) const
50
QModelIndex TreeItemModel::index(int row, int column, const QModelIndex &parent)
53
if (!hasIndex(row, column, parent))
56
TreeItem *parentItem = NULL;
58
if (!parent.isValid())
59
parentItem = m_rootItem;
61
parentItem = static_cast<TreeItem*>(parent.internalPointer());
63
TreeItem *childItem = parentItem->child(row);
65
return createIndex(row, column, childItem);
70
QModelIndex TreeItemModel::parent(const QModelIndex &index) const
75
TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
76
TreeItem *parentItem = childItem->parent();
78
if (parentItem == m_rootItem)
81
return createIndex(parentItem->row(), 0, parentItem);
84
int TreeItemModel::rowCount(const QModelIndex &parent) const
86
if (parent.column() > 0)
90
TreeItem *parentItem = NULL;
91
//qDebug() << "parent data: " << parent.data();
92
if (!parent.isValid()){
93
parentItem = m_rootItem;
96
parentItem = static_cast<TreeItem*>(parent.internalPointer());
100
//qDebug() << "TreeItem data: " << parent.internalPointer();
102
return parentItem->childCount();
105
* Populates the model and notifies the view.
106
* Call this method first, before you do call any other methods.
108
void TreeItemModel::setRootItem(TreeItem *item)
110
if(m_rootItem) delete m_rootItem;
116
* Before you can resize the data model dynamically by using 'insertRows' and 'removeRows'
117
* make sure you have initialized
119
bool TreeItemModel::insertRows(QList<QString>& data, int position, int rows, const QModelIndex &parent)
121
TreeItem *parentItem = getItem(parent);
124
beginInsertRows(parent, position, position + rows - 1);
125
success = parentItem->insertChildren(data, position, rows);
130
bool TreeItemModel::removeRows(int position, int rows, const QModelIndex &parent)
132
TreeItem *parentItem = getItem(parent);
135
beginRemoveRows(parent, position, position + rows - 1);
136
success = parentItem->removeChildren(position, rows);
141
TreeItem* TreeItemModel::getItem(const QModelIndex &index) const
143
if (index.isValid()) {
144
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
145
if (item) return item;