From 7d5cf325016925f4072aa31b92beaae4f9a59695 Mon Sep 17 00:00:00 2001 From: Tomaz Canabrava Date: Tue, 14 Jan 2014 16:43:58 -0200 Subject: Added a Model that should handle the Dive Profile This model encapsulates the plot_info struct and provides a consistent way to show it using the Qt Model view system in the C++ and QML way. For a QGraphicsItem that should show a Profile, this is the start. Signed-off-by: Tomaz Canabrava Signed-off-by: Dirk Hohndel --- qt-ui/profile/diveplotdatamodel.cpp | 97 +++++++++++++++++++++++++++++++++++++ qt-ui/profile/diveplotdatamodel.h | 26 ++++++++++ 2 files changed, 123 insertions(+) create mode 100644 qt-ui/profile/diveplotdatamodel.cpp create mode 100644 qt-ui/profile/diveplotdatamodel.h (limited to 'qt-ui/profile') 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 + +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 + +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 -- cgit v1.2.3-70-g09d2