From 2fe1121b1c7493e7951a8f66ce5ac10d11331aa4 Mon Sep 17 00:00:00 2001
From: willemferguson <willemferguson@zoology.up.ac.za>
Date: Mon, 11 Nov 2019 11:47:12 +0200
Subject: [PATCH] Information tab: Make air and water tempertatures editable

The undo stack is preserved.
This is in preparation of removing temperatures from the Notes tab.

Signed-off-by: willemferguson <willemferguson@zoology.up.ac.za>
---
 .../tab-widgets/TabDiveInformation.cpp        | 29 +++++++++++++++----
 .../tab-widgets/TabDiveInformation.h          |  2 ++
 .../tab-widgets/TabDiveInformation.ui         |  8 ++---
 3 files changed, 29 insertions(+), 10 deletions(-)

diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
index 641e762f2..b97ca1cdf 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
@@ -63,8 +63,8 @@ void TabDiveInformation::clear()
 	ui->surfaceIntervalText->clear();
 	ui->maximumDepthText->clear();
 	ui->averageDepthText->clear();
-	ui->waterTemperatureText->clear();
-	ui->airTemperatureText->clear();
+	ui->watertemp->clear();
+	ui->airtemp->clear();
 	ui->atmPressVal->clear();
 	ui->salinityText->clear();
 	ui->waterTypeText->clear();
@@ -170,8 +170,8 @@ void TabDiveInformation::updateData()
 
 	updateProfile();
 	updateWhen();
-	ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true));
-	ui->airTemperatureText->setText(get_temperature_string(current_dive->airtemp, true));
+	ui->watertemp->setText(get_temperature_string(current_dive->watertemp, true));
+	ui->airtemp->setText(get_temperature_string(current_dive->airtemp, true));
 	ui->atmPressType->setItemText(1, get_depth_unit());  // Check for changes in depth unit (imperial/metric)
 	ui->atmPressType->setCurrentIndex(0);                // Set the atmospheric pressure combo box to mbar
 	updateMode(current_dive);
@@ -194,9 +194,9 @@ void TabDiveInformation::divesChanged(const QVector<dive *> &dives, DiveField fi
 	if (field.duration || field.depth || field.mode)
 		updateProfile();
 	if (field.air_temp)
-		ui->airTemperatureText->setText(get_temperature_string(current_dive->airtemp, true));
+		ui->airtemp->setText(get_temperature_string(current_dive->airtemp, true));
 	if (field.water_temp)
-		ui->waterTemperatureText->setText(get_temperature_string(current_dive->watertemp, true));
+		ui->watertemp->setText(get_temperature_string(current_dive->watertemp, true));
 	if (field.atm_press)
 		ui->atmPressVal->setText(ui->atmPressVal->text().sprintf("%d",current_dive->surface_pressure.mbar));
 	if (field.salinity)
@@ -222,6 +222,23 @@ void TabDiveInformation::diveModeChanged(int index)
 		divesEdited(Command::editMode(dc_number, (enum divemode_t)index, false));
 }
 
+void TabDiveInformation::on_airtemp_editingFinished()
+{
+	// If the field wasn't modified by the user, don't post a new undo command.
+	// Owing to rounding errors, this might lead to undo commands that have
+	// no user visible effects. These can be very confusing.
+	if (ui->airtemp->isModified() && current_dive)
+		divesEdited(Command::editAirTemp(parseTemperatureToMkelvin(ui->airtemp->text()), false));
+}
+
+void TabDiveInformation::on_watertemp_editingFinished()
+{
+	// If the field wasn't modified by the user, don't post a new undo command.
+	// Owing to rounding errors, this might lead to undo commands that have
+	// no user visible effects. These can be very confusing.
+	if (ui->watertemp->isModified() && current_dive)
+		divesEdited(Command::editWaterTemp(parseTemperatureToMkelvin(ui->watertemp->text()), false));
+}
 void TabDiveInformation::on_atmPressType_currentIndexChanged(int index) { updateTextBox(COMBO_CHANGED); }
 
 void TabDiveInformation::on_atmPressVal_editingFinished() { updateTextBox(TEXT_EDITED); }
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.h b/desktop-widgets/tab-widgets/TabDiveInformation.h
index 8b38797c3..96b2896e9 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.h
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.h
@@ -22,6 +22,8 @@ private slots:
 	void on_atmPressVal_editingFinished();
 	void on_atmPressType_currentIndexChanged(int index);
 	void on_visibility_valueChanged(int value);
+	void on_airtemp_editingFinished();
+	void on_watertemp_editingFinished();
 private:
 	Ui::TabDiveInformation *ui;
 	void updateProfile();
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.ui b/desktop-widgets/tab-widgets/TabDiveInformation.ui
index 41be1bd8a..6c5588d6a 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.ui
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.ui
@@ -374,7 +374,7 @@
        </item>
 
        <item row="5" column="0">
-        <widget class="QGroupBox" name="groupBox_9">
+        <widget class="QGroupBox" name="groupBox_airtemp">
          <property name="title">
           <string>Air temp.</string>
          </property>
@@ -389,7 +389,7 @@
          </property>
          <layout class="QHBoxLayout" name="diveInfoAirTempLayout">
           <item>
-           <widget class="QLabel" name="airTemperatureText">
+           <widget class="QLineEdit" name="airtemp">
             <property name="text">
              <string/>
             </property>
@@ -403,7 +403,7 @@
        </item>
 
        <item row="5" column="1">
-        <widget class="QGroupBox" name="groupBox_8">
+        <widget class="QGroupBox" name="groupBox_watertemp">
          <property name="title">
           <string>Water temp.</string>
          </property>
@@ -418,7 +418,7 @@
          </property>
          <layout class="QHBoxLayout" name="diveInfoWaterTempLayout">
           <item>
-           <widget class="QLabel" name="waterTemperatureText">
+           <widget class="QLineEdit" name="watertemp">
             <property name="text">
              <string/>
             </property>