void clear_file_list() { if (file_list) g_elist_free_data(file_list); file_list = g_elist_new(); clear_tree_view(); }
void load_file_list() { static const char *patterns[] = { #ifdef ENABLE_MP3 ".+[mM][pP][aA23]$", #endif #ifdef ENABLE_VORBIS ".+[oO][gG][gGaA]$", #endif NULL }; gint count; /* clear the form in the edit tab */ et_unload_file(); sb_printf(_("Scanning...")); cursor_set_wait(); /* flush pending operations before we start */ while (gtk_events_pending()) gtk_main_iteration(); /* rebuild the file list */ if (file_list) { g_elist_free_data(file_list); file_list = NULL; } scan_progress_start(); file_list = fu_get_file_list(working_dir->str, patterns, scan_progress_callback, gtk_toggle_button_get_active(cb_recurse), TRUE); scan_progress_stop(); /* update the interface */ update_tree_view(file_list); count = g_elist_length(file_list); switch (count) { case 0: sb_printf(_("No files found.")); break; case 1: sb_printf(_("1 file found.")); break; default: sb_printf(_("%d files found."), count); break; } cursor_set_normal(); }
GEList *fu_get_file_list( const gchar *dir_path, const gchar **patterns, fu_progress_callback callback, gboolean recurse, gboolean sort ) { GEList *result; chdir(dir_path); if (!recurse) { result = aux_file_list(NULL, NULL, ".", patterns, sort); if (callback != NULL) callback(1, (int)result->length); } else { GEList *dir_stack; GHashTable *dir_memory; gchar *cur_dir; int dircount = 0; result = g_elist_new(); dir_stack = g_elist_new(); dir_memory = g_hash_table_new(file_uid_hash, file_uid_equal); g_elist_push(dir_stack, g_strdup(".")); while (g_elist_length(dir_stack) > 0) { cur_dir = g_elist_pop(dir_stack); g_elist_concat(result, aux_file_list(dir_stack, dir_memory, cur_dir, patterns, sort)); g_free(cur_dir); dircount++; if (callback != NULL) if (callback(dircount, (int)result->length)) break; } g_elist_free_data(dir_stack); g_hash_table_free(dir_memory, TRUE, FALSE); } return result; }
void fl_init(GtkBuilder *builder) { GEList *dir_list; /* * get the widgets from glade */ w_main = GTK_WINDOW(gtk_builder_get_object(builder, "w_main")); combo_wd = GTK_COMBO_BOX_TEXT(gtk_builder_get_object(builder, "combo_wd")); ent_wd = GTK_ENTRY(gtk_builder_get_object(builder, "ent_wd")); cb_recurse = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "cb_recurse")); tv_files = GTK_TREE_VIEW(gtk_builder_get_object(builder, "tv_files")); lab_file_count = GTK_LABEL(gtk_builder_get_object(builder, "lab_file_count")); menu_file_list = GTK_MENU(gtk_builder_get_object(builder, "menu_file_list")); m_ctx_manual_rename = GTK_MENU_ITEM(gtk_builder_get_object(builder, "m_ctx_manual_rename")); m_ctx_delete = GTK_MENU_ITEM(gtk_builder_get_object(builder, "m_ctx_delete")); m_ctx_unselect_all = GTK_MENU_ITEM(gtk_builder_get_object(builder, "m_ctx_unselect_all")); l_help_title = GTK_LABEL(gtk_builder_get_object(builder, "l_help_title")); l_help_secondary = GTK_LABEL(gtk_builder_get_object(builder, "l_help_secondary")); /* * create the file chooser */ dlg_wd_select = GTK_DIALOG(gtk_file_chooser_dialog_new( _("Select Directory"), w_main, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, "Cancel", GTK_RESPONSE_CANCEL, "Open", GTK_RESPONSE_ACCEPT, NULL)); /* * load file list icons */ pix_file = gdk_pixbuf_new_from_file(DATADIR"/file.png", NULL); pix_folder = gdk_pixbuf_new_from_file(DATADIR"/folder.png", NULL); /* * setup the file list treeview */ setup_tree_view(); g_signal_connect(gtk_tree_view_get_selection(tv_files), "changed", G_CALLBACK(cb_file_selection_changed), NULL); gtk_tree_selection_set_select_function(gtk_tree_view_get_selection(tv_files), cb_file_selection_changing, NULL, NULL); /* * get the preference values, or set them to defaults */ /* recurse */ recurse = pref_get_ref("ds:recurse"); if (!recurse) { gboolean temp = FALSE; recurse = pref_set("ds:recurse", PREF_BOOLEAN, &temp); } gtk_toggle_button_set_active(cb_recurse, *recurse); /* dir_mru */ dir_list = pref_get_ref("ds:dir_mru"); if (!dir_list) { GEList *temp_list = g_elist_new(); g_elist_append(temp_list, (void*)g_get_home_dir()); dir_list = pref_set("ds:dir_mru", PREF_STRING | PREF_LIST, temp_list); g_elist_free_data(temp_list); } dir_mru = mru_new_from_list(10, dir_list); }