summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Berthold Stoeger <bstoeger@mail.tuwien.ac.at>2020-12-11 23:55:18 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-12-13 11:49:59 -0800
commit296a391faa1625350b5561d8ce17f5dc8a38300c (patch)
tree2cd4a54fd8a3be166a842563ea49f02cd232b37c
parent11e576ffbf6ddc117d13fd8b02722948efd9ce54 (diff)
downloadsubsurface-296a391faa1625350b5561d8ce17f5dc8a38300c.tar.gz
prefs: add option to display only actually used tanks
A user complained about the default cylinders list. Provide a preferences option to turn this off. When changing the preferences, the tank-info model will be completely rebuilt. Currently, this is a bit crude as this will be done for any preferences change. Suggested-by: Adolph Weidanz <weidanz.adolph@gmail.com> Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
-rw-r--r--CHANGELOG.md1
-rw-r--r--core/equipment.c22
-rw-r--r--core/pref.h1
-rw-r--r--core/settings/qPrefEquipment.cpp3
-rw-r--r--core/settings/qPrefEquipment.h5
-rw-r--r--core/subsurfacestartup.c1
-rw-r--r--desktop-widgets/preferences/preferences_equipment.cpp12
-rw-r--r--desktop-widgets/preferences/preferences_equipment.ui9
8 files changed, 47 insertions, 7 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3f14b5350..41b558f6e 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,4 @@
+- desktop: add preferences option to disable default cylinder types
- mobile: add location service warning as required by Google Play
- mobile: fix manually adding dives in the past [#2971]
diff --git a/core/equipment.c b/core/equipment.c
index 253ef2086..af6f092a9 100644
--- a/core/equipment.c
+++ b/core/equipment.c
@@ -246,11 +246,8 @@ int find_best_gasmix_match(struct gasmix mix, const struct cylinder_table *cylin
* we should pick up any other names from the dive
* logs directly.
*/
-struct tank_info_table tank_info_table;
-void reset_tank_info_table(struct tank_info_table *table)
+static void add_default_tank_infos(struct tank_info_table *table)
{
- clear_tank_info_table(table);
-
/* Size-only metric cylinders */
add_tank_info_metric(table, "10.0ℓ", 10000, 0);
add_tank_info_metric(table, "11.1ℓ", 11100, 0);
@@ -301,6 +298,23 @@ void reset_tank_info_table(struct tank_info_table *table)
add_tank_info_metric(table, "D20 232 bar", 40000, 232);
}
+struct tank_info_table tank_info_table;
+void reset_tank_info_table(struct tank_info_table *table)
+{
+ clear_tank_info_table(table);
+ if (prefs.display_default_tank_infos)
+ add_default_tank_infos(table);
+
+ /* Add cylinders from dive list */
+ for (int i = 0; i < dive_table.nr; ++i) {
+ const struct dive *dive = dive_table.dives[i];
+ for (int j = 0; j < dive->cylinders.nr; j++) {
+ const cylinder_t *cyl = get_cylinder(dive, j);
+ add_cylinder_description(&cyl->type);
+ }
+ }
+}
+
/*
* We hardcode the most common weight system types
* This is a bit odd as the weight system types don't usually encode weight
diff --git a/core/pref.h b/core/pref.h
index f670c9135..308aa9555 100644
--- a/core/pref.h
+++ b/core/pref.h
@@ -109,6 +109,7 @@ struct preferences {
// ********** Equipment tab *******
const char *default_cylinder;
bool display_unused_tanks;
+ bool display_default_tank_infos;
// ********** General **********
bool auto_recalculate_thumbnails;
diff --git a/core/settings/qPrefEquipment.cpp b/core/settings/qPrefEquipment.cpp
index 10c6877aa..3a5ec1b67 100644
--- a/core/settings/qPrefEquipment.cpp
+++ b/core/settings/qPrefEquipment.cpp
@@ -14,8 +14,9 @@ void qPrefEquipment::loadSync(bool doSync)
{
disk_default_cylinder(doSync);
disk_display_unused_tanks(doSync);
+ disk_display_default_tank_infos(doSync);
}
HANDLE_PREFERENCE_TXT(Equipment, "default_cylinder", default_cylinder);
HANDLE_PREFERENCE_BOOL(Equipment, "display_unused_tanks", display_unused_tanks);
-
+HANDLE_PREFERENCE_BOOL(Equipment, "display_default_tank_infos", display_default_tank_infos);
diff --git a/core/settings/qPrefEquipment.h b/core/settings/qPrefEquipment.h
index 33fe9f8d6..70b744759 100644
--- a/core/settings/qPrefEquipment.h
+++ b/core/settings/qPrefEquipment.h
@@ -9,6 +9,7 @@ class qPrefEquipment : public QObject {
Q_OBJECT
Q_PROPERTY(QString default_cylinder READ default_cylinder WRITE set_default_cylinder NOTIFY default_cylinderChanged)
Q_PROPERTY(bool display_unused_tanks READ display_unused_tanks WRITE set_display_unused_tanks NOTIFY display_unused_tanksChanged)
+ Q_PROPERTY(bool display_default_tank_infos READ display_default_tank_infos WRITE set_display_default_tank_infos NOTIFY display_default_tank_infosChanged)
public:
static qPrefEquipment *instance();
@@ -21,19 +22,23 @@ public:
public:
static QString default_cylinder() { return prefs.default_cylinder; }
static bool display_unused_tanks() { return prefs.display_unused_tanks; }
+ static bool display_default_tank_infos() { return prefs.display_default_tank_infos; }
public slots:
static void set_default_cylinder(const QString& value);
static void set_display_unused_tanks(bool value);
+ static void set_display_default_tank_infos(bool value);
signals:
void default_cylinderChanged(const QString& value);
void display_unused_tanksChanged(bool value);
+ void display_default_tank_infosChanged(bool value);
private:
qPrefEquipment() {}
static void disk_default_cylinder(bool doSync);
static void disk_display_unused_tanks(bool doSync);
+ static void disk_display_default_tank_infos(bool doSync);
};
#endif
diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c
index 3b0428ef0..c2e4dda04 100644
--- a/core/subsurfacestartup.c
+++ b/core/subsurfacestartup.c
@@ -50,6 +50,7 @@ struct preferences default_prefs = {
.display_invalid_dives = false,
.show_sac = false,
.display_unused_tanks = false,
+ .display_default_tank_infos = true,
.show_average_depth = true,
.show_icd = false,
.ascrate75 = 9000 / 60,
diff --git a/desktop-widgets/preferences/preferences_equipment.cpp b/desktop-widgets/preferences/preferences_equipment.cpp
index 00bd9aa53..877e904d8 100644
--- a/desktop-widgets/preferences/preferences_equipment.cpp
+++ b/desktop-widgets/preferences/preferences_equipment.cpp
@@ -4,6 +4,7 @@
#include "core/settings/qPrefEquipment.h"
#include "core/qthelper.h"
#include "core/dive.h"
+#include "qt-models/tankinfomodel.h"
#include <QApplication>
#include <QMessageBox>
@@ -23,6 +24,7 @@ PreferencesEquipment::~PreferencesEquipment()
void PreferencesEquipment::refreshSettings()
{
ui->display_unused_tanks->setChecked(prefs.display_unused_tanks);
+ ui->display_default_tank_infos->setChecked(prefs.display_default_tank_infos);
ui->default_cylinder->clear();
for (int i = 0; i < tank_info_table.nr; i++) {
const tank_info &ti = tank_info_table.infos[i];
@@ -36,5 +38,15 @@ void PreferencesEquipment::syncSettings()
{
auto equipment = qPrefEquipment::instance();
qPrefEquipment::set_display_unused_tanks(ui->display_unused_tanks->isChecked());
+ qPrefEquipment::set_display_default_tank_infos(ui->display_default_tank_infos->isChecked());
equipment->set_default_cylinder(ui->default_cylinder->currentText());
+
+ // In case the user changed the tank info settings,
+ // reset the tank_info_table and inform the TankInfoModel of
+ // the changed table. It is somewhat questionable to do this here.
+ // Moreover, it is a bit crude, as this will be called for *any*
+ // preferences change. Perhaps, the model should listen to the
+ // precise changed signal of the preferences system?
+ reset_tank_info_table(&tank_info_table);
+ TankInfoModel::instance()->update();
}
diff --git a/desktop-widgets/preferences/preferences_equipment.ui b/desktop-widgets/preferences/preferences_equipment.ui
index 4526f9618..7461cd913 100644
--- a/desktop-widgets/preferences/preferences_equipment.ui
+++ b/desktop-widgets/preferences/preferences_equipment.ui
@@ -61,7 +61,6 @@
</layout>
</widget>
</item>
-
<item>
<widget class="QCheckBox" name="display_unused_tanks">
<property name="text">
@@ -69,7 +68,13 @@
</property>
</widget>
</item>
-
+ <item>
+ <widget class="QCheckBox" name="display_default_tank_infos">
+ <property name="text">
+ <string>Show default cylinder sizes in the cylinders selection of the equipment tab</string>
+ </property>
+ </widget>
+ </item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">