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