/* load tracks from specified directory to resume play */ void resume_directory(const char *dir) { int dirfilter = *tc.dirfilter; int ret; #ifdef HAVE_TAGCACHE bool id3db = *tc.dirfilter == SHOW_ID3DB; #endif /* make sure the dirfilter is sane. The only time it should be possible * thats its not is when resume playlist is called from a plugin */ #ifdef HAVE_TAGCACHE if (!id3db) #endif *tc.dirfilter = global_settings.dirfilter; ret = ft_load(&tc, dir); *tc.dirfilter = dirfilter; if (ret < 0) return; lastdir[0] = 0; ft_build_playlist(&tc, 0); #ifdef HAVE_TAGCACHE if (id3db) tagtree_load(&tc); #endif }
/* Selects a file and update tree context properly */ void set_current_file(const char *path) { const char *name; int i; #ifdef HAVE_TAGCACHE /* in ID3DB mode it is a bad idea to call this function */ /* (only happens with `follow playlist') */ if( *tc.dirfilter == SHOW_ID3DB ) return; #endif /* separate directory from filename */ /* gets the directory's name and put it into tc.currdir */ name = strrchr(path+1,'/'); if (name) { strlcpy(tc.currdir, path, name - path + 1); name++; } else { strcpy(tc.currdir, "/"); name = path+1; } strcpy(lastfile, name); /* If we changed dir we must recalculate the dirlevel and adjust the selected history properly */ if (strncmp(tc.currdir,lastdir,sizeof(lastdir))) { tc.dirlevel = 0; tc.selected_item_history[tc.dirlevel] = -1; /* use '/' to calculate dirlevel */ for (i = 1; path[i] != '\0'; i++) { if (path[i] == '/') { tc.dirlevel++; tc.selected_item_history[tc.dirlevel] = -1; } } } if (ft_load(&tc, NULL) >= 0) { tc.selected_item = tree_get_file_position(lastfile); } }
GF_EXPORT GF_BaseInterface *LoadInterface(u32 InterfaceType) { if (InterfaceType == GF_FONT_READER_INTERFACE) return (GF_BaseInterface *)ft_load(); return NULL; }
/* * Called when a new dir is loaded (for example when returning from other apps ...) * also completely redraws the tree */ static int update_dir(void) { bool changed = false; #ifdef HAVE_TAGCACHE bool id3db = *tc.dirfilter == SHOW_ID3DB; /* Checks for changes */ if (id3db) { if (tc.currtable != lasttable || tc.currextra != lastextra || tc.firstpos != lastfirstpos || reload_dir) { if (tagtree_load(&tc) < 0) return -1; lasttable = tc.currtable; lastextra = tc.currextra; lastfirstpos = tc.firstpos; changed = true; } } else #endif { /* if the tc.currdir has been changed, reload it ...*/ if (strncmp(tc.currdir, lastdir, sizeof(lastdir)) || reload_dir) { if (ft_load(&tc, NULL) < 0) return -1; strcpy(lastdir, tc.currdir); changed = true; } } /* if selected item is undefined */ if (tc.selected_item == -1) { /* use lastfile to determine the selected item */ tc.selected_item = tree_get_file_position(lastfile); /* If the file doesn't exists, select the first one (default) */ if(tc.selected_item < 0) tc.selected_item = 0; changed = true; } if (changed) { if( #ifdef HAVE_TAGCACHE !id3db && #endif tc.dirfull ) { splash(HZ, ID2P(LANG_SHOWDIR_BUFFER_FULL)); } } #ifdef HAVE_TAGCACHE if (id3db) { #ifdef HAVE_LCD_BITMAP if (global_settings.show_path_in_browser == SHOW_PATH_FULL || global_settings.show_path_in_browser == SHOW_PATH_CURRENT) { gui_synclist_set_title(&tree_lists, tagtree_get_title(&tc), filetype_get_icon(ATTR_DIRECTORY)); } else { /* Must clear the title as the list is reused */ gui_synclist_set_title(&tree_lists, NULL, NOICON); } #endif } else #endif { #ifdef HAVE_LCD_BITMAP if (tc.browse && tc.browse->title) { int icon = tc.browse->icon; if (icon == NOICON) icon = filetype_get_icon(ATTR_DIRECTORY); gui_synclist_set_title(&tree_lists, tc.browse->title, icon); } else if (global_settings.show_path_in_browser == SHOW_PATH_FULL) { gui_synclist_set_title(&tree_lists, tc.currdir, filetype_get_icon(ATTR_DIRECTORY)); } else if (global_settings.show_path_in_browser == SHOW_PATH_CURRENT) { char *title = strrchr(tc.currdir, '/') + 1; if (*title == '\0') { /* Display "Files" for the root dir */ gui_synclist_set_title(&tree_lists, str(LANG_DIR_BROWSER), filetype_get_icon(ATTR_DIRECTORY)); } else gui_synclist_set_title(&tree_lists, title, filetype_get_icon(ATTR_DIRECTORY)); } else { /* Must clear the title as the list is reused */ gui_synclist_set_title(&tree_lists, NULL, NOICON); } #endif } gui_synclist_set_nb_items(&tree_lists, tc.filesindir); gui_synclist_set_icon_callback(&tree_lists, global_settings.show_icons?tree_get_fileicon:NULL); if( tc.selected_item >= tc.filesindir) tc.selected_item=tc.filesindir-1; gui_synclist_select_item(&tree_lists, tc.selected_item); #ifdef HAVE_BUTTONBAR if (global_settings.buttonbar) { if (*tc.dirfilter < NUM_FILTER_MODES) gui_buttonbar_set(&tree_buttonbar, str(LANG_SYSFONT_DIRBROWSE_F1), str(LANG_SYSFONT_DIRBROWSE_F2), str(LANG_SYSFONT_DIRBROWSE_F3)); else gui_buttonbar_set(&tree_buttonbar, "<<<", "", ""); gui_buttonbar_draw(&tree_buttonbar); } #endif gui_synclist_draw(&tree_lists); gui_synclist_speak_item(&tree_lists); return tc.filesindir; }
static void load_options(void) { XFILE *file; Options tmp; int error = 0; long n, opt_n; get_set_video(0); /* DjV 007 030103 get current video mode */ if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL) { opt_n = sizeof(Options); tmp.version = 0; x_fread(file, &tmp, sizeof(int)); /* HR 240103: load older cfg versions */ if ( tmp.version >= MIN_VERSION && tmp.version < CFG_VERSION ) { memset(&tmp.V2_2, 0, sizeof(tmp.V2_2)); opt_n -= sizeof(tmp.V2_2); } x_fclose(file); } if ((file = x_fopen(optname, O_DENYW | O_RDONLY, &error)) != NULL) { if ((n = x_fread(file, &tmp, opt_n)) == opt_n) { if ( tmp.version >= MIN_VERSION /* DjV 005 120103 (was 0x119) */ && tmp.version <= CFG_VERSION && tmp.magic == MAGIC ) { options = tmp; if (opt_n != sizeof(Options)) /* HR 240103 */ { options.V2_2.fields = WD_SHSIZ | WD_SHDAT | WD_SHTIM | WD_SHATT; /* DjV 010 251202 HR 240103 */ options.attribs = FA_SUBDIR | FA_SYSTEM; /* DjV 004 251202 HR 240103 */ } ins_shorts(); /* DjV 019 080103 put kbd shortcuts into menu texts */ wd_deselect_all(); wd_default(); if (tmp.cprefs & SAVE_COLORS) error = load_colors(file); if (error == 0) if ((error = dsk_load(file)) == 0) if ((error = ft_load(file)) == 0) if ((error = icnt_load(file)) == 0) if ((error = app_load(file)) == 0) if ((error = prg_load(file)) == 0) error = wd_load(file); } else { alert_printf(1, MVALIDCF); x_fclose(file); return; } /* DjV 007 030103 ---vvv--- */ /* If read ok, set video state but do not change resolution */ get_set_video(1); /* DjV 007 030103 ---^^^--- */ } else { error = (n < 0) ? (int) n : EEOF; hndl_error(MLOADCFG, error); x_fclose(file); return; } x_fclose(file); } if (error != 0) { hndl_error(MLOADCFG, error); opt_default(); dsk_default(); ft_default(); icnt_default(); app_default(); prg_default(); wd_default(); } if (options.version < 0x0130) options.dial_mode = (options.cprefs & 0x80) ? XD_BUFFERED : XD_NORMAL; xd_setposmode((options.cprefs & DIALPOS_MODE) ? XD_MOUSE : XD_CENTERED); set_dialmode(); options.version = CFG_VERSION; }