diff --git a/gtk-gui.c b/gtk-gui.c index f241fd313..2b9068681 100644 --- a/gtk-gui.c +++ b/gtk-gui.c @@ -1021,6 +1021,13 @@ static void toggle_zoom(GtkWidget *w, gpointer data) repaint_dive(); } +static void prev_dc(GtkWidget *w, gpointer data) +{ + dc_number--; + /* If the dc number underflows, we'll "wrap around" and use the last dc */ + repaint_dive(); +} + static void next_dc(GtkWidget *w, gpointer data) { dc_number++; @@ -1053,7 +1060,8 @@ static GtkActionEntry menu_items[] = { { "ViewProfile", NULL, N_("Profile"), CTRLCHAR "2", NULL, G_CALLBACK(view_profile) }, { "ViewInfo", NULL, N_("Info"), CTRLCHAR "3", NULL, G_CALLBACK(view_info) }, { "ViewThree", NULL, N_("Three"), CTRLCHAR "4", NULL, G_CALLBACK(view_three) }, - { "NextDC", NULL, N_("Next DC"), CTRLCHAR "C", NULL, G_CALLBACK(next_dc) }, + { "PrevDC", NULL, N_("Prev DC"), NULL, NULL, G_CALLBACK(prev_dc) }, + { "NextDC", NULL, N_("Next DC"), NULL, NULL, G_CALLBACK(next_dc) }, }; static gint nmenu_items = sizeof (menu_items) / sizeof (menu_items[0]); @@ -1095,6 +1103,7 @@ static const gchar* ui_string = " \ \ \ \ + \ \ \ \ @@ -1142,6 +1151,12 @@ static gboolean on_key_press(GtkWidget *w, GdkEventKey *event, GtkWidget *diveli case GDK_KEY_Down: select_next_dive(); return TRUE; + case GDK_KEY_Left: + prev_dc(NULL, NULL); + return TRUE; + case GDK_KEY_Right: + next_dc(NULL, NULL); + return TRUE; } return FALSE; } diff --git a/profile.c b/profile.c index 0962f9ca8..dea1ad6ee 100644 --- a/profile.c +++ b/profile.c @@ -1800,11 +1800,24 @@ static void plot_set_scale(scale_mode_t scale) } } +/* make sure you pass this the FIRST dc - it just walks the list */ +static int nr_dcs(struct divecomputer *main) +{ + int i = 1; + struct divecomputer *dc = main; + + while ((dc = dc->next) != NULL) + i++; + return i; +} + static struct divecomputer *select_dc(struct divecomputer *main) { int i = dc_number; struct divecomputer *dc = main; + while (i < 0) + i += nr_dcs(main); do { if (--i < 0) return dc;