summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dive.c28
-rw-r--r--dive.h1
-rw-r--r--pref.h1
-rw-r--r--qt-ui/mainwindow.cpp2
-rw-r--r--qt-ui/models.cpp3
-rw-r--r--qt-ui/models.h1
-rw-r--r--qt-ui/preferences.cpp2
-rw-r--r--qt-ui/preferences.ui11
-rw-r--r--subsurfacestartup.c1
9 files changed, 48 insertions, 2 deletions
diff --git a/dive.c b/dive.c
index 5a10af595..1a9bdd97a 100644
--- a/dive.c
+++ b/dive.c
@@ -594,6 +594,32 @@ static struct event *find_previous_event(struct divecomputer *dc, struct event *
return previous;
}
+/* mark all tanks that we switch to in this dive computer's data as used */
+static void mark_used_tanks(struct dive *dive, struct divecomputer *dc)
+{
+ struct event *ev = get_next_event(dc->events, "gaschange");
+ // unless there is a gas change in the first 30 seconds we can
+ // always mark the first cylinder as used
+ if (!ev || ev->time.seconds > 30)
+ dive->cylinder[0].used = true;
+ while (ev) {
+ int idx = get_cylinder_index(dive, ev);
+ dive->cylinder[idx].used = true;
+ ev = get_next_event(ev->next, "gaschange");
+ }
+}
+
+/* walk all divecomputers to find the unused tanks in this dive */
+static void check_for_unused_tanks(struct dive *dive)
+{
+ int i;
+ struct divecomputer *dc;
+
+ for_each_dc(dive, dc) {
+ mark_used_tanks(dive, dc);
+ }
+}
+
static void fixup_surface_pressure(struct dive *dive)
{
struct divecomputer *dc;
@@ -879,7 +905,7 @@ struct dive *fixup_dive(struct dive *dive)
fixup_duration(dive);
fixup_watertemp(dive);
fixup_airtemp(dive);
-
+ check_for_unused_tanks(dive);
for (i = 0; i < MAX_CYLINDERS; i++) {
cylinder_t *cyl = dive->cylinder + i;
add_cylinder_description(&cyl->type);
diff --git a/dive.h b/dive.h
index ccba7a09f..2b69c949c 100644
--- a/dive.h
+++ b/dive.h
@@ -145,6 +145,7 @@ typedef struct {
struct gasmix gasmix;
pressure_t start, end, sample_start, sample_end;
depth_t depth;
+ bool used;
} cylinder_t;
typedef struct {
diff --git a/pref.h b/pref.h
index 37beb8faa..e3f0a545a 100644
--- a/pref.h
+++ b/pref.h
@@ -37,6 +37,7 @@ struct preferences {
short unit_system;
struct units units;
short show_sac;
+ bool display_unused_tanks;
};
enum unit_system_values { METRIC, IMPERIAL, PERSONALIZE };
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index c24e2733e..acbd13046 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -57,6 +57,7 @@ MainWindow::MainWindow() : helpView(0)
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.InfoWidget, SLOT(updateDiveInfo()));
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlanner, SLOT(settingsChanged()));
connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), ui.divePlannerWidget, SLOT(settingsChanged()));
+ connect(PreferencesDialog::instance(), SIGNAL(settingsChanged()), TankInfoModel::instance(), SLOT(update()));
ui.mainErrorMessage->hide();
initialUiSetup();
@@ -647,6 +648,7 @@ void MainWindow::readSettings()
GET_BOOL("gf_low_at_maxdepth", gf_low_at_maxdepth);
set_gf(prefs.gflow, prefs.gfhigh, prefs.gf_low_at_maxdepth);
GET_BOOL("show_sac", show_sac);
+ GET_BOOL("display_unused_tanks", display_unused_tanks);
s.endGroup();
s.beginGroup("GeneralSettings");
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 4debafd9a..1e22f7da0 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -301,7 +301,8 @@ void CylindersModel::setDive(dive* d)
return;
rows = 0;
for(int i = 0; i < MAX_CYLINDERS; i++) {
- if (!cylinder_none(&d->cylinder[i])) {
+ if (!cylinder_none(&d->cylinder[i]) &&
+ (prefs.display_unused_tanks || d->cylinder[i].used)) {
rows = i+1;
}
}
diff --git a/qt-ui/models.h b/qt-ui/models.h
index 06dc66aa1..16818e407 100644
--- a/qt-ui/models.h
+++ b/qt-ui/models.h
@@ -47,6 +47,7 @@ public:
/*reimp*/ bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole);
const QString& biggerString() const;
void clear();
+public slots:
void update();
private:
int rows;
diff --git a/qt-ui/preferences.cpp b/qt-ui/preferences.cpp
index 382880a1f..67e2dfe8d 100644
--- a/qt-ui/preferences.cpp
+++ b/qt-ui/preferences.cpp
@@ -103,6 +103,7 @@ void PreferencesDialog::setUiFromPrefs()
ui.default_cylinder->setCurrentIndex(i);
}
ui.displayinvalid->setChecked(prefs.display_invalid_dives);
+ ui.display_unused_tanks->setChecked(prefs.display_unused_tanks);
ui.show_sac->setChecked(prefs.show_sac);
ui.vertical_speed_minutes->setChecked(prefs.units.vertical_speed_time == units::MINUTES);
ui.vertical_speed_seconds->setChecked(prefs.units.vertical_speed_time == units::SECONDS);
@@ -162,6 +163,7 @@ void PreferencesDialog::syncSettings()
s.setValue("gfhigh", ui.gfhigh->value());
SB("gf_low_at_maxdepth", ui.gf_low_at_maxdepth);
SB("show_sac", ui.show_sac);
+ SB("display_unused_tanks", ui.display_unused_tanks);
s.endGroup();
// Units
diff --git a/qt-ui/preferences.ui b/qt-ui/preferences.ui
index 283fbbb39..fb5a16abb 100644
--- a/qt-ui/preferences.ui
+++ b/qt-ui/preferences.ui
@@ -772,6 +772,17 @@
</item>
</layout>
</item>
+ <item>
+ <layout class="QHBoxLayout" name="horizontalLayout_11c">
+ <item>
+ <widget class="QCheckBox" name="display_unused_tanks">
+ <property name="text">
+ <string>unused tanks</string>
+ </property>
+ </widget>
+ </item>
+ </layout>
+ </item>
</layout>
</widget>
</item>
diff --git a/subsurfacestartup.c b/subsurfacestartup.c
index 39da8e47c..0640333d0 100644
--- a/subsurfacestartup.c
+++ b/subsurfacestartup.c
@@ -29,6 +29,7 @@ struct preferences default_prefs = {
.font_size = 14.0,
.display_invalid_dives = FALSE,
.show_sac = FALSE,
+ .display_unused_tanks = FALSE
};
struct units *get_units()