summaryrefslogtreecommitdiffstats
path: root/qt-models/treemodel.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tomaz.canabrava@intel.com>2015-05-28 18:02:06 -0300
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-05-29 14:12:06 -0700
commit9bc62748af1cbc0413f2cbc933650bad545f6d57 (patch)
tree49b01187835507afc31580a07895221a65324709 /qt-models/treemodel.cpp
parenta56429d31e1b734d19865dfefd5338b07292590e (diff)
downloadsubsurface-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.cpp103
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;
+}