summaryrefslogtreecommitdiffstats
path: root/qt-ui/profile
diff options
context:
space:
mode:
authorGravatar Krzysztof Arentowicz <karent.bug@gmail.com>2015-01-02 00:28:38 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-01-01 16:23:22 -0800
commite3378e299a64e4aa807858b49bf5794a2a5babe7 (patch)
tree3505cbb39efd9b706af3e35220653bffd0aeaa2a /qt-ui/profile
parentee1ef5233036be26ab28228465985f1cf71ba157 (diff)
downloadsubsurface-e3378e299a64e4aa807858b49bf5794a2a5babe7.tar.gz
Plot mean depth data
As we already have running depth sum values for each sample why don't just plot running average depth graph. Signed-off-by: Krzysztof Arentowicz <k.arentowicz@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/profile')
-rw-r--r--qt-ui/profile/diveprofileitem.cpp47
-rw-r--r--qt-ui/profile/diveprofileitem.h12
-rw-r--r--qt-ui/profile/profilewidget2.cpp9
-rw-r--r--qt-ui/profile/profilewidget2.h2
4 files changed, 69 insertions, 1 deletions
diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp
index 57873e9c2..07d622260 100644
--- a/qt-ui/profile/diveprofileitem.cpp
+++ b/qt-ui/profile/diveprofileitem.cpp
@@ -568,6 +568,53 @@ void DiveTemperatureItem::paint(QPainter *painter, const QStyleOptionGraphicsIte
painter->restore();
}
+DiveMeanDepthItem::DiveMeanDepthItem()
+{
+ QPen pen;
+ pen.setBrush(QBrush(getColor(::MEAN_DEPTH)));
+ pen.setCosmetic(true);
+ pen.setWidth(2);
+ setPen(pen);
+ settingsChanged();
+}
+
+void DiveMeanDepthItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
+{
+ double meandepthvalue;
+ // We don't have enougth data to calculate things, quit.
+ if (!shouldCalculateStuff(topLeft, bottomRight))
+ return;
+
+ QPolygonF poly;
+ plot_data *entry = dataModel->data().entry;
+ for (int i = 0, modelDataCount = dataModel->rowCount(); i < modelDataCount; i++, entry++) {
+ // Ignore empty values
+ if (entry->running_sum == 0 || entry->sec == 0)
+ continue;
+
+ meandepthvalue = entry->running_sum / entry->sec ;
+ QPointF point(hAxis->posAtValue(entry->sec), vAxis->posAtValue(meandepthvalue));
+ poly.append(point);
+ }
+
+ setPolygon(poly);
+}
+
+
+void DiveMeanDepthItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ if (polygon().isEmpty())
+ return;
+ painter->save();
+ painter->setPen(pen());
+ painter->drawPolyline(polygon());
+ painter->restore();
+}
+
+void DiveMeanDepthItem::settingsChanged()
+{
+ setVisible(prefs.show_average_depth);
+}
void DiveGasPressureItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight)
{
// We don't have enougth data to calculate things, quit.
diff --git a/qt-ui/profile/diveprofileitem.h b/qt-ui/profile/diveprofileitem.h
index 49631035b..d235d22fd 100644
--- a/qt-ui/profile/diveprofileitem.h
+++ b/qt-ui/profile/diveprofileitem.h
@@ -84,6 +84,18 @@ private:
QColor profileColor;
};
+class DiveMeanDepthItem : public AbstractProfilePolygonItem {
+ Q_OBJECT
+public:
+ DiveMeanDepthItem();
+ virtual void modelDataChanged(const QModelIndex &topLeft = QModelIndex(), const QModelIndex &bottomRight = QModelIndex());
+ virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ virtual void settingsChanged();
+private:
+ QString visibilityKey;
+
+};
+
class DiveTemperatureItem : public AbstractProfilePolygonItem {
Q_OBJECT
public:
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index b24132555..df76058c8 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -86,7 +86,8 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) : QGraphicsView(parent),
temperatureItem(new DiveTemperatureItem()),
cylinderPressureAxis(new DiveCartesianAxis()),
gasPressureItem(new DiveGasPressureItem()),
- meanDepth(new MeanDepthLine()),
+ meanDepth(new MeanDepthLine()),
+ meanDepthItem(new DiveMeanDepthItem()),
diveComputerText(new DiveTextItem()),
diveCeiling(new DiveCalculatedCeiling()),
reportedCeiling(new DiveReportedCeiling()),
@@ -153,6 +154,7 @@ ProfileWidget2::~ProfileWidget2()
delete timeAxis;
delete diveProfileItem;
delete temperatureItem;
+ delete meanDepthItem;
delete cylinderPressureAxis;
delete gasPressureItem;
delete meanDepth;
@@ -188,6 +190,7 @@ void ProfileWidget2::addItemsToScene()
scene()->addItem(diveProfileItem);
scene()->addItem(cylinderPressureAxis);
scene()->addItem(temperatureItem);
+ scene()->addItem(meanDepthItem);
scene()->addItem(gasPressureItem);
scene()->addItem(meanDepth);
// I cannot seem to figure out if an object that I find with itemAt() on the scene
@@ -304,6 +307,9 @@ void ProfileWidget2::setupItemOnScene()
setupItem(ambPressureItem, timeAxis, percentageAxis, dataModel, DivePlotDataModel::AMBPRESSURE, DivePlotDataModel::TIME, 1);
setupItem(gflineItem, timeAxis, percentageAxis, dataModel, DivePlotDataModel::GFLINE, DivePlotDataModel::TIME, 1);
setupItem(diveProfileItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::DEPTH, DivePlotDataModel::TIME, 0);
+ setupItem(meanDepthItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::INSTANT_MEANDEPTH, DivePlotDataModel::TIME, 1);
+
+
#define CREATE_PP_GAS(ITEM, VERTICAL_COLUMN, COLOR, COLOR_ALERT, THRESHOULD_SETTINGS, VISIBILITY_SETTINGS) \
setupItem(ITEM, timeAxis, gasYAxis, dataModel, DivePlotDataModel::VERTICAL_COLUMN, DivePlotDataModel::TIME, 0); \
@@ -1002,6 +1008,7 @@ void ProfileWidget2::setProfileState()
cylinderPressureAxis->setPos(itemPos.cylinder.pos.on);
heartBeatItem->setVisible(prefs.hrgraph);
meanDepth->setVisible(true);
+ meanDepthItem->setVisible(prefs.show_average_depth);
diveComputerText->setVisible(true);
diveComputerText->setPos(itemPos.dcLabel.on);
diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h
index 51acef91e..2d49206cc 100644
--- a/qt-ui/profile/profilewidget2.h
+++ b/qt-ui/profile/profilewidget2.h
@@ -23,6 +23,7 @@ struct dive;
struct plot_info;
class ToolTipItem;
class MeanDepthLine;
+class DiveMeanDepth;
class DiveReportedCeiling;
class DiveTextItem;
class TemperatureAxis;
@@ -161,6 +162,7 @@ private:
TimeAxis *timeAxis;
DiveProfileItem *diveProfileItem;
DiveTemperatureItem *temperatureItem;
+ DiveMeanDepthItem *meanDepthItem;
DiveCartesianAxis *cylinderPressureAxis;
DiveGasPressureItem *gasPressureItem;
MeanDepthLine *meanDepth;