]> git.street.me.uk Git - andy/viking.git/commitdiff
menu selection for layer instances.
authorQuy Tonthat <qtonthat@gmail.com>
Tue, 2 Jan 2007 14:20:06 +0000 (14:20 +0000)
committerQuy Tonthat <qtonthat@gmail.com>
Tue, 2 Jan 2007 14:20:06 +0000 (14:20 +0000)
ChangeLog
src/vikaggregatelayer.c
src/vikcoordlayer.c
src/vikgeoreflayer.c
src/vikgpslayer.c
src/viklayer.c
src/viklayer.h
src/viklayerspanel.c
src/vikmapslayer.c
src/viktrwlayer.c

index fb9389da96a360bbf9586498fd4317ca4bffe674..a2b4b7cf3d7ae62586fe76800385e82195844c88 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2007-01-03
+Quy Tonthat <qtonthat@gmail.com>:
+       * Menu item selection for layer instances.
+
 2007-01-02
 Quy Tonthat <qtonthat@gmail.com>:
        * gpslayer: Unexpose interface functions.
index 2072c718f7eebbca34e5e9e56f09106de95b8c90..4b954b2773c13a79f1bffd77d5f98add55a9ee34 100644 (file)
@@ -54,6 +54,9 @@ VikLayerInterface vik_aggregate_layer_interface = {
   (VikLayerFuncProperties)              NULL,
   (VikLayerFuncDraw)                    vik_aggregate_layer_draw,
   (VikLayerFuncChangeCoordMode)         aggregate_layer_change_coord_mode,
+  
+  (VikLayerFuncSetMenuItemsSelection)  NULL,
+  (VikLayerFuncGetMenuItemsSelection)  NULL,
 
   (VikLayerFuncAddMenuItems)            NULL,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
index 993f13fa56bc818f8f05a24ab8d511440598599e..50faceafcc90e665f8c7d7a9ece36a23d1b72d89 100644 (file)
@@ -68,6 +68,9 @@ VikLayerInterface vik_coord_layer_interface = {
   (VikLayerFuncDraw)                    vik_coord_layer_draw,
   (VikLayerFuncChangeCoordMode)         NULL,
 
+  (VikLayerFuncSetMenuItemsSelection)   NULL,
+  (VikLayerFuncGetMenuItemsSelection)   NULL,
+
   (VikLayerFuncAddMenuItems)            NULL,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
 
index 9a5dba11b7faf0de955eb37b5803ebf97d0ab893..7d09ae82657c700de8268429133d17ab651eb105 100644 (file)
@@ -87,6 +87,9 @@ VikLayerInterface vik_georef_layer_interface = {
   (VikLayerFuncDraw)                    georef_layer_draw,
   (VikLayerFuncChangeCoordMode)         NULL,
 
+  (VikLayerFuncSetMenuItemsSelection)   NULL,
+  (VikLayerFuncGetMenuItemsSelection)   NULL,
+
   (VikLayerFuncAddMenuItems)            georef_layer_add_menu_items,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
 
index d94b907985f3ddcd08328310547620453102b835..396c2fedbcd33ecbd1a2043275ddb0a0cc528b26 100644 (file)
@@ -106,6 +106,9 @@ VikLayerInterface vik_gps_layer_interface = {
   (VikLayerFuncDraw)                    vik_gps_layer_draw,
   (VikLayerFuncChangeCoordMode)         gps_layer_change_coord_mode,
 
+  (VikLayerFuncSetMenuItemsSelection)   NULL,
+  (VikLayerFuncGetMenuItemsSelection)   NULL,
+
   (VikLayerFuncAddMenuItems)            gps_layer_add_menu_items,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
 
@@ -168,7 +171,9 @@ static VikGpsLayer *vik_gps_layer_create (VikViewport *vp)
   VikGpsLayer *rv = vik_gps_layer_new ();
   vik_layer_rename ( VIK_LAYER(rv), vik_gps_layer_interface.name );
   rv->trw_children[TRW_UPLOAD] = VIK_TRW_LAYER(vik_layer_create ( VIK_LAYER_TRW, vp, NULL, FALSE ));
+  vik_layer_set_menu_items_selection(rv->trw_children[TRW_UPLOAD], VIK_MENU_ITEM_ALL & ~(VIK_MENU_ITEM_CUT|VIK_MENU_ITEM_DELETE));
   rv->trw_children[TRW_DOWNLOAD] = VIK_TRW_LAYER(vik_layer_create ( VIK_LAYER_TRW, vp, NULL, FALSE ));
+  vik_layer_set_menu_items_selection(rv->trw_children[TRW_DOWNLOAD], VIK_MENU_ITEM_ALL & ~(VIK_MENU_ITEM_CUT|VIK_MENU_ITEM_DELETE));
   return rv;
 }
 
index 4ec83c82868fda9385852b0205ca2fa212d1a3b9..aef7a9cb54cb7b591f2c22f1ed0574d765b38d5d 100644 (file)
@@ -347,6 +347,20 @@ void vik_layer_realize ( VikLayer *l, VikTreeview *vt, GtkTreeIter *layer_iter )
     vik_layer_interfaces[l->type]->realize ( l, vt, layer_iter );
 }
 
+void vik_layer_set_menu_items_selection(VikLayer *l, guint16 selection)
+{
+  if ( vik_layer_interfaces[l->type]->set_menu_selection )
+    vik_layer_interfaces[l->type]->set_menu_selection ( l, selection );
+}
+
+guint16 vik_layer_get_menu_items_selection(VikLayer *l)
+{
+  if ( vik_layer_interfaces[l->type]->get_menu_selection )
+    return(vik_layer_interfaces[l->type]->get_menu_selection (l));
+  else
+    return(vik_layer_interfaces[l->type]->menu_items_selection);
+}
+
 void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp )
 {
   if ( vik_layer_interfaces[l->type]->add_menu_items )
index 5c5433ae18f3198ace7ff49dd36bbfcff82034a4..543da016671e16ec05703db971919915dc311855 100644 (file)
@@ -175,6 +175,8 @@ typedef gboolean      (*VikLayerFuncProperties)            (VikLayer *,VikViewpo
 typedef void          (*VikLayerFuncDraw)                  (VikLayer *,VikViewport *);
 typedef void          (*VikLayerFuncChangeCoordMode)       (VikLayer *,VikCoordMode);
 
+typedef void          (*VikLayerFuncSetMenuItemsSelection)          (VikLayer *,guint16);
+typedef guint16          (*VikLayerFuncGetMenuItemsSelection)          (VikLayer *);
 typedef void          (*VikLayerFuncAddMenuItems)          (VikLayer *,GtkMenu *,gpointer); /* gpointer is a VikLayersPanel */
 typedef gboolean      (*VikLayerFuncSublayerAddMenuItems)  (VikLayer *,GtkMenu *,gpointer, /* first gpointer is a VikLayersPanel */
                                                             gint,gpointer,GtkTreeIter *);
@@ -245,6 +247,9 @@ struct _VikLayerInterface {
   VikLayerFuncDraw                  draw;
   VikLayerFuncChangeCoordMode       change_coord_mode;
 
+  VikLayerFuncSetMenuItemsSelection set_menu_selection;
+  VikLayerFuncGetMenuItemsSelection get_menu_selection;
+
   VikLayerFuncAddMenuItems          add_menu_items;
   VikLayerFuncSublayerAddMenuItems  sublayer_add_menu_items;
   VikLayerFuncSublayerRenameRequest sublayer_rename_request;
@@ -284,6 +289,8 @@ gboolean vik_layer_set_param (VikLayer *layer, guint16 id, VikLayerParamData dat
 void vik_layer_emit_update ( VikLayer *vl );
 
 /* GUI */
+void vik_layer_set_menu_items_selection(VikLayer *l, guint16 selection);
+guint16 vik_layer_get_menu_items_selection(VikLayer *l);
 void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp );
 VikLayer *vik_layer_create ( gint type, gpointer vp, GtkWindow *w, gboolean interactive );
 gboolean vik_layer_properties ( VikLayer *layer, gpointer vp );
index 8cbc55f38660cd40ee27d8d3203fc60546dc3e3b..a97cb42979b3740793aa24946c4ab6b6a0c2cbc9 100644 (file)
@@ -266,45 +266,45 @@ static void layers_popup ( VikLayersPanel *vlp, GtkTreeIter *iter, gint mouse_bu
     if ( vik_treeview_item_get_type ( vlp->vt, iter ) == VIK_TREEVIEW_TYPE_LAYER )
     {
       VikLayer *layer = VIK_LAYER(vik_treeview_item_get_pointer ( vlp->vt, iter ));
-      VikLayerInterface *layer_interface = vik_layer_get_interface(layer->type);
 
       if ( layer->type == VIK_LAYER_AGGREGATE )
         menu = GTK_MENU(gtk_item_factory_get_widget ( vlp->popup_factory, "<main>" ));
       else
       {
         GtkWidget *del, *prop;
+       VikStdLayerMenuItem menu_selection = vik_layer_get_menu_items_selection(layer);
 
         menu = GTK_MENU ( gtk_menu_new () );
 
-       if (layer_interface->menu_items_selection & VIK_MENU_ITEM_PROPERTY) {
+       if (menu_selection & VIK_MENU_ITEM_PROPERTY) {
          prop = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PROPERTIES, NULL );
          g_signal_connect_swapped ( G_OBJECT(prop), "activate", G_CALLBACK(vik_layers_panel_properties), vlp );
          gtk_menu_shell_append (GTK_MENU_SHELL (menu), prop);
          gtk_widget_show ( prop );
        }
 
-       if (layer_interface->menu_items_selection & VIK_MENU_ITEM_CUT) {
+       if (menu_selection & VIK_MENU_ITEM_CUT) {
          del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_CUT, NULL );
          g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_cut_selected), vlp );
          gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
          gtk_widget_show ( del );
        }
 
-       if (layer_interface->menu_items_selection & VIK_MENU_ITEM_COPY) {
+       if (menu_selection & VIK_MENU_ITEM_COPY) {
          del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_COPY, NULL );
          g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_copy_selected), vlp );
          gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
          gtk_widget_show ( del );
        }
 
-       if (layer_interface->menu_items_selection & VIK_MENU_ITEM_PASTE) {
+       if (menu_selection & VIK_MENU_ITEM_PASTE) {
          del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_PASTE, NULL );
          g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_paste_selected), vlp );
          gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
          gtk_widget_show ( del );
        }
 
-       if (layer_interface->menu_items_selection & VIK_MENU_ITEM_DELETE) {
+       if (menu_selection & VIK_MENU_ITEM_DELETE) {
          del = gtk_image_menu_item_new_from_stock ( GTK_STOCK_DELETE, NULL );
          g_signal_connect_swapped ( G_OBJECT(del), "activate", G_CALLBACK(vik_layers_panel_delete_selected), vlp );
          gtk_menu_shell_append (GTK_MENU_SHELL (menu), del);
index 396e7fa890420a4c31d247ed791ff86d8f90fdcd..ad488a1e9a11cd0b65fd1beaa70842904c2a441d 100644 (file)
@@ -160,6 +160,9 @@ VikLayerInterface vik_maps_layer_interface = {
   (VikLayerFuncDraw)                    maps_layer_draw,
   (VikLayerFuncChangeCoordMode)         NULL,
 
+  (VikLayerFuncSetMenuItemsSelection)   NULL,
+  (VikLayerFuncGetMenuItemsSelection)   NULL,
+
   (VikLayerFuncAddMenuItems)            maps_layer_add_menu_items,
   (VikLayerFuncSublayerAddMenuItems)    NULL,
 
index e9435553432d925820948399a59b7b485959efb3..299db5ee03e76bf96622cc0c293c1f14f67a3867 100644 (file)
@@ -135,6 +135,9 @@ struct _VikTrwLayer {
 
   GtkMenu *wp_right_click_menu;
 
+  /* menu */
+  VikStdLayerMenuItem menu_selection;
+
 };
 
 /* A caached waypoint image. */
@@ -154,6 +157,9 @@ struct DrawingParams {
   gdouble ce1, ce2, cn1, cn2;
 };
 
+static vik_trw_layer_set_menu_selection(VikTrwLayer *vtl, guint16);
+static guint16 vik_trw_layer_get_menu_selection(VikTrwLayer *vtl);
+
 static void trw_layer_delete_item ( gpointer *pass_along );
 
 static void trw_layer_find_maxmin_waypoints ( const gchar *name, const VikWaypoint *w, struct LatLon maxmin[2] );
@@ -341,6 +347,9 @@ VikLayerInterface vik_trw_layer_interface = {
   (VikLayerFuncDraw)                    vik_trw_layer_draw,
   (VikLayerFuncChangeCoordMode)         trw_layer_change_coord_mode,
 
+  (VikLayerFuncSetMenuItemsSelection)   vik_trw_layer_set_menu_selection,
+  (VikLayerFuncGetMenuItemsSelection)   vik_trw_layer_get_menu_selection,
+
   (VikLayerFuncAddMenuItems)            vik_trw_layer_add_menu_items,
   (VikLayerFuncSublayerAddMenuItems)    vik_trw_layer_sublayer_add_menu_items,
 
@@ -1223,6 +1232,8 @@ VikTrwLayer *vik_trw_layer_create ( VikViewport *vp )
 
   rv->coord_mode = vik_viewport_get_coord_mode ( vp );
 
+  rv->menu_selection = vik_layer_get_interface(VIK_LAYER(rv)->type)->menu_items_selection;
+
   return rv;
 }
 
@@ -3195,3 +3206,14 @@ VikTrack *vik_trw_layer_get_track ( VikTrwLayer *vtl, gchar *name )
 {
   return g_hash_table_lookup ( vtl->tracks, name );
 }
+
+static vik_trw_layer_set_menu_selection(VikTrwLayer *vtl, guint16 selection)
+{
+  vtl->menu_selection = selection;
+}
+
+static guint16 vik_trw_layer_get_menu_selection(VikTrwLayer *vtl)
+{
+  return(vtl->menu_selection);
+}
+