subsurface/qt-ui/profile/diveplotdatamodel.cpp
Tomaz Canabrava 7d5cf32501 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>
2014-01-16 10:12:30 +07:00

97 lines
2.3 KiB
C++

#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();
}