summaryrefslogtreecommitdiffstats
path: root/desktop-widgets/tab-widgets/TabDiveInformation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'desktop-widgets/tab-widgets/TabDiveInformation.cpp')
-rw-r--r--desktop-widgets/tab-widgets/TabDiveInformation.cpp59
1 files changed, 49 insertions, 10 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;
+ }
}