]> git.tdb.fi Git - ext/subsurface.git/commitdiff
Remove dive info frame
authorLinus Torvalds <torvalds@linux-foundation.org>
Mon, 19 Sep 2011 19:39:35 +0000 (12:39 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Mon, 19 Sep 2011 19:39:35 +0000 (12:39 -0700)
It has always been problematic, and I've been moving things in and out
of it.

And it just isn't a very powerful widget.  You can't *do* anything with
it.  The information it shows you may be useful, but the core stuff
already shows up in the dive list.

And the dive list is actually a much superior widget over that static
dive info frame.  The information that shows up in the dive list can be
sorted by column, for example.

So when we show temperatures or SAC numbers in the dive info frame,
that's actually a very bad place to show them: we would be much better
off showing it in the dive list, and then we could sort by SAC or by
temperature.

In other words: just remove the thing.  Instead, plan to extend the dive
list to contain all the information.  That will probably mean that we
need to change the current pane widget to be a vertical pane, rather
than a horizontal one, but what's wrong with that?

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

diff --git a/info.c b/info.c
index 9ca385796298ccc85a46243aa0806eebbac4f7bc..3c8415cb36a7283e596aa970428e857ec03aa0d1 100644 (file)
--- a/info.c
+++ b/info.c
@@ -7,24 +7,11 @@
 #include "display.h"
 #include "divelist.h"
 
-static GtkWidget *info_frame;
-static GtkWidget *depth, *duration, *temperature, *airconsumption;
 static GtkEntry *location, *buddy, *divemaster;
 static GtkTextBuffer *notes;
 static int location_changed = 1, notes_changed = 1;
 static int divemaster_changed = 1, buddy_changed = 1;
 
-#define EMPTY_AIRCONSUMPTION " \n "
-#define AIRCON_WIDTH 20
-
-static const char *weekday(int wday)
-{
-       static const char wday_array[7][4] = {
-               "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
-       };
-       return wday_array[wday];
-}
-
 static char *get_text(GtkTextBuffer *buffer)
 {
        GtkTextIter start;
@@ -35,86 +22,6 @@ static char *get_text(GtkTextBuffer *buffer)
        return gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
 }
 
-void update_air_info(char *buffer)
-{
-       char markup[120];
-       
-       if (! buffer)
-               buffer = EMPTY_AIRCONSUMPTION;
-       snprintf(markup, sizeof(markup), "<span font=\"8\">%s</span>",buffer);
-       gtk_label_set_markup(GTK_LABEL(airconsumption), markup);
-}
-
-/*
- * Return air usage (in liters).
- */
-static double calculate_airuse(struct dive *dive)
-{
-       double airuse = 0;
-       int i;
-
-       for (i = 0; i < MAX_CYLINDERS; i++) {
-               cylinder_t *cyl = dive->cylinder + i;
-               int size = cyl->type.size.mliter;
-               double kilo_atm;
-
-               if (!size)
-                       continue;
-
-               kilo_atm = (cyl->start.mbar - cyl->end.mbar) / 1013250.0;
-
-               /* Liters of air at 1 atm == milliliters at 1k atm*/
-               airuse += kilo_atm * size;
-       }
-       return airuse;
-}
-
-static void update_air_info_frame(struct dive *dive)
-{
-       const double liters_per_cuft = 28.317;
-       const char *unit, *format, *desc;
-       double airuse;
-       char buffer1[80];
-       char buffer2[80];
-       int len;
-
-       airuse = calculate_airuse(dive);
-       if (!airuse) {
-               update_air_info(NULL);
-               return;
-       }
-       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;
-       }
-       len = snprintf(buffer1, sizeof(buffer1), format, airuse, unit);
-       if (dive->duration.seconds) {
-               double pressure = 1 + (dive->meandepth.mm / 10000.0);
-               double sac = airuse / pressure * 60 / dive->duration.seconds;
-               snprintf(buffer1+len, sizeof(buffer1)-len, 
-                               "\nSAC: %4.2f %s/min", sac, unit);
-       }
-       len = 0;
-       desc = dive->cylinder[0].type.description;
-       if (desc || dive->cylinder[0].gasmix.o2.permille) {
-               int o2 = dive->cylinder[0].gasmix.o2.permille / 10;
-               if (!desc)
-                       desc = "";
-               if (!o2)
-                       o2 = 21;
-               len = snprintf(buffer2, sizeof(buffer2), "%s (%d%%): used ", desc, o2);
-       }
-       snprintf(buffer2+len, sizeof(buffer2)-len, buffer1); 
-       update_air_info(buffer2);
-}
-
 void flush_dive_info_changes(struct dive *dive)
 {
        if (!dive)
@@ -141,138 +48,15 @@ void flush_dive_info_changes(struct dive *dive)
        }
 }
 
-void show_dive_info(struct dive *dive)
-{
-       struct tm *tm;
-       char buffer[80];
-       char *text;
+#define SET_TEXT_ENTRY(x) \
+       gtk_entry_set_text(x, dive && dive->x ? dive->x : "")
 
-       if (!dive) {
-               gtk_label_set_text(GTK_LABEL(depth), "");
-               gtk_label_set_text(GTK_LABEL(duration), "");
-               gtk_label_set_text(GTK_LABEL(airconsumption), EMPTY_AIRCONSUMPTION);
-               gtk_label_set_width_chars(GTK_LABEL(airconsumption), AIRCON_WIDTH);
-               return;
-       }
-       /* dive number and location (or lacking that, the date) go in the window title */
-       tm = gmtime(&dive->when);
-       text = dive->location;
-       if (!text)
-               text = "";
-       if (*text) {
-               snprintf(buffer, sizeof(buffer), "Dive #%d - %s", dive->number, text);
-       } else {
-               snprintf(buffer, sizeof(buffer), "Dive #%d - %s %02d/%02d/%04d at %d:%02d",
-                       dive->number,
-                       weekday(tm->tm_wday),
-                       tm->tm_mon+1, tm->tm_mday,
-                       tm->tm_year+1900,
-                       tm->tm_hour, tm->tm_min);
-       }
-       text = buffer;
-       if (!dive->number)
-               text += 10;     /* Skip the "Dive #0 - " part */
-       gtk_window_set_title(GTK_WINDOW(main_window), text);
-
-       /* the date goes in the frame label */
-       snprintf(buffer, sizeof(buffer), "%s %02d/%02d/%04d at %d:%02d",
-               weekday(tm->tm_wday),
-               tm->tm_mon+1, tm->tm_mday,
-               tm->tm_year+1900,
-               tm->tm_hour, tm->tm_min);
-       gtk_frame_set_label(GTK_FRAME(info_frame), buffer);
-
-
-       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),
-               "%d min",
-               dive->duration.seconds / 60);
-       gtk_label_set_text(GTK_LABEL(duration), buffer);
-
-       *buffer = 0;
-       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 ? : "";
-       gtk_entry_set_text(location, text);
-
-       text = dive->divemaster ? : "";
-       gtk_entry_set_text(divemaster, text);
-
-       text = dive->buddy ? : "";
-       gtk_entry_set_text(buddy, text);
-
-       text = dive->notes ? : "";
-       gtk_text_buffer_set_text(notes, text, -1);
-
-       update_air_info_frame(dive);
-}
-
-static GtkWidget *info_label(GtkWidget *box, const char *str, GtkJustification jtype)
+void show_dive_info(struct dive *dive)
 {
-       GtkWidget *label = gtk_label_new(str);
-       gtk_label_set_justify(GTK_LABEL(label), jtype);
-       gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 0);
-       return label;
-}
-
-GtkWidget *dive_info_frame(void)
-{
-       GtkWidget *frame;
-       GtkWidget *hbox;
-       GtkWidget *vbox;
-
-       frame = gtk_frame_new("Dive info");
-       info_frame = frame;
-       gtk_widget_show(frame);
-
-       vbox = gtk_vbox_new(FALSE, 6);
-       gtk_container_set_border_width(GTK_CONTAINER(vbox), 3);
-       gtk_container_add(GTK_CONTAINER(frame), vbox);
-
-       hbox = gtk_hbox_new(FALSE, 16);
-       gtk_container_set_border_width(GTK_CONTAINER(hbox), 3);
-       gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
-
-       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);
-       gtk_misc_set_alignment(GTK_MISC(airconsumption), 1.0, 0.5);
-       gtk_label_set_width_chars(GTK_LABEL(airconsumption), AIRCON_WIDTH);
-
-       return frame;
+       SET_TEXT_ENTRY(divemaster);
+       SET_TEXT_ENTRY(buddy);
+       SET_TEXT_ENTRY(location);
+       gtk_text_buffer_set_text(notes, dive && dive->notes ? dive->notes : "", -1);
 }
 
 static GtkEntry *text_entry(GtkWidget *box, const char *label)
@@ -330,8 +114,5 @@ GtkWidget *extended_dive_info_widget(void)
        buddy = text_entry(hbox, "Buddy");
 
        notes = text_view(vbox, "Notes");
-
-       /* Add extended info here: name, description, yadda yadda */
-       show_dive_info(current_dive);
        return vbox;
 }
diff --git a/main.c b/main.c
index e6f58ce5bf6325dbc78792d32ccb9f64cbcb2c63..ac043fd39d912527d6540a9b173cc823845caf45 100644 (file)
--- a/main.c
+++ b/main.c
@@ -422,7 +422,6 @@ int main(int argc, char **argv)
        GtkWidget *paned;
        GtkWidget *info_box;
        GtkWidget *notebook;
-       GtkWidget *frame;
        GtkWidget *dive_info;
        GtkWidget *equipment;
        GtkWidget *menubar;
@@ -469,10 +468,6 @@ int main(int argc, char **argv)
        info_box = gtk_vbox_new(FALSE, 6);
        gtk_paned_add2(GTK_PANED(paned), info_box);
 
-       /* Frame for minimal dive info */
-       frame = dive_info_frame();
-       gtk_box_pack_start(GTK_BOX(info_box), frame, FALSE, TRUE, 6);
-
        /* Notebook for dive info vs profile vs .. */
        notebook = gtk_notebook_new();
        g_signal_connect(notebook, "switch-page", G_CALLBACK(switch_page), NULL);