summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Monty Taylor <mordred@inaugust.com>2020-05-04 08:54:58 -0500
committerGravatar Lubomir I. Ivanov <neolit123@gmail.com>2020-05-05 17:31:47 +0300
commit95e6792c4fe353441fd1cad8bad8b459b1a37d65 (patch)
tree93c002bf9ac52e1b7b73d526976912a73766da75
parentb3270222fd884c2b1c68519bdadf7fbc357a5d06 (diff)
downloadsubsurface-95e6792c4fe353441fd1cad8bad8b459b1a37d65.tar.gz
Grantlee: Add salinity and water type to grantlee variables
These can be useful in a printed divelog, especially if the log entry is also showing weight and exposure suit. Signed-off-by: Monty Taylor <mordred@inaugust.com>
-rw-r--r--Documentation/user-manual.txt2
-rw-r--r--core/dive.c5
-rw-r--r--core/dive.h1
-rw-r--r--core/qthelper.cpp22
-rw-r--r--core/qthelper.h4
-rw-r--r--core/subsurface-qt/diveobjecthelper.cpp17
-rw-r--r--core/subsurface-qt/diveobjecthelper.h2
-rw-r--r--desktop-widgets/tab-widgets/TabDiveInformation.cpp22
-rw-r--r--desktop-widgets/tab-widgets/TabDiveInformation.h1
9 files changed, 56 insertions, 20 deletions
diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt
index fb6011584..500ba584a 100644
--- a/Documentation/user-manual.txt
+++ b/Documentation/user-manual.txt
@@ -5011,6 +5011,8 @@ Only a subset of the dive data is exported:
|startPressure| (*string*) the start pressure
|endPressure| (*string*) the end pressure
|firstGas| (*string*) first used gas
+|salinity| (*string*) the salinity of the water for the dive
+|waterType| (*string*) the type of the water for the dive
|=====================
Please note that some of the variables like 'notes' need to be extended with '|safe' to support HTML tags:
diff --git a/core/dive.c b/core/dive.c
index 2073099e2..00add41e6 100644
--- a/core/dive.c
+++ b/core/dive.c
@@ -1196,6 +1196,11 @@ static void fixup_water_salinity(struct dive *dive)
dive->salinity = (sum + nr / 2) / nr;
}
+int get_dive_salinity(const struct dive *dive)
+{
+ return dive->user_salinity ? dive->user_salinity : dive->salinity;
+}
+
static void fixup_meandepth(struct dive *dive)
{
struct divecomputer *dc;
diff --git a/core/dive.h b/core/dive.h
index ca35ff46a..7daf74293 100644
--- a/core/dive.h
+++ b/core/dive.h
@@ -332,6 +332,7 @@ extern void sort_dive_table(struct dive_table *table);
extern struct dive *fixup_dive(struct dive *dive);
extern pressure_t calculate_surface_pressure(const struct dive *dive);
extern pressure_t un_fixup_surface_pressure(const struct dive *d);
+extern int get_dive_salinity(const struct dive *dive);
extern void fixup_dc_duration(struct divecomputer *dc);
extern int dive_getUniqID();
extern unsigned int dc_airtemp(const struct divecomputer *dc);
diff --git a/core/qthelper.cpp b/core/qthelper.cpp
index 082e16194..2e4f35431 100644
--- a/core/qthelper.cpp
+++ b/core/qthelper.cpp
@@ -621,6 +621,23 @@ QString get_pressure_string(pressure_t pressure, bool showunit)
}
}
+QString get_salinity_string(int salinity)
+{
+ return QStringLiteral("%L1%2").arg(salinity / 10.0).arg(gettextFromC::tr("g/ℓ"));
+}
+
+QString get_water_type_string(int salinity)
+{
+ if (salinity < 10050)
+ return waterTypes[FRESHWATER];
+ else if (salinity < 10190)
+ return waterTypes[SALTYWATER];
+ else if (salinity < 10210)
+ return waterTypes[EN13319WATER];
+ else
+ return waterTypes[SALTWATER];
+}
+
QString getSubsurfaceDataPath(QString folderToFind)
{
QString execdir;
@@ -1143,6 +1160,11 @@ QString localFilePath(const QString &originalFilename)
return localFilenameOf.value(originalFilename, originalFilename);
}
+// the water types need to match the watertypes enum
+const QStringList waterTypes = {
+ gettextFromC::tr("Fresh"), gettextFromC::tr("Salty"), gettextFromC::tr("EN13319"), gettextFromC::tr("Salt"), gettextFromC::tr("use dc")
+};
+
// TODO: Apparently Qt has no simple way of listing the supported video
// codecs? Do we have to query them by hand using QMediaPlayer::hasSupport()?
const QStringList videoExtensionsList = {
diff --git a/core/qthelper.h b/core/qthelper.h
index cdc77e742..26e9ef262 100644
--- a/core/qthelper.h
+++ b/core/qthelper.h
@@ -11,6 +11,7 @@ struct picture;
// 1) Types
enum inertgas {N2, HE};
+enum watertypes {FRESHWATER, SALTYWATER, EN13319WATER, SALTWATER, DC_WATERTYPE};
// 2) Functions visible only to C++ parts
@@ -37,6 +38,7 @@ int getCloudURL(QString &filename);
bool parseGpsText(const QString &gps_text, double *latitude, double *longitude);
void init_proxy();
QString getUUID();
+extern const QStringList waterTypes;
extern const QStringList videoExtensionsList;
QStringList mediaExtensionFilters();
QStringList imageExtensionFilters();
@@ -55,6 +57,8 @@ QString get_volume_string(int mliter, bool showunit = false);
QString get_volume_unit();
QString get_pressure_string(pressure_t pressure, bool showunit = false);
QString get_pressure_unit();
+QString get_salinity_string(int salinity);
+QString get_water_type_string(int salinity);
QString getSubsurfaceDataPath(QString folderToFind);
QString getPrintingTemplatePathUser();
QString getPrintingTemplatePathBundle();
diff --git a/core/subsurface-qt/diveobjecthelper.cpp b/core/subsurface-qt/diveobjecthelper.cpp
index bed504975..7c8651507 100644
--- a/core/subsurface-qt/diveobjecthelper.cpp
+++ b/core/subsurface-qt/diveobjecthelper.cpp
@@ -249,6 +249,19 @@ QStringList getFullCylinderList()
return cylinders;
}
+QString formatDiveSalinity(const dive *d)
+{
+ int salinity = get_dive_salinity(d);
+ if (!salinity)
+ return QString();
+ return get_salinity_string(salinity);
+}
+
+QString formatDiveWaterType(const dive *d)
+{
+ return get_water_type_string(get_dive_salinity(d));
+}
+
// Qt's metatype system insists on generating a default constructed object, even if that makes no sense.
DiveObjectHelper::DiveObjectHelper()
{
@@ -286,7 +299,9 @@ DiveObjectHelper::DiveObjectHelper(const struct dive *d) :
getCylinder(formatGetCylinder(d)),
startPressure(getStartPressure(d)),
endPressure(getEndPressure(d)),
- firstGas(getFirstGas(d))
+ firstGas(getFirstGas(d)),
+ salinity(formatDiveSalinity(d)),
+ waterType(formatDiveWaterType(d))
{
#if defined(DEBUG_DOH)
void *array[4];
diff --git a/core/subsurface-qt/diveobjecthelper.h b/core/subsurface-qt/diveobjecthelper.h
index 7723df0f4..a10fe83f1 100644
--- a/core/subsurface-qt/diveobjecthelper.h
+++ b/core/subsurface-qt/diveobjecthelper.h
@@ -84,6 +84,8 @@ public:
QStringList startPressure;
QStringList endPressure;
QStringList firstGas;
+ QString salinity;
+ QString waterType;
};
// This is an extended version of DiveObjectHelper that also keeps track of cylinder data.
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.cpp b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
index 6d3d234d6..a0cafd710 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.cpp
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.cpp
@@ -17,8 +17,6 @@
#define TEXT_EDITED 1
#define CSS_SET_HEADING_BLUE "QLabel { color: mediumblue;} "
-enum watertypes { FRESHWATER, SALTYWATER, EN13319WATER, SALTWATER, DC_WATERTYPE};
-
TabDiveInformation::TabDiveInformation(QWidget *parent) : TabBase(parent), ui(new Ui::TabDiveInformation())
{
ui->setupUi(this);
@@ -26,8 +24,6 @@ TabDiveInformation::TabDiveInformation(QWidget *parent) : TabBase(parent), ui(ne
QStringList atmPressTypes { "mbar", get_depth_unit() ,tr("use dc")};
ui->atmPressType->insertItems(0, atmPressTypes);
pressTypeIndex = 0;
- // the water types need to match the enum above
- waterTypes = QStringList({tr("Fresh"), tr("Salty"), "EN13319", tr("Salt"), tr("use dc")});
ui->waterTypeCombo->insertItems(0, waterTypes);
// This needs to be the same order as enum dive_comp_type in dive.h!
@@ -229,24 +225,14 @@ void TabDiveInformation::updateData()
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
- if (current_dive->user_salinity)
- salinity_value = current_dive->user_salinity;
- else
- salinity_value = current_dive->salinity;
+ salinity_value = get_dive_salinity(current_dive);
if (salinity_value) { // Set water type indicator (EN13319 = 1.020 g/l)
if (prefs.salinityEditDefault) { //If edit-salinity is enabled then set correct water type in combobox:
ui->waterTypeCombo->setCurrentIndex(updateSalinityComboIndex(salinity_value));
} else { // If water salinity is not editable: show water type as a text label
- if (salinity_value < 10050)
- ui->waterTypeText->setText(waterTypes[FRESHWATER]);
- else if (salinity_value < 10190)
- ui->waterTypeText->setText(waterTypes[SALTYWATER]);
- else if (salinity_value < 10210)
- ui->waterTypeText->setText(waterTypes[EN13319WATER]);
- else
- ui->waterTypeText->setText(waterTypes[SALTWATER]);
+ ui->waterTypeText->setText(get_water_type_string(salinity_value));
}
- ui->salinityText->setText(QString("%1g/ℓ").arg(salinity_value / 10.0));
+ ui->salinityText->setText(get_salinity_string(salinity_value));
} else {
ui->waterTypeCombo->setCurrentIndex(-1);
ui->waterTypeText->setText(tr("unknown"));
@@ -295,7 +281,7 @@ void TabDiveInformation::on_waterTypeCombo_activated(int index) {
}
// Save and display the new salinity value
if (combobox_salinity)
- ui->salinityText->setText(QString("%1g/ℓ").arg(combobox_salinity / 10.0));
+ ui->salinityText->setText(get_salinity_string(combobox_salinity));
else
ui->salinityText->clear();
divesEdited(Command::editWaterTypeUser(combobox_salinity, false));
diff --git a/desktop-widgets/tab-widgets/TabDiveInformation.h b/desktop-widgets/tab-widgets/TabDiveInformation.h
index 882a4d1bf..f7c9022c9 100644
--- a/desktop-widgets/tab-widgets/TabDiveInformation.h
+++ b/desktop-widgets/tab-widgets/TabDiveInformation.h
@@ -43,7 +43,6 @@ private:
void divesEdited(int);
void closeWarning();
void showCurrentWidget(bool show, int position);
- QStringList waterTypes;
};
#endif