summaryrefslogtreecommitdiff
authorKeith 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)
commitef78248c01542fea33020506cba0dbd3170da1aa (patch)
tree9389856fcd0264f97052d9c375a7c8b52b9e1d12
parent85c7b039c87df7c9453770d5dd5cd7a8b5c2ffc3 (diff)
Started implementing popup menu on map.master
Diffstat
-rw-r--r--src/gmv-map.c39
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;
}