| author | Keith Sharp <keith.sharp@gmail.com> | 2010-02-24 23:25:02 (GMT) |
|---|---|---|
| committer | Keith Sharp <keith.sharp@gmail.com> | 2010-02-24 23:25:02 (GMT) |
| commit | ef78248c01542fea33020506cba0dbd3170da1aa (patch) | |
| tree | 9389856fcd0264f97052d9c375a7c8b52b9e1d12 | |
| parent | 85c7b039c87df7c9453770d5dd5cd7a8b5c2ffc3 (diff) | |
Started implementing popup menu on map.master
| -rw-r--r-- | src/gmv-map.c | 39 |
1 files changed, 37 insertions, 2 deletions
diff --git a/src/gmv-map.c b/src/gmv-map.c index ccb8e96..130096a 100644 --- a/src/gmv-map.c +++ b/src/gmv-map.c @@ -28,6 +28,7 @@ #include "gmv-map.h" #include "gmv-window.h" #include "gmv-prefs.h" +#include "gmv-trkpt.h" #define GMV_MAP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GMV_TYPE_MAP, GmvMapPrivate)) @@ -42,6 +43,7 @@ static void map_goto_cb (GtkAction *action, gpointer data); // Other callbacks static void map_source_menu_cb (GtkMenuItem *item, gpointer data); static void map_zoom_changed_cb (ChamplainView *view, GParamSpec *gobject, gpointer *data); +void map_new_wpt_cb (GtkWidget *menuitem, gpointer data); gboolean map_mouse_click_cb (ClutterActor *actor, ClutterEvent *event, gpointer data); // Internal convenience functions @@ -407,18 +409,51 @@ map_zoom_changed_cb (ChamplainView *view, GParamSpec *gobject, gpointer *data) g_object_unref (window); } +void +map_new_wpt_cb (GtkWidget *menuitem, gpointer data) +{ + GmvTrkPt *pt = NULL; + + pt = g_object_get_data (G_OBJECT (data), "pt"); + if (pt); + g_print ("Mouse button clicked at: %f %f\n", gmv_trkpt_get_lat (pt), gmv_trkpt_get_lon (pt)); +} + gboolean map_mouse_click_cb (ClutterActor *actor, ClutterEvent *event, gpointer data) { + GtkWidget *menu, *item; + GmvTrkPt *pt; ChamplainView *view; gdouble lat, lon; GmvMapPrivate *priv = GMV_MAP_GET_PRIVATE (data); - view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (priv->map)); + if (((ClutterButtonEvent*)event)->button != 3) + return FALSE; + view = gtk_champlain_embed_get_view (GTK_CHAMPLAIN_EMBED (priv->map)); champlain_view_get_coords_from_event (CHAMPLAIN_VIEW (view), event, &lat, &lon); - g_print ("Mouse click at: %f %f\n", lat, lon); + + pt = g_object_get_data (G_OBJECT (data), "pt"); + if (pt) { + g_object_unref (pt); + pt = NULL; + } + + pt = gmv_trkpt_new (lat, lon, 0, NULL); + g_object_set_data (G_OBJECT (data), "pt", pt); + + menu = gtk_menu_new (); + + item = gtk_menu_item_new_with_label ("New Waypoint"); + g_signal_connect (item, "activate", G_CALLBACK (map_new_wpt_cb), data); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), item); + + gtk_widget_show_all (menu); + gtk_menu_popup (GTK_MENU(menu), NULL, NULL, NULL, NULL, + ((ClutterButtonEvent*)event)->button, + ((ClutterButtonEvent*)event)->time); return TRUE; } |
