summaryrefslogtreecommitdiffstats
path: root/info.c
diff options
context:
space:
mode:
authorGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-19 12:39:35 -0700
committerGravatar Linus Torvalds <torvalds@linux-foundation.org>2011-09-19 12:39:35 -0700
commitfefcbf125e89735d748307d0506938e4d4105321 (patch)
tree0dde48c32134409581b30e2313fadead9e113508 /info.c
parent96005d20ea03107ea8ec065ff7fdd9dd134c521d (diff)
downloadsubsurface-fefcbf125e89735d748307d0506938e4d4105321.tar.gz
Remove dive info frame
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>
Diffstat (limited to 'info.c')
-rw-r--r--info.c233
1 files changed, 7 insertions, 226 deletions
diff --git a/info.c b/info.c
index 9ca385796..3c8415cb3 100644
--- 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;
}