diff options
author | Lakshman <acrlakshman@gmail.com> | 2014-04-08 00:00:50 -0400 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-04-10 09:21:43 -0700 |
commit | 6a8d929876f5a8d0279d2a83248a5d7b59e0ae39 (patch) | |
tree | 97ce70f6851a4e2d756a946607298f6325edf9d3 | |
parent | 20bde81023938a64fd417e75af3b85f19789f9ac (diff) | |
download | subsurface-6a8d929876f5a8d0279d2a83248a5d7b59e0ae39.tar.gz |
Feature to show or hide heart rate graph
Adds new push button "HR" to the button bar on the dive profile to
toggle display of heart rate.
TODO: New icon for the heart rate button is needed.
Fixes #485
Signed-off-by: Lakshman Anumolu <acrlakshman@gmail.com>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | pref.h | 1 | ||||
-rw-r--r-- | profile.c | 2 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 7 | ||||
-rw-r--r-- | qt-ui/mainwindow.h | 1 | ||||
-rw-r--r-- | qt-ui/mainwindow.ui | 22 | ||||
-rw-r--r-- | qt-ui/preferences.cpp | 1 | ||||
-rw-r--r-- | qt-ui/profile/diveprofileitem.cpp | 22 | ||||
-rw-r--r-- | qt-ui/profile/diveprofileitem.h | 5 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 17 | ||||
-rw-r--r-- | subsurfacestartup.c | 1 |
10 files changed, 70 insertions, 9 deletions
@@ -42,6 +42,7 @@ struct preferences { bool display_unused_tanks; bool show_average_depth; bool zoomed_plot; + short heart_rate; }; enum unit_system_values { METRIC, @@ -1321,7 +1321,7 @@ static void plot_string(struct plot_info *pi, struct plot_data *entry, struct me } } } - if (entry->heartbeat) + if (entry->heartbeat && prefs.heart_rate) put_format(b, translate("gettextFromC", "heartbeat: %d\n"), entry->heartbeat); if (entry->bearing) put_format(b, translate("gettextFromC", "bearing: %d\n"), entry->bearing); diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index 216f18275..88be2ca23 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -221,6 +221,7 @@ void MainWindow::setToolButtonsEnabled(bool enabled) ui.profSAC->setEnabled(enabled); ui.profRuler->setEnabled(enabled); ui.profScaled->setEnabled(enabled); + ui.profHR->setEnabled(enabled); } void MainWindow::on_actionClose_triggered() @@ -702,6 +703,7 @@ void MainWindow::readSettings() TOOLBOX_PREF_BUTTON(pp_graphs.phe, phegraph, profPhe); TOOLBOX_PREF_BUTTON(pp_graphs.pn2, pn2graph, profPn2); TOOLBOX_PREF_BUTTON(pp_graphs.po2, po2graph, profPO2); + TOOLBOX_PREF_BUTTON(heart_rate, hrgraph, profHR); ui.profRuler->setChecked(s.value("rulergraph").toBool()); TOOLBOX_PREF_BUTTON(show_sac, show_sac, profSAC); } @@ -1164,6 +1166,11 @@ void MainWindow::on_profPO2_clicked(bool triggered) prefs.pp_graphs.po2 = triggered; TOOLBOX_PREF_PROFILE(po2graph); } +void MainWindow::on_profHR_clicked(bool triggered) +{ + prefs.heart_rate = triggered; + TOOLBOX_PREF_PROFILE(hrgraph); +} void MainWindow::on_profRuler_clicked(bool triggered) { TOOLBOX_PREF_PROFILE(rulergraph); diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h index f47ade861..40d32b5e5 100644 --- a/qt-ui/mainwindow.h +++ b/qt-ui/mainwindow.h @@ -140,6 +140,7 @@ slots: void on_profPO2_clicked(bool triggered); void on_profPhe_clicked(bool triggered); void on_profPn2_clicked(bool triggered); + void on_profHR_clicked(bool triggered); void on_profRuler_clicked(bool triggered); void on_profSAC_clicked(bool triggered); void on_profScaled_clicked(bool triggered); diff --git a/qt-ui/mainwindow.ui b/qt-ui/mainwindow.ui index 909e343ef..30610bb09 100644 --- a/qt-ui/mainwindow.ui +++ b/qt-ui/mainwindow.ui @@ -449,11 +449,27 @@ <bool>true</bool> </property> </widget> - </item> - <item row="0" column="1" rowspan="14"> + </item> + <item row="13" column="0"> + <widget class="QToolButton" name="profHR"> + <property name="toolTip"> + <string>Show/hide heart rate</string> + </property> + <property name="text"> + <string>HR</string> + </property> + <property name="checkable"> + <bool>true</bool> + </property> + <property name="autoRaise"> + <bool>true</bool> + </property> + </widget> + </item> + <item row="0" column="1" rowspan="15"> <widget class="ProfileWidget2" name="newProfile"/> </item> - <item row="13" column="0"> + <item row="14" column="0"> <spacer name="verticalSpacer"> <property name="orientation"> <enum>Qt::Vertical</enum> diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp index 27570dc23..1e87662a1 100644 --- a/qt-ui/preferences.cpp +++ b/qt-ui/preferences.cpp @@ -268,6 +268,7 @@ void PreferencesDialog::loadSettings() GET_BOOL("calcceiling3m", calc_ceiling_3m_incr); GET_BOOL("calcndltts", calc_ndl_tts); GET_BOOL("calcalltissues", calc_all_tissues); + GET_BOOL("hrgraph", heart_rate); GET_INT("gflow", gflow); GET_INT("gfhigh", gfhigh); GET_BOOL("gf_low_at_maxdepth", gf_low_at_maxdepth); diff --git a/qt-ui/profile/diveprofileitem.cpp b/qt-ui/profile/diveprofileitem.cpp index 2ffc7ec02..51d6a3f79 100644 --- a/qt-ui/profile/diveprofileitem.cpp +++ b/qt-ui/profile/diveprofileitem.cpp @@ -221,6 +221,7 @@ DiveHeartrateItem::DiveHeartrateItem() pen.setCosmetic(true); pen.setWidth(1); setPen(pen); + visible = true; } void DiveHeartrateItem::modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight) @@ -297,6 +298,27 @@ void DiveHeartrateItem::paint(QPainter *painter, const QStyleOptionGraphicsItem painter->drawPolyline(polygon()); } +void DiveHeartrateItem::preferencesChanged() +{ + QSettings s; + s.beginGroup("TecDetails"); + setVisible(s.value(visibilityKey).toBool()); + if (s.value(visibilityKey).toBool()) + visible = true; + else + visible = false; +} + +void DiveHeartrateItem::setVisibilitySettingsKey(const QString &key) +{ + visibilityKey = key; +} + +bool DiveHeartrateItem::isVisible() +{ + return visible == true; +} + DiveTemperatureItem::DiveTemperatureItem() { QPen pen; diff --git a/qt-ui/profile/diveprofileitem.h b/qt-ui/profile/diveprofileitem.h index 480776546..c7fa59841 100644 --- a/qt-ui/profile/diveprofileitem.h +++ b/qt-ui/profile/diveprofileitem.h @@ -100,9 +100,14 @@ public: DiveHeartrateItem(); virtual void modelDataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight); virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + virtual void preferencesChanged(); + void setVisibilitySettingsKey(const QString &setVisibilitySettingsKey); + bool isVisible(); private: void createTextItem(int seconds, int hr); + QString visibilityKey; + bool visible; }; class DiveGasPressureItem : public AbstractProfilePolygonItem { diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 047634e15..95f8f49ee 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -193,6 +193,8 @@ void ProfileWidget2::setupItemOnScene() setupItem(gasPressureItem, timeAxis, cylinderPressureAxis, dataModel, DivePlotDataModel::TEMPERATURE, DivePlotDataModel::TIME, 1); setupItem(temperatureItem, timeAxis, temperatureAxis, dataModel, DivePlotDataModel::TEMPERATURE, DivePlotDataModel::TIME, 1); setupItem(heartBeatItem, timeAxis, heartBeatAxis, dataModel, DivePlotDataModel::HEARTBEAT, DivePlotDataModel::TIME, 1); + heartBeatItem->setVisibilitySettingsKey("hrgraph"); + heartBeatItem->preferencesChanged(); setupItem(diveProfileItem, timeAxis, profileYAxis, dataModel, DivePlotDataModel::DEPTH, DivePlotDataModel::TIME, 0); #define CREATE_PP_GAS(ITEM, VERTICAL_COLUMN, COLOR, COLOR_ALERT, THRESHOULD_SETTINGS, VISIBILITY_SETTINGS) \ @@ -400,11 +402,15 @@ void ProfileWidget2::plotDives(QList<dive *> dives) temperatureAxis->setMinimum(pInfo.mintemp); temperatureAxis->setMaximum(pInfo.maxtemp); - if (pInfo.maxhr) { - heartBeatAxis->setMinimum(pInfo.minhr); - heartBeatAxis->setMaximum(pInfo.maxhr); - heartBeatAxis->updateTicks(); // this shows the ticks - heartBeatAxis->setVisible(true); + if (heartBeatItem->isVisible()) { + if (pInfo.maxhr) { + heartBeatAxis->setMinimum(pInfo.minhr); + heartBeatAxis->setMaximum(pInfo.maxhr); + heartBeatAxis->updateTicks(); // this shows the ticks + heartBeatAxis->setVisible(true); + } else { + heartBeatAxis->setVisible(false); + } } else { heartBeatAxis->setVisible(false); } @@ -656,6 +662,7 @@ void ProfileWidget2::setProfileState() temperatureAxis->setPos(itemPos.temperature.pos.on); heartBeatAxis->setPos(itemPos.heartBeat.pos.on); heartBeatAxis->setLine(itemPos.heartBeat.expanded); + heartBeatItem->setVisible(s.value("hrgraph").toBool()); meanDepth->setVisible(true); diveComputerText->setVisible(true); diff --git a/subsurfacestartup.c b/subsurfacestartup.c index 63ecaa11b..3bd2dc0f1 100644 --- a/subsurfacestartup.c +++ b/subsurfacestartup.c @@ -18,6 +18,7 @@ struct preferences default_prefs = { .mod = false, .mod_ppO2 = 1.6, .ead = false, + .heart_rate = true, .profile_dc_ceiling = true, .profile_red_ceiling = false, .profile_calc_ceiling = false, |