]> git.street.me.uk Git - andy/viking.git/commitdiff
Replace 'Add Track' tool with 'Create Route' tool.
authorRob Norris <rw_norris@hotmail.com>
Sun, 21 Oct 2012 23:01:25 +0000 (00:01 +0100)
committerRob Norris <rw_norris@hotmail.com>
Sat, 5 Jan 2013 12:47:39 +0000 (12:47 +0000)
Create Route is essentially the same as the Create Track, but enables creating a route instead.
Rename and update appropriate icons.

Make a common function to deal with creating new points.
Enable switching between these two create tools.

src/dialog.c
src/dialog.h
src/icons/Makefile.am
src/icons/begintr_18.png [deleted file]
src/icons/cursor_begintr.png [deleted file]
src/icons/cursor_new_route.png [new file with mode: 0644]
src/icons/vik_new_route_18.png [new file with mode: 0644]
src/viktrwlayer.c
src/vikwindow.c

index c5e624dbe47a41ad9cb25bd6dc13d138acf8f302..933c28d3ad6a60f7691ca77e473d81ff51097ba5 100644 (file)
@@ -530,9 +530,9 @@ GList *a_dialog_select_from_list ( GtkWindow *parent, GList *names, gboolean mul
   return NULL;
 }
 
-gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *default_name )
+gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *default_name, gboolean is_route )
 {
-  GtkWidget *dialog = gtk_dialog_new_with_buttons (_("Add Track"),
+  GtkWidget *dialog = gtk_dialog_new_with_buttons ( is_route ? _("Add Route") : _("Add Track"),
                                                   parent,
                                                   GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT,
                                                   GTK_STOCK_CANCEL,
@@ -540,7 +540,7 @@ gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *defaul
                                                   GTK_STOCK_OK,
                                                   GTK_RESPONSE_ACCEPT,
                                                   NULL);
-  GtkWidget *label = gtk_label_new ( _("Track Name:") );
+  GtkWidget *label = gtk_label_new ( is_route ? _("Route Name:") : _("Track Name:") );
   GtkWidget *entry = gtk_entry_new ();
 
   if (default_name)
index d5ff83f6e16382b04277b76c1b2adbfd01e647db..d6af9a4ab32f76b18f8f6c8081dce929659bdda5 100644 (file)
@@ -59,7 +59,7 @@ gboolean a_dialog_goto_utm ( GtkWindow *parent, struct UTM *utm, const struct UT
  */
 gchar *a_dialog_waypoint ( GtkWindow *parent, gchar *default_name, VikWaypoint *wp, VikCoordMode coord_mode, gboolean is_new, gboolean *updated );
 
-gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *default_name );
+gchar *a_dialog_new_track ( GtkWindow *parent, GHashTable *tracks, gchar *default_name, gboolean is_route );
 
 gboolean a_dialog_yes_or_no ( GtkWindow *parent, const gchar *message, const gchar *extra );
 gboolean a_dialog_custom_zoom ( GtkWindow *parent, gdouble *xmpp, gdouble *ympp );
index 26c4f785fad04e245add10c3fc10f2c1b2eeee2a..a0c84c09b4e0d8a2d25b819a256ac236cb71d03f 100644 (file)
@@ -203,7 +203,7 @@ ICONS = \
        viking.png \
        bing_maps.png \
        addtr_18.png \
-       begintr_18.png \
+       vik_new_route_18.png \
        addwp_18.png \
        edtr_18.png \
        edwp_18.png \
@@ -228,7 +228,7 @@ ICONS = \
 
 CURSORS = \
        cursor_addtr.png \
-       cursor_begintr.png \
+       cursor_new_route.png \
        cursor_edtr.png \
        cursor_geozoom.png \
        cursor_ruler.png \
diff --git a/src/icons/begintr_18.png b/src/icons/begintr_18.png
deleted file mode 100644 (file)
index b3e0987..0000000
Binary files a/src/icons/begintr_18.png and /dev/null differ
diff --git a/src/icons/cursor_begintr.png b/src/icons/cursor_begintr.png
deleted file mode 100644 (file)
index a04bc21..0000000
Binary files a/src/icons/cursor_begintr.png and /dev/null differ
diff --git a/src/icons/cursor_new_route.png b/src/icons/cursor_new_route.png
new file mode 100644 (file)
index 0000000..826b61c
Binary files /dev/null and b/src/icons/cursor_new_route.png differ
diff --git a/src/icons/vik_new_route_18.png b/src/icons/vik_new_route_18.png
new file mode 100644 (file)
index 0000000..b3e0987
Binary files /dev/null and b/src/icons/vik_new_route_18.png differ
index 170a23a122f2f99bfabec4abbe5d2c90aa224764..0d2044435ea42c98e7cfc6a9cd4dc19bf818efae 100644 (file)
@@ -334,8 +334,8 @@ static gpointer tool_edit_waypoint_create ( VikWindow *vw, VikViewport *vvp);
 static gboolean tool_edit_waypoint_click ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data );
 static gboolean tool_edit_waypoint_move ( VikTrwLayer *vtl, GdkEventMotion *event, gpointer data );
 static gboolean tool_edit_waypoint_release ( VikTrwLayer *vtl, GdkEventButton *event, gpointer data );
-static gpointer tool_begin_track_create ( VikWindow *vw, VikViewport *vvp);
-static gboolean tool_begin_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); 
+static gpointer tool_new_route_create ( VikWindow *vw, VikViewport *vvp);
+static gboolean tool_new_route_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp );
 static gpointer tool_new_track_create ( VikWindow *vw, VikViewport *vvp);
 static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp ); 
 static VikLayerToolFuncStatus tool_new_track_move ( VikTrwLayer *vtl, GdkEventMotion *event, VikViewport *vvp ); 
@@ -384,11 +384,14 @@ static VikToolInterface trw_layer_tools[] = {
     TRUE, // Still need to handle clicks when in PAN mode to disable the potential trackpoint drawing
     GDK_CURSOR_IS_PIXMAP, &cursor_addtr_pixbuf },
 
-  { { "BeginTrack", "vik-icon-Begin Track", N_("_Begin Track"), "<control><shift>B", N_("Begin Track"), 0 },
-    (VikToolConstructorFunc) tool_begin_track_create,       NULL, NULL, NULL,
-    (VikToolMouseFunc) tool_begin_track_click,       NULL, NULL, (VikToolKeyFunc) NULL,
-    FALSE,
-    GDK_CURSOR_IS_PIXMAP, &cursor_begintr_pixbuf },
+  { { "CreateRoute", "vik-icon-Create Route", N_("Create _Route"), "<control><shift>B", N_("Create Route"), 0 },
+    (VikToolConstructorFunc) tool_new_route_create,       NULL, NULL, NULL,
+    (VikToolMouseFunc) tool_new_route_click,
+    (VikToolMouseMoveFunc) tool_new_track_move, // -\#
+    (VikToolMouseFunc) tool_new_track_release,  //   -> Reuse these track methods on a route
+    (VikToolKeyFunc) tool_new_track_key_press,  // -/#
+    TRUE, // Still need to handle clicks when in PAN mode to disable the potential trackpoint drawing
+    GDK_CURSOR_IS_PIXMAP, &cursor_new_route_pixbuf },
 
   { { "EditWaypoint", "vik-icon-Edit Waypoint", N_("_Edit Waypoint"), "<control><shift>E", N_("Edit Waypoint"), 0 },
     (VikToolConstructorFunc) tool_edit_waypoint_create,   NULL, NULL, NULL,
@@ -420,7 +423,7 @@ static VikToolInterface trw_layer_tools[] = {
     GDK_CURSOR_IS_PIXMAP, &cursor_route_finder_pixbuf },
 #endif
 };
-enum { TOOL_CREATE_WAYPOINT=0, TOOL_CREATE_TRACK, TOOL_BEGIN_TRACK, TOOL_EDIT_WAYPOINT, TOOL_EDIT_TRACKPOINT, TOOL_SHOW_PICTURE, NUM_TOOLS };
+enum { TOOL_CREATE_WAYPOINT=0, TOOL_CREATE_TRACK, TOOL_CREATE_ROUTE, TOOL_EDIT_WAYPOINT, TOOL_EDIT_TRACKPOINT, TOOL_SHOW_PICTURE, NUM_TOOLS };
 
 /****** PARAMETERS ******/
 
@@ -3121,7 +3124,7 @@ static void trw_layer_new_route ( gpointer lav[2] )
     vtl->current_track->is_route = TRUE;
     vik_trw_layer_add_route ( vtl, name, vtl->current_track );
 
-    vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_CREATE_TRACK );// CREATE_ROUTE??
+    vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_CREATE_ROUTE );
   }
 }
 
@@ -4240,7 +4243,7 @@ static void trw_layer_extend_track_end ( gpointer pass_along[6] )
     return;
 
   vtl->current_track = track;
-  vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_CREATE_TRACK);
+  vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, track->is_route ? TOOL_CREATE_ROUTE : TOOL_CREATE_TRACK);
 
   if ( track->trackpoints )
     goto_coord ( pass_along[1], pass_along[0], pass_along[5], &(((VikTrackpoint *)g_list_last(track->trackpoints)->data)->coord) );
@@ -7268,18 +7271,6 @@ static gboolean tool_edit_waypoint_release ( VikTrwLayer *vtl, GdkEventButton *e
   return FALSE;
 }
 
-/**** Begin track ***/
-static gpointer tool_begin_track_create ( VikWindow *vw, VikViewport *vvp)
-{
-  return vvp;
-}
-
-static gboolean tool_begin_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp )
-{
-  vtl->current_track = NULL;
-  return tool_new_track_click ( vtl, event, vvp );
-}
-
 /*** New track ****/
 
 static gpointer tool_new_track_create ( VikWindow *vw, VikViewport *vvp)
@@ -7519,7 +7510,13 @@ static gboolean tool_new_track_key_press ( VikTrwLayer *vtl, GdkEventKey *event,
   return FALSE;
 }
 
-static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp )
+/*
+ * Common function to handle trackpoint button requests on either a route or a track
+ *  . enables adding a point via normal click
+ *  . enables removal of last point via right click
+ *  . finishing of the track or route via double clicking
+ */
+static gboolean tool_new_track_or_route_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp )
 {
   VikTrackpoint *tp;
 
@@ -7533,8 +7530,10 @@ static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event,
     return FALSE;
   }
 
-  if ( event->button == 3 && vtl->current_track )
+  if ( event->button == 3 )
   {
+    if ( !vtl->current_track )
+      return FALSE;
     /* undo */
     if ( vtl->current_track->trackpoints )
     {
@@ -7563,21 +7562,6 @@ static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event,
     return TRUE;
   }
 
-  if ( ! vtl->current_track )
-  {
-    gchar *name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, _("Track"));
-    if ( ( name = a_dialog_new_track ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl->tracks, name ) ) )
-    {
-      vtl->current_track = vik_track_new();
-      vtl->current_track->visible = TRUE;
-      vik_trw_layer_add_track ( vtl, name, vtl->current_track );
-
-      /* incase it was created by begin track */
-      vik_window_enable_layer_tool ( VIK_WINDOW(VIK_GTK_WINDOW_FROM_LAYER(vtl)), VIK_LAYER_TRW, TOOL_CREATE_TRACK );
-    }
-    else
-      return TRUE;
-  }
   tp = vik_trackpoint_new();
   vik_viewport_screen_to_coord ( vvp, event->x, event->y, &(tp->coord) );
 
@@ -7592,9 +7576,12 @@ static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event,
   tp->newsegment = FALSE;
   tp->has_timestamp = FALSE;
   tp->timestamp = 0;
-  vtl->current_track->trackpoints = g_list_append ( vtl->current_track->trackpoints, tp );
-  /* Auto attempt to get elevation from DEM data (if it's available) */
-  vik_track_apply_dem_data_last_trackpoint ( vtl->current_track );
+
+  if ( vtl->current_track ) {
+    vtl->current_track->trackpoints = g_list_append ( vtl->current_track->trackpoints, tp );
+    /* Auto attempt to get elevation from DEM data (if it's available) */
+    vik_track_apply_dem_data_last_trackpoint ( vtl->current_track );
+  }
 
   vtl->ct_x1 = vtl->ct_x2;
   vtl->ct_y1 = vtl->ct_y2;
@@ -7605,6 +7592,24 @@ static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event,
   return TRUE;
 }
 
+static gboolean tool_new_track_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp )
+{
+  // ----------------------------------------------------- if current is a route - switch to new track
+  if ( event->button == 1 && ( ! vtl->current_track || (vtl->current_track && vtl->current_track->is_route ) ))
+  {
+    gchar *name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_TRACK, _("Track"));
+    if ( ( name = a_dialog_new_track ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl->tracks, name, FALSE ) ) )
+    {
+      vtl->current_track = vik_track_new();
+      vtl->current_track->visible = TRUE;
+      vik_trw_layer_add_track ( vtl, name, vtl->current_track );
+    }
+    else
+      return TRUE;
+  }
+  return tool_new_track_or_route_click ( vtl, event, vvp );
+}
+
 static void tool_new_track_release ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp )
 {
   if ( event->button == 2 ) {
@@ -7614,6 +7619,32 @@ static void tool_new_track_release ( VikTrwLayer *vtl, GdkEventButton *event, Vi
   }
 }
 
+/*** New route ****/
+
+static gpointer tool_new_route_create ( VikWindow *vw, VikViewport *vvp)
+{
+  return vvp;
+}
+
+static gboolean tool_new_route_click ( VikTrwLayer *vtl, GdkEventButton *event, VikViewport *vvp )
+{
+  // -------------------------- if current is a track - switch to new route
+  if ( event->button == 1 && ( ! vtl->current_track || (vtl->current_track && !vtl->current_track->is_route ) ) )
+  {
+    gchar *name = trw_layer_new_unique_sublayer_name(vtl, VIK_TRW_LAYER_SUBLAYER_ROUTE, _("Route"));
+    if ( ( name = a_dialog_new_track ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vtl->routes, name, TRUE ) ) )
+    {
+      vtl->current_track = vik_track_new();
+      vtl->current_track->visible = TRUE;
+      vtl->current_track->is_route = TRUE;
+      vik_trw_layer_add_route ( vtl, name, vtl->current_track );
+    }
+    else
+      return TRUE;
+  }
+  return tool_new_track_or_route_click ( vtl, event, vvp );
+}
+
 /*** New waypoint ****/
 
 static gpointer tool_new_waypoint_create ( VikWindow *vw, VikViewport *vvp)
index 42cacee846fc68262b994aa186e0e453fb3be74a..0289966c4c57ff91530dcb45eb16ef4d4a951ab6 100644 (file)
@@ -3343,7 +3343,7 @@ static struct {
   { &zoom_18_pixbuf,           "vik-icon-zoom"     },
   { &ruler_18_pixbuf,          "vik-icon-ruler"    },
   { &select_18_pixbuf,         "vik-icon-select"   },
-  { &begintr_18_pixbuf,                "vik-icon-Begin Track"      },
+  { &vik_new_route_18_pixbuf,   "vik-icon-Create Route"     },
   { &route_finder_18_pixbuf,   "vik-icon-Route Finder"     },
   { &demdl_18_pixbuf,          "vik-icon-DEM Download"     },
   { &showpic_18_pixbuf,                "vik-icon-Show Picture"     },