diff options
-rw-r--r-- | display-gtk.h | 2 | ||||
-rw-r--r-- | divelist.c | 4 | ||||
-rw-r--r-- | info.c | 56 |
3 files changed, 42 insertions, 20 deletions
diff --git a/display-gtk.h b/display-gtk.h index 335cf4962..fb7eaf254 100644 --- a/display-gtk.h +++ b/display-gtk.h @@ -52,7 +52,7 @@ enum { MATCH_AFTER } found_string_entry; -extern GtkWidget *create_date_time_widget(struct tm *time, GtkWidget **cal, GtkWidget **h, GtkWidget **m); +extern GtkWidget *create_date_time_widget(struct tm *time, GtkWidget **cal, GtkWidget **h, GtkWidget **m, GtkWidget **timehbox); extern void add_string_list_entry(const char *string, GtkListStore *list); extern int match_list(GtkListStore *list, const char *string); diff --git a/divelist.c b/divelist.c index 1c020afe4..4fa817d0a 100644 --- a/divelist.c +++ b/divelist.c @@ -1537,7 +1537,7 @@ static void edit_dive_from_path_cb(GtkWidget *menuitem, GtkTreePath *path) static void edit_dive_when_cb(GtkWidget *menuitem, struct dive *dive) { - GtkWidget *dialog, *cal, *h, *m; + GtkWidget *dialog, *cal, *h, *m, *timehbox; timestamp_t when; guint yval, mval, dval; @@ -1549,7 +1549,7 @@ static void edit_dive_when_cb(GtkWidget *menuitem, struct dive *dive) when = dive->when; utc_mkdate(when, &tm); - dialog = create_date_time_widget(&tm, &cal, &h, &m); + dialog = create_date_time_widget(&tm, &cal, &h, &m, &timehbox); gtk_widget_show_all(dialog); success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT; @@ -1095,7 +1095,11 @@ static GtkWidget *frame_box(GtkWidget *vbox, const char *fmt, ...) return hbox; } -GtkWidget *create_date_time_widget(struct tm *time, GtkWidget **cal, GtkWidget **h, GtkWidget **m) +/* returns the dialog plus pointers to the calendar, hour and minute widget + * plus the hbox that holds the time entry (in case the caller wants to put + * a duration entry widget next to the time entry widget */ +GtkWidget *create_date_time_widget(struct tm *time, GtkWidget **cal, GtkWidget **h, + GtkWidget **m, GtkWidget **timehbox) { GtkWidget *dialog; GtkWidget *hbox, *vbox; @@ -1116,12 +1120,13 @@ GtkWidget *create_date_time_widget(struct tm *time, GtkWidget **cal, GtkWidget * gtk_box_pack_start(GTK_BOX(hbox), *cal, FALSE, TRUE, 0); /* Time hbox */ - hbox = frame_box(vbox, _("Time")); + *timehbox = gtk_hbox_new(TRUE, 3); + gtk_box_pack_start(GTK_BOX(vbox), *timehbox, FALSE, FALSE, 0); + hbox = frame_box(*timehbox, _("Time")); *h = gtk_spin_button_new_with_range (0.0, 23.0, 1.0); *m = gtk_spin_button_new_with_range (0.0, 59.0, 1.0); - gtk_calendar_select_month(GTK_CALENDAR(*cal), time->tm_mon, time->tm_year + 1900); gtk_calendar_select_day(GTK_CALENDAR(*cal), time->tm_mday); gtk_spin_button_set_value(GTK_SPIN_BUTTON(*h), time->tm_hour); @@ -1138,16 +1143,28 @@ GtkWidget *create_date_time_widget(struct tm *time, GtkWidget **cal, GtkWidget * return dialog; } +static int mm_from_spinbutton(GtkWidget *depth) +{ + int result; + double val = gtk_spin_button_get_value(GTK_SPIN_BUTTON(depth)); + if (prefs.units.length == FEET) { + result = feet_to_mm(val); + } else { + result = val * 1000 + 0.5; + } + return result; +} + static timestamp_t dive_time_widget(struct dive *dive) { GtkWidget *dialog; GtkWidget *cal, *vbox, *hbox, *box; GtkWidget *h, *m; - GtkWidget *duration, *depth; + GtkWidget *duration, *depth, *avgdepth; guint yval, mval, dval; struct tm tm, *time; int success; - double depthinterval, val; + double depthinterval; /* * If we have a dive selected, 'add dive' will default @@ -1167,18 +1184,19 @@ static timestamp_t dive_time_widget(struct dive *dive) now = tv.tv_sec; time = localtime(&now); } - dialog = create_date_time_widget(time, &cal, &h, &m); + dialog = create_date_time_widget(time, &cal, &h, &m, &hbox); vbox = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); - hbox = gtk_hbox_new(TRUE, 3); - gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); - /* Duration hbox */ + /* Duration box */ box = frame_box(hbox, _("Duration (min)")); duration = gtk_spin_button_new_with_range (0.0, 1000.0, 1.0); gtk_box_pack_end(GTK_BOX(box), duration, FALSE, FALSE, 0); + hbox = gtk_hbox_new(TRUE, 3); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + /* Depth box */ - box = frame_box(hbox, _("Depth (%s):"), prefs.units.length == FEET ? _("ft") : _("m")); + box = frame_box(hbox, _("Max Depth (%s):"), prefs.units.length == FEET ? _("ft") : _("m")); if (prefs.units.length == FEET) { depthinterval = 1.0; } else { @@ -1187,6 +1205,15 @@ static timestamp_t dive_time_widget(struct dive *dive) depth = gtk_spin_button_new_with_range (0.0, 1000.0, depthinterval); gtk_box_pack_end(GTK_BOX(box), depth, FALSE, FALSE, 0); + box = frame_box(hbox, _("Avg Depth (%s):"), prefs.units.length == FEET ? _("ft") : _("m")); + if (prefs.units.length == FEET) { + depthinterval = 1.0; + } else { + depthinterval = 0.1; + } + avgdepth = gtk_spin_button_new_with_range (0.0, 1000.0, depthinterval); + gtk_box_pack_end(GTK_BOX(box), avgdepth, FALSE, FALSE, 0); + /* All done, show it and wait for editing */ gtk_widget_show_all(dialog); success = gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT; @@ -1204,13 +1231,8 @@ static timestamp_t dive_time_widget(struct dive *dive) tm.tm_hour = gtk_spin_button_get_value(GTK_SPIN_BUTTON(h)); tm.tm_min = gtk_spin_button_get_value(GTK_SPIN_BUTTON(m)); - val = gtk_spin_button_get_value(GTK_SPIN_BUTTON(depth)); - if (prefs.units.length == FEET) { - dive->dc.maxdepth.mm = feet_to_mm(val); - } else { - dive->dc.maxdepth.mm = val * 1000 + 0.5; - } - + dive->dc.maxdepth.mm = mm_from_spinbutton(depth); + dive->dc.meandepth.mm = mm_from_spinbutton(avgdepth); dive->dc.duration.seconds = gtk_spin_button_get_value(GTK_SPIN_BUTTON(duration))*60; gtk_widget_destroy(dialog); |