Skip to content

Commit

Permalink
Further method to prevent removing GPS Layer (Realtime) tracks whilst…
Browse files Browse the repository at this point in the history
… in use.

Extend existing method that applies to the standard layer menu entry control,
 via the VikStdLayerMenuItem usage, for all menu construction.

Thus further entries can be disabled/removed as appropriate.
  • Loading branch information
rnorris committed Jan 18, 2025
1 parent c97fedd commit b6c741c
Show file tree
Hide file tree
Showing 10 changed files with 51 additions and 40 deletions.
4 changes: 2 additions & 2 deletions src/vikaggregatelayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ static VikAggregateLayer *aggregate_layer_unmarshall( guint8 *data, guint len, V
static void aggregate_layer_change_coord_mode ( VikAggregateLayer *val, VikCoordMode mode );
static void aggregate_layer_drag_drop_request ( VikAggregateLayer *val_src, VikAggregateLayer *val_dest, GtkTreeIter *src_item_iter, GtkTreePath *dest_path );
static const gchar* aggregate_layer_tooltip ( VikAggregateLayer *val );
static void aggregate_layer_add_menu_items ( VikAggregateLayer *val, GtkMenu *menu, gpointer vlp );
static void aggregate_layer_add_menu_items ( VikAggregateLayer *val, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection );
static gboolean aggregate_layer_set_param ( VikAggregateLayer *val, VikLayerSetParam *vlsp );
static VikLayerParamData aggregate_layer_get_param ( VikAggregateLayer *val, guint16 id, gboolean is_file_operation );
static void aggregate_layer_change_param ( GtkWidget *widget, ui_change_values values );
Expand Down Expand Up @@ -3320,7 +3320,7 @@ static gboolean aggregate_layer_selected_viewport_menu ( VikAggregateLayer *val,
return FALSE;
}

static void aggregate_layer_add_menu_items ( VikAggregateLayer *val, GtkMenu *menu, gpointer vlp )
static void aggregate_layer_add_menu_items ( VikAggregateLayer *val, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection )
{
// Data to pass on in menu functions
static menu_array_values values;
Expand Down
4 changes: 2 additions & 2 deletions src/vikgeocluelayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ static VikLayerParamData geoclue_layer_get_param ( VikGeoclueLayer *vgl, guint16
static const gchar* geoclue_layer_tooltip ( VikGeoclueLayer *vgl );

static void geoclue_layer_change_coord_mode ( VikGeoclueLayer *vgl, VikCoordMode mode );
static void geoclue_layer_add_menu_items ( VikGeoclueLayer *vtl, GtkMenu *menu, gpointer vlp );
static void geoclue_layer_add_menu_items ( VikGeoclueLayer *vtl, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection );

typedef gpointer menu_array_layer[2];
static void geoclue_empty_cb ( menu_array_layer values );
Expand Down Expand Up @@ -385,7 +385,7 @@ static void geoclue_layer_change_coord_mode ( VikGeoclueLayer *vgl, VikCoordMode
vik_layer_change_coord_mode ( VIK_LAYER(vgl->trw), mode );
}

static void geoclue_layer_add_menu_items ( VikGeoclueLayer *vgl, GtkMenu *menu, gpointer vlp )
static void geoclue_layer_add_menu_items ( VikGeoclueLayer *vgl, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection )
{
static gpointer values[2];
GtkWidget *item;
Expand Down
4 changes: 2 additions & 2 deletions src/vikgeoreflayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ static VikGeorefLayer *georef_layer_create ( VikViewport *vp );
static void georef_layer_free ( VikGeorefLayer *vgl );
static gboolean georef_layer_properties ( VikGeorefLayer *vgl, gpointer vp, gboolean have_apply );
static void georef_layer_draw ( VikGeorefLayer *vgl, VikViewport *vp );
static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gpointer vlp );
static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection );
static void georef_layer_set_image ( VikGeorefLayer *vgl, const gchar *image );
static gboolean georef_layer_dialog ( VikGeorefLayer *vgl, gpointer vp, GtkWindow *w, gboolean have_apply_button );
static void georef_layer_load_image ( VikGeorefLayer *vgl, VikViewport *vp, gboolean from_file );
Expand Down Expand Up @@ -1246,7 +1246,7 @@ static void georef_layer_goto_center ( gpointer vgl_vlp[2] )
vik_layers_panel_emit_update ( VIK_LAYERS_PANEL(vgl_vlp[1]), FALSE );
}

static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gpointer vlp )
static void georef_layer_add_menu_items ( VikGeorefLayer *vgl, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection )
{
static gpointer pass_along[2];
pass_along[0] = vgl;
Expand Down
4 changes: 2 additions & 2 deletions src/vikgpslayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ static VikLayerParamData gps_layer_get_param ( VikGpsLayer *vgl, guint16 id, gbo
static const gchar* gps_layer_tooltip ( VikGpsLayer *vgl );

static void gps_layer_change_coord_mode ( VikGpsLayer *vgl, VikCoordMode mode );
static void gps_layer_add_menu_items( VikGpsLayer *vtl, GtkMenu *menu, gpointer vlp );
static void gps_layer_add_menu_items( VikGpsLayer *vtl, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection );

static void gps_upload_cb( gpointer layer_and_vlp[2] );
static void gps_download_cb( gpointer layer_and_vlp[2] );
Expand Down Expand Up @@ -858,7 +858,7 @@ static void gps_layer_change_coord_mode ( VikGpsLayer *vgl, VikCoordMode mode )
}
}

static void gps_layer_add_menu_items( VikGpsLayer *vgl, GtkMenu *menu, gpointer vlp )
static void gps_layer_add_menu_items( VikGpsLayer *vgl, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection )
{
static gpointer pass_along[2];
pass_along[0] = vgl;
Expand Down
8 changes: 4 additions & 4 deletions src/viklayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -561,16 +561,16 @@ VikStdLayerMenuItem vik_layer_get_menu_items_selection(VikLayer *l)
return(vik_layer_interfaces[l->type]->menu_items_selection);
}

void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp )
void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection )
{
if ( vik_layer_interfaces[l->type]->add_menu_items )
vik_layer_interfaces[l->type]->add_menu_items ( l, menu, vlp );
vik_layer_interfaces[l->type]->add_menu_items ( l, menu, vlp, selection );
}

gboolean vik_layer_sublayer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp )
gboolean vik_layer_sublayer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp, VikStdLayerMenuItem selection )
{
if ( vik_layer_interfaces[l->type]->sublayer_add_menu_items )
return vik_layer_interfaces[l->type]->sublayer_add_menu_items ( l, menu, vlp, subtype, sublayer, iter, vvp );
return vik_layer_interfaces[l->type]->sublayer_add_menu_items ( l, menu, vlp, subtype, sublayer, iter, vvp, selection );
return FALSE;
}

Expand Down
8 changes: 4 additions & 4 deletions src/viklayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -151,9 +151,9 @@ typedef void (*VikLayerFuncChangeCoordMode) (VikLayer *,VikCoordM
typedef void (*VikLayerFuncSetMenuItemsSelection) (VikLayer *,VikStdLayerMenuItem);
typedef VikStdLayerMenuItem (*VikLayerFuncGetMenuItemsSelection) (VikLayer *);

typedef void (*VikLayerFuncAddMenuItems) (VikLayer *,GtkMenu *,gpointer); /* gpointer is a VikLayersPanel */
typedef void (*VikLayerFuncAddMenuItems) (VikLayer *,GtkMenu *,gpointer,VikStdLayerMenuItem); /* gpointer is a VikLayersPanel */
typedef gboolean (*VikLayerFuncSublayerAddMenuItems) (VikLayer *,GtkMenu *,gpointer, /* first gpointer is a VikLayersPanel */
gint,gpointer,GtkTreeIter *,VikViewport *);
gint,gpointer,GtkTreeIter *,VikViewport *,VikStdLayerMenuItem);
typedef const gchar * (*VikLayerFuncSublayerRenameRequest) (VikLayer *,const gchar *,gpointer,
gint,VikViewport *,GtkTreeIter *); /* first gpointer is a VikLayersPanel */
typedef gboolean (*VikLayerFuncSublayerToggleVisible) (VikLayer *,gint,gpointer);
Expand Down Expand Up @@ -301,14 +301,14 @@ void vik_layer_redraw ( VikLayer *vl );
/* GUI */
void vik_layer_set_menu_items_selection(VikLayer *l, VikStdLayerMenuItem selection);
VikStdLayerMenuItem vik_layer_get_menu_items_selection(VikLayer *l);
void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp );
void vik_layer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection );
VikLayer *vik_layer_create ( VikLayerTypeEnum type, VikViewport *vp, gboolean interactive );
gboolean vik_layer_properties ( VikLayer *layer, VikViewport *vp, gboolean have_apply );

void vik_layer_realize ( VikLayer *l, VikTreeview *vt, GtkTreeIter * layer_iter );
void vik_layer_post_read ( VikLayer *layer, VikViewport *vp, gboolean from_file );

gboolean vik_layer_sublayer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp );
gboolean vik_layer_sublayer_add_menu_items ( VikLayer *l, GtkMenu *menu, gpointer vlp, gint subtype, gpointer sublayer, GtkTreeIter *iter, VikViewport *vvp, VikStdLayerMenuItem selection );

void vik_layer_marshall ( VikLayer *vl, guint8 **data, guint *len );
VikLayer *vik_layer_unmarshall ( const guint8 *data, guint len, VikViewport *vvp );
Expand Down
9 changes: 5 additions & 4 deletions src/viklayerspanel.c
Original file line number Diff line number Diff line change
Expand Up @@ -956,13 +956,12 @@ 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 ));
VikStdLayerMenuItem menu_selection = vik_layer_get_menu_items_selection ( layer );

if ( layer->type == VIK_LAYER_AGGREGATE )
menu = GTK_MENU ( layers_panel_create_popup ( vlp, TRUE ) );
else
{
VikStdLayerMenuItem menu_selection = vik_layer_get_menu_items_selection(layer);

menu = GTK_MENU ( gtk_menu_new () );

if (menu_selection & VIK_MENU_ITEM_PROPERTY) {
Expand All @@ -986,13 +985,15 @@ static void layers_popup ( VikLayersPanel *vlp, GtkTreeIter *iter, gint mouse_bu
(void)vu_menu_add_item ( menu, NULL, GTK_STOCK_DELETE, G_CALLBACK(vik_layers_panel_delete_selected), vlp );
}
}
vik_layer_add_menu_items ( layer, menu, vlp );
vik_layer_add_menu_items ( layer, menu, vlp, menu_selection );
gtk_widget_show_all ( GTK_WIDGET(menu) );
}
else
{
VikLayer *layer = VIK_LAYER(vik_treeview_item_get_parent ( vlp->vt, iter ));
VikStdLayerMenuItem menu_selection = vik_layer_get_menu_items_selection ( layer );
menu = GTK_MENU ( gtk_menu_new () );
if ( ! vik_layer_sublayer_add_menu_items ( vik_treeview_item_get_parent ( vlp->vt, iter ), menu, vlp, vik_treeview_item_get_data ( vlp->vt, iter ), vik_treeview_item_get_pointer ( vlp->vt, iter ), iter, vlp->vvp ) )
if ( ! vik_layer_sublayer_add_menu_items(layer, menu, vlp, vik_treeview_item_get_data ( vlp->vt, iter ), vik_treeview_item_get_pointer ( vlp->vt, iter ), iter, vlp->vvp, menu_selection) )
{
gtk_widget_destroy ( GTK_WIDGET(menu) );
return;
Expand Down
4 changes: 2 additions & 2 deletions src/vikmapniklayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ static VikMapnikLayer *mapnik_layer_new ( VikViewport *vvp );
static VikMapnikLayer *mapnik_layer_create ( VikViewport *vp );
static void mapnik_layer_free ( VikMapnikLayer *vml );
static void mapnik_layer_draw ( VikMapnikLayer *vml, VikViewport *vp );
static void mapnik_layer_add_menu_items ( VikMapnikLayer *vml, GtkMenu *menu, gpointer vlp );
static void mapnik_layer_add_menu_items ( VikMapnikLayer *vml, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection );

static gpointer mapnik_feature_create ( VikWindow *vw, VikViewport *vvp)
{
Expand Down Expand Up @@ -1023,7 +1023,7 @@ static void mapnik_layer_about ( menu_array_values values )
/**
*
*/
static void mapnik_layer_add_menu_items ( VikMapnikLayer *vml, GtkMenu *menu, gpointer vlp )
static void mapnik_layer_add_menu_items ( VikMapnikLayer *vml, GtkMenu *menu, gpointer vlp, VikStdLayerMenuItem selection )
{
static menu_array_values values;
values[MA_VML] = vml;
Expand Down
4 changes: 2 additions & 2 deletions src/vikmapslayer.c
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ static VikLayerToolFuncStatus maps_layer_download_click ( VikMapsLayer *vml, Gdk
static gpointer maps_layer_download_create ( VikWindow *vw, VikViewport *vvp );
static void maps_layer_set_cache_dir ( VikMapsLayer *vml, const gchar *dir );
static void start_download_thread ( VikMapsLayer *vml, VikViewport *vvp, const VikCoord *ul, const VikCoord *br, gint redownload );
static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp );
static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp, VikStdLayerMenuItem selection );
static guint map_uniq_id_to_index ( guint uniq_id );


Expand Down Expand Up @@ -2948,7 +2948,7 @@ static void maps_layer_flush ( menu_array_values values )
a_mapcache_flush_type ( vik_map_source_get_uniq_id(MAPS_LAYER_NTH_TYPE(vml->maptype)) );
}

static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp )
static void maps_layer_add_menu_items ( VikMapsLayer *vml, GtkMenu *menu, VikLayersPanel *vlp, VikStdLayerMenuItem selection )
{
static menu_array_values values;
values[MA_VML] = vml;
Expand Down
Loading

0 comments on commit b6c741c

Please sign in to comment.