v 0. Pasted by Anonymous as cpp at 2008-08-28 11:56:24 MSK and set expiration to never.

Paste will expire never.

  1. #include "treemodel.h"
  2. #include "treeitem.h"
  3.  
  4. TreeModel::TreeModel(QObject *parent)
  5.     : QAbstractItemModel(parent)
  6. {
  7.         rootItem = new MFolder();
  8. }
  9.  
  10. TreeModel::~TreeModel()
  11. {
  12.         delete rootItem;
  13. }
  14.  
  15. int TreeModel::columnCount(const QModelIndex &parent) const
  16. {
  17.         return 1;
  18. }
  19.  
  20. QVariant TreeModel::data(const QModelIndex &index, int role) const
  21. {
  22.         if (!index.isValid())
  23.                 return QVariant();
  24.  
  25.         TreeItem *item = itemFromIndex(index);
  26.         return item->data(role);
  27. }
  28.  
  29. Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
  30. {
  31.         return Qt::ItemIsDragEnabled | Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsUserCheckable | Qt::ItemIsDropEnabled;
  32. }
  33.  
  34. QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
  35.                                int role) const
  36. {
  37.         if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
  38.                 if (section == 0)
  39.                         return tr("Objects list");
  40.         return QVariant();
  41. }
  42.  
  43.  
  44. QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const
  45. {
  46.         TreeItem *parentItem;
  47.  
  48.         if (!parent.isValid())
  49.                 parentItem = rootItem;
  50.         else
  51.                 parentItem = static_cast<TreeItem*>(parent.internalPointer());
  52.  
  53.         TreeItem *childItem = parentItem->child(row);
  54.         if (childItem)
  55.                 return createIndex(row, column, childItem);
  56.         else
  57.                 return QModelIndex();
  58. }
  59.  
  60. QModelIndex TreeModel::parent(const QModelIndex &index) const
  61. {
  62.         if (!index.isValid())
  63.                 return QModelIndex();
  64.  
  65.         TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
  66.         TreeItem *parentItem = childItem->parent();
  67.  
  68.         if (parentItem == rootItem)
  69.                 return QModelIndex();
  70.  
  71.         return createIndex(parentItem->row(), 0, parentItem);
  72. }
  73.  
  74. int TreeModel::rowCount(const QModelIndex &parent) const
  75. {
  76.         TreeItem *parentItem;
  77.  
  78.         if (!parent.isValid())
  79.                 parentItem = rootItem;
  80.         else
  81.                 parentItem = static_cast<TreeItem*>(parent.internalPointer());
  82.  
  83.         return parentItem->childCount();
  84. }
  85.  
  86. TreeItem *TreeModel::itemFromIndex(const QModelIndex &index) const
  87. {
  88.         if (index.isValid())
  89.                 return static_cast<TreeItem *>(index.internalPointer());
  90.         else
  91.                 return rootItem;
  92. }
  93.  
  94. bool TreeModel::appendTopLevelItem(TreeItem *item)
  95. {
  96.         beginInsertRows(QModelIndex(), 0, 0);
  97.         rootItem->appendChild(item);
  98.         endInsertRows();
  99.         return true;
  100. }