mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
215e22481a
commit
7d5cf32501
6 changed files with 132 additions and 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;
|
||||
|
|
|
@ -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
|
||||
|
|
97
qt-ui/profile/diveplotdatamodel.cpp
Normal file
97
qt-ui/profile/diveplotdatamodel.cpp
Normal file
|
@ -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();
|
||||
}
|
26
qt-ui/profile/diveplotdatamodel.h
Normal file
26
qt-ui/profile/diveplotdatamodel.h
Normal file
|
@ -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
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue