diff -r cf14046909cd -r 7ea31701156e treemodel.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/treemodel.cpp Tue Aug 05 07:36:53 2008 +0000 @@ -0,0 +1,130 @@ +#include + +#include "treeitem.h" +#include "treemodel.h" + +TreeModel::TreeModel(QObject *parent) + : QAbstractItemModel(parent) +{ + QList rootData; + rootData << "Heading" << "Type" <<"Note"; + rootItem = new TreeItem(rootData); + setupModelData(rootItem); +} + +TreeModel::~TreeModel() +{ + delete rootItem; +} + +int TreeModel::columnCount(const QModelIndex &parent) const +{ + if (parent.isValid()) + return static_cast(parent.internalPointer())->columnCount(); + else + return rootItem->columnCount(); +} + +QVariant TreeModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + if (role != Qt::DisplayRole) + return QVariant(); + + TreeItem *item = static_cast(index.internalPointer()); + + return item->data(index.column()); +} + +Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const +{ + if (!index.isValid()) + return Qt::ItemIsEnabled; + + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +QVariant TreeModel::headerData(int section, Qt::Orientation orientation, + int role) const +{ + if (orientation == Qt::Horizontal && role == Qt::DisplayRole) + return rootItem->data(section); + + return QVariant(); +} + +QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) + const +{ + TreeItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + TreeItem *childItem = parentItem->child(row); + if (childItem) + return createIndex(row, column, childItem); + else + return QModelIndex(); +} + +QModelIndex TreeModel::parent(const QModelIndex &index) const +{ + if (!index.isValid()) + return QModelIndex(); + + TreeItem *childItem = static_cast(index.internalPointer()); + TreeItem *parentItem = childItem->parent(); + + if (parentItem == rootItem) + return QModelIndex(); + + return createIndex(parentItem->row(), 0, parentItem); +} + +int TreeModel::rowCount(const QModelIndex &parent) const +{ + TreeItem *parentItem; + + if (!parent.isValid()) + parentItem = rootItem; + else + parentItem = static_cast(parent.internalPointer()); + + return parentItem->childCount(); +} + +void TreeModel::setupModelData(TreeItem *root) +{ + QList cData; + + cData << "Center of map" << "MapCenter"<<"Data 1"; + TreeItem *mco=new TreeItem (cData,root); + root->appendChild (mco); + + cData.clear(); + cData << "Main A" << "Branch"<<"Data 2"; + TreeItem *bo=new TreeItem (cData,mco); + mco->appendChild (bo); + TreeItem *mainA=bo; + + cData.clear(); + cData << "Sub a" << "Branch"<<"Data"; + bo=new TreeItem (cData,mainA); + mainA->appendChild (bo); + + cData.clear(); + cData << "Sub b" << "Branch"<<"Data"; + bo=new TreeItem (cData,mainA); + mainA->appendChild (bo); + + cData.clear(); + cData << "Main B"<<"Branch" <<"Data 3"; + mco->appendChild(new TreeItem(cData, mco)); + + //QModelIndex ix=index (0,0,QModelIndex() ); +}