6 TreeModel::TreeModel(QObject *parent)
7 : QAbstractItemModel(parent)
9 QList<QVariant> rootData;
10 rootData << "Heading" << "Type" <<"Note";
11 rootItem = new TreeItem(rootData);
12 setupModelData(rootItem);
15 TreeModel::~TreeModel()
20 int TreeModel::columnCount(const QModelIndex &parent) const
23 return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
25 return rootItem->columnCount();
28 QVariant TreeModel::data(const QModelIndex &index, int role) const
33 if (role != Qt::DisplayRole)
36 TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
38 return item->data(index.column());
41 Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
44 return Qt::ItemIsEnabled;
46 return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
49 QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
52 if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
53 return rootItem->data(section);
58 QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
63 if (!parent.isValid())
64 parentItem = rootItem;
66 parentItem = static_cast<TreeItem*>(parent.internalPointer());
68 TreeItem *childItem = parentItem->child(row);
70 return createIndex(row, column, childItem);
75 QModelIndex TreeModel::parent(const QModelIndex &index) const
80 TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
81 TreeItem *parentItem = childItem->parent();
83 if (parentItem == rootItem)
86 return createIndex(parentItem->row(), 0, parentItem);
89 int TreeModel::rowCount(const QModelIndex &parent) const
93 if (!parent.isValid())
94 parentItem = rootItem;
96 parentItem = static_cast<TreeItem*>(parent.internalPointer());
98 return parentItem->childCount();
101 void TreeModel::setupModelData(TreeItem *root)
103 QList<QVariant> cData;
105 cData << "Center of map" << "MapCenter"<<"Data 1";
106 TreeItem *mco=new TreeItem (cData,root);
107 root->appendChild (mco);
110 cData << "Main A" << "Branch"<<"Data 2";
111 TreeItem *bo=new TreeItem (cData,mco);
112 mco->appendChild (bo);
116 cData << "Sub a" << "Branch"<<"Data";
117 bo=new TreeItem (cData,mainA);
118 mainA->appendChild (bo);
121 cData << "Sub b" << "Branch"<<"Data";
122 bo=new TreeItem (cData,mainA);
123 mainA->appendChild (bo);
126 cData << "Main B"<<"Branch" <<"Data 3";
127 mco->appendChild(new TreeItem(cData, mco));
129 //QModelIndex ix=index (0,0,QModelIndex() );