summaryrefslogtreecommitdiffstats
path: root/qt-models/models.h
diff options
context:
space:
mode:
Diffstat (limited to 'qt-models/models.h')
-rw-r--r--qt-models/models.h443
1 files changed, 443 insertions, 0 deletions
diff --git a/qt-models/models.h b/qt-models/models.h
new file mode 100644
index 000000000..0123ce171
--- /dev/null
+++ b/qt-models/models.h
@@ -0,0 +1,443 @@
+/*
+ * models.h
+ *
+ * header file for the equipment models of Subsurface
+ *
+ */
+#ifndef MODELS_H
+#define MODELS_H
+
+#include <QAbstractTableModel>
+#include <QCoreApplication>
+#include <QStringList>
+#include <QStringListModel>
+#include <QSortFilterProxyModel>
+
+#include "metrics.h"
+
+#include "../dive.h"
+#include "../divelist.h"
+#include "../divecomputer.h"
+
+// Encapsulates Boilerplate.
+class CleanerTableModel : public QAbstractTableModel {
+ Q_OBJECT
+public:
+ explicit CleanerTableModel(QObject *parent = 0);
+ virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+
+protected:
+ void setHeaderDataStrings(const QStringList &headers);
+
+private:
+ QStringList headers;
+};
+
+/* Encapsulates the tank_info global variable
+ * to show on Qt's Model View System.*/
+class TankInfoModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ static TankInfoModel *instance();
+
+ enum Column {
+ DESCRIPTION,
+ ML,
+ BAR
+ };
+ TankInfoModel();
+
+ /*reimp*/ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ /*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ /*reimp*/ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ /*reimp*/ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ const QString &biggerString() const;
+ void clear();
+public
+slots:
+ void update();
+
+private:
+ int rows;
+ QString biggerEntry;
+};
+
+/* Encapsulate ws_info */
+class WSInfoModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ static WSInfoModel *instance();
+
+ enum Column {
+ DESCRIPTION,
+ GR
+ };
+ WSInfoModel();
+
+ /*reimp*/ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ /*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ /*reimp*/ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ /*reimp*/ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ const QString &biggerString() const;
+ void clear();
+ void update();
+ void updateInfo();
+
+private:
+ int rows;
+ QString biggerEntry;
+};
+
+/* Retrieve the trash icon pixmap, common to most table models */
+const QPixmap &trashIcon();
+
+/* Encapsulation of the Cylinder Model, that presents the
+ * Current cylinders that are used on a dive. */
+class CylindersModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ enum Column {
+ REMOVE,
+ TYPE,
+ SIZE,
+ WORKINGPRESS,
+ START,
+ END,
+ O2,
+ HE,
+ DEPTH,
+ USE,
+ COLUMNS
+ };
+
+ explicit CylindersModel(QObject *parent = 0);
+ static CylindersModel *instance();
+ /*reimp*/ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ /*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ /*reimp*/ Qt::ItemFlags flags(const QModelIndex &index) const;
+ /*reimp*/ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+
+ void passInData(const QModelIndex &index, const QVariant &value);
+ void add();
+ void clear();
+ void updateDive();
+ void copyFromDive(struct dive *d);
+ cylinder_t *cylinderAt(const QModelIndex &index);
+ bool changed;
+
+public
+slots:
+ void remove(const QModelIndex &index);
+
+private:
+ int rows;
+};
+
+/* Encapsulation of the Weight Model, that represents
+ * the current weights on a dive. */
+class WeightModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ enum Column {
+ REMOVE,
+ TYPE,
+ WEIGHT
+ };
+
+ explicit WeightModel(QObject *parent = 0);
+ /*reimp*/ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ /*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ /*reimp*/ Qt::ItemFlags flags(const QModelIndex &index) const;
+ /*reimp*/ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+
+ void passInData(const QModelIndex &index, const QVariant &value);
+ void add();
+ void clear();
+ void updateDive();
+ weightsystem_t *weightSystemAt(const QModelIndex &index);
+ bool changed;
+
+public
+slots:
+ void remove(const QModelIndex &index);
+
+private:
+ int rows;
+};
+
+/* extra data model for additional dive computer data */
+class ExtraDataModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ enum Column {
+ KEY,
+ VALUE
+ };
+ explicit ExtraDataModel(QObject *parent = 0);
+ /*reimp*/ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ /*reimp*/ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+
+ void clear();
+ void updateDive();
+
+private:
+ int rows;
+};
+
+/*! 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 {
+ NR,
+ DATE,
+ RATING,
+ DEPTH,
+ DURATION,
+ TEMPERATURE,
+ TOTALWEIGHT,
+ SUIT,
+ CYLINDER,
+ GAS,
+ SAC,
+ OTU,
+ MAXCNS,
+ LOCATION,
+ COLUMNS
+ };
+
+ virtual QVariant data(int column, int role) const;
+ int diveId;
+ virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+ QString displayDate() const;
+ QString displayDuration() const;
+ QString displayDepth() const;
+ QString displayDepthWithUnit() const;
+ QString displayTemperature() const;
+ QString displayWeight() const;
+ QString displaySac() const;
+ int weight() const;
+};
+
+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
+public:
+ enum Column {
+ NR,
+ DATE,
+ RATING,
+ DEPTH,
+ DURATION,
+ TEMPERATURE,
+ TOTALWEIGHT,
+ SUIT,
+ CYLINDER,
+ GAS,
+ SAC,
+ OTU,
+ MAXCNS,
+ LOCATION,
+ COLUMNS
+ };
+
+ enum ExtraRoles {
+ STAR_ROLE = Qt::UserRole + 1,
+ DIVE_ROLE,
+ TRIP_ROLE,
+ SORT_ROLE,
+ DIVE_IDX
+ };
+ enum Layout {
+ TREE,
+ LIST,
+ CURRENT
+ };
+
+ Qt::ItemFlags flags(const QModelIndex &index) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ DiveTripModel(QObject *parent = 0);
+ Layout layout() const;
+ void setLayout(Layout layout);
+
+private:
+ void setupModelData();
+ QMap<dive_trip_t *, TripItem *> trips;
+ Layout currentLayout;
+};
+
+class DiveComputerModel : public CleanerTableModel {
+ Q_OBJECT
+public:
+ enum {
+ REMOVE,
+ MODEL,
+ ID,
+ NICKNAME
+ };
+ DiveComputerModel(QMultiMap<QString, DiveComputerNode> &dcMap, QObject *parent = 0);
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ virtual Qt::ItemFlags flags(const QModelIndex &index) const;
+ virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ void update();
+ void keepWorkingList();
+ void dropWorkingList();
+
+public
+slots:
+ void remove(const QModelIndex &index);
+
+private:
+ int numRows;
+ QMultiMap<QString, DiveComputerNode> dcWorkingMap;
+};
+
+class YearlyStatisticsModel : public TreeModel {
+ Q_OBJECT
+public:
+ enum {
+ YEAR,
+ DIVES,
+ TOTAL_TIME,
+ AVERAGE_TIME,
+ SHORTEST_TIME,
+ LONGEST_TIME,
+ AVG_DEPTH,
+ MIN_DEPTH,
+ MAX_DEPTH,
+ AVG_SAC,
+ MIN_SAC,
+ MAX_SAC,
+ AVG_TEMP,
+ MIN_TEMP,
+ MAX_TEMP,
+ COLUMNS
+ };
+
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ YearlyStatisticsModel(QObject *parent = 0);
+ void update_yearly_stats();
+};
+
+/* TablePrintModel:
+ * for now we use a blank table model with row items TablePrintItem.
+ * these are pretty much the same as DiveItem, but have color
+ * properties, as well. perhaps later one a more unified model has to be
+ * considered, but the current TablePrintModel idea has to be extended
+ * to support variadic column lists and column list orders that can
+ * be controlled by the user.
+ */
+struct TablePrintItem {
+ QString number;
+ QString date;
+ QString depth;
+ QString duration;
+ QString divemaster;
+ QString buddy;
+ QString location;
+ unsigned int colorBackground;
+};
+
+class TablePrintModel : public QAbstractTableModel {
+ Q_OBJECT
+
+private:
+ QList<struct TablePrintItem *> list;
+
+public:
+ ~TablePrintModel();
+ TablePrintModel();
+
+ int rows, columns;
+ void insertRow(int index = -1);
+ void callReset();
+
+ QVariant data(const QModelIndex &index, int role) const;
+ bool setData(const QModelIndex &index, const QVariant &value, int role);
+ int rowCount(const QModelIndex &parent) const;
+ int columnCount(const QModelIndex &parent) const;
+};
+
+/* ProfilePrintModel:
+ * this model is used when printing a data table under a profile. it requires
+ * some exact usage of setSpan(..) on the target QTableView widget.
+ */
+class ProfilePrintModel : public QAbstractTableModel {
+ Q_OBJECT
+
+private:
+ int diveId;
+ double fontSize;
+
+public:
+ ProfilePrintModel(QObject *parent = 0);
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ void setDive(struct dive *divePtr);
+ void setFontsize(double size);
+};
+
+class GasSelectionModel : public QStringListModel {
+ Q_OBJECT
+public:
+ static GasSelectionModel *instance();
+ Qt::ItemFlags flags(const QModelIndex &index) const;
+ virtual QVariant data(const QModelIndex &index, int role) const;
+public
+slots:
+ void repopulate();
+};
+
+
+class LanguageModel : public QAbstractListModel {
+ Q_OBJECT
+public:
+ static LanguageModel *instance();
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
+
+private:
+ LanguageModel(QObject *parent = 0);
+
+ QStringList languages;
+};
+
+#endif // MODELS_H