]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Do output unit conversion in the dive info window too
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 7 Sep 2011 16:35:45 +0000 (09:35 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 7 Sep 2011 16:35:45 +0000 (09:35 -0700)
This should take care of it all, unless I missed some case.

Now we should just save the default units somewhere, and I should do the
divelist update much cleaner (instead of re-doing the divelist entirely,
it should just repaint it - now we lose the highlited dive etc).

Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
dive.h
info.c

diff --git a/dive.h b/dive.h
index ea8fceec1863dc41479d448912998f9a4156a642..15f082104b5c36219e5b1750343cfbf85286135c 100644 (file)
--- a/dive.h
+++ b/dive.h
@@ -95,7 +95,21 @@ static inline int to_C(temperature_t temp)
 {
        if (!temp.mkelvin)
                return 0;
-       return (temp.mkelvin - 273150) / 1000;
+       return (temp.mkelvin - 273150 + 499) / 1000;
+}
+
+static inline int to_F(temperature_t temp)
+{
+       if (!temp.mkelvin)
+               return 0;
+       return temp.mkelvin * 9 / 5000.0 - 459.670 + 0.5;
+}
+
+static inline int to_K(temperature_t temp)
+{
+       if (!temp.mkelvin)
+               return 0;
+       return (temp.mkelvin + 499)/1000;
 }
 
 static inline int to_PSI(pressure_t pressure)
diff --git a/info.c b/info.c
index 94dcd34858b11f687d8f8807e888a50254990fc8..b789d9fd8a6916923e29ccfa7069e69df46e9a7a 100644 (file)
--- a/info.c
+++ b/info.c
@@ -78,9 +78,18 @@ void update_dive_info(struct dive *dive)
                tm->tm_hour, tm->tm_min, tm->tm_sec);
        gtk_label_set_text(GTK_LABEL(divetime), buffer);
 
-       snprintf(buffer, sizeof(buffer),
-               "%d ft",
-               to_feet(dive->maxdepth));
+       switch (output_units.length) {
+       case METERS:
+               snprintf(buffer, sizeof(buffer),
+                       "%.1f m",
+                       dive->maxdepth.mm / 1000.0);
+               break;
+       case FEET:
+               snprintf(buffer, sizeof(buffer),
+                       "%d ft",
+                       to_feet(dive->maxdepth));
+               break;
+       }
        gtk_label_set_text(GTK_LABEL(depth), buffer);
 
        snprintf(buffer, sizeof(buffer),
@@ -89,10 +98,25 @@ void update_dive_info(struct dive *dive)
        gtk_label_set_text(GTK_LABEL(duration), buffer);
 
        *buffer = 0;
-       if (dive->watertemp.mkelvin)
-               snprintf(buffer, sizeof(buffer),
-                       "%d C",
-                       to_C(dive->watertemp));
+       if (dive->watertemp.mkelvin) {
+               switch (output_units.temperature) {
+               case CELSIUS:
+                       snprintf(buffer, sizeof(buffer),
+                               "%d C",
+                               to_C(dive->watertemp));
+                       break;
+               case FAHRENHEIT:
+                       snprintf(buffer, sizeof(buffer),
+                               "%d F",
+                               to_F(dive->watertemp));
+                       break;
+               case KELVIN:
+                       snprintf(buffer, sizeof(buffer),
+                               "%d K",
+                               to_K(dive->watertemp));
+                       break;
+               }
+       }
        gtk_label_set_text(GTK_LABEL(temperature), buffer);
 
        text = dive->location ? : "";