summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2011-09-16 15:45:14 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2011-09-16 15:45:14 -0700
commit89fe2c723f10649d2d98a88b385bd4733e5acbc4 (patch)
tree5f005b1e30a8814d92ffc76986a34e341f210230
parentff0a601cc300f11a3e5a31236cb9a884ad82ceec (diff)
downloadsubsurface-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.h2
-rw-r--r--info.c12
-rw-r--r--profile.c24
3 files changed, 30 insertions, 8 deletions
diff --git a/dive.h b/dive.h
index abfd95174..6c5dbcc23 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 e9ecc9f50..d303a1137 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), "<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;
diff --git a/profile.c b/profile.c
index 7cad699ce..b2679c5d5 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)