diff options
author | Berthold Stoeger <bstoeger@mail.tuwien.ac.at> | 2020-12-11 23:55:18 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-12-13 11:49:59 -0800 |
commit | 296a391faa1625350b5561d8ce17f5dc8a38300c (patch) | |
tree | 2cd4a54fd8a3be166a842563ea49f02cd232b37c | |
parent | 11e576ffbf6ddc117d13fd8b02722948efd9ce54 (diff) | |
download | subsurface-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.md | 1 | ||||
-rw-r--r-- | core/equipment.c | 22 | ||||
-rw-r--r-- | core/pref.h | 1 | ||||
-rw-r--r-- | core/settings/qPrefEquipment.cpp | 3 | ||||
-rw-r--r-- | core/settings/qPrefEquipment.h | 5 | ||||
-rw-r--r-- | core/subsurfacestartup.c | 1 | ||||
-rw-r--r-- | desktop-widgets/preferences/preferences_equipment.cpp | 12 | ||||
-rw-r--r-- | desktop-widgets/preferences/preferences_equipment.ui | 9 |
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"> |