static void browser_update(filebrowser_t * b, uint64_t input, const char *extensions) { bool ret = true; filebrowser_action_t action = FILEBROWSER_ACTION_NOOP; if (input & (1ULL << RMENU_DEVICE_NAV_DOWN)) action = FILEBROWSER_ACTION_DOWN; else if (input & (1ULL << RMENU_DEVICE_NAV_UP)) action = FILEBROWSER_ACTION_UP; else if (input & (1ULL << RMENU_DEVICE_NAV_RIGHT)) action = FILEBROWSER_ACTION_RIGHT; else if (input & (1ULL << RMENU_DEVICE_NAV_LEFT)) action = FILEBROWSER_ACTION_LEFT; else if (input & (1ULL << RMENU_DEVICE_NAV_R2)) action = FILEBROWSER_ACTION_SCROLL_DOWN; else if (input & (1ULL << RMENU_DEVICE_NAV_L2)) action = FILEBROWSER_ACTION_SCROLL_UP; else if (input & (1ULL << RMENU_DEVICE_NAV_A)) action = FILEBROWSER_ACTION_CANCEL; else if (input & (1ULL << RMENU_DEVICE_NAV_START)) { action = FILEBROWSER_ACTION_RESET; filebrowser_set_root(b, default_paths.filesystem_root_dir); strlcpy(b->extensions, extensions, sizeof(b->extensions)); } if(action != FILEBROWSER_ACTION_NOOP) ret = filebrowser_iterate(b, action); if(!ret) rarch_settings_msg(S_MSG_DIR_LOADING_ERROR, S_DELAY_180); }
void filebrowser_set_root_and_ext(void *data, const char *ext, const char *root_dir) { filebrowser_t *filebrowser = (filebrowser_t*)data; if (ext) strlcpy(filebrowser->current_dir.extensions, ext, sizeof(filebrowser->current_dir.extensions)); strlcpy(filebrowser->current_dir.root_dir, root_dir, sizeof(filebrowser->current_dir.root_dir)); filebrowser_iterate(filebrowser, FILEBROWSER_ACTION_RESET); }
void filebrowser_fetch_directory_entries(uint64_t action) { filebrowser_iterate(rgui->browser, action); mbstowcs(strw_buffer, rgui->browser->current_dir.directory_path, sizeof(strw_buffer) / sizeof(wchar_t)); XuiTextElementSetText(m_menutitle, strw_buffer); XuiListDeleteItems(m_menulist, 0, XuiListGetItemCount(m_menulist)); XuiListInsertItems(m_menulist, 0, rgui->browser->list->size); for(unsigned i = 0; i < rgui->browser->list->size; i++) { char fname_tmp[256]; fill_pathname_base(fname_tmp, rgui->browser->list->elems[i].data, sizeof(fname_tmp)); mbstowcs(strw_buffer, fname_tmp, sizeof(strw_buffer) / sizeof(wchar_t)); XuiListSetText(m_menulist, i, strw_buffer); } }
void filebrowser_update(void *data, uint64_t input, const char *extensions) { filebrowser_action_t action = FILEBROWSER_ACTION_NOOP; bool ret = true; if (input & (1ULL << DEVICE_NAV_DOWN)) action = FILEBROWSER_ACTION_DOWN; else if (input & (1ULL << DEVICE_NAV_UP)) action = FILEBROWSER_ACTION_UP; else if (input & (1ULL << DEVICE_NAV_RIGHT)) action = FILEBROWSER_ACTION_RIGHT; else if (input & (1ULL << DEVICE_NAV_LEFT)) action = FILEBROWSER_ACTION_LEFT; else if (input & (1ULL << DEVICE_NAV_R2)) action = FILEBROWSER_ACTION_SCROLL_DOWN; else if (input & (1ULL << DEVICE_NAV_L2)) action = FILEBROWSER_ACTION_SCROLL_UP; else if (input & (1ULL << DEVICE_NAV_A)) { char tmp_str[PATH_MAX]; fill_pathname_parent_dir(tmp_str, rgui->browser->current_dir.directory_path, sizeof(tmp_str)); if (tmp_str[0] != '\0') action = FILEBROWSER_ACTION_CANCEL; } else if (input & (1ULL << DEVICE_NAV_START)) { action = FILEBROWSER_ACTION_RESET; filebrowser_set_root_and_ext(rgui->browser, NULL, default_paths.filesystem_root_dir); strlcpy(rgui->browser->current_dir.extensions, extensions, sizeof(rgui->browser->current_dir.extensions)); #ifdef HAVE_RMENU_XUI filebrowser_fetch_directory_entries(1ULL << DEVICE_NAV_B); #endif } if (action != FILEBROWSER_ACTION_NOOP) ret = filebrowser_iterate(rgui->browser, action); if (!ret) msg_queue_push(g_extern.msg_queue, "ERROR - Failed to open directory.", 1, 180); }
void menu_init(void) { rgui = rgui_init(); if (rgui == NULL) { RARCH_ERR("Could not initialize menu.\n"); rarch_fail(1, "menu_init()"); } rgui->trigger_state = 0; rgui->old_input_state = 0; rgui->do_held = false; rgui->frame_buf_show = true; rgui->current_pad = 0; #ifdef HAVE_DYNAMIC if (path_is_directory(g_settings.libretro)) strlcpy(rgui->libretro_dir, g_settings.libretro, sizeof(rgui->libretro_dir)); else if (*g_settings.libretro) { fill_pathname_basedir(rgui->libretro_dir, g_settings.libretro, sizeof(rgui->libretro_dir)); libretro_get_system_info(g_settings.libretro, &rgui->info, NULL); } #else retro_get_system_info(&rgui->info); #endif #ifdef HAVE_FILEBROWSER if (!(strlen(g_settings.rgui_browser_directory) > 0)) strlcpy(g_settings.rgui_browser_directory, default_paths.filebrowser_startup_dir, sizeof(g_settings.rgui_browser_directory)); rgui->browser = (filebrowser_t*)calloc(1, sizeof(*(rgui->browser))); if (rgui->browser == NULL) { RARCH_ERR("Could not initialize filebrowser.\n"); rarch_fail(1, "menu_init()"); } strlcpy(rgui->browser->current_dir.extensions, rgui->info.valid_extensions, sizeof(rgui->browser->current_dir.extensions)); // Look for zips to extract as well. if (*rgui->info.valid_extensions) { strlcat(rgui->browser->current_dir.extensions, "|zip", sizeof(rgui->browser->current_dir.extensions)); } strlcpy(rgui->browser->current_dir.root_dir, g_settings.rgui_browser_directory, sizeof(rgui->browser->current_dir.root_dir)); filebrowser_iterate(rgui->browser, FILEBROWSER_ACTION_RESET); #endif #ifdef HAVE_SHADER_MANAGER shader_manager_init(rgui); #endif if (*g_extern.config_path) { char history_path[PATH_MAX]; if (*g_settings.game_history_path) strlcpy(history_path, g_settings.game_history_path, sizeof(history_path)); else { fill_pathname_resolve_relative(history_path, g_extern.config_path, ".retroarch-game-history.txt", sizeof(history_path)); } RARCH_LOG("[RGUI]: Opening history: %s.\n", history_path); rgui->history = rom_history_init(history_path, g_settings.game_history_size); } rgui->last_time = rarch_get_time_usec(); }