From: Dirk Hohndel Date: Fri, 16 Sep 2011 22:45:14 +0000 (-0700) Subject: Show tank / nitrox / air consumption information in the info_frame X-Git-Url: http://git.tdb.fi/?p=ext%2Fsubsurface.git;a=commitdiff_plain;h=89fe2c723f10649d2d98a88b385bd4733e5acbc4 Show tank / nitrox / air consumption information in the info_frame Even though we go down to an 8pt font the info_frame changes size when the air info is added. I don't like this but want to see how Linus would like this resolved before going overboard. Minor tweaks to the formating (we don't need two decimals when printing the liters of air consumed). This patch does NOT remove the plot of the air information in the profile graph. I think we want to remove that once we like the text where it is, but I wanted to do one thing at a time. Signed-off-by: Dirk Hohndel --- diff --git a/dive.h b/dive.h index abfd951..6c5dbcc 100644 --- a/dive.h +++ b/dive.h @@ -207,6 +207,8 @@ extern void report_dives(void); extern struct dive *fixup_dive(struct dive *dive); extern struct dive *try_to_merge(struct dive *a, struct dive *b); +extern void update_air_info(char *buffer); + #define DIVE_ERROR_PARSE 1 #endif /* DIVE_H */ diff --git a/info.c b/info.c index e9ecc9f..d303a11 100644 --- a/info.c +++ b/info.c @@ -8,7 +8,7 @@ #include "divelist.h" static GtkWidget *info_frame; -static GtkWidget *depth, *duration, *temperature; +static GtkWidget *depth, *duration, *temperature, *airconsumption; static GtkEntry *location, *buddy, *divemaster; static GtkTextBuffer *notes; static int location_changed = 1, notes_changed = 1; @@ -67,6 +67,7 @@ void show_dive_info(struct dive *dive) if (!dive) { gtk_label_set_text(GTK_LABEL(depth), ""); gtk_label_set_text(GTK_LABEL(duration), ""); + gtk_label_set_text(GTK_LABEL(airconsumption), ""); return; } /* dive number and location (or lacking that, the date) go in the window title */ @@ -181,10 +182,19 @@ GtkWidget *dive_info_frame(void) depth = info_label(hbox, "depth", GTK_JUSTIFY_RIGHT); duration = info_label(hbox, "duration", GTK_JUSTIFY_RIGHT); temperature = info_label(hbox, "temperature", GTK_JUSTIFY_RIGHT); + airconsumption = info_label(hbox, "air", GTK_JUSTIFY_RIGHT); return frame; } +void update_air_info(char *buffer) +{ + char markup[120]; + + snprintf(markup, sizeof(markup), "%s",buffer); + gtk_label_set_markup(GTK_LABEL(airconsumption), markup); +} + static GtkEntry *text_entry(GtkWidget *box, const char *label) { GtkWidget *entry; diff --git a/profile.c b/profile.c index 7cad699..b2679c5 100644 --- a/profile.c +++ b/profile.c @@ -456,33 +456,40 @@ static void plot_info(struct dive *dive, struct graphics_context *gc) { text_render_options_t tro = {10, 0.2, 1.0, 0.2, RIGHT, BOTTOM}; const double liters_per_cuft = 28.317; - const char *unit, *desc; + const char *unit, *format, *desc; double airuse; + char buffer1[80]; + char buffer2[80]; + int len; airuse = calculate_airuse(dive); - if (!airuse) + if (!airuse) { + update_air_info(""); return; - - /* I really need to start addign some unit setting thing */ + } switch (output_units.volume) { case LITER: unit = "l"; + format = "vol: %4.0f %s"; break; case CUFT: unit = "cuft"; + format = "vol: %4.2f %s"; airuse /= liters_per_cuft; break; } tro.vpos = -1.0; - plot_text(gc, &tro, 0.98, 0.98, "vol: %4.2f %s", airuse, unit); - + plot_text(gc, &tro, 0.98, 0.98, format, airuse, unit); + len = snprintf(buffer1, sizeof(buffer1), format, airuse, unit); tro.vpos = -2.2; if (dive->duration.seconds) { double pressure = 1 + (dive->meandepth.mm / 10000.0); double sac = airuse / pressure * 60 / dive->duration.seconds; plot_text(gc, &tro, 0.98, 0.98, "SAC: %4.2f %s/min", sac, unit); + snprintf(buffer1+len, sizeof(buffer1)-len, + "\nSAC: %4.2f %s/min", sac, unit); } - + len = 0; tro.vpos = -3.4; desc = dive->cylinder[0].type.description; if (desc || dive->cylinder[0].gasmix.o2.permille) { @@ -492,7 +499,10 @@ static void plot_info(struct dive *dive, struct graphics_context *gc) if (!o2) o2 = 21; plot_text(gc, &tro, 0.98, 0.98, "%s (%d%%)", desc, o2); + len = snprintf(buffer2, sizeof(buffer2), "%s (%d%%): used ", desc, o2); } + snprintf(buffer2+len, sizeof(buffer2)-len, buffer1); + update_air_info(buffer2); } static int mbar_to_PSI(int mbar)