+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;
+}
+
+/**
+ * a_acquire_trwlayer_menu:
+ *
+ * Create a sub menu intended for rightclicking on a TRWLayer's menu called "Filter".
+ *
+ * Returns: %NULL if no filters.
+ */
+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 );
+}
+
+/**
+ * a_acquire_trwlayer_track_menu:
+ *
+ * Create a sub menu intended for rightclicking on a TRWLayer's menu called "Filter with Track "TRACKNAME"...".
+ *
+ * Returns: %NULL if no filters or no filter track has been set.
+ */
+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;
+ }
+}
+
+/**
+ * a_acquire_track_menu:
+ *
+ * Create a sub menu intended for rightclicking on a track's menu called "Filter".
+ *
+ * Returns: %NULL if no applicable filters
+ */
+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 );
+}
+
+/**
+ * a_acquire_set_filter_track:
+ *
+ * Sets application-wide track to use with filter. references the track.
+ */
+void a_acquire_set_filter_track ( VikTrack *tr )
+{
+ if ( filter_track )
+ vik_track_free ( filter_track );
+
+ filter_track = tr;
+ vik_track_ref ( tr );
+}