mirror of
https://github.com/libretro/RetroArch
synced 2025-02-25 12:41:18 +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))
|
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)
|
||||||
|
@ -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];
|
|
||||||
unsigned push_dir = filebrowser->directory_stack_size + 1;
|
|
||||||
|
|
||||||
if(with_extension)
|
if (ext)
|
||||||
snprintf(extensions, sizeof(extensions), filebrowser->extensions);
|
strlcpy(filebrowser->extensions, ext, sizeof(filebrowser->extensions));
|
||||||
else
|
|
||||||
snprintf(extensions, sizeof(extensions), "empty");
|
|
||||||
|
|
||||||
ret = directory_parse(filebrowser, push_dir, path, extensions);
|
strlcpy(filebrowser->root_dir, root_dir, sizeof(filebrowser->root_dir));
|
||||||
|
filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_RESET);
|
||||||
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:
|
||||||
|
@ -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_ */
|
||||||
|
Loading…
x
Reference in New Issue
Block a user