diff options
author | Tomaz Canabrava <tcanabrava@kde.org> | 2014-01-14 16:43:58 -0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-01-16 10:12:30 +0700 |
commit | 7d5cf325016925f4072aa31b92beaae4f9a59695 (patch) | |
tree | e56a83a169faad8378e82189cc447bfba5ea9f8c /qt-ui/profile/diveplotdatamodel.cpp | |
parent | 215e22481af5b19331882af27a3243eca7c2cf38 (diff) | |
download | subsurface-7d5cf325016925f4072aa31b92beaae4f9a59695.tar.gz |
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 <tcanabrava@kde.org>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/profile/diveplotdatamodel.cpp')
-rw-r--r-- | qt-ui/profile/diveplotdatamodel.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
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(); +} |