X-Git-Url: https://git.street.me.uk/andy/viking.git/blobdiff_plain/7742da66a8c5d65eea282ff2e5ba927ce0d107b9..80471a6a905e00bf80ad04fa2061f88ea81f15cb:/src/vikfilelist.c diff --git a/src/vikfilelist.c b/src/vikfilelist.c index c948c8bf..1e12d928 100644 --- a/src/vikfilelist.c +++ b/src/vikfilelist.c @@ -19,23 +19,59 @@ * */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include +#include #include "vikfilelist.h" -#include "vikfileentry.h" struct _VikFileList { GtkVBox parent; - VikFileEntry *file_entry; GtkWidget *treeview; + GtkWidget *file_selector; GtkTreeModel *model; }; static void file_list_add ( VikFileList *vfl ) { - GtkTreeIter iter; - gtk_list_store_append ( GTK_LIST_STORE(vfl->model), &iter ); - gtk_list_store_set ( GTK_LIST_STORE(vfl->model), &iter, 0, vik_file_entry_get_filename(vfl->file_entry), -1 ); + GSList *files = NULL; + GSList *fiter = NULL; + + if ( ! vfl->file_selector ) + { + GtkWidget *win; + g_assert ( (win = gtk_widget_get_toplevel(GTK_WIDGET(vfl))) ); + vfl->file_selector = gtk_file_chooser_dialog_new (_("Choose file(s)"), + GTK_WINDOW(win), + GTK_FILE_CHOOSER_ACTION_OPEN, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, + NULL); + gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER(vfl->file_selector), TRUE ); + gtk_window_set_transient_for ( GTK_WINDOW(vfl->file_selector), GTK_WINDOW(win) ); + gtk_window_set_destroy_with_parent ( GTK_WINDOW(vfl->file_selector), TRUE ); + } + + if ( gtk_dialog_run ( GTK_DIALOG(vfl->file_selector) ) == GTK_RESPONSE_ACCEPT ) { + files = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vfl->file_selector) ); + fiter = files; + GtkTreeIter iter; + while ( fiter ) { + gchar *file_name = fiter->data; + + gtk_list_store_append ( GTK_LIST_STORE(vfl->model), &iter ); + gtk_list_store_set ( GTK_LIST_STORE(vfl->model), &iter, 0, file_name, -1 ); + + g_free (file_name); + + fiter = g_slist_next (fiter); + } + g_slist_free (files); + } + gtk_widget_hide ( vfl->file_selector ); } static void file_list_del ( VikFileList *vfl ) @@ -87,9 +123,8 @@ GtkWidget *vik_file_list_new ( const gchar *title ) gtk_widget_set_size_request ( vfl->treeview, 200, 100); - vfl->file_entry = VIK_FILE_ENTRY(vik_file_entry_new()); - add_btn = gtk_button_new_with_label("Add"); - del_btn = gtk_button_new_with_label("Delete"); + add_btn = gtk_button_new_with_label(_("Add...")); + del_btn = gtk_button_new_with_label(_("Delete")); g_signal_connect_swapped ( G_OBJECT(add_btn), "clicked", G_CALLBACK(file_list_add), vfl ); g_signal_connect_swapped ( G_OBJECT(del_btn), "clicked", G_CALLBACK(file_list_del), vfl ); @@ -103,12 +138,12 @@ GtkWidget *vik_file_list_new ( const gchar *title ) gtk_box_pack_start ( GTK_BOX(vfl), scrolledwindow, TRUE, TRUE, 3 ); - gtk_box_pack_start ( GTK_BOX(hbox), GTK_WIDGET(vfl->file_entry), TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(hbox), add_btn, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(hbox), del_btn, TRUE, TRUE, 3 ); gtk_box_pack_start ( GTK_BOX(vfl), hbox, FALSE, FALSE, 3 ); gtk_widget_show_all(GTK_WIDGET(vfl)); + vfl->file_selector = NULL; return GTK_WIDGET(vfl); } @@ -117,7 +152,7 @@ static gboolean get_file_name(GtkTreeModel *model, GtkTreePath *path, GtkTreeIte { gchar *str; gtk_tree_model_get ( model, iter, 0, &str, -1 ); - g_debug("get_file_name: %s", str); + g_debug ("%s: %s", __FUNCTION__, str); (*list) = g_list_append((*list), g_strdup(str)); return FALSE; }