+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.
(VikLayerFuncProperties) NULL,
(VikLayerFuncDraw) vik_aggregate_layer_draw,
(VikLayerFuncChangeCoordMode) aggregate_layer_change_coord_mode,
+
+ (VikLayerFuncSetMenuItemsSelection) NULL,
+ (VikLayerFuncGetMenuItemsSelection) NULL,
(VikLayerFuncAddMenuItems) NULL,
(VikLayerFuncSublayerAddMenuItems) NULL,
(VikLayerFuncDraw) vik_coord_layer_draw,
(VikLayerFuncChangeCoordMode) NULL,
+ (VikLayerFuncSetMenuItemsSelection) NULL,
+ (VikLayerFuncGetMenuItemsSelection) NULL,
+
(VikLayerFuncAddMenuItems) NULL,
(VikLayerFuncSublayerAddMenuItems) NULL,
(VikLayerFuncDraw) georef_layer_draw,
(VikLayerFuncChangeCoordMode) NULL,
+ (VikLayerFuncSetMenuItemsSelection) NULL,
+ (VikLayerFuncGetMenuItemsSelection) NULL,
+
(VikLayerFuncAddMenuItems) georef_layer_add_menu_items,
(VikLayerFuncSublayerAddMenuItems) NULL,
(VikLayerFuncDraw) vik_gps_layer_draw,
(VikLayerFuncChangeCoordMode) gps_layer_change_coord_mode,
+ (VikLayerFuncSetMenuItemsSelection) NULL,
+ (VikLayerFuncGetMenuItemsSelection) NULL,
+
(VikLayerFuncAddMenuItems) gps_layer_add_menu_items,
(VikLayerFuncSublayerAddMenuItems) NULL,
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;
}
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 )
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 *);
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;
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 );
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);
(VikLayerFuncDraw) maps_layer_draw,
(VikLayerFuncChangeCoordMode) NULL,
+ (VikLayerFuncSetMenuItemsSelection) NULL,
+ (VikLayerFuncGetMenuItemsSelection) NULL,
+
(VikLayerFuncAddMenuItems) maps_layer_add_menu_items,
(VikLayerFuncSublayerAddMenuItems) NULL,
GtkMenu *wp_right_click_menu;
+ /* menu */
+ VikStdLayerMenuItem menu_selection;
+
};
/* A caached waypoint image. */
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] );
(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,
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;
}
{
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);
+}
+