]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Show tank / nitrox / air consumption information in the info_frame
authorDirk Hohndel <dirk@hohndel.org>
Fri, 16 Sep 2011 22:45:14 +0000 (15:45 -0700)
committerDirk Hohndel <dirk@hohndel.org>
Fri, 16 Sep 2011 22:45:14 +0000 (15:45 -0700)
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>
dive.h
info.c
profile.c

diff --git a/dive.h b/dive.h
index abfd95174f60c63ccbfd415e5bca2e98c5e57b2f..6c5dbcc23496cf0730bb3fc1b701b9f8f66e4a48 100644 (file)
--- 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 e9ecc9f503822920be82f86daa10c21d8ec9eafa..d303a11370bd6e8faff51c4a99f7da158fe4a8ed 100644 (file)
--- 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), "<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;
index 7cad699ceaae7a868d3126f1c8072cf1ebf97845..b2679c5d57b30f3eee228d1cc901a24604f0f4c5 100644 (file)
--- 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)