From eb027f2a4b83ed8eb127f0c736021556aa3952a0 Mon Sep 17 00:00:00 2001 From: Anton Lundin Date: Wed, 20 Nov 2013 00:29:32 +0100 Subject: Do per cylinder statistics This shows how much gas form each cylinder was used. I would like to add SAC to that list too but it became a mess trying to calculate average depth per cylinder. Design based on idea in #284 Signed-off-by: Anton Lundin Signed-off-by: Dirk Hohndel --- qt-ui/maintab.cpp | 7 ++++++- statistics.c | 19 +++++++++++-------- statistics.h | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 763c61ec5..3398c6290 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -350,7 +350,12 @@ void MainTab::updateDiveInfo(int dive) ui.otuText->setText(QString("%1").arg(d->otu)); ui.waterTemperatureText->setText(get_temperature_string(d->watertemp, TRUE)); ui.airTemperatureText->setText(get_temperature_string(d->airtemp, TRUE)); - ui.gasUsedText->setText(get_volume_string(get_gas_used(d), TRUE)); + volume_t gases[MAX_CYLINDERS] = { 0 }; + get_gas_used(d, gases); + QString volumes = get_volume_string(gases[0], TRUE); + for(int i=1; i < MAX_CYLINDERS && gases[i].mliter != 0; i++) + volumes.append("\n" + get_volume_string(gases[i], TRUE)); + ui.gasUsedText->setText(volumes); ui.oxygenHeliumText->setText(get_gaslist(d)); ui.dateText->setText(get_short_dive_date_string(d->when)); ui.diveTimeText->setText(QString::number((int)((d->duration.seconds + 30) / 60))); diff --git a/statistics.c b/statistics.c index a151aee27..8284dda8f 100644 --- a/statistics.c +++ b/statistics.c @@ -268,7 +268,7 @@ void get_selected_dives_text(char *buffer, int size) } } -volume_t get_gas_used(struct dive *dive) +void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]) { int idx; volume_t gas_used = { 0 }; @@ -279,9 +279,8 @@ volume_t get_gas_used(struct dive *dive) start = cyl->start.mbar ? cyl->start : cyl->sample_start; end = cyl->end.mbar ? cyl->end : cyl->sample_end; if (start.mbar && end.mbar) - gas_used.mliter += gas_volume(cyl, start) - gas_volume(cyl, end); + gases[idx].mliter = gas_volume(cyl, start) - gas_volume(cyl, end); } - return gas_used; } bool is_gas_used(struct dive *dive, int idx) @@ -347,15 +346,19 @@ char *get_gaslist(struct dive *dive) cyl = &dive->cylinder[idx]; o2 = get_o2(&cyl->gasmix); he = get_he(&cyl->gasmix); + if (offset > 0) { + strncpy(buf + offset, "\n", MAXBUF - offset); + offset = strlen(buf); + } if (is_air(o2, he)) - snprintf(buf + offset, MAXBUF - offset, (offset > 0) ? ", %s" : "%s", translate("gettextFromC","air")); + strncpy(buf + offset, translate("gettextFromC","air"), MAXBUF - offset); else if (he == 0) - snprintf(buf + offset, MAXBUF - offset, (offset > 0) ? translate("gettextFromC",", EAN%d") : translate("gettextFromC","EAN%d"), - (o2 + 5) / 10); + snprintf(buf + offset, MAXBUF - offset, + translate("gettextFromC","EAN%d"), (o2 + 5) / 10); else - snprintf(buf + offset, MAXBUF - offset, (offset > 0) ? ", %d/%d" : "%d/%d", - (o2 + 5) / 10, (he + 5) / 10); + snprintf(buf + offset, MAXBUF - offset, + "%d/%d", (o2 + 5) / 10, (he + 5) / 10); offset = strlen(buf); } if (*buf == '\0') diff --git a/statistics.h b/statistics.h index d5d373df0..47fd24d3c 100644 --- a/statistics.h +++ b/statistics.h @@ -40,7 +40,7 @@ extern char *get_time_string(int seconds, int maxdays); extern char *get_minutes(int seconds); extern void process_all_dives(struct dive *dive, struct dive **prev_dive); extern void get_selected_dives_text(char *buffer, int size); -extern volume_t get_gas_used(struct dive *dive); +extern void get_gas_used(struct dive *dive, volume_t gases[MAX_CYLINDERS]); extern char *get_gaslist(struct dive *dive); extern void process_selected_dives(void); -- cgit v1.2.3-70-g09d2