summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/filetree.c7
-rw-r--r--apps/menus/theme_menu.c78
-rw-r--r--apps/plugins/rockpaint.c2
-rw-r--r--apps/plugins/text_viewer/tv_menu.c1
-rw-r--r--apps/radio/presets.c8
-rw-r--r--apps/root_menu.c21
-rw-r--r--apps/tree.c148
-rw-r--r--apps/tree.h28
8 files changed, 196 insertions, 97 deletions
diff --git a/apps/filetree.c b/apps/filetree.c
index 1dc510f8c7..6fb0ed5469 100644
--- a/apps/filetree.c
+++ b/apps/filetree.c
@@ -269,12 +269,16 @@ int ft_load(struct tree_context* c, const char* tempdir)
269{ 269{
270 int i; 270 int i;
271 int name_buffer_used = 0; 271 int name_buffer_used = 0;
272 bool (*callback_show_item)(char *, int, struct tree_context *) = NULL;
272 DIR *dir; 273 DIR *dir;
273 274
274 if (tempdir) 275 if (tempdir)
275 dir = opendir(tempdir); 276 dir = opendir(tempdir);
276 else 277 else
278 {
277 dir = opendir(c->currdir); 279 dir = opendir(c->currdir);
280 callback_show_item = c->browse? c->browse->callback_show_item: NULL;
281 }
278 if(!dir) 282 if(!dir)
279 return -1; /* not a directory */ 283 return -1; /* not a directory */
280 284
@@ -351,7 +355,8 @@ int ft_load(struct tree_context* c, const char* tempdir)
351 (*c->dirfilter == SHOW_LNG && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LNG) || 355 (*c->dirfilter == SHOW_LNG && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LNG) ||
352 (*c->dirfilter == SHOW_MOD && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_MOD) || 356 (*c->dirfilter == SHOW_MOD && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_MOD) ||
353 (*c->dirfilter == SHOW_PLUGINS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_ROCK && 357 (*c->dirfilter == SHOW_PLUGINS && (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_ROCK &&
354 (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LUA)) 358 (dptr->attr & FILE_ATTR_MASK) != FILE_ATTR_LUA) ||
359 (callback_show_item && !callback_show_item(entry->d_name, dptr->attr, c)))
355 { 360 {
356 i--; 361 i--;
357 continue; 362 continue;
diff --git a/apps/menus/theme_menu.c b/apps/menus/theme_menu.c
index 983eca9445..b483a7ef11 100644
--- a/apps/menus/theme_menu.c
+++ b/apps/menus/theme_menu.c
@@ -246,9 +246,85 @@ static struct browse_folder_info themes = {THEME_DIR, SHOW_CFG};
246 246
247int browse_folder(void *param) 247int browse_folder(void *param)
248{ 248{
249 const char *ext, *setting;
250 int lang_id = -1;
251 char selected[MAX_FILENAME+10];
249 const struct browse_folder_info *info = 252 const struct browse_folder_info *info =
250 (const struct browse_folder_info*)param; 253 (const struct browse_folder_info*)param;
251 return rockbox_browse(info->dir, info->show_options); 254 struct browse_context browse;
255 browse_context_init(&browse, info->show_options, 0,
256 NULL, NOICON, info->dir, NULL);
257
258 /* if we are in a special settings folder, center the current setting */
259 switch(info->show_options)
260 {
261 case SHOW_LNG:
262 ext = "lng";
263 if (global_settings.lang_file[0])
264 setting = global_settings.lang_file;
265 else
266 setting = "english";
267 lang_id = LANG_LANGUAGE;
268 break;
269 case SHOW_WPS:
270 ext = "wps";
271 setting = global_settings.wps_file;
272 lang_id = LANG_WHILE_PLAYING;
273 break;
274#ifdef HAVE_LCD_BITMAP
275 case SHOW_FONT:
276 ext = "fnt";
277 setting = global_settings.font_file;
278 lang_id = LANG_CUSTOM_FONT;
279 break;
280 case SHOW_SBS:
281 ext = "sbs";
282 setting = global_settings.sbs_file;
283 lang_id = LANG_BASE_SKIN;
284 break;
285#if CONFIG_TUNER
286 case SHOW_FMS:
287 ext = "fms";
288 setting = global_settings.fms_file;
289 lang_id = LANG_RADIOSCREEN;
290 break;
291#endif /* CONFIG_TUNER */
292#endif
293#ifdef HAVE_REMOTE_LCD
294 case SHOW_RWPS:
295 ext = "rwps";
296 setting = global_settings.rwps_file;
297 lang_id = LANG_REMOTE_WHILE_PLAYING;
298 break;
299 case SHOW_RSBS:
300 ext = "rsbs";
301 setting = global_settings.rsbs_file;
302 lang_id = LANG_REMOTE_BASE_SKIN;
303 break;
304#if CONFIG_TUNER
305 case SHOW_RFMS:
306 ext = "rfms";
307 setting = global_settings.rfms_file;
308 lang_id = LANG_REMOTE_RADIOSCREEN;
309 break;
310#endif /* CONFIG_TUNER */
311#endif
312 default:
313 ext = setting = NULL;
314 break;
315 }
316
317 /* If we've found a file to center on, do it */
318 if (setting)
319 {
320 /* if setting != NULL, ext is initialized */
321 snprintf(selected, sizeof(selected), "%s.%s", setting, ext);
322 browse.selected = selected;
323 browse.icon = Icon_Questionmark;
324 browse.title = str(lang_id);
325 }
326
327 return rockbox_browse(&browse);
252} 328}
253 329
254#ifdef HAVE_LCD_BITMAP 330#ifdef HAVE_LCD_BITMAP
diff --git a/apps/plugins/rockpaint.c b/apps/plugins/rockpaint.c
index 4ef139a526..fc4621a805 100644
--- a/apps/plugins/rockpaint.c
+++ b/apps/plugins/rockpaint.c
@@ -731,6 +731,7 @@ static bool browse( char *dst, int dst_size, const char *start )
731 } 731 }
732 rb->strcpy( a+1, dc[tree->selected_item].name ); 732 rb->strcpy( a+1, dc[tree->selected_item].name );
733 tree->dirfilter = &dirfilter; 733 tree->dirfilter = &dirfilter;
734 tree->browse = NULL;
734 while( 1 ) 735 while( 1 )
735 { 736 {
736 if( reload ) 737 if( reload )
@@ -880,6 +881,7 @@ static bool browse_fonts( char *dst, int dst_size )
880 } 881 }
881 rb->strcpy( a+1, dc[tree->selected_item].name ); 882 rb->strcpy( a+1, dc[tree->selected_item].name );
882 tree->dirfilter = &dirfilter; 883 tree->dirfilter = &dirfilter;
884 tree->browse = NULL;
883 rb->strcpy( bbuf, FONT_DIR "/" ); 885 rb->strcpy( bbuf, FONT_DIR "/" );
884 rb->set_current_file( bbuf ); 886 rb->set_current_file( bbuf );
885 887
diff --git a/apps/plugins/text_viewer/tv_menu.c b/apps/plugins/text_viewer/tv_menu.c
index 1d1e07f3e8..5e79fd469a 100644
--- a/apps/plugins/text_viewer/tv_menu.c
+++ b/apps/plugins/text_viewer/tv_menu.c
@@ -234,6 +234,7 @@ static bool tv_font_setting(void)
234 rb->strlcat(backup.currdir, "/", MAX_PATH); 234 rb->strlcat(backup.currdir, "/", MAX_PATH);
235 rb->strlcat(backup.currdir, dc[tree->selected_item].name, MAX_PATH); 235 rb->strlcat(backup.currdir, dc[tree->selected_item].name, MAX_PATH);
236 tree->dirfilter = &dirfilter; 236 tree->dirfilter = &dirfilter;
237 tree->browse = NULL;
237 rb->snprintf(font_path, MAX_PATH, "%s/", FONT_DIR); 238 rb->snprintf(font_path, MAX_PATH, "%s/", FONT_DIR);
238 rb->set_current_file(font_path); 239 rb->set_current_file(font_path);
239 count = tree->filesindir; 240 count = tree->filesindir;
diff --git a/apps/radio/presets.c b/apps/radio/presets.c
index e900afe734..9c6fedecc7 100644
--- a/apps/radio/presets.c
+++ b/apps/radio/presets.c
@@ -353,7 +353,13 @@ static int radio_delete_preset(void)
353 353
354int preset_list_load(void) 354int preset_list_load(void)
355{ 355{
356 return !rockbox_browse(FMPRESET_PATH, SHOW_FMR); 356 char selected[MAX_PATH];
357 struct browse_context browse;
358 snprintf(selected, sizeof(selected), "%s.%s", global_settings.fmr_file, "fmr");
359 browse_context_init(&browse, SHOW_FMR, 0,
360 str(LANG_FM_PRESET_LOAD), NOICON,
361 FMPRESET_PATH, selected);
362 return !rockbox_browse(&browse);
357} 363}
358 364
359int preset_list_save(void) 365int preset_list_save(void)
diff --git a/apps/root_menu.c b/apps/root_menu.c
index a65ceb51b9..27242c9797 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -96,6 +96,7 @@ static int browser(void* param)
96#ifdef HAVE_TAGCACHE 96#ifdef HAVE_TAGCACHE
97 struct tree_context* tc = tree_get_context(); 97 struct tree_context* tc = tree_get_context();
98#endif 98#endif
99 struct browse_context browse;
99 int filter = SHOW_SUPPORTED; 100 int filter = SHOW_SUPPORTED;
100 char folder[MAX_PATH] = "/"; 101 char folder[MAX_PATH] = "/";
101 /* stuff needed to remember position in file browser */ 102 /* stuff needed to remember position in file browser */
@@ -104,7 +105,7 @@ static int browser(void* param)
104#ifdef HAVE_TAGCACHE 105#ifdef HAVE_TAGCACHE
105 static int last_db_dirlevel = 0, last_db_selection = 0; 106 static int last_db_dirlevel = 0, last_db_selection = 0;
106#endif 107#endif
107 108
108 switch ((intptr_t)param) 109 switch ((intptr_t)param)
109 { 110 {
110 case GO_TO_FILEBROWSER: 111 case GO_TO_FILEBROWSER:
@@ -247,12 +248,10 @@ static int browser(void* param)
247 tc->selected_item = last_db_selection; 248 tc->selected_item = last_db_selection;
248 break; 249 break;
249#endif 250#endif
250 case GO_TO_BROWSEPLUGINS:
251 filter = SHOW_PLUGINS;
252 strlcpy(folder, PLUGIN_DIR, MAX_PATH);
253 break;
254 } 251 }
255 ret_val = rockbox_browse(folder, filter); 252
253 browse_context_init(&browse, filter, 0, NULL, NOICON, folder, NULL);
254 ret_val = rockbox_browse(&browse);
256 switch ((intptr_t)param) 255 switch ((intptr_t)param)
257 { 256 {
258 case GO_TO_FILEBROWSER: 257 case GO_TO_FILEBROWSER:
@@ -352,8 +351,11 @@ static int plugins_menu(void* param)
352 ID2P(LANG_PLUGIN_GAMES), 351 ID2P(LANG_PLUGIN_GAMES),
353 ID2P(LANG_PLUGIN_APPS), ID2P(LANG_PLUGIN_DEMOS)); 352 ID2P(LANG_PLUGIN_APPS), ID2P(LANG_PLUGIN_DEMOS));
354 const char *folder; 353 const char *folder;
354 struct browse_context browse;
355 char *title;
355 int retval = GO_TO_PREVIOUS; 356 int retval = GO_TO_PREVIOUS;
356 int selection = 0, current = 0; 357 int selection = 0, current = 0;
358
357 while (retval == GO_TO_PREVIOUS) 359 while (retval == GO_TO_PREVIOUS)
358 { 360 {
359 selection = do_menu(&plugins_menu_items, &current, NULL, false); 361 selection = do_menu(&plugins_menu_items, &current, NULL, false);
@@ -361,17 +363,22 @@ static int plugins_menu(void* param)
361 { 363 {
362 case 0: 364 case 0:
363 folder = PLUGIN_GAMES_DIR; 365 folder = PLUGIN_GAMES_DIR;
366 title = str(LANG_PLUGIN_GAMES);
364 break; 367 break;
365 case 1: 368 case 1:
366 folder = PLUGIN_APPS_DIR; 369 folder = PLUGIN_APPS_DIR;
370 title = str(LANG_PLUGIN_APPS);
367 break; 371 break;
368 case 2: 372 case 2:
369 folder = PLUGIN_DEMOS_DIR; 373 folder = PLUGIN_DEMOS_DIR;
374 title = str(LANG_PLUGIN_DEMOS);
370 break; 375 break;
371 default: 376 default:
372 return selection; 377 return selection;
373 } 378 }
374 retval = rockbox_browse(folder, SHOW_PLUGINS); 379 browse_context_init(&browse, SHOW_PLUGINS, 0,
380 title, Icon_Plugin, folder, NULL);
381 retval = rockbox_browse(&browse);
375 } 382 }
376 return retval; 383 return retval;
377} 384}
diff --git a/apps/tree.c b/apps/tree.c
index 98880f001a..b0e94bf936 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -417,18 +417,12 @@ static int update_dir(void)
417#endif 417#endif
418 { 418 {
419#ifdef HAVE_LCD_BITMAP 419#ifdef HAVE_LCD_BITMAP
420 if (global_settings.show_path_in_browser && 420 if (tc.browse && tc.browse->title)
421 *(tc.dirfilter) == SHOW_PLUGINS)
422 { 421 {
423 char *title; 422 int icon = tc.browse->icon;
424 if (!strcmp(tc.currdir, PLUGIN_GAMES_DIR)) 423 if (icon == NOICON)
425 title = str(LANG_PLUGIN_GAMES); 424 icon = filetype_get_icon(ATTR_DIRECTORY);
426 else if (!strcmp(tc.currdir, PLUGIN_APPS_DIR)) 425 gui_synclist_set_title(&tree_lists, tc.browse->title, icon);
427 title = str(LANG_PLUGIN_APPS);
428 else if (!strcmp(tc.currdir, PLUGIN_DEMOS_DIR))
429 title = str(LANG_PLUGIN_DEMOS);
430 else title = str(LANG_PLUGINS);
431 gui_synclist_set_title(&tree_lists, title, Icon_Plugin);
432 } 426 }
433 else if (global_settings.show_path_in_browser == SHOW_PATH_FULL) 427 else if (global_settings.show_path_in_browser == SHOW_PATH_FULL)
434 { 428 {
@@ -616,7 +610,7 @@ void set_current_file(const char *path)
616 610
617 611
618/* main loop, handles key events */ 612/* main loop, handles key events */
619static int dirbrowse() 613static int dirbrowse(void)
620{ 614{
621 int numentries=0; 615 int numentries=0;
622 char buf[MAX_PATH]; 616 char buf[MAX_PATH];
@@ -653,7 +647,7 @@ static int dirbrowse()
653 if (*tc.dirfilter > NUM_FILTER_MODES && numentries==0) 647 if (*tc.dirfilter > NUM_FILTER_MODES && numentries==0)
654 { 648 {
655 splash(HZ*2, ID2P(LANG_NO_FILES)); 649 splash(HZ*2, ID2P(LANG_NO_FILES));
656 return GO_TO_PREVIOUS; /* No files found for rockbox_browser() */ 650 return GO_TO_PREVIOUS; /* No files found for rockbox_browse() */
657 } 651 }
658 652
659 gui_synclist_draw(&tree_lists); 653 gui_synclist_draw(&tree_lists);
@@ -683,6 +677,14 @@ static int dirbrowse()
683 if ( numentries == 0 ) 677 if ( numentries == 0 )
684 break; 678 break;
685 679
680 if ((tc.browse->flags & BROWSE_SELECTONLY) &&
681 !(dircache[tc.selected_item].attr & ATTR_DIRECTORY))
682 {
683 tc.browse->flags |= BROWSE_SELECTED;
684 get_current_file(tc.browse->buf, tc.browse->bufsize);
685 return GO_TO_PREVIOUS;
686 }
687
686#ifdef HAVE_TAGCACHE 688#ifdef HAVE_TAGCACHE
687 switch (id3db?tagtree_enter(&tc):ft_enter(&tc)) 689 switch (id3db?tagtree_enter(&tc):ft_enter(&tc))
688#else 690#else
@@ -781,6 +783,11 @@ static int dirbrowse()
781 int onplay_result; 783 int onplay_result;
782 int attr = 0; 784 int attr = 0;
783 785
786 /* no context menu while in select only mode
787 to prevent recursive call */
788 if ((tc.browse->flags & BROWSE_SELECTONLY))
789 break;
790
784 if(!numentries) 791 if(!numentries)
785 onplay_result = onplay(NULL, 0, curr_context, hotkey); 792 onplay_result = onplay(NULL, 0, curr_context, hotkey);
786 else { 793 else {
@@ -924,108 +931,77 @@ bool create_playlist(void)
924 return true; 931 return true;
925} 932}
926 933
927int rockbox_browse(const char *root, int dirfilter) 934void browse_context_init(struct browse_context *browse,
935 int dirfilter, unsigned flags,
936 char *title, enum themable_icons icon,
937 const char *root, const char *selected)
938{
939 browse->dirfilter = dirfilter;
940 browse->flags = flags;
941 browse->callback_show_item = NULL;
942 browse->title = title;
943 browse->icon = icon;
944 browse->root = root;
945 browse->selected = selected;
946 browse->buf = NULL;
947 browse->bufsize = 0;
948}
949
950#define NUM_TC_BACKUP 3
951static struct tree_context backups[NUM_TC_BACKUP];
952/* do not make backup if it is not recursive call */
953static int backup_count = -1;
954int rockbox_browse(struct browse_context *browse)
928{ 955{
929 static char current[MAX_PATH]; 956 static char current[MAX_PATH];
930 int ret_val = 0; 957 int ret_val = 0;
931 int *last_filter = tc.dirfilter; 958 int dirfilter = browse->dirfilter;
959
960 if (backup_count >= NUM_TC_BACKUP)
961 return GO_TO_PREVIOUS;
962 if (backup_count >= 0)
963 backups[backup_count] = tc;
964 backup_count++;
965
932 tc.dirfilter = &dirfilter; 966 tc.dirfilter = &dirfilter;
933 tc.sort_dir = global_settings.sort_dir; 967 tc.sort_dir = global_settings.sort_dir;
934 968
935 reload_dir = true; 969 reload_dir = true;
936 if (dirfilter >= NUM_FILTER_MODES) 970 if (*tc.dirfilter >= NUM_FILTER_MODES)
937 { 971 {
938 static struct tree_context backup;
939 int last_context; 972 int last_context;
940 const char *ext, *setting; 973
941 974 tc.browse = browse;
942 backup = tc;
943 tc.selected_item = 0; 975 tc.selected_item = 0;
944 tc.dirlevel = 0; 976 tc.dirlevel = 0;
945 memcpy(tc.currdir, root, sizeof(tc.currdir)); 977 strlcpy(tc.currdir, browse->root, sizeof(tc.currdir));
946 start_wps = false; 978 start_wps = false;
947 last_context = curr_context; 979 last_context = curr_context;
948 980
949 /* if we are in a special settings folder, center the current setting */ 981 if (browse->selected)
950 switch(dirfilter)
951 {
952 case SHOW_LNG:
953 ext = "lng";
954 if (global_settings.lang_file[0])
955 setting = global_settings.lang_file;
956 else
957 setting = "english";
958 break;
959 case SHOW_WPS:
960 ext = "wps";
961 setting = global_settings.wps_file;
962 break;
963#ifdef HAVE_REMOTE_LCD
964 case SHOW_RWPS:
965 ext = "rwps";
966 setting = global_settings.rwps_file;
967 break;
968 case SHOW_RSBS:
969 ext = "rsbs";
970 setting = global_settings.rsbs_file;
971 break;
972#if CONFIG_TUNER
973 case SHOW_RFMS:
974 ext = "rfms";
975 setting = global_settings.rfms_file;
976 break;
977#endif /* CONFIG_TUNER */
978#endif
979#ifdef HAVE_LCD_BITMAP
980 case SHOW_FONT:
981 ext = "fnt";
982 setting = global_settings.font_file;
983 break;
984 case SHOW_SBS:
985 ext = "sbs";
986 setting = global_settings.sbs_file;
987 break;
988#if CONFIG_TUNER
989 case SHOW_FMS:
990 ext = "fms";
991 setting = global_settings.fms_file;
992 break;
993#endif /* CONFIG_TUNER */
994#endif
995#if CONFIG_TUNER
996 case SHOW_FMR:
997 ext = "fmr";
998 setting = global_settings.fmr_file;
999 break;
1000#endif
1001 default:
1002 ext = setting = NULL;
1003 break;
1004 }
1005
1006 /* If we've found a file to center on, do it */
1007 if (setting)
1008 { 982 {
1009 /* if setting != NULL, ext is initialized */ 983 snprintf(current, sizeof(current), "%s/%s",
1010 snprintf(current, sizeof(current), "%s/%s.%s", root, setting, ext); 984 browse->root, browse->selected);
1011 set_current_file(current); 985 set_current_file(current);
1012 /* set_current_file changes dirlevel, change it back */ 986 /* set_current_file changes dirlevel, change it back */
1013 tc.dirlevel = 0; 987 tc.dirlevel = 0;
1014 } 988 }
1015 989
1016 ret_val = dirbrowse(); 990 ret_val = dirbrowse();
1017 tc = backup;
1018 curr_context = last_context; 991 curr_context = last_context;
1019 } 992 }
1020 else 993 else
1021 { 994 {
1022 if (dirfilter != SHOW_ID3DB) 995 if (dirfilter != SHOW_ID3DB)
1023 tc.dirfilter = &global_settings.dirfilter; 996 tc.dirfilter = &global_settings.dirfilter;
1024 strcpy(current,root); 997 tc.browse = browse;
998 strcpy(current, browse->root);
1025 set_current_file(current); 999 set_current_file(current);
1026 ret_val = dirbrowse(); 1000 ret_val = dirbrowse();
1027 } 1001 }
1028 tc.dirfilter = last_filter; 1002 backup_count--;
1003 if (backup_count >= 0)
1004 tc = backups[backup_count];
1029 return ret_val; 1005 return ret_val;
1030} 1006}
1031 1007
diff --git a/apps/tree.h b/apps/tree.h
index a74960f7a5..103a20eea6 100644
--- a/apps/tree.h
+++ b/apps/tree.h
@@ -24,6 +24,7 @@
24#include <stdbool.h> 24#include <stdbool.h>
25#include <applimits.h> 25#include <applimits.h>
26#include <file.h> 26#include <file.h>
27#include "icon.h"
27 28
28struct entry { 29struct entry {
29 short attr; /* FAT attributes + file type flags */ 30 short attr; /* FAT attributes + file type flags */
@@ -32,6 +33,26 @@ struct entry {
32}; 33};
33 34
34 35
36#define BROWSE_SELECTONLY 0x0001 /* exit on selecting a file */
37#define BROWSE_SELECTED 0x0100 /* this bit is set if user selected item */
38
39struct tree_context;
40
41struct browse_context {
42 int dirfilter;
43 unsigned flags; /* ored BROWSE_* */
44 bool (*callback_show_item)(char *name, int attr, struct tree_context *tc);
45 /* callback function to determine to show/hide
46 the item for custom browser */
47 char *title; /* title of the browser. if set to NULL,
48 directory name is used. */
49 enum themable_icons icon; /* title icon */
50 const char *root; /* full path of start directory */
51 const char *selected; /* name of selected file in the root */
52 char *buf; /* buffer to store selected file */
53 size_t bufsize; /* size of the buffer */
54};
55
35/* browser context for file or db */ 56/* browser context for file or db */
36struct tree_context { 57struct tree_context {
37 /* The directory we are browsing */ 58 /* The directory we are browsing */
@@ -68,6 +89,7 @@ struct tree_context {
68 int dentry_size; 89 int dentry_size;
69 bool dirfull; 90 bool dirfull;
70 int sort_dir; /* directory sort order */ 91 int sort_dir; /* directory sort order */
92 struct browse_context *browse;
71}; 93};
72 94
73void tree_drawlists(void); 95void tree_drawlists(void);
@@ -76,7 +98,11 @@ void tree_gui_init(void) INIT_ATTR;
76char* get_current_file(char* buffer, size_t buffer_len); 98char* get_current_file(char* buffer, size_t buffer_len);
77void set_dirfilter(int l_dirfilter); 99void set_dirfilter(int l_dirfilter);
78void set_current_file(const char *path); 100void set_current_file(const char *path);
79int rockbox_browse(const char *root, int dirfilter); 101void browse_context_init(struct browse_context *browse,
102 int dirfilter, unsigned flags,
103 char *title, enum themable_icons icon,
104 const char *root, const char *selected);
105int rockbox_browse(struct browse_context *browse);
80bool create_playlist(void); 106bool create_playlist(void);
81void resume_directory(const char *dir); 107void resume_directory(const char *dir);
82#ifdef WIN32 108#ifdef WIN32