diff options
-rw-r--r-- | profile.c | 4 | ||||
-rw-r--r-- | profile.h | 2 | ||||
-rw-r--r-- | qt-ui/graphicsview-common.h | 3 | ||||
-rw-r--r-- | qt-ui/profile/diveplotdatamodel.cpp | 97 | ||||
-rw-r--r-- | qt-ui/profile/diveplotdatamodel.h | 26 | ||||
-rw-r--r-- | subsurface.pro | 6 |
6 files changed, 132 insertions, 6 deletions
@@ -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; @@ -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 |