insilmaril@725: #include insilmaril@725: insilmaril@725: #include "treeitem.h" insilmaril@725: #include "treemodel.h" insilmaril@725: insilmaril@725: TreeModel::TreeModel(QObject *parent) insilmaril@725: : QAbstractItemModel(parent) insilmaril@725: { insilmaril@725: QList rootData; insilmaril@725: rootData << "Heading" << "Type" <<"Note"; insilmaril@725: rootItem = new TreeItem(rootData); insilmaril@725: setupModelData(rootItem); insilmaril@725: } insilmaril@725: insilmaril@725: TreeModel::~TreeModel() insilmaril@725: { insilmaril@725: delete rootItem; insilmaril@725: } insilmaril@725: insilmaril@725: int TreeModel::columnCount(const QModelIndex &parent) const insilmaril@725: { insilmaril@725: if (parent.isValid()) insilmaril@725: return static_cast(parent.internalPointer())->columnCount(); insilmaril@725: else insilmaril@725: return rootItem->columnCount(); insilmaril@725: } insilmaril@725: insilmaril@725: QVariant TreeModel::data(const QModelIndex &index, int role) const insilmaril@725: { insilmaril@725: if (!index.isValid()) insilmaril@725: return QVariant(); insilmaril@725: insilmaril@725: if (role != Qt::DisplayRole) insilmaril@725: return QVariant(); insilmaril@725: insilmaril@725: TreeItem *item = static_cast(index.internalPointer()); insilmaril@725: insilmaril@725: return item->data(index.column()); insilmaril@725: } insilmaril@725: insilmaril@725: Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const insilmaril@725: { insilmaril@725: if (!index.isValid()) insilmaril@725: return Qt::ItemIsEnabled; insilmaril@725: insilmaril@725: return Qt::ItemIsEnabled | Qt::ItemIsSelectable; insilmaril@725: } insilmaril@725: insilmaril@725: QVariant TreeModel::headerData(int section, Qt::Orientation orientation, insilmaril@725: int role) const insilmaril@725: { insilmaril@725: if (orientation == Qt::Horizontal && role == Qt::DisplayRole) insilmaril@725: return rootItem->data(section); insilmaril@725: insilmaril@725: return QVariant(); insilmaril@725: } insilmaril@725: insilmaril@725: QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) insilmaril@725: const insilmaril@725: { insilmaril@725: TreeItem *parentItem; insilmaril@725: insilmaril@725: if (!parent.isValid()) insilmaril@725: parentItem = rootItem; insilmaril@725: else insilmaril@725: parentItem = static_cast(parent.internalPointer()); insilmaril@725: insilmaril@725: TreeItem *childItem = parentItem->child(row); insilmaril@725: if (childItem) insilmaril@725: return createIndex(row, column, childItem); insilmaril@725: else insilmaril@725: return QModelIndex(); insilmaril@725: } insilmaril@725: insilmaril@725: QModelIndex TreeModel::parent(const QModelIndex &index) const insilmaril@725: { insilmaril@725: if (!index.isValid()) insilmaril@725: return QModelIndex(); insilmaril@725: insilmaril@725: TreeItem *childItem = static_cast(index.internalPointer()); insilmaril@725: TreeItem *parentItem = childItem->parent(); insilmaril@725: insilmaril@725: if (parentItem == rootItem) insilmaril@725: return QModelIndex(); insilmaril@725: insilmaril@725: return createIndex(parentItem->row(), 0, parentItem); insilmaril@725: } insilmaril@725: insilmaril@725: int TreeModel::rowCount(const QModelIndex &parent) const insilmaril@725: { insilmaril@725: TreeItem *parentItem; insilmaril@725: insilmaril@725: if (!parent.isValid()) insilmaril@725: parentItem = rootItem; insilmaril@725: else insilmaril@725: parentItem = static_cast(parent.internalPointer()); insilmaril@725: insilmaril@725: return parentItem->childCount(); insilmaril@725: } insilmaril@725: insilmaril@725: void TreeModel::setupModelData(TreeItem *root) insilmaril@725: { insilmaril@725: QList cData; insilmaril@725: insilmaril@725: cData << "Center of map" << "MapCenter"<<"Data 1"; insilmaril@725: TreeItem *mco=new TreeItem (cData,root); insilmaril@725: root->appendChild (mco); insilmaril@725: insilmaril@725: cData.clear(); insilmaril@725: cData << "Main A" << "Branch"<<"Data 2"; insilmaril@725: TreeItem *bo=new TreeItem (cData,mco); insilmaril@725: mco->appendChild (bo); insilmaril@725: TreeItem *mainA=bo; insilmaril@725: insilmaril@725: cData.clear(); insilmaril@725: cData << "Sub a" << "Branch"<<"Data"; insilmaril@725: bo=new TreeItem (cData,mainA); insilmaril@725: mainA->appendChild (bo); insilmaril@725: insilmaril@725: cData.clear(); insilmaril@725: cData << "Sub b" << "Branch"<<"Data"; insilmaril@725: bo=new TreeItem (cData,mainA); insilmaril@725: mainA->appendChild (bo); insilmaril@725: insilmaril@725: cData.clear(); insilmaril@725: cData << "Main B"<<"Branch" <<"Data 3"; insilmaril@725: mco->appendChild(new TreeItem(cData, mco)); insilmaril@725: insilmaril@725: //QModelIndex ix=index (0,0,QModelIndex() ); insilmaril@725: }