mirror of
https://github.com/libretro/RetroArch
synced 2025-02-25 03:40:50 +00:00
(Filebrowser) Clea up filebrowser code
This commit is contained in:
parent
afc90aa33d
commit
17022672fc
@ -774,7 +774,7 @@ static void browser_update(void *data, uint64_t input, const char *extensions)
|
||||
else if (input & (1ULL << RMENU_DEVICE_NAV_START))
|
||||
{
|
||||
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));
|
||||
}
|
||||
|
||||
@ -870,8 +870,7 @@ int select_file(void *data, void *state)
|
||||
|
||||
if (input & (1ULL << RMENU_DEVICE_NAV_B))
|
||||
{
|
||||
bool is_dir = filebrowser_get_current_path_isdir(filebrowser);
|
||||
if(is_dir)
|
||||
if (filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_PATH_ISDIR))
|
||||
ret = filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_OK);
|
||||
else
|
||||
{
|
||||
@ -1004,7 +1003,7 @@ int select_directory(void *data, void *state)
|
||||
|
||||
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");
|
||||
|
||||
if (input & (1ULL << RMENU_DEVICE_NAV_Y))
|
||||
@ -2215,7 +2214,7 @@ int select_rom(void *data, void *state)
|
||||
menu_stack_push(GENERAL_VIDEO_MENU);
|
||||
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);
|
||||
|
||||
@ -2247,9 +2246,7 @@ int select_rom(void *data, void *state)
|
||||
}
|
||||
}
|
||||
|
||||
bool is_dir = filebrowser_get_current_path_isdir(filebrowser);
|
||||
|
||||
if (is_dir)
|
||||
if (filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_PATH_ISDIR))
|
||||
{
|
||||
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));
|
||||
@ -3067,12 +3064,12 @@ void init_filebrowser(void *data)
|
||||
{
|
||||
(void)data;
|
||||
|
||||
browser = filebrowser_init(g_extern.console.main_wrap.default_rom_startup_dir, g_extern.system.valid_extensions);
|
||||
tmpBrowser = filebrowser_init(default_paths.filesystem_root_dir, "");
|
||||
browser = (filebrowser_t*)filebrowser_init(g_extern.console.main_wrap.default_rom_startup_dir, g_extern.system.valid_extensions);
|
||||
tmpBrowser = (filebrowser_t*)filebrowser_init(default_paths.filesystem_root_dir, "");
|
||||
|
||||
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(tmpBrowser, default_paths.filesystem_root_dir);
|
||||
filebrowser_set_root_and_ext(tmpBrowser, NULL, default_paths.filesystem_root_dir);
|
||||
}
|
||||
|
||||
void free_filebrowser(void *data)
|
||||
|
@ -46,34 +46,13 @@ const char *path, const char * extensions)
|
||||
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));
|
||||
directory_parse(filebrowser, 0, start_dir, extensions);
|
||||
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)
|
||||
{
|
||||
filebrowser_t *filebrowser = (filebrowser_t*)data;
|
||||
@ -84,24 +63,18 @@ void filebrowser_free(void *data)
|
||||
free(filebrowser);
|
||||
}
|
||||
|
||||
static bool filebrowser_push_directory(void *data, const char * path,
|
||||
bool with_extension)
|
||||
void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir)
|
||||
{
|
||||
filebrowser_t *filebrowser = (filebrowser_t*)data;
|
||||
bool ret = true;
|
||||
char extensions[256];
|
||||
unsigned push_dir = filebrowser->directory_stack_size + 1;
|
||||
|
||||
if (ext)
|
||||
strlcpy(filebrowser->extensions, ext, sizeof(filebrowser->extensions));
|
||||
|
||||
if(with_extension)
|
||||
snprintf(extensions, sizeof(extensions), filebrowser->extensions);
|
||||
else
|
||||
snprintf(extensions, sizeof(extensions), "empty");
|
||||
|
||||
ret = directory_parse(filebrowser, push_dir, path, extensions);
|
||||
|
||||
return ret;
|
||||
strlcpy(filebrowser->root_dir, root_dir, sizeof(filebrowser->root_dir));
|
||||
filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_RESET);
|
||||
}
|
||||
|
||||
|
||||
static bool filebrowser_pop_directory (void *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;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
filebrowser_t *filebrowser = (filebrowser_t*)data;
|
||||
@ -185,10 +124,14 @@ bool filebrowser_iterate(void *data, unsigned action)
|
||||
switch(action)
|
||||
{
|
||||
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;
|
||||
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;
|
||||
case FILEBROWSER_ACTION_LEFT:
|
||||
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));
|
||||
break;
|
||||
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;
|
||||
case FILEBROWSER_ACTION_CANCEL:
|
||||
ret = filebrowser_pop_directory(filebrowser);
|
||||
break;
|
||||
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;
|
||||
case FILEBROWSER_ACTION_NOOP:
|
||||
default:
|
||||
|
@ -42,19 +42,16 @@ typedef enum
|
||||
FILEBROWSER_ACTION_SCROLL_UP,
|
||||
FILEBROWSER_ACTION_SCROLL_DOWN,
|
||||
FILEBROWSER_ACTION_RESET,
|
||||
FILEBROWSER_ACTION_PATH_ISDIR,
|
||||
FILEBROWSER_ACTION_NOOP
|
||||
} filebrowser_action_t;
|
||||
|
||||
const char * filebrowser_get_current_dir (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_free(void *data);
|
||||
void filebrowser_set_current_at (void *dat, size_t pos);
|
||||
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_ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user