diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2011-09-16 15:45:14 -0700 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2011-09-16 15:45:14 -0700 |
commit | 89fe2c723f10649d2d98a88b385bd4733e5acbc4 (patch) | |
tree | 5f005b1e30a8814d92ffc76986a34e341f210230 | |
parent | ff0a601cc300f11a3e5a31236cb9a884ad82ceec (diff) | |
download | subsurface-89fe2c723f10649d2d98a88b385bd4733e5acbc4.tar.gz |
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 <dirk@hohndel.org>
-rw-r--r-- | dive.h | 2 | ||||
-rw-r--r-- | info.c | 12 | ||||
-rw-r--r-- | profile.c | 24 |
3 files changed, 30 insertions, 8 deletions
@@ -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 */ @@ -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), "<span font=\"8\">%s</span>",buffer); + gtk_label_set_markup(GTK_LABEL(airconsumption), markup); +} + static GtkEntry *text_entry(GtkWidget *box, const char *label) { GtkWidget *entry; @@ -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) |