From e37b2a6dac55d0948f4937671a9d71687205aa7c Mon Sep 17 00:00:00 2001 From: Rob Norris Date: Mon, 22 Oct 2012 00:01:25 +0100 Subject: [PATCH] Replace 'Add Track' tool with 'Create Route' tool. 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 | 6 +- src/dialog.h | 2 +- src/icons/Makefile.am | 4 +- src/icons/cursor_begintr.png | Bin 852 -> 0 bytes src/icons/cursor_new_route.png | Bin 0 -> 747 bytes .../{begintr_18.png => vik_new_route_18.png} | Bin src/viktrwlayer.c | 115 +++++++++++------- src/vikwindow.c | 2 +- 8 files changed, 80 insertions(+), 49 deletions(-) delete mode 100644 src/icons/cursor_begintr.png create mode 100644 src/icons/cursor_new_route.png rename src/icons/{begintr_18.png => vik_new_route_18.png} (100%) diff --git a/src/dialog.c b/src/dialog.c index c5e624db..933c28d3 100644 --- a/src/dialog.c +++ b/src/dialog.c @@ -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) diff --git a/src/dialog.h b/src/dialog.h index d5ff83f6..d6af9a4a 100644 --- a/src/dialog.h +++ b/src/dialog.h @@ -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 ); diff --git a/src/icons/Makefile.am b/src/icons/Makefile.am index 26c4f785..a0c84c09 100644 --- a/src/icons/Makefile.am +++ b/src/icons/Makefile.am @@ -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/cursor_begintr.png b/src/icons/cursor_begintr.png deleted file mode 100644 index a04bc2194d47b27451ea12b47ca18e2178afc024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI z1_o|n5N2eUHAey{$X?><>&kwei(Q;YTHA1{6;S9&a8X_A7vS7vT*VzRnIa7k)rUTP5+S4c)?u|j5UVtT4Vd1A3ba#3nxNotBhX>n#= zx`KOVZh;<{Q~;_SP8X^9>QED)Yo zSg0}M;n`3wy-Ck?Slj&`W*$BH@MX-bm!>;X4651N#Z<08Rco1WN4(ba7oUtr(a!IG zp8r2@XOtLy$X{J^(^@5TY;2b>>7Eg0T0%CAw_!@JbV*YlQjx96Ar#(n%|(`5GZlL-bnDK zvF1T}&5M#BqTj`zcy633m{u9vI+J^WmcY)~3F)uD&Z^r#f9rNDHkspsotlzAKN~SU z6I=Ma^33yM2CKPzZ_BJtS$&%9C2`|z*~V*aiAQvJ+MO9?rdQnWICJ!B*3_6krnApZ zGSd0vH+M_P#1c`4_>LNem8_Rd&dy*>Sj?m_$60aCVQxm1$4jyg_=J8pzr8I|Z~BjY z`~{19&Sm#4D-<^k>VA31iv7*OgoIPy7x$dzIO;0e`})qbToH#qPF2hHZsL8q{ra=- z|FaM8dJ}Y6N7r#mrPb>xEGKQF9vd-CVqbo6MalQp2h)~a)psm55p|H+lOZT(7JAUs zJ$R#~Y<8)d4F4RB&$s?>2vy!bMK9px9!pvAuEkRwibW(OBX$>=gljgg2s#(_MxRm5 WPvID|#$#Y&XYh3Ob6Mw<&;$U+pj4m$ diff --git a/src/icons/cursor_new_route.png b/src/icons/cursor_new_route.png new file mode 100644 index 0000000000000000000000000000000000000000..826b61c7f20a0b5bb6f52b2e3f621148270ed6ea GIT binary patch literal 747 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7lw8QX$B^iAHN)cBAf*t zk;M!Q+`=Ht$S`Y;1W=H@#M9T6{SKFyh(6~t*0(@;hC?N;5hc#~xw)x%B@7zLnhHh+ z1_laViP@z|3hG{&xw(nS>I%UnshN4HMO<7V8JWcjnYoGSsS4$Z#R|zqsfi`2DGH^< znR)37?wPp-dSFrks4A@}HC3TFKdq!Zu_#r63#d9JH4SJ=ib7JQLPJ7rK~lzYTkK>$A;Er`1=L z7}i_PGf&|;_q^EjhpANW6_Y(nYqy4LO|W8I@Hy{VN5>_`Eey}+c#AXSY+}&J5oqnT zXAF_u%eEuzuKd3D$!4<^yObDqoJ@W$dYgG?cL~GZ4R(w_zE;Uz%@SphyPRWgS#*7; zRR?FdP{-$QMe9Qrq~AYXv+Vrx2zKk0!X}bkZy6aAW_yZXpKg)Rq-MQKc;1_aD*Zbz zKEJ$ItbgC$N84#-{WRuR?WHqHHza3j_jeSWjwn;#l2|>dT65lO15>5RJ66=KR=%0F z>ER9m`;48Lk9Mj%uPHNrDYvv(k3sX0N6XBj-2duf+kalMdH$?nZM@0r$Kt&Un*RNe TT5=nh1{pkE{an^LB{Ts5kC!W| literal 0 HcmV?d00001 diff --git a/src/icons/begintr_18.png b/src/icons/vik_new_route_18.png similarity index 100% rename from src/icons/begintr_18.png rename to src/icons/vik_new_route_18.png diff --git a/src/viktrwlayer.c b/src/viktrwlayer.c index 170a23a1..0d204443 100644 --- a/src/viktrwlayer.c +++ b/src/viktrwlayer.c @@ -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"), "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"), "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"), "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) diff --git a/src/vikwindow.c b/src/vikwindow.c index 42cacee8..0289966c 100644 --- a/src/vikwindow.c +++ b/src/vikwindow.c @@ -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" }, -- 2.39.5