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>
This commit is contained in:
Lakshman 2014-04-08 00:00:50 -04:00 committed by Dirk Hohndel
parent 20bde81023
commit 6a8d929876
10 changed files with 70 additions and 9 deletions

1
pref.h
View file

@ -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,

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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>

View file

@ -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);

View file

@ -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;

View file

@ -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 {

View file

@ -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);

View file

@ -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,