+ VikTrack *tr = widgets->tr;
+ VikTrwLayer *vtl = widgets->vtl;
+
+ /* FIXME: check and make sure the track still exists before doing anything to it */
+ /* Note: destroying diaglog (eg, parent window exit) won't give "response" */
+ switch (resp) {
+ case GTK_RESPONSE_DELETE_EVENT: /* received delete event (not from buttons) */
+ case GTK_RESPONSE_REJECT:
+ break;
+ case GTK_RESPONSE_ACCEPT:
+ vik_track_set_comment(tr, gtk_entry_get_text(GTK_ENTRY(widgets->w_comment)));
+ break;
+ case VIK_TRW_LAYER_PROPWIN_REVERSE:
+ vik_track_reverse(tr);
+ vik_layer_emit_update ( VIK_LAYER(vtl) );
+ break;
+ case VIK_TRW_LAYER_PROPWIN_DEL_DUP:
+ vik_track_remove_dup_points(tr);
+ /* above operation could have deleted current_tp or last_tp */
+ trw_layer_cancel_tps_of_track ( vtl, widgets->track_name );
+ vik_layer_emit_update ( VIK_LAYER(vtl) );
+ break;
+ case VIK_TRW_LAYER_PROPWIN_SPLIT:
+ {
+ /* get new tracks, add them, resolve naming conflicts (free if cancel), and delete old. old can still exist on clipboard. */
+ guint ntracks;
+ VikTrack **tracks = vik_track_split_into_segments(tr, &ntracks);
+ gchar *new_tr_name;
+ guint i;
+ for ( i = 0; i < ntracks; i++ )
+ {
+ g_assert ( tracks[i] );
+ new_tr_name = g_strdup_printf("%s #%d", widgets->track_name, i+1);
+ /* if ( (wp_exists) && (! overwrite) ) */
+ /* don't need to upper case new_tr_name because old tr name was uppercase */
+ if ( vik_trw_layer_get_track(vtl, new_tr_name ) &&
+ ( ! a_dialog_overwrite ( VIK_GTK_WINDOW_FROM_LAYER(vtl), "The track \"%s\" exists, do you wish to overwrite it?", new_tr_name ) ) )
+ {
+ gchar *new_new_tr_name = a_dialog_new_track ( VIK_GTK_WINDOW_FROM_LAYER(vtl), vik_trw_layer_get_tracks(vtl) );
+ g_free ( new_tr_name );
+ if (new_new_tr_name)
+ new_tr_name = new_new_tr_name;
+ else
+ {
+ new_tr_name = NULL;
+ vik_track_free ( tracks[i] );
+ }
+ }
+ if ( new_tr_name )
+ vik_trw_layer_add_track ( vtl, new_tr_name, tracks[i] );
+ }
+ if ( tracks )
+ {
+ g_free ( tracks );
+ /* Don't let track destroy this dialog */
+ vik_track_clear_property_dialog(tr);
+ vik_trw_layer_delete_track ( vtl, widgets->track_name );
+ vik_layer_emit_update ( VIK_LAYER(vtl) ); /* chase thru the hoops */
+ }
+ }
+ break;
+ default:
+ fprintf(stderr, "DEBUG: unknown response\n");
+ return;
+ }
+
+ /* Keep same behaviour for now: destroy dialog if click on any button */
+ prop_widgets_free(widgets);
+ vik_track_clear_property_dialog(tr);
+ gtk_widget_destroy ( GTK_WIDGET(dialog) );
+}
+
+void vik_trw_layer_propwin_run ( GtkWindow *parent, VikTrwLayer *vtl, VikTrack *tr, gpointer vlp, gchar *track_name )
+{
+ /* FIXME: free widgets when destroy signal received */
+ PropWidgets *widgets = prop_widgets_new();
+ widgets->vtl = vtl;
+ widgets->tr = tr;
+ widgets->vlp = vlp;
+ widgets->track_name = track_name;
+ gchar *title = g_strdup_printf(_("%s - Track Properties"), track_name);
+ GtkWidget *dialog = gtk_dialog_new_with_buttons (title,
+ parent,
+ GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_NO_SEPARATOR,
+ GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT,
+ _("Split Segments"), VIK_TRW_LAYER_PROPWIN_SPLIT,
+ _("Reverse"), VIK_TRW_LAYER_PROPWIN_REVERSE,
+ _("Delete Dupl."), VIK_TRW_LAYER_PROPWIN_DEL_DUP,
+ GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+ NULL);
+ g_free(title);
+ g_signal_connect(dialog, "response", G_CALLBACK(propwin_response_cb), widgets);
+ //fprintf(stderr, "DEBUG: dialog=0x%p\n", dialog);