diff options
author | Tomaz Canabrava <tomaz.canabrava@intel.com> | 2015-05-28 18:02:06 -0300 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-05-29 14:12:06 -0700 |
commit | 9bc62748af1cbc0413f2cbc933650bad545f6d57 (patch) | |
tree | 49b01187835507afc31580a07895221a65324709 /qt-models/treemodel.cpp | |
parent | a56429d31e1b734d19865dfefd5338b07292590e (diff) | |
download | subsurface-9bc62748af1cbc0413f2cbc933650bad545f6d57.tar.gz |
Move TreeModel to qt-models
TreeModel is the base of some important models in Subsurface, the
statistics model and the dive list models, this second is the most
important one in the whole Subsurface universe.
This commit is another one in the series to make easy to create a mobile
version of Subsurface.
Signed-off-by: Tomaz Canabrava <tomaz.canabrava@intel.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-models/treemodel.cpp')
-rw-r--r-- | qt-models/treemodel.cpp | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/qt-models/treemodel.cpp b/qt-models/treemodel.cpp new file mode 100644 index 000000000..558f690b2 --- /dev/null +++ b/qt-models/treemodel.cpp @@ -0,0 +1,103 @@ +#include "treemodel.h" +#include "metrics.h" + +TreeItem::TreeItem() +{ + parent = NULL; +} + +TreeItem::~TreeItem() +{ + qDeleteAll(children); +} + +Qt::ItemFlags TreeItem::flags(const QModelIndex &index) const +{ + return Qt::ItemIsEnabled | Qt::ItemIsSelectable; +} + +int TreeItem::row() const +{ + if (parent) + return parent->children.indexOf(const_cast<TreeItem *>(this)); + return 0; +} + +QVariant TreeItem::data(int column, int role) const +{ + return QVariant(); +} + +TreeModel::TreeModel(QObject *parent) : QAbstractItemModel(parent) +{ + columns = 0; // I'm not sure about this one - I can't see where it gets initialized + rootItem = new TreeItem(); +} + +TreeModel::~TreeModel() +{ + delete rootItem; +} + +QVariant TreeModel::data(const QModelIndex &index, int role) const +{ + if (!index.isValid()) + return QVariant(); + + TreeItem *item = static_cast<TreeItem *>(index.internalPointer()); + QVariant val = item->data(index.column(), role); + + if (role == Qt::FontRole && !val.isValid()) + return defaultModelFont(); + else + return val; +} + +bool TreeItem::setData(const QModelIndex &index, const QVariant &value, int role) +{ + return false; +} + +QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent) const +{ + if (!hasIndex(row, column, parent)) + return QModelIndex(); + + TreeItem *parentItem = (!parent.isValid()) ? rootItem : static_cast<TreeItem *>(parent.internalPointer()); + + TreeItem *childItem = parentItem->children[row]; + + return (childItem) ? createIndex(row, column, childItem) : QModelIndex(); +} + +QModelIndex TreeModel::parent(const QModelIndex &index) const +{ + if (!index.isValid()) + return QModelIndex(); + + TreeItem *childItem = static_cast<TreeItem *>(index.internalPointer()); + TreeItem *parentItem = childItem->parent; + + if (parentItem == rootItem || !parentItem) + 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<TreeItem *>(parent.internalPointer()); + + int amount = parentItem->children.count(); + return amount; +} + +int TreeModel::columnCount(const QModelIndex &parent) const +{ + return columns; +} |