summaryrefslogtreecommitdiffstats
path: root/qt-ui/divetripmodel.h
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui/divetripmodel.h')
-rw-r--r--qt-ui/divetripmodel.h80
1 files changed, 80 insertions, 0 deletions
diff --git a/qt-ui/divetripmodel.h b/qt-ui/divetripmodel.h
new file mode 100644
index 000000000..8c8a829e2
--- /dev/null
+++ b/qt-ui/divetripmodel.h
@@ -0,0 +1,80 @@
+#ifndef DIVETRIPMODEL_H
+#define DIVETRIPMODEL_H
+
+#include <QAbstractItemModel>
+
+/*! A DiveItem for use with a DiveTripModel
+ *
+ * A simple class which wraps basic stats for a dive (e.g. duration, depth) and
+ * tidies up after it's children. This is done manually as we don't inherit from
+ * QObject.
+ *
+*/
+class DiveItem
+{
+public:
+ explicit DiveItem(): number(0), dateTime(QString()), duration(0.0), depth(0.0), location(QString()) {parentItem = 0;}
+ explicit DiveItem(int num, QString dt, float, float, QString loc, DiveItem *parent = 0);
+ ~DiveItem() { qDeleteAll(childlist); }
+
+ int diveNumber() const { return number; }
+ QString diveDateTime() const { return dateTime; }
+ float diveDuration() const { return duration; }
+ float diveDepth() const { return depth; }
+ QString diveLocation() const { return location; }
+
+ DiveItem *parent() const { return parentItem; }
+ DiveItem *childAt(int row) const { return childlist.value(row); }
+ int rowOfChild(DiveItem *child) const { return childlist.indexOf(child); }
+ int childCount() const { return childlist.count(); }
+ bool hasChildren() const { return !childlist.isEmpty(); }
+ QList<DiveItem *> children() const { return childlist; }
+ void addChild(DiveItem* item) { item->parentItem = this; childlist << item; } /* parent = self */
+
+
+private:
+
+ int number;
+ QString dateTime;
+ float duration;
+ float depth;
+ QString location;
+
+ DiveItem *parentItem;
+ QList <DiveItem*> childlist;
+
+};
+
+
+enum Column {DIVE_NUMBER, DIVE_DATE_TIME, DIVE_DURATION, DIVE_DEPTH, DIVE_LOCATION, COLUMNS};
+
+
+/*! An AbstractItemModel for recording dive trip information such as a list of dives.
+*
+*/
+class DiveTripModel : public QAbstractItemModel
+{
+public:
+
+ DiveTripModel(const QString &filename, QObject *parent = 0);
+
+ Qt::ItemFlags flags(const QModelIndex &index) const;
+ QVariant data(const QModelIndex &index, int role) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+ int rowCount(const QModelIndex &parent) const;
+
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ virtual QModelIndex index(int row, int column,
+ const QModelIndex &parent = QModelIndex()) const;
+ virtual QModelIndex parent(const QModelIndex &child) const;
+
+ DiveItem *itemForIndex(const QModelIndex &) const;
+
+private:
+
+ DiveItem *rootItem;
+ QString filename;
+
+};
+
+#endif // DIVETRIPMODEL_H