2 * viking -- GPS Data and Topo Analyzer, Explorer, and Manager
4 * Copyright (C) 2003-2005, Evan Battaglia <gtoevan@gmx.net>
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
27 #include <glib/gi18n.h>
29 #include "vikfilelist.h"
34 GtkWidget
*file_selector
;
38 static void file_list_add ( VikFileList
*vfl
)
43 if ( ! vfl
->file_selector
)
46 g_assert ( (win
= gtk_widget_get_toplevel(GTK_WIDGET(vfl
))) );
47 vfl
->file_selector
= gtk_file_chooser_dialog_new (_("Choose file(s)"),
49 GTK_FILE_CHOOSER_ACTION_OPEN
,
50 GTK_STOCK_CANCEL
, GTK_RESPONSE_CANCEL
,
51 GTK_STOCK_OPEN
, GTK_RESPONSE_ACCEPT
,
53 gtk_file_chooser_set_select_multiple ( GTK_FILE_CHOOSER(vfl
->file_selector
), TRUE
);
54 gtk_window_set_transient_for ( GTK_WINDOW(vfl
->file_selector
), GTK_WINDOW(win
) );
55 gtk_window_set_destroy_with_parent ( GTK_WINDOW(vfl
->file_selector
), TRUE
);
58 if ( gtk_dialog_run ( GTK_DIALOG(vfl
->file_selector
) ) == GTK_RESPONSE_ACCEPT
) {
59 files
= gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER(vfl
->file_selector
) );
63 gchar
*file_name
= fiter
->data
;
65 gtk_list_store_append ( GTK_LIST_STORE(vfl
->model
), &iter
);
66 gtk_list_store_set ( GTK_LIST_STORE(vfl
->model
), &iter
, 0, file_name
, -1 );
70 fiter
= g_slist_next (fiter
);
74 gtk_widget_hide ( vfl
->file_selector
);
77 static void file_list_del ( VikFileList
*vfl
)
79 GtkTreeSelection
*ts
= gtk_tree_view_get_selection (GTK_TREE_VIEW(vfl
->treeview
));
81 if ( gtk_tree_selection_get_selected(ts
, NULL
, &iter
) )
82 gtk_list_store_remove(GTK_LIST_STORE(vfl
->model
), &iter
);
85 GType
vik_file_list_get_type (void)
87 static GType vs_type
= 0;
91 static const GTypeInfo vs_info
=
93 sizeof (VikFileListClass
),
95 NULL
, /* base_finalize */
96 NULL
, /* class init */
97 NULL
, /* class_finalize */
98 NULL
, /* class_data */
101 NULL
/* instance init */
103 vs_type
= g_type_register_static ( GTK_TYPE_VBOX
, "VikFileList", &vs_info
, 0 );
109 GtkWidget
*vik_file_list_new ( const gchar
*title
)
111 GtkWidget
*add_btn
, *del_btn
;
112 GtkWidget
*hbox
, *scrolledwindow
;
113 VikFileList
*vfl
= VIK_FILE_LIST ( g_object_new ( VIK_FILE_LIST_TYPE
, NULL
) );
115 GtkTreeViewColumn
*column
;
117 vfl
->model
= GTK_TREE_MODEL ( gtk_list_store_new(1, G_TYPE_STRING
) );
119 vfl
->treeview
= gtk_tree_view_new ( );
120 gtk_tree_view_set_model ( GTK_TREE_VIEW(vfl
->treeview
), vfl
->model
);
121 column
= gtk_tree_view_column_new_with_attributes ( title
, gtk_cell_renderer_text_new (), "text", 0, NULL
);
122 gtk_tree_view_append_column (GTK_TREE_VIEW (vfl
->treeview
), column
);
124 gtk_widget_set_size_request ( vfl
->treeview
, 200, 100);
126 add_btn
= gtk_button_new_with_label(_("Add..."));
127 del_btn
= gtk_button_new_with_label(_("Delete"));
129 g_signal_connect_swapped ( G_OBJECT(add_btn
), "clicked", G_CALLBACK(file_list_add
), vfl
);
130 g_signal_connect_swapped ( G_OBJECT(del_btn
), "clicked", G_CALLBACK(file_list_del
), vfl
);
132 hbox
= gtk_hbox_new(FALSE
, 2);
134 scrolledwindow
= gtk_scrolled_window_new ( NULL
, NULL
);
135 gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW(scrolledwindow
), GTK_POLICY_AUTOMATIC
, GTK_POLICY_AUTOMATIC
);
136 gtk_container_add ( GTK_CONTAINER(scrolledwindow
), GTK_WIDGET(vfl
->treeview
) );
138 gtk_box_pack_start ( GTK_BOX(vfl
), scrolledwindow
, TRUE
, TRUE
, 3 );
141 gtk_box_pack_start ( GTK_BOX(hbox
), add_btn
, TRUE
, TRUE
, 3 );
142 gtk_box_pack_start ( GTK_BOX(hbox
), del_btn
, TRUE
, TRUE
, 3 );
143 gtk_box_pack_start ( GTK_BOX(vfl
), hbox
, FALSE
, FALSE
, 3 );
144 gtk_widget_show_all(GTK_WIDGET(vfl
));
146 vfl
->file_selector
= NULL
;
148 return GTK_WIDGET(vfl
);
151 static gboolean
get_file_name(GtkTreeModel
*model
, GtkTreePath
*path
, GtkTreeIter
*iter
, GList
**list
)
154 gtk_tree_model_get ( model
, iter
, 0, &str
, -1 );
155 g_debug ("%s: %s", __FUNCTION__
, str
);
156 (*list
) = g_list_append((*list
), g_strdup(str
));
160 GList
*vik_file_list_get_files ( VikFileList
*vfl
)
163 gtk_tree_model_foreach (vfl
->model
, (GtkTreeModelForeachFunc
) get_file_name
, &list
);
167 void vik_file_list_set_files ( VikFileList
*vfl
, GList
*files
)
171 gtk_list_store_append ( GTK_LIST_STORE(vfl
->model
), &iter
);
172 gtk_list_store_set ( GTK_LIST_STORE(vfl
->model
), &iter
, 0, files
->data
, -1 );