summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--profile.c4
-rw-r--r--profile.h2
-rw-r--r--qt-ui/graphicsview-common.h3
-rw-r--r--qt-ui/profile/diveplotdatamodel.cpp97
-rw-r--r--qt-ui/profile/diveplotdatamodel.h26
-rw-r--r--subsurface.pro6
6 files changed, 132 insertions, 6 deletions
diff --git a/profile.c b/profile.c
index 2c6e3ad19..c43bd083b 100644
--- a/profile.c
+++ b/profile.c
@@ -305,7 +305,7 @@ static velocity_t velocity(int speed)
return v;
}
-static struct plot_info *analyze_plot_info(struct plot_info *pi)
+struct plot_info *analyze_plot_info(struct plot_info *pi)
{
int i;
int nr = pi->nr;
@@ -783,7 +783,7 @@ void calculate_max_limits(struct dive *dive, struct divecomputer *dc, struct gra
pi->maxtemp = maxtemp;
}
-static struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi)
+struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi)
{
int idx, maxtime, nr, i;
int lastdepth, lasttime, lasttemp = 0;
diff --git a/profile.h b/profile.h
index 0453bff08..a7a48b51e 100644
--- a/profile.h
+++ b/profile.h
@@ -49,6 +49,8 @@ struct plot_info *create_plot_info(struct dive *dive, struct divecomputer *dc, s
int setup_temperature_limits(struct graphics_context *gc);
int get_cylinder_pressure_range(struct graphics_context *gc);
void compare_samples(struct plot_data *e1, struct plot_data *e2, char *buf, int bufsize, int sum);
+struct plot_data *populate_plot_entries(struct dive *dive, struct divecomputer *dc, struct plot_info *pi);
+struct plot_info *analyze_plot_info(struct plot_info *pi);
struct ev_select {
char *ev_name;
diff --git a/qt-ui/graphicsview-common.h b/qt-ui/graphicsview-common.h
index d2499c823..0c260a89e 100644
--- a/qt-ui/graphicsview-common.h
+++ b/qt-ui/graphicsview-common.h
@@ -34,7 +34,6 @@ typedef enum {
extern QMap<color_indice_t, QVector<QColor> > profile_color;
void fill_profile_color();
-
-
+QColor getColor(const color_indice_t i);
#endif
diff --git a/qt-ui/profile/diveplotdatamodel.cpp b/qt-ui/profile/diveplotdatamodel.cpp
new file mode 100644
index 000000000..a5506139f
--- /dev/null
+++ b/qt-ui/profile/diveplotdatamodel.cpp
@@ -0,0 +1,97 @@
+#include "diveplotdatamodel.h"
+#include "dive.h"
+#include "display.h"
+#include "profile.h"
+#include "graphicsview-common.h"
+#include "dive.h"
+#include "display.h"
+#include <QDebug>
+
+DivePlotDataModel::DivePlotDataModel(QObject* parent): QAbstractTableModel(parent), plotData(NULL), sampleCount(0)
+{
+
+}
+
+int DivePlotDataModel::columnCount(const QModelIndex& parent) const
+{
+ return COLUMNS;
+}
+
+QVariant DivePlotDataModel::data(const QModelIndex& index, int role) const
+{
+ if (!index.isValid())
+ return QVariant();
+
+ plot_data item = plotData[index.row()];
+ if (role == Qt::DisplayRole){
+ switch(index.column()){
+ case DEPTH: return item.depth;
+ case TIME: return item.sec;
+ case PRESSURE: return item.pressure[0];
+ case TEMPERATURE: return item.temperature;
+ case COLOR: return item.velocity;
+ case USERENTERED: return false;
+ }
+ }
+ if (role == Qt::BackgroundRole){
+ switch(index.column()){
+ case COLOR: return getColor((color_indice_t)(VELOCITY_COLORS_START_IDX + item.velocity));
+ }
+ }
+ return QVariant();
+}
+
+int DivePlotDataModel::rowCount(const QModelIndex& parent) const
+{
+ return sampleCount;
+}
+
+QVariant DivePlotDataModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ if (orientation != Qt::Horizontal)
+ return QVariant();
+
+ if (role != Qt::DisplayRole)
+ return QVariant();
+
+ switch(section){
+ case DEPTH: return tr("Depth");
+ case TIME: return tr("Time");
+ case PRESSURE: return tr("Pressure");
+ case TEMPERATURE: return tr("Temperature");
+ case COLOR: return tr("Color");
+ case USERENTERED: return tr("User Entered");
+ }
+ return QVariant();
+}
+
+void DivePlotDataModel::clear()
+{
+ if(rowCount() != 0){
+ beginRemoveRows(QModelIndex(), 0, rowCount() - 1);
+ endRemoveRows();
+ }
+}
+
+void DivePlotDataModel::setDive(dive* d,const plot_info& pInfo)
+{
+ // We need a way to find out if the dive setted is the same old dive, but pointers change,
+ // and there's no UUID, for now, just repopulate everything.
+ clear();
+ struct divecomputer *dc = NULL;
+
+ if (d)
+ dc = select_dc(&d->dc);
+
+ /* Create the new plot data */
+ if (plotData)
+ free((void *)plotData);
+
+ plot_info info = pInfo;
+ plotData = populate_plot_entries(d, dc, &info); // Create the plot data.
+ analyze_plot_info(&info); // Get the Velocity Color information.
+
+ sampleCount = info.nr;
+ beginInsertRows(QModelIndex(), 0, sampleCount-1);
+ endInsertRows();
+}
diff --git a/qt-ui/profile/diveplotdatamodel.h b/qt-ui/profile/diveplotdatamodel.h
new file mode 100644
index 000000000..23e078148
--- /dev/null
+++ b/qt-ui/profile/diveplotdatamodel.h
@@ -0,0 +1,26 @@
+#ifndef DIVEPLOTDATAMODEL_H
+#define DIVEPLOTDATAMODEL_H
+
+#include <QAbstractTableModel>
+
+struct dive;
+struct plot_data;
+struct plot_info;
+
+class DivePlotDataModel : public QAbstractTableModel{
+Q_OBJECT
+public:
+ enum {DEPTH, TIME, PRESSURE, TEMPERATURE, USERENTERED, COLOR, COLUMNS};
+ explicit DivePlotDataModel(QObject* parent = 0);
+ virtual int columnCount(const QModelIndex& parent = QModelIndex()) const;
+ virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ virtual int rowCount(const QModelIndex& parent = QModelIndex()) const;
+ void clear();
+ void setDive(struct dive *d, const plot_info& pInfo);
+private:
+ int sampleCount;
+ plot_data *plotData;
+};
+
+#endif \ No newline at end of file
diff --git a/subsurface.pro b/subsurface.pro
index ead81818d..f0238b6b1 100644
--- a/subsurface.pro
+++ b/subsurface.pro
@@ -69,7 +69,8 @@ HEADERS = \
qt-ui/profile/divelineitem.h \
qt-ui/profile/divetextitem.h \
qt-ui/profile/animationfunctions.h \
- qt-ui/profile/divecartesianaxis.h
+ qt-ui/profile/divecartesianaxis.h \
+ qt-ui/profile/diveplotdatamodel.h
SOURCES = \
deco.c \
@@ -126,7 +127,8 @@ SOURCES = \
qt-ui/profile/divelineitem.cpp \
qt-ui/profile/divetextitem.cpp \
qt-ui/profile/animationfunctions.cpp \
- qt-ui/profile/divecartesianaxis.cpp
+ qt-ui/profile/divecartesianaxis.cpp \
+ qt-ui/profile/diveplotdatamodel.cpp
linux*: SOURCES += linux.c
mac: SOURCES += macos.c