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);
146 gboolean valid_row = gtk_tree_model_get_iter_first(model, &iter);
149 gchar *filename = NULL;
150 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
151 file_list = g_list_append(file_list, strdup(filename));
154 valid_row = gtk_tree_model_iter_next(model, &iter);
157 if (file_list != NULL)
162 g_list_foreach(file_list, (GFunc)g_free, NULL);
163 g_list_free(file_list);
167 static void remove_file_button_event(GtkWidget *widget,
ui_state *ui)
170 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
171 GtkTreeSelection *selection = gtk_tree_view_get_selection(ui->gui->split_tree);
172 GList *selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
174 while (g_list_length(selected_list) > 0)
176 GList *current_element = g_list_last(selected_list);
177 GtkTreePath *path = current_element->data;
179 gtk_tree_model_get_iter(model, &iter, path);
181 gchar *filename = NULL;
182 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
185 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
186 selected_list = g_list_remove(selected_list, path);
188 gtk_tree_path_free(path);
192 if (!gtk_tree_model_get_iter_first(model, &iter))
194 gtk_widget_set_sensitive(ui->gui->queue_files_button, FALSE);
195 gtk_widget_set_sensitive(ui->gui->remove_all_files_button, FALSE);
198 gtk_widget_set_sensitive(ui->gui->remove_file_button,FALSE);
200 g_list_foreach(selected_list, (GFunc)gtk_tree_path_free, NULL);
201 g_list_free(selected_list);
205 static void remove_all_files_button_event(GtkWidget *widget,
ui_state *ui)
207 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
210 while (gtk_tree_model_get_iter_first(model, &iter))
213 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
216 gtk_list_store_remove(GTK_LIST_STORE(model), &iter);
220 gtk_widget_set_sensitive(ui->gui->remove_all_files_button,FALSE);
221 gtk_widget_set_sensitive(ui->gui->remove_file_button,FALSE);
222 gtk_widget_set_sensitive(ui->gui->queue_files_button,FALSE);
226 static void create_queue_buttons(
ui_state *ui)
229 GtkWidget *queue_files_button =
231 ui->gui->queue_files_button = queue_files_button;
232 gtk_widget_set_sensitive(queue_files_button, FALSE);
233 g_signal_connect(G_OBJECT(queue_files_button),
"clicked",
234 G_CALLBACK(queue_files_button_event), ui);
237 GtkWidget *remove_file_button =
239 ui->gui->remove_file_button = remove_file_button;
240 gtk_widget_set_sensitive(remove_file_button, FALSE);
241 g_signal_connect(G_OBJECT(remove_file_button),
"clicked",
242 G_CALLBACK(remove_file_button_event), ui);
245 GtkWidget *remove_all_files_button =
247 ui->gui->remove_all_files_button = remove_all_files_button;
248 gtk_widget_set_sensitive(remove_all_files_button, FALSE);
249 g_signal_connect(G_OBJECT(remove_all_files_button),
"clicked",
250 G_CALLBACK(remove_all_files_button_event), ui);
255 GtkTreeViewColumn *arg2,
ui_state *ui)
257 GtkTreeModel *model = gtk_tree_view_get_model(split_tree);
258 GtkTreeSelection *selection = gtk_tree_view_get_selection(split_tree);
259 GList *selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
261 GList *current_element = g_list_first(selected_list);
262 GtkTreePath *path = current_element->data;
265 gtk_tree_model_get_iter(model, &iter, path);
267 gchar *filename = NULL;
268 gtk_tree_model_get(model, &iter, COL_FILENAME, &filename, -1);
274 gtk_tree_path_free(path);
282 static void split_selection_changed(GtkTreeSelection *selec,
ui_state *ui)
284 GtkTreeModel *model = gtk_tree_view_get_model(ui->gui->split_tree);
285 GtkTreeSelection *selection = gtk_tree_view_get_selection(ui->gui->split_tree);
286 GList *selected_list = gtk_tree_selection_get_selected_rows(selection, &model);
287 if (g_list_length(selected_list) > 0)
289 gtk_widget_set_sensitive(ui->gui->remove_file_button, TRUE);
293 gtk_widget_set_sensitive(ui->gui->remove_file_button, FALSE);
300 GtkWidget *vbox = wh_vbox_new();
302 GtkTreeView *split_tree = create_split_files_tree();
303 ui->gui->split_tree = split_tree;
304 GtkWidget *scrolled_window = gtk_scrolled_window_new(NULL, NULL);
305 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled_window), GTK_SHADOW_NONE);
306 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled_window),
307 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
308 gtk_box_pack_start(GTK_BOX(vbox), scrolled_window, TRUE, TRUE, 0);
309 create_split_columns(split_tree);
310 gtk_container_add(GTK_CONTAINER(scrolled_window), GTK_WIDGET(split_tree));
314 GtkTreeSelection *split_tree_selection = gtk_tree_view_get_selection(split_tree);
315 g_signal_connect(G_OBJECT(split_tree_selection),
"changed",
316 G_CALLBACK(split_selection_changed), ui);
317 gtk_tree_selection_set_mode(GTK_TREE_SELECTION(split_tree_selection), GTK_SELECTION_MULTIPLE);
319 create_queue_buttons(ui);
void change_current_filename(const gchar *fname, ui_state *ui)
Change the name of the song that is to be cut and played.
void connect_to_player_with_song(gint i, ui_state *ui)
connects to player with the song from the filename entry
gchar * get_filename_from_split_files(gint number, gui_state *gui)
return the n_th filename from the split files
void split_tree_row_activated(GtkTreeView *split_tree, GtkTreePath *arg1, GtkTreeViewColumn *arg2, ui_state *ui)
Issued when a row is clicked on.
void connect_button_event(GtkWidget *widget, ui_state *ui)
play button event
void remove_all_split_rows(ui_state *ui)
removes all rows from the split files table
GtkWidget * create_split_files_frame(ui_state *ui)
creates the split files tab
void player_add_files(GList *list, ui_state *ui)
add files to playlist
void add_split_row(const gchar *name, ui_state *ui)
add a row to the table
const gchar * get_real_name_from_filename(const gchar *filename)
finding the real name of the file, without the path