mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
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>
This commit is contained in:
parent
a56429d31e
commit
9bc62748af
5 changed files with 144 additions and 131 deletions
|
@ -256,6 +256,7 @@ set(SUBSURFACE_MODELS_LIB_SRCS
|
|||
qt-models/weigthsysteminfomodel.cpp
|
||||
qt-models/weightmodel.cpp
|
||||
qt-models/divecomputermodel.cpp
|
||||
qt-models/treemodel.cpp
|
||||
qt-models/divecomputerextradatamodel.cpp
|
||||
qt-models/completionmodels.cpp
|
||||
)
|
||||
|
|
|
@ -50,107 +50,6 @@ const QPixmap &trashIcon()
|
|||
*
|
||||
*/
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
/*################################################################
|
||||
*
|
||||
* Implementation of the Dive List.
|
||||
|
|
|
@ -20,25 +20,11 @@
|
|||
#include "../divelist.h"
|
||||
#include "../divecomputer.h"
|
||||
#include "cleanertablemodel.h"
|
||||
|
||||
#include "treemodel.h"
|
||||
/*! An AbstractItemModel for recording dive trip information such as a list of dives.
|
||||
*
|
||||
*/
|
||||
|
||||
struct TreeItem {
|
||||
Q_DECLARE_TR_FUNCTIONS(TreeItemDT);
|
||||
|
||||
public:
|
||||
virtual ~TreeItem();
|
||||
TreeItem();
|
||||
virtual QVariant data(int column, int role) const;
|
||||
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
||||
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
|
||||
int row() const;
|
||||
QList<TreeItem *> children;
|
||||
TreeItem *parent;
|
||||
};
|
||||
|
||||
struct DiveItem : public TreeItem {
|
||||
enum Column {
|
||||
|
@ -75,21 +61,6 @@ struct DiveItem : public TreeItem {
|
|||
|
||||
struct TripItem;
|
||||
|
||||
class TreeModel : public QAbstractItemModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
TreeModel(QObject *parent = 0);
|
||||
virtual ~TreeModel();
|
||||
virtual QVariant data(const QModelIndex &index, int role) const;
|
||||
/*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
/*reimp*/ int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
/*reimp*/ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
|
||||
/*reimp*/ QModelIndex parent(const QModelIndex &child) const;
|
||||
|
||||
protected:
|
||||
int columns;
|
||||
TreeItem *rootItem;
|
||||
};
|
||||
|
||||
class DiveTripModel : public TreeModel {
|
||||
Q_OBJECT
|
||||
|
|
103
qt-models/treemodel.cpp
Normal file
103
qt-models/treemodel.cpp
Normal file
|
@ -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;
|
||||
}
|
39
qt-models/treemodel.h
Normal file
39
qt-models/treemodel.h
Normal file
|
@ -0,0 +1,39 @@
|
|||
#ifndef TREEMODEL_H
|
||||
#define TREEMODEL_H
|
||||
|
||||
#include <QAbstractItemModel>
|
||||
#include <QCoreApplication>
|
||||
|
||||
struct TreeItem {
|
||||
Q_DECLARE_TR_FUNCTIONS(TreeItemDT)
|
||||
|
||||
public:
|
||||
virtual ~TreeItem();
|
||||
TreeItem();
|
||||
virtual QVariant data(int column, int role) const;
|
||||
virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
|
||||
virtual Qt::ItemFlags flags(const QModelIndex &index) const;
|
||||
|
||||
int row() const;
|
||||
QList<TreeItem *> children;
|
||||
TreeItem *parent;
|
||||
};
|
||||
|
||||
|
||||
class TreeModel : public QAbstractItemModel {
|
||||
Q_OBJECT
|
||||
public:
|
||||
TreeModel(QObject *parent = 0);
|
||||
virtual ~TreeModel();
|
||||
virtual QVariant data(const QModelIndex &index, int role) const;
|
||||
/*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
/*reimp*/ int columnCount(const QModelIndex &parent = QModelIndex()) const;
|
||||
/*reimp*/ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
|
||||
/*reimp*/ QModelIndex parent(const QModelIndex &child) const;
|
||||
|
||||
protected:
|
||||
int columns;
|
||||
TreeItem *rootItem;
|
||||
};
|
||||
|
||||
#endif
|
Loading…
Reference in a new issue