aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2017-02-02 20:29:44 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-02-02 12:37:24 -0800
commit1d8662006cbb5edae941315e30ede381c23a817b (patch)
tree88ff6ec54d5e4ed4e29f3b93bea04292ef986e5f
parenta031dbbbd8fbd8a913e517cf1bea5d61311bf266 (diff)
downloadsubsurface-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.c6
-rw-r--r--core/dive.h2
-rw-r--r--core/divelist.c2
-rw-r--r--core/statistics.c8
-rw-r--r--core/subsurface-qt/DiveObjectHelper.cpp2
-rw-r--r--desktop-widgets/divelogexportdialog.cpp2
-rw-r--r--desktop-widgets/maintab.cpp2
-rw-r--r--qt-models/cylindermodel.cpp6
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.")));