diff options
author | Robert C. Helling <helling@atdotde.de> | 2017-02-02 20:29:44 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2017-02-02 12:37:24 -0800 |
commit | 1d8662006cbb5edae941315e30ede381c23a817b (patch) | |
tree | 88ff6ec54d5e4ed4e29f3b93bea04292ef986e5f | |
parent | a031dbbbd8fbd8a913e517cf1bea5d61311bf266 (diff) | |
download | subsurface-1d8662006cbb5edae941315e30ede381c23a817b.tar.gz |
In statistics, ignore gas use of planned dives
When merged with real dives, those would double count otherwise.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
-rw-r--r-- | core/dive.c | 6 | ||||
-rw-r--r-- | core/dive.h | 2 | ||||
-rw-r--r-- | core/divelist.c | 2 | ||||
-rw-r--r-- | core/statistics.c | 8 | ||||
-rw-r--r-- | core/subsurface-qt/DiveObjectHelper.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/divelogexportdialog.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/maintab.cpp | 2 | ||||
-rw-r--r-- | qt-models/cylindermodel.cpp | 6 |
8 files changed, 16 insertions, 14 deletions
diff --git a/core/dive.c b/core/dive.c index 19a950482..b305df56d 100644 --- a/core/dive.c +++ b/core/dive.c @@ -582,7 +582,7 @@ void copy_cylinders(struct dive *s, struct dive *d, bool used_only) memset(&d->cylinder[i], 0, sizeof(cylinder_t)); } for (i = j = 0; i < MAX_CYLINDERS; i++) { - if (!used_only || is_cylinder_used(s, i)) { + if (!used_only || is_cylinder_used(s, i, false)) { d->cylinder[j].type = s->cylinder[i].type; d->cylinder[j].type.description = copy_string(s->cylinder[i].type.description); d->cylinder[j].gasmix = s->cylinder[i].gasmix; @@ -2050,10 +2050,10 @@ static void merge_cylinders(struct dive *res, struct dive *a, struct dive *b) } else { int j=0; for (i = 0; i < MAX_CYLINDERS && j < MAX_CYLINDERS; i++) { - if (is_cylinder_used(res, i)) + if (is_cylinder_used(res, i, false)) continue; - while (!is_cylinder_used(b, j) && j < MAX_CYLINDERS - 1) { + while (!is_cylinder_used(b, j, false) && j < MAX_CYLINDERS - 1) { mapping[j] = 0; ++j; } diff --git a/core/dive.h b/core/dive.h index c9d176920..47f2227e3 100644 --- a/core/dive.h +++ b/core/dive.h @@ -771,7 +771,7 @@ extern void copy_events(struct divecomputer *s, struct divecomputer *d); extern void free_events(struct event *ev); extern void copy_cylinders(struct dive *s, struct dive *d, bool used_only); extern void copy_samples(struct divecomputer *s, struct divecomputer *d); -extern bool is_cylinder_used(struct dive *dive, int idx); +extern bool is_cylinder_used(struct dive *dive, int idx, bool ignore_planned); extern void fill_default_cylinder(cylinder_t *cyl); extern void add_gas_switch_event(struct dive *dive, struct divecomputer *dc, int time, int idx); extern struct event *add_event(struct divecomputer *dc, unsigned int time, int type, int flags, int value, const char *name); diff --git a/core/divelist.c b/core/divelist.c index b28dd5ef3..096fc3359 100644 --- a/core/divelist.c +++ b/core/divelist.c @@ -119,7 +119,7 @@ void get_dive_gas(struct dive *dive, int *o2_p, int *he_p, int *o2max_p) int o2 = get_o2(&cyl->gasmix); int he = get_he(&cyl->gasmix); - if (!is_cylinder_used(dive, i)) + if (!is_cylinder_used(dive, i, false)) continue; if (cylinder_none(cyl)) continue; diff --git a/core/statistics.c b/core/statistics.c index 62a4d737f..6a0ff9f94 100644 --- a/core/statistics.c +++ b/core/statistics.c @@ -326,16 +326,18 @@ void get_selected_dives_text(char *buffer, size_t size) #define SOME_GAS 5000 // 5bar drop in cylinder pressure makes cylinder used -bool is_cylinder_used(struct dive *dive, int idx) +bool is_cylinder_used(struct dive *dive, int idx, bool ignore_plannned) { struct divecomputer *dc; bool firstGasExplicit = false; if (cylinder_none(&dive->cylinder[idx])) return false; - if ((dive->cylinder[idx].start.mbar - dive->cylinder[idx].end.mbar) > SOME_GAS) + if ((dive->cylinder[idx].start.mbar - dive->cylinder[idx].end.mbar) > SOME_GAS && !ignore_plannned) return true; for_each_dc(dive, dc) { + if (ignore_plannned && !strcmp(dc->model, "planned dive")) + continue; struct event *event = get_next_event(dc->events, "gaschange"); while (event) { if (dc->sample && (event->time.seconds == 0 || @@ -360,7 +362,7 @@ void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]) cylinder_t *cyl = &dive->cylinder[idx]; pressure_t start, end; - if (!is_cylinder_used(dive, idx)) + if (!is_cylinder_used(dive, idx, true)) continue; start = cyl->start.mbar ? cyl->start : cyl->sample_start; diff --git a/core/subsurface-qt/DiveObjectHelper.cpp b/core/subsurface-qt/DiveObjectHelper.cpp index 9814f9a6a..cd7c4abca 100644 --- a/core/subsurface-qt/DiveObjectHelper.cpp +++ b/core/subsurface-qt/DiveObjectHelper.cpp @@ -186,7 +186,7 @@ QString DiveObjectHelper::gas() const */ QString gas, gases; for (int i = 0; i < MAX_CYLINDERS; i++) { - if (!is_cylinder_used(m_dive, i)) + if (!is_cylinder_used(m_dive, i, false)) continue; gas = m_dive->cylinder[i].type.description; if (!gas.isEmpty()) diff --git a/desktop-widgets/divelogexportdialog.cpp b/desktop-widgets/divelogexportdialog.cpp index 7b315fcf0..8b7cac192 100644 --- a/desktop-widgets/divelogexportdialog.cpp +++ b/desktop-widgets/divelogexportdialog.cpp @@ -277,7 +277,7 @@ void DiveLogExportDialog::export_TeX(const char *filename, const bool selected_o int i; for (i = 0; i < MAX_CYLINDERS; i++) - if (is_cylinder_used(dive, i)) + if (is_cylinder_used(dive, i, false)) delta_p.mbar += dive->cylinder[i].start.mbar - dive->cylinder[i].end.mbar; if (need_pagebreak) diff --git a/desktop-widgets/maintab.cpp b/desktop-widgets/maintab.cpp index f6e5b7dc6..b8bdf44a7 100644 --- a/desktop-widgets/maintab.cpp +++ b/desktop-widgets/maintab.cpp @@ -594,7 +594,7 @@ void MainTab::updateDiveInfo(bool clear) gaslist = ""; SACs = ""; volumes = ""; separator = ""; for (int i = 0; i < MAX_CYLINDERS; i++) { - if (!is_cylinder_used(&displayed_dive, i)) + if (!is_cylinder_used(&displayed_dive, i, false)) continue; gaslist.append(separator); volumes.append(separator); SACs.append(separator); separator = "\n"; diff --git a/qt-models/cylindermodel.cpp b/qt-models/cylindermodel.cpp index fe63cf6f2..d5220a56e 100644 --- a/qt-models/cylindermodel.cpp +++ b/qt-models/cylindermodel.cpp @@ -451,7 +451,7 @@ void CylindersModel::updateDive() for (int i = 0; i < MAX_CYLINDERS; i++) { if (!cylinder_none(&displayed_dive.cylinder[i]) && (prefs.display_unused_tanks || - is_cylinder_used(&displayed_dive, i) || + is_cylinder_used(&displayed_dive, i, false) || displayed_dive.cylinder[i].manually_added)) rows = i + 1; } @@ -468,7 +468,7 @@ void CylindersModel::copyFromDive(dive *d) rows = 0; for (int i = 0; i < MAX_CYLINDERS; i++) { if (!cylinder_none(&d->cylinder[i]) && - (is_cylinder_used(d, i) || prefs.display_unused_tanks)) { + (is_cylinder_used(d, i, false) || prefs.display_unused_tanks)) { rows = i + 1; } } @@ -517,7 +517,7 @@ void CylindersModel::remove(const QModelIndex &index) ((DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING && DivePlannerPointsModel::instance()->tankInUse(index.row())) || (DivePlannerPointsModel::instance()->currentMode() == DivePlannerPointsModel::NOTHING && - is_cylinder_used(&displayed_dive, index.row())))) { + is_cylinder_used(&displayed_dive, index.row(), false)))) { emit warningMessage(TITLE_OR_TEXT( tr("Cylinder cannot be removed"), tr("This gas is in use. Only cylinders that are not used in the dive can be removed."))); |