file_list_get - return rarch_settings_t *

This commit is contained in:
twinaphex 2014-08-08 07:58:07 +02:00
parent eb1de2cf44
commit 266e3e0051
8 changed files with 50 additions and 36 deletions

View File

@ -159,19 +159,21 @@ void file_list_sort_on_alt(file_list_t *list)
}
void file_list_get_at_offset(const file_list_t *list, size_t index,
const char **path, unsigned *file_type)
const char **path, unsigned *file_type, rarch_setting_t *setting)
{
if (path)
*path = list->list[index].path;
if (file_type)
*file_type = list->list[index].type;
if (setting)
setting = list->list[index].setting;
}
void file_list_get_last(const file_list_t *list,
const char **path, unsigned *file_type)
const char **path, unsigned *file_type, rarch_setting_t *setting)
{
if (list->size)
file_list_get_at_offset(list, list->size - 1, path, file_type);
file_list_get_at_offset(list, list->size - 1, path, file_type, setting);
}
bool file_list_search(const file_list_t *list, const char *needle, size_t *index)

View File

@ -22,6 +22,7 @@ extern "C" {
#endif
#include "boolean.h"
#include "settings_data.h"
struct item_file;
typedef struct file_list
@ -40,13 +41,13 @@ void file_list_pop(file_list_t *list, size_t *directory_ptr);
void file_list_clear(file_list_t *list);
void file_list_get_last(const file_list_t *list,
const char **path, unsigned *type);
const char **path, unsigned *type, rarch_setting_t *setting);
size_t file_list_get_size(const file_list_t *list);
size_t file_list_get_directory_ptr(const file_list_t *list);
void file_list_get_at_offset(const file_list_t *list, size_t index,
const char **path, unsigned *type);
const char **path, unsigned *type, rarch_setting_t *setting);
void file_list_set_alt_at_offset(file_list_t *list, size_t index,
const char *alt);

View File

@ -1399,6 +1399,7 @@ static int menu_settings_iterate(unsigned action)
const char *dir = NULL;
unsigned type = 0;
unsigned menu_type = 0;
rarch_setting_t *setting = NULL;
if (!driver.menu)
return 0;
@ -1406,7 +1407,7 @@ static int menu_settings_iterate(unsigned action)
driver.menu->frame_buf_pitch = driver.menu->width * 2;
if (action != MENU_ACTION_REFRESH)
file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &label, &type);
file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &label, &type, setting);
if (type == MENU_SETTINGS_CORE)
label = g_settings.libretro_directory;
@ -1415,7 +1416,7 @@ static int menu_settings_iterate(unsigned action)
else if (type == MENU_SETTINGS_DISK_APPEND)
label = g_settings.menu_content_directory;
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (driver.menu->need_refresh)
action = MENU_ACTION_NOOP;
@ -1446,7 +1447,7 @@ static int menu_settings_iterate(unsigned action)
case MENU_ACTION_SELECT:
{
const char *path = NULL;
file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &driver.menu->info_selection);
file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &driver.menu->info_selection, setting);
file_list_push(driver.menu->menu_stack, "", "", MENU_INFO_SCREEN, driver.menu->selection_ptr);
}
break;
@ -1508,7 +1509,7 @@ static int menu_settings_iterate(unsigned action)
break;
}
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (driver.menu->need_refresh && !(menu_type == MENU_FILE_DIRECTORY ||
menu_common_type_is(menu_type) == MENU_SETTINGS_SHADER_OPTIONS ||
@ -1567,16 +1568,17 @@ static int menu_settings_iterate(unsigned action)
static int menu_viewport_iterate(unsigned action)
{
int stride_x, stride_y;
struct retro_game_geometry *geom;
const char *base_msg = NULL;
char msg[64];
struct retro_game_geometry *geom;
rarch_setting_t *setting = NULL;
const char *base_msg = NULL;
unsigned menu_type = 0;
rarch_viewport_t *custom = (rarch_viewport_t*)&g_extern.console.screen.viewports.custom_vp;
if (!driver.menu)
return 0;
file_list_get_last(driver.menu->menu_stack, NULL, &menu_type);
file_list_get_last(driver.menu->menu_stack, NULL, &menu_type, setting);
geom = (struct retro_game_geometry*)&g_extern.system.av_info.geometry;
stride_x = g_settings.video.scale_integer ?
@ -1695,7 +1697,7 @@ static int menu_viewport_iterate(unsigned action)
break;
}
file_list_get_last(driver.menu->menu_stack, NULL, &menu_type);
file_list_get_last(driver.menu->menu_stack, NULL, &menu_type, setting);
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->render)
driver.menu_ctx->render();
@ -1745,7 +1747,8 @@ static int menu_viewport_iterate(unsigned action)
static void menu_parse_and_resolve(unsigned menu_type)
{
size_t i, list_size;
file_list_t *list;
file_list_t *list = NULL;
rarch_setting_t *setting = NULL;
const core_info_t *info = NULL;
const char *dir = NULL;
@ -1791,7 +1794,7 @@ static void menu_parse_and_resolve(unsigned menu_type)
default:
{
/* Directory parse */
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (!*dir)
{
@ -1933,7 +1936,7 @@ static void menu_parse_and_resolve(unsigned menu_type)
case MENU_SETTINGS_CORE:
dir = NULL;
list = (file_list_t*)driver.menu->selection_buf;
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
list_size = file_list_get_size(list);
for (i = 0; i < list_size; i++)
{
@ -1941,7 +1944,7 @@ static void menu_parse_and_resolve(unsigned menu_type)
const char *path = NULL;
unsigned type = 0;
file_list_get_at_offset(list, i, &path, &type);
file_list_get_at_offset(list, i, &path, &type, setting);
if (type != MENU_FILE_PLAIN)
continue;
@ -2225,6 +2228,7 @@ static void menu_common_setting_set_current_string_dir(rarch_setting_t *setting,
static int menu_common_iterate(unsigned action)
{
rarch_setting_t *setting_data, *current_setting;
rarch_setting_t *setting = NULL;
int ret = 0;
unsigned menu_type = 0;
const char *dir = NULL;
@ -2237,7 +2241,7 @@ static int menu_common_iterate(unsigned action)
setting_data = (rarch_setting_t *)setting_data_get_list();
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (driver.video_data && driver.menu_ctx && driver.menu_ctx->set_texture)
driver.menu_ctx->set_texture(driver.menu);
@ -2330,7 +2334,7 @@ static int menu_common_iterate(unsigned action)
if (file_list_get_size(driver.menu->selection_buf) == 0)
return 0;
file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &type);
file_list_get_at_offset(driver.menu->selection_buf, driver.menu->selection_ptr, &path, &type, setting);
if (
menu_common_type_is(type) == MENU_SETTINGS_SHADER_OPTIONS ||
@ -2627,9 +2631,8 @@ static int menu_common_iterate(unsigned action)
break;
}
// refresh values in case the stack changed
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (driver.menu->need_refresh && (menu_type == MENU_FILE_DIRECTORY ||
menu_common_type_is(menu_type) == MENU_SETTINGS_SHADER_OPTIONS ||

View File

@ -264,6 +264,7 @@ static void rgui_render_messagebox(const char *message)
static void rgui_render(void)
{
size_t begin, end;
rarch_setting_t *setting = NULL;
if (driver.menu->need_refresh &&
(g_extern.lifecycle_state & (1ULL << MODE_MENU))
@ -287,7 +288,7 @@ static void rgui_render(void)
const char *dir = NULL;
unsigned menu_type = 0;
unsigned menu_type_is = 0;
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->type_is)
menu_type_is = driver.menu_ctx->backend->type_is(menu_type);
@ -444,11 +445,11 @@ static void rgui_render(void)
for (i = begin; i < end; i++, y += FONT_HEIGHT_STRIDE)
{
char message[256], type_str[256];
const char *path = 0;
unsigned type = 0;
file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type);
char message[256];
char type_str[256];
rarch_setting_t *setting = NULL;
file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type, setting);
unsigned w = 19;
if (menu_type == MENU_SETTINGS_PERFORMANCE_COUNTERS)

View File

@ -151,7 +151,8 @@ static void rmenu_render(void)
const char *dir = NULL;
unsigned menu_type = 0;
unsigned menu_type_is = 0;
file_list_get_last(menu->menu_stack, &dir, &menu_type);
rarch_setting_t *setting = NULL;
file_list_get_last(menu->menu_stack, &dir, &menu_type, setting);
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->type_is)
menu_type_is = driver.menu_ctx->backend->type_is(menu_type);
@ -321,7 +322,8 @@ static void rmenu_render(void)
{
const char *path = 0;
unsigned type = 0;
file_list_get_at_offset(menu->selection_buf, i, &path, &type);
rarch_setting_t *setting = NULL;
file_list_get_at_offset(menu->selection_buf, i, &path, &type, setting);
char message[256];
char type_str[256];
@ -364,7 +366,7 @@ static void rmenu_render(void)
if (type == MENU_FILE_PLAIN)
{
strlcpy(type_str, "(CORE)", sizeof(type_str));
file_list_get_alt_at_offset(menu->selection_buf, i, &path);
file_list_get_alt_at_offset(menu->selection_buf, i, &path, setting);
w = 6;
}
else

View File

@ -379,6 +379,7 @@ static void rmenu_xui_render(void)
const char *dir = NULL;
unsigned menu_type = 0;
unsigned menu_type_is = 0;
rarch_setting_t *setting = NULL;
if (!driver.menu || driver.menu->need_refresh &&
(g_extern.lifecycle_state & (1ULL << MODE_MENU))
@ -390,7 +391,7 @@ static void rmenu_xui_render(void)
rmenu_xui_render_background();
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type);
file_list_get_last(driver.menu->menu_stack, &dir, &menu_type, setting);
if (driver.menu_ctx && driver.menu_ctx->backend && driver.menu_ctx->backend->type_is)
menu_type_is = driver.menu_ctx->backend->type_is(menu_type);
@ -547,7 +548,7 @@ static void rmenu_xui_render(void)
{
const char *path = 0;
unsigned type = 0;
file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type);
file_list_get_at_offset(driver.menu->selection_buf, i, &path, &type, setting);
char message[256];
char type_str[256];

View File

@ -349,16 +349,17 @@ void menu_ticker_line(char *buf, size_t len, unsigned index, const char *str, bo
void menu_flush_stack_type(unsigned final_type)
{
unsigned type = 0;
rarch_setting_t *setting = NULL;
if (!driver.menu)
return;
driver.menu->need_refresh = true;
file_list_get_last(driver.menu->menu_stack, NULL, &type);
file_list_get_last(driver.menu->menu_stack, NULL, &type, setting);
while (type != final_type)
{
file_list_pop(driver.menu->menu_stack, &driver.menu->selection_ptr);
file_list_get_last(driver.menu->menu_stack, NULL, &type);
file_list_get_last(driver.menu->menu_stack, NULL, &type, setting);
}
}
@ -370,6 +371,7 @@ bool menu_iterate(void)
uint64_t input_state = 0;
int32_t input_entry_ret = 0;
int32_t ret = 0;
rarch_setting_t *setting = NULL;
if (!driver.menu)
return false;
@ -477,12 +479,12 @@ bool menu_iterate(void)
if (ret < 0)
{
unsigned type = 0;
file_list_get_last(driver.menu->menu_stack, NULL, &type);
file_list_get_last(driver.menu->menu_stack, NULL, &type, setting);
while (type != MENU_SETTINGS)
{
file_list_pop(driver.menu->menu_stack, &driver.menu->selection_ptr);
file_list_get_last(driver.menu->menu_stack, NULL, &type);
file_list_get_last(driver.menu->menu_stack, NULL, &type, setting);
}
}
@ -607,9 +609,10 @@ static inline int menu_list_get_first_char(file_list_t *buf, unsigned offset)
static inline bool menu_list_elem_is_dir(file_list_t *buf, unsigned offset)
{
rarch_setting_t *setting = NULL;
const char *path = NULL;
unsigned type = 0;
file_list_get_at_offset(buf, offset, &path, &type);
file_list_get_at_offset(buf, offset, &path, &type, setting);
return type != MENU_FILE_PLAIN;
}

View File

@ -16,7 +16,8 @@
#ifndef __RARCH_SETTINGS_DATA_H__
#define __RARCH_SETTINGS_DATA_H__
#include "general.h"
#include <stdint.h>
#include "conf/config_file.h"
#define SETTINGS_DATA_LIST_SIZE 512