diff options
author | Krzysztof Arentowicz <karent.bug@gmail.com> | 2015-01-02 00:28:38 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2015-01-01 16:23:22 -0800 |
commit | e3378e299a64e4aa807858b49bf5794a2a5babe7 (patch) | |
tree | 3505cbb39efd9b706af3e35220653bffd0aeaa2a /qt-ui/profile | |
parent | ee1ef5233036be26ab28228465985f1cf71ba157 (diff) | |
download | subsurface-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.cpp | 47 | ||||
-rw-r--r-- | qt-ui/profile/diveprofileitem.h | 12 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 9 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.h | 2 |
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; |