diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2019-04-26 10:03:32 +0200 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2019-04-29 12:58:49 -0700 |
commit | 26edea7f71bb1726cebe3955494ab049f337ecda (patch) | |
tree | 550cac2d735857aef34d37824374743745e60d1c /desktop-widgets | |
parent | 98a3eb414befe32f912b21e1db2fed17a2017943 (diff) | |
download | subsurface-26edea7f71bb1726cebe3955494ab049f337ecda.tar.gz |
Desktop: automatically update dive information tab
Currently, the dive information tab was not updated when the user
edited fields. The fields were only updated when switching between
dives.
Therefore, hook into the "divesChanged" signal and update the fields
accordingly.
Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
Diffstat (limited to 'desktop-widgets')
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveInformation.cpp | 59 | ||||
-rw-r--r-- | desktop-widgets/tab-widgets/TabDiveInformation.h | 7 |
2 files changed, 54 insertions, 12 deletions
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp index e2bbb4fbd..0b778be7f 100644 --- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp +++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp @@ -10,6 +10,7 @@ TabDiveInformation::TabDiveInformation(QWidget *parent) : TabBase(parent), ui(new Ui::TabDiveInformation()) { ui->setupUi(this); + connect(&diveListNotifier, &DiveListNotifier::divesChanged, this, &TabDiveInformation::divesChanged); } TabDiveInformation::~TabDiveInformation() @@ -35,20 +36,13 @@ void TabDiveInformation::clear() ui->salinityText->clear(); } -void TabDiveInformation::updateData() +// Update fields that depend on the dive profile +void TabDiveInformation::updateProfile() { - if (!current_dive) { - clear(); - return; - } - ui->maxcnsText->setText(QString("%1\%").arg(current_dive->maxcns)); ui->otuText->setText(QString("%1").arg(current_dive->otu)); ui->maximumDepthText->setText(get_depth_string(current_dive->maxdepth, true)); ui->averageDepthText->setText(get_depth_string(current_dive->meandepth, true)); - ui->dateText->setText(get_short_dive_date_string(current_dive->when)); - ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true)); - ui->airTemperatureText->setText(get_temperature_string(current_dive->airtemp, true)); volume_t gases[MAX_CYLINDERS] = {}; get_gas_used(current_dive, gases); @@ -80,13 +74,31 @@ void TabDiveInformation::updateData() ui->diveTimeText->setText(get_dive_duration_string(current_dive->duration.seconds, tr("h"), tr("min"), tr("sec"), " ", current_dive->dc.divemode == FREEDIVE)); + ui->sacText->setText( mean[0] ? SACs : QString()); +} + +// Update fields that depend on start of dive +void TabDiveInformation::updateWhen() +{ + ui->dateText->setText(get_short_dive_date_string(current_dive->when)); timestamp_t surface_interval = get_surface_interval(current_dive->when); if (surface_interval >= 0) ui->surfaceIntervalText->setText(get_dive_surfint_string(surface_interval, tr("d"), tr("h"), tr("min"))); else ui->surfaceIntervalText->clear(); +} - ui->sacText->setText( mean[0] ? SACs : QString()); +void TabDiveInformation::updateData() +{ + if (!current_dive) { + clear(); + return; + } + + updateProfile(); + updateWhen(); + ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true)); + ui->airTemperatureText->setText(get_temperature_string(current_dive->airtemp, true)); if (current_dive->surface_pressure.mbar) /* this is ALWAYS displayed in mbar */ ui->airPressureText->setText(QString("%1mbar").arg(current_dive->surface_pressure.mbar)); @@ -97,5 +109,32 @@ void TabDiveInformation::updateData() ui->salinityText->setText(QString("%1g/ℓ").arg(current_dive->salinity / 10.0)); else ui->salinityText->clear(); +} +// This function gets called if a field gets updated by an undo command. +// Refresh the corresponding UI field. +void TabDiveInformation::divesChanged(dive_trip *trip, const QVector<dive *> &dives, DiveField field) +{ + // If the current dive is not in list of changed dives, do nothing + if (!current_dive || !dives.contains(current_dive)) + return; + + switch(field) { + case DiveField::DURATION: + case DiveField::DEPTH: + case DiveField::MODE: + updateProfile(); + break; + case DiveField::AIR_TEMP: + ui->airTemperatureText->setText(get_temperature_string(current_dive->airtemp, true)); + break; + case DiveField::WATER_TEMP: + ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true)); + break; + case DiveField::DATETIME: + updateWhen(); + break; + default: + break; + } } diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.h b/desktop-widgets/tab-widgets/TabDiveInformation.h index 80579dbd1..a61b9b414 100644 --- a/desktop-widgets/tab-widgets/TabDiveInformation.h +++ b/desktop-widgets/tab-widgets/TabDiveInformation.h @@ -3,6 +3,7 @@ #define TAB_DIVE_INFORMATION_H #include "TabBase.h" +#include "core/subsurface-qt/DiveListNotifier.h" namespace Ui { class TabDiveInformation; @@ -15,10 +16,12 @@ public: ~TabDiveInformation(); void updateData() override; void clear() override; - +private slots: + void divesChanged(dive_trip *trip, const QVector<dive *> &dives, DiveField field); private: Ui::TabDiveInformation *ui; + void updateProfile(); + void updateWhen(); }; - #endif |