summaryrefslogtreecommitdiffstats
path: root/desktop-widgets
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2019-04-26 10:03:32 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2019-04-29 12:58:49 -0700
commit26edea7f71bb1726cebe3955494ab049f337ecda (patch)
tree550cac2d735857aef34d37824374743745e60d1c /desktop-widgets
parent98a3eb414befe32f912b21e1db2fed17a2017943 (diff)
downloadsubsurface-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.cpp59
-rw-r--r--desktop-widgets/tab-widgets/TabDiveInformation.h7
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