40 #include "split_files_window.h"
51 static GtkTreeModel *create_split_model()
53 GtkListStore *model = gtk_list_store_new(SPLIT_COLUMNS, G_TYPE_STRING, G_TYPE_STRING);
54 return GTK_TREE_MODEL(model);
58 static GtkTreeView *create_split_files_tree()
60 return GTK_TREE_VIEW(gtk_tree_view_new_with_model(create_split_model()));
64 static void create_split_columns(GtkTreeView *split_tree)
66 GtkCellRendererText *renderer = GTK_CELL_RENDERER_TEXT(gtk_cell_renderer_text_new());
67 g_object_set_data(G_OBJECT(renderer),
"col", GINT_TO_POINTER(COL_NAME));
68 GtkTreeViewColumn *name_column = gtk_tree_view_column_new_with_attributes
69 (_(
"Filename"), GTK_CELL_RENDERER(renderer),
"text", COL_NAME, NULL);
71 gtk_tree_view_insert_column(split_tree, GTK_TREE_VIEW_COLUMN(name_column), COL_NAME);
73 gtk_tree_view_column_set_alignment(GTK_TREE_VIEW_COLUMN(name_column), 0.5);
74 gtk_tree_view_column_set_sizing(GTK_TREE_VIEW_COLUMN(name_column),
75 GTK_TREE_VIEW_COLUMN_AUTOSIZE);
76 gtk_tree_view_column_set_resizable(name_column, TRUE);
82 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
84 while (gtk_tree_model_get_iter_first(model, &iter))
86 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
94 const gchar *fname = filename;
95 while (strchr(fname, G_DIR_SEPARATOR) != NULL)
97 fname = strchr(fname, G_DIR_SEPARATOR) + 1;
107 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
108 gtk_list_store_append(GTK_LIST_STORE(model), &iter);
110 gtk_list_store_set(GTK_LIST_STORE(model), &iter,
112 COL_FILENAME, name, -1);
118 gchar *filename = NULL;
120 GtkTreeModel *model = gtk_tree_view_get_model(gui->split_tree);
121 GtkTreePath *path = gtk_tree_path_new_from_indices(number-1 ,-1);
124 if (gtk_tree_model_get_iter(model, &iter, path))
126 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
128 gtk_tree_path_free(path);
134 static void queue_files_button_event(GtkWidget *widget,
ui_state *ui)
136 if (!ui->status->timer_active)
141 GList *file_list = NULL;
142 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
145 while (gtk_tree_model_get_iter_first(model, &iter))
147 gchar *filename = NULL;
148 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
149 file_list = g_list_append(file_list, strdup(filename));
153 if (file_list != NULL)
158 g_list_foreach(file_list, (GFunc)g_free, NULL);
159 g_list_free(file_list);
163 static void remove_file_button_event(GtkWidget *widget,
ui_state *ui)
166 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
167 GtkTreeSelection *selection = gtk_tree_view_get_selection(ui->gui->split_tree);
168 GList *selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
170 while (g_list_length(selected_list) > 0)
172 GList *current_element = g_list_last(selected_list);
173 GtkTreePath *path = current_element->data;
175 gtk_tree_model_get_iter(model, &iter, path);
177 gchar *filename = NULL;
178 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
181 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
182 selected_list = g_list_remove(selected_list, path);
184 gtk_tree_path_free(path);
188 if (!gtk_tree_model_get_iter_first(model, &iter))
190 gtk_widget_set_sensitive(ui->gui->queue_files_button, FALSE);
191 gtk_widget_set_sensitive(ui->gui->remove_all_files_button, FALSE);
194 gtk_widget_set_sensitive(ui->gui->remove_file_button,FALSE);
196 g_list_foreach(selected_list, (GFunc)gtk_tree_path_free, NULL);
197 g_list_free(selected_list);
201 static void remove_all_files_button_event(GtkWidget *widget,
ui_state *ui)
203 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
206 while (gtk_tree_model_get_iter_first(model, &iter))
209 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
212 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
216 gtk_widget_set_sensitive(ui->gui->remove_all_files_button,FALSE);
217 gtk_widget_set_sensitive(ui->gui->remove_file_button,FALSE);
218 gtk_widget_set_sensitive(ui->gui->queue_files_button,FALSE);
222 static void create_queue_buttons(
ui_state *ui)
225 GtkWidget *queue_files_button =
227 ui->gui->queue_files_button = queue_files_button;
228 gtk_widget_set_sensitive(queue_files_button, FALSE);
229 g_signal_connect(G_OBJECT(queue_files_button),
"clicked",
230 G_CALLBACK(queue_files_button_event), ui);
233 GtkWidget *remove_file_button =
235 ui->gui->remove_file_button = remove_file_button;
236 gtk_widget_set_sensitive(remove_file_button, FALSE);
237 g_signal_connect(G_OBJECT(remove_file_button),
"clicked",
238 G_CALLBACK(remove_file_button_event), ui);
241 GtkWidget *remove_all_files_button =
243 ui->gui->remove_all_files_button = remove_all_files_button;
244 gtk_widget_set_sensitive(remove_all_files_button, FALSE);
245 g_signal_connect(G_OBJECT(remove_all_files_button),
"clicked",
246 G_CALLBACK(remove_all_files_button_event), ui);
251 GtkTreeViewColumn *arg2,
ui_state *ui)
253 GtkTreeModel *model = gtk_tree_view_get_model(split_tree);
254 GtkTreeSelection *selection = gtk_tree_view_get_selection(split_tree);
255 GList *selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
257 GList *current_element = g_list_first(selected_list);
258 GtkTreePath *path = current_element->data;
261 gtk_tree_model_get_iter(model, &iter, path);
263 gchar *filename = NULL;
264 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
270 gtk_tree_path_free(path);
278 static void split_selection_changed(GtkTreeSelection *selec,
ui_state *ui)
280 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
281 GtkTreeSelection *selection = gtk_tree_view_get_selection(ui->gui->split_tree);
282 GList *selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
283 if (g_list_length(selected_list) > 0)
285 gtk_widget_set_sensitive(ui->gui->remove_file_button, TRUE);
289 gtk_widget_set_sensitive(ui->gui->remove_file_button, FALSE);
296 GtkWidget *vbox = wh_vbox_new();
298 GtkTreeView *split_tree = create_split_files_tree();
299 ui->gui->split_tree = split_tree;
300 GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
301 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE);
302 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
303 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
304 gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
305 create_split_columns(split_tree);
306 gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(split_tree));
310 GtkTreeSelection *split_tree_selection = gtk_tree_view_get_selection(split_tree);
311 g_signal_connect(G_OBJECT(split_tree_selection),
"changed",
312 G_CALLBACK(split_selection_changed), ui);
313 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(split_tree_selection), GTK_SELECTION_MULTIPLE);
315 create_queue_buttons(ui);