summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gtk-gui.c17
-rw-r--r--profile.c13
2 files changed, 29 insertions, 1 deletions
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 = " \
<menuitem name=\"Profile\" action=\"ViewProfile\" /> \
<menuitem name=\"Info\" action=\"ViewInfo\" /> \
<menuitem name=\"Paned\" action=\"ViewThree\" /> \
+ <menuitem name=\"PrevDC\" action=\"PrevDC\" /> \
<menuitem name=\"NextDC\" action=\"NextDC\" /> \
</menu> \
</menu> \
@@ -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;