(Filebrowser) Clea up filebrowser code

This commit is contained in:
twinaphex 2013-03-13 02:52:41 +01:00
parent afc90aa33d
commit 17022672fc
3 changed files with 30 additions and 89 deletions

View File

@ -774,7 +774,7 @@ static void browser_update(void *data, uint64_t input, const char *extensions)
else if (input & (1ULL << RMENU_DEVICE_NAV_START)) else if (input & (1ULL << RMENU_DEVICE_NAV_START))
{ {
action = FILEBROWSER_ACTION_RESET; action = FILEBROWSER_ACTION_RESET;
filebrowser_set_root(b, default_paths.filesystem_root_dir); filebrowser_set_root_and_ext(b, NULL, default_paths.filesystem_root_dir);
strlcpy(b->extensions, extensions, sizeof(b->extensions)); strlcpy(b->extensions, extensions, sizeof(b->extensions));
} }
@ -870,8 +870,7 @@ int select_file(void *data, void *state)
if (input & (1ULL << RMENU_DEVICE_NAV_B)) if (input & (1ULL << RMENU_DEVICE_NAV_B))
{ {
bool is_dir = filebrowser_get_current_path_isdir(filebrowser); if (filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_PATH_ISDIR))
if(is_dir)
ret = filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK); ret = filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK);
else else
{ {
@ -1004,7 +1003,7 @@ int select_directory(void *data, void *state)
menu_set_default_pos(&default_pos); menu_set_default_pos(&default_pos);
bool is_dir = filebrowser_get_current_path_isdir(filebrowser); bool is_dir = filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_PATH_ISDIR);
browser_update(filebrowser, input, "empty"); browser_update(filebrowser, input, "empty");
if (input & (1ULL << RMENU_DEVICE_NAV_Y)) if (input & (1ULL << RMENU_DEVICE_NAV_Y))
@ -2215,7 +2214,7 @@ int select_rom(void *data, void *state)
menu_stack_push(GENERAL_VIDEO_MENU); menu_stack_push(GENERAL_VIDEO_MENU);
else if (input & (1ULL << RMENU_DEVICE_NAV_B)) else if (input & (1ULL << RMENU_DEVICE_NAV_B))
{ {
if(filebrowser_get_current_path_isdir(filebrowser)) if (filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_PATH_ISDIR))
{ {
bool ret = filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK); bool ret = filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK);
@ -2247,9 +2246,7 @@ int select_rom(void *data, void *state)
} }
} }
bool is_dir = filebrowser_get_current_path_isdir(filebrowser); if (filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_PATH_ISDIR))
if (is_dir)
{ {
const char *current_path = filebrowser_get_current_path(filebrowser); const char *current_path = filebrowser_get_current_path(filebrowser);
snprintf(msg, sizeof(msg), "INFO - Press [%s] to enter the directory.", rarch_input_find_platform_key_label(1ULL << RETRO_DEVICE_ID_JOYPAD_B)); snprintf(msg, sizeof(msg), "INFO - Press [%s] to enter the directory.", rarch_input_find_platform_key_label(1ULL << RETRO_DEVICE_ID_JOYPAD_B));
@ -3067,12 +3064,12 @@ void init_filebrowser(void *data)
{ {
(void)data; (void)data;
browser = filebrowser_init(g_extern.console.main_wrap.default_rom_startup_dir, g_extern.system.valid_extensions); browser = (filebrowser_t*)filebrowser_init(g_extern.console.main_wrap.default_rom_startup_dir, g_extern.system.valid_extensions);
tmpBrowser = filebrowser_init(default_paths.filesystem_root_dir, ""); tmpBrowser = (filebrowser_t*)filebrowser_init(default_paths.filesystem_root_dir, "");
menu_stack_push(FILE_BROWSER_MENU); menu_stack_push(FILE_BROWSER_MENU);
filebrowser_set_root_and_ext(browser, g_extern.system.valid_extensions, g_extern.console.main_wrap.default_rom_startup_dir); filebrowser_set_root_and_ext(browser, g_extern.system.valid_extensions, g_extern.console.main_wrap.default_rom_startup_dir);
filebrowser_set_root(tmpBrowser, default_paths.filesystem_root_dir); filebrowser_set_root_and_ext(tmpBrowser, NULL, default_paths.filesystem_root_dir);
} }
void free_filebrowser(void *data) void free_filebrowser(void *data)

View File

@ -46,34 +46,13 @@ const char *path, const char * extensions)
return false; return false;
} }
filebrowser_t *filebrowser_init(const char *start_dir, const char *extensions) void *filebrowser_init(const char *start_dir, const char *extensions)
{ {
filebrowser_t *filebrowser = (filebrowser_t*)calloc(1, sizeof(*filebrowser)); filebrowser_t *filebrowser = (filebrowser_t*)calloc(1, sizeof(*filebrowser));
directory_parse(filebrowser, 0, start_dir, extensions); directory_parse(filebrowser, 0, start_dir, extensions);
return filebrowser; return filebrowser;
} }
static bool filebrowser_reset(void *data, const char *start_dir, const char *extensions)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
bool ret = directory_parse(filebrowser, 0, start_dir, extensions);
return ret;
}
void filebrowser_set_root(void *data, const char *root_dir)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
strlcpy(filebrowser->root_dir, root_dir, sizeof(filebrowser->root_dir));
}
void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir)
{
filebrowser_t *browser = (filebrowser_t*)data;
strlcpy(browser->extensions, ext, sizeof(browser->extensions));
filebrowser_set_root(browser, root_dir);
filebrowser_iterate(browser, FILEBROWSER_ACTION_RESET);
}
void filebrowser_free(void *data) void filebrowser_free(void *data)
{ {
filebrowser_t *filebrowser = (filebrowser_t*)data; filebrowser_t *filebrowser = (filebrowser_t*)data;
@ -84,24 +63,18 @@ void filebrowser_free(void *data)
free(filebrowser); free(filebrowser);
} }
static bool filebrowser_push_directory(void *data, const char * path, void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir)
bool with_extension)
{ {
filebrowser_t *filebrowser = (filebrowser_t*)data; filebrowser_t *filebrowser = (filebrowser_t*)data;
bool ret = true;
char extensions[256]; if (ext)
unsigned push_dir = filebrowser->directory_stack_size + 1; strlcpy(filebrowser->extensions, ext, sizeof(filebrowser->extensions));
if(with_extension) strlcpy(filebrowser->root_dir, root_dir, sizeof(filebrowser->root_dir));
snprintf(extensions, sizeof(extensions), filebrowser->extensions); filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_RESET);
else
snprintf(extensions, sizeof(extensions), "empty");
ret = directory_parse(filebrowser, push_dir, path, extensions);
return ret;
} }
static bool filebrowser_pop_directory (void *data) static bool filebrowser_pop_directory (void *data)
{ {
filebrowser_t *filebrowser = (filebrowser_t*)data; filebrowser_t *filebrowser = (filebrowser_t*)data;
@ -142,40 +115,6 @@ const char *filebrowser_get_current_path (void *data)
return filebrowser->current_dir.list->elems[filebrowser->current_dir.ptr].data; return filebrowser->current_dir.list->elems[filebrowser->current_dir.ptr].data;
} }
bool filebrowser_get_current_path_isdir (void *data)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
return filebrowser->current_dir.list->elems[filebrowser->current_dir.ptr].attr.b;
}
size_t filebrowser_get_current_index (void *data)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
return filebrowser->current_dir.ptr;
}
void filebrowser_set_current_at (void *data, size_t pos)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
filebrowser->current_dir.ptr = pos;
}
static void filebrowser_set_current_increment (void *data)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
filebrowser->current_dir.ptr++;
if (filebrowser->current_dir.ptr >= filebrowser->current_dir.list->size)
filebrowser->current_dir.ptr = 0;
}
static void filebrowser_set_current_decrement (void *data)
{
filebrowser_t *filebrowser = (filebrowser_t*)data;
filebrowser->current_dir.ptr--;
if (filebrowser->current_dir.ptr >= filebrowser->current_dir.list->size)
filebrowser->current_dir.ptr = filebrowser->current_dir.list->size - 1;
}
bool filebrowser_iterate(void *data, unsigned action) bool filebrowser_iterate(void *data, unsigned action)
{ {
filebrowser_t *filebrowser = (filebrowser_t*)data; filebrowser_t *filebrowser = (filebrowser_t*)data;
@ -185,10 +124,14 @@ bool filebrowser_iterate(void *data, unsigned action)
switch(action) switch(action)
{ {
case FILEBROWSER_ACTION_UP: case FILEBROWSER_ACTION_UP:
filebrowser_set_current_decrement(filebrowser); filebrowser->current_dir.ptr--;
if (filebrowser->current_dir.ptr >= filebrowser->current_dir.list->size)
filebrowser->current_dir.ptr = filebrowser->current_dir.list->size - 1;
break; break;
case FILEBROWSER_ACTION_DOWN: case FILEBROWSER_ACTION_DOWN:
filebrowser_set_current_increment(filebrowser); filebrowser->current_dir.ptr++;
if (filebrowser->current_dir.ptr >= filebrowser->current_dir.list->size)
filebrowser->current_dir.ptr = 0;
break; break;
case FILEBROWSER_ACTION_LEFT: case FILEBROWSER_ACTION_LEFT:
if (filebrowser->current_dir.ptr <= 5) if (filebrowser->current_dir.ptr <= 5)
@ -211,13 +154,17 @@ bool filebrowser_iterate(void *data, unsigned action)
entries_to_scroll, filebrowser->current_dir.list->size-1)); entries_to_scroll, filebrowser->current_dir.list->size-1));
break; break;
case FILEBROWSER_ACTION_OK: case FILEBROWSER_ACTION_OK:
ret = filebrowser_push_directory(filebrowser, filebrowser_get_current_path(filebrowser), true); ret = directory_parse(filebrowser, filebrowser->directory_stack_size + 1,
filebrowser_get_current_path(filebrowser), filebrowser->extensions);
break; break;
case FILEBROWSER_ACTION_CANCEL: case FILEBROWSER_ACTION_CANCEL:
ret = filebrowser_pop_directory(filebrowser); ret = filebrowser_pop_directory(filebrowser);
break; break;
case FILEBROWSER_ACTION_RESET: case FILEBROWSER_ACTION_RESET:
ret = filebrowser_reset(filebrowser, filebrowser->root_dir, filebrowser->extensions); ret = directory_parse(filebrowser, 0, filebrowser->root_dir, filebrowser->extensions);
break;
case FILEBROWSER_ACTION_PATH_ISDIR:
ret = filebrowser->current_dir.list->elems[filebrowser->current_dir.ptr].attr.b;
break; break;
case FILEBROWSER_ACTION_NOOP: case FILEBROWSER_ACTION_NOOP:
default: default:

View File

@ -42,19 +42,16 @@ typedef enum
FILEBROWSER_ACTION_SCROLL_UP, FILEBROWSER_ACTION_SCROLL_UP,
FILEBROWSER_ACTION_SCROLL_DOWN, FILEBROWSER_ACTION_SCROLL_DOWN,
FILEBROWSER_ACTION_RESET, FILEBROWSER_ACTION_RESET,
FILEBROWSER_ACTION_PATH_ISDIR,
FILEBROWSER_ACTION_NOOP FILEBROWSER_ACTION_NOOP
} filebrowser_action_t; } filebrowser_action_t;
const char * filebrowser_get_current_dir (void *data); const char * filebrowser_get_current_dir (void *data);
const char * filebrowser_get_current_path (void *data); const char * filebrowser_get_current_path (void *data);
bool filebrowser_get_current_path_isdir (void *data);
size_t filebrowser_get_current_index (void *data);
void filebrowser_set_root(void *data, const char *root_dir);
void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir); void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir);
void filebrowser_free(void *data); void filebrowser_free(void *data);
void filebrowser_set_current_at (void *dat, size_t pos);
bool filebrowser_iterate(void *data, unsigned action); bool filebrowser_iterate(void *data, unsigned action);
filebrowser_t *filebrowser_init(const char *start_dir, const char *extensions); void *filebrowser_init(const char *start_dir, const char *extensions);
#endif /* FILEBROWSER_H_ */ #endif /* FILEBROWSER_H_ */