+void a_acquire ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikDataSourceInterface *source_interface ) {
+ acquire ( vw, vlp, vvp, source_interface, NULL, NULL );
+}
+
+static void acquire_trwlayer_callback ( GObject *menuitem, gpointer *pass_along )
+{
+ VikDataSourceInterface *iface = g_object_get_data ( menuitem, "vik_acq_iface" );
+ VikWindow *vw = pass_along[0];
+ VikLayersPanel *vlp = pass_along[1];
+ VikViewport *vvp = pass_along[2];
+ VikTrwLayer *vtl = pass_along[3];
+ VikTrack *tr = pass_along[4];
+
+ acquire ( vw, vlp, vvp, iface, vtl, tr );
+}
+
+static GtkWidget *acquire_build_menu ( VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp,
+ VikTrwLayer *vtl, VikTrack *track, /* both passed to acquire, although for many filters only one ness */
+ const gchar *menu_title, vik_datasource_inputtype_t inputtype )
+{
+ static gpointer pass_along[5];
+ GtkWidget *menu_item=NULL, *menu=NULL;
+ GtkWidget *item=NULL;
+ int i;
+
+ pass_along[0] = vw;
+ pass_along[1] = vlp;
+ pass_along[2] = vvp;
+ pass_along[3] = vtl;
+ pass_along[4] = track;
+
+ for ( i = 0; i < N_FILTERS; i++ ) {
+ if ( filters[i]->inputtype == inputtype ) {
+ if ( ! menu_item ) { /* do this just once, but return NULL if no filters */
+ menu = gtk_menu_new();
+ menu_item = gtk_menu_item_new_with_mnemonic ( menu_title );
+ gtk_menu_item_set_submenu (GTK_MENU_ITEM (menu_item), menu );
+ }
+
+ item = gtk_menu_item_new_with_label ( filters[i]->window_title );
+ g_object_set_data ( G_OBJECT(item), "vik_acq_iface", (gpointer) filters[i] );
+ g_signal_connect ( G_OBJECT(item), "activate", G_CALLBACK(acquire_trwlayer_callback), pass_along );
+ gtk_menu_shell_append (GTK_MENU_SHELL (menu), item);
+ gtk_widget_show ( item );
+ }
+ }
+
+ return menu_item;
+}
+
+GtkWidget *a_acquire_trwlayer_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl)
+{
+ return acquire_build_menu ( vw, vlp, vvp, vtl, NULL, "_Filter", VIK_DATASOURCE_INPUTTYPE_TRWLAYER );
+}
+
+GtkWidget *a_acquire_trwlayer_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrwLayer *vtl)
+{
+ if ( filter_track == NULL )
+ return NULL;
+ else {
+ gchar *menu_title = g_strdup_printf ( "Filter with %s", filter_track_name );
+ GtkWidget *rv = acquire_build_menu ( vw, vlp, vvp, vtl, filter_track,
+ menu_title, VIK_DATASOURCE_INPUTTYPE_TRWLAYER_TRACK );
+ g_free ( menu_title );
+ return rv;
+ }
+}
+
+GtkWidget *a_acquire_track_menu (VikWindow *vw, VikLayersPanel *vlp, VikViewport *vvp, VikTrack *tr)
+{
+ return acquire_build_menu ( vw, vlp, vvp, NULL, tr, "Filter", VIK_DATASOURCE_INPUTTYPE_TRACK );
+}
+
+void a_acquire_set_filter_track ( VikTrack *tr, const gchar *name )
+{
+ if ( filter_track )
+ vik_track_free ( filter_track );
+ if ( filter_track_name )
+ g_free ( filter_track_name );
+
+ filter_track = tr;
+ vik_track_ref ( tr );
+
+ filter_track_name = g_strdup(name);
+}