diff --git a/Makefile.common b/Makefile.common index 1a24b45508..282e4a6971 100644 --- a/Makefile.common +++ b/Makefile.common @@ -339,7 +339,6 @@ ifeq ($(HAVE_MENU_COMMON), 1) menu/menu_entry.o \ menu/menu_navigation.o \ menu/menu_setting.o \ - menu/menu_settings_list.o \ menu/menu_shader.o \ menu/menu_entries_cbs_ok.o \ menu/menu_entries_cbs_cancel.o \ diff --git a/griffin/griffin.c b/griffin/griffin.c index c61d239f8d..7986b70067 100644 --- a/griffin/griffin.c +++ b/griffin/griffin.c @@ -714,7 +714,6 @@ MENU #include "../menu/menu.c" #include "../menu/menu_entry.c" #include "../menu/menu_setting.c" -#include "../menu/menu_settings_list.c" #include "../menu/menu_list.c" #include "../menu/menu_entries_cbs_ok.c" #include "../menu/menu_entries_cbs_cancel.c" diff --git a/menu/menu_driver.h b/menu/menu_driver.h index 29ac984001..47a1fe9304 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -27,7 +27,7 @@ #include "menu_list.h" #include "menu_navigation.h" #include "menu_database.h" -#include "menu_settings_list.h" +#include "menu_setting.h" #include "../../libretro.h" #ifdef __cplusplus diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 870e4a1269..d64d48a35a 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -18,7 +18,6 @@ #include "menu.h" #include "menu_setting.h" -#include "menu_settings_list.h" #include "../driver.h" #include "../gfx/video_monitor.h" @@ -38,6 +37,124 @@ #endif +void settings_info_list_free(rarch_setting_info_t *list_info) +{ + if (list_info) + free(list_info); + list_info = NULL; +} + +rarch_setting_info_t *settings_info_list_new(void) +{ + rarch_setting_info_t *list_info = (rarch_setting_info_t*) + calloc(1, sizeof(*list_info)); + + if (!list_info) + return NULL; + + list_info->size = 32; + + return list_info; +} + +bool settings_list_append(rarch_setting_t **list, + rarch_setting_info_t *list_info, rarch_setting_t value) +{ + if (!list || !*list || !list_info) + return false; + + if (list_info->index == list_info->size) + { + list_info->size *= 2; + *list = (rarch_setting_t*) + realloc(*list, sizeof(rarch_setting_t) * list_info->size); + if (!*list) + return false; + } + + (*list)[list_info->index++] = value; + return true; +} + +static void null_write_handler(void *data) +{ + (void)data; +} + +void settings_list_current_add_bind_type( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned type) +{ + unsigned idx = list_info->index - 1; + (*list)[idx].bind_type = type; +} + +void settings_list_current_add_flags( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned values) +{ + unsigned idx = list_info->index - 1; + (*list)[idx].flags |= values; + + if (values & SD_FLAG_IS_DEFERRED) + { + (*list)[idx].deferred_handler = (*list)[idx].change_handler; + (*list)[idx].change_handler = null_write_handler; + } +} + +void settings_list_current_add_range( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + float min, float max, float step, + bool enforce_minrange_enable, bool enforce_maxrange_enable) +{ + unsigned idx = list_info->index - 1; + + (*list)[idx].min = min; + (*list)[idx].step = step; + (*list)[idx].max = max; + (*list)[idx].enforce_minrange = enforce_minrange_enable; + (*list)[idx].enforce_maxrange = enforce_maxrange_enable; + + settings_list_current_add_flags(list, list_info, SD_FLAG_HAS_RANGE); +} + +void settings_list_current_add_values( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + const char *values) +{ + unsigned idx = list_info->index - 1; + (*list)[idx].values = values; +} + +void settings_list_current_add_cmd( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + enum event_command values) +{ + unsigned idx = list_info->index - 1; + (*list)[idx].cmd_trigger.idx = values; +} + +void settings_list_free(rarch_setting_t *list) +{ + if (list) + free(list); +} + +rarch_setting_t *settings_list_new(unsigned size) +{ + rarch_setting_t *list = (rarch_setting_t*)calloc(size, sizeof(*list)); + if (!list) + return NULL; + + return list; +} + int menu_setting_set_flags(rarch_setting_t *setting) { if (!setting) diff --git a/menu/menu_setting.h b/menu/menu_setting.h index 356d5a009c..2bf17f4d70 100644 --- a/menu/menu_setting.h +++ b/menu/menu_setting.h @@ -18,10 +18,14 @@ #define _MENU_SETTING_H #include +#include +#include + #include #include #include -#include "menu_settings_list.h" + +#include "../command_event.h" #define BINDFOR(s) (*(&(s))->value.keybind) @@ -29,6 +33,216 @@ extern "C" { #endif +enum setting_type +{ + ST_NONE = 0, + ST_ACTION, + ST_BOOL, + ST_INT, + ST_UINT, + ST_FLOAT, + ST_PATH, + ST_DIR, + ST_STRING, + ST_HEX, + ST_BIND, + ST_GROUP, + ST_SUB_GROUP, + ST_END_GROUP, + ST_END_SUB_GROUP +}; + +enum setting_flags +{ + SD_FLAG_PATH_DIR = (1 << 0), + SD_FLAG_PATH_FILE = (1 << 1), + SD_FLAG_ALLOW_EMPTY = (1 << 2), + SD_FLAG_VALUE_DESC = (1 << 3), + SD_FLAG_HAS_RANGE = (1 << 4), + SD_FLAG_ALLOW_INPUT = (1 << 5), + SD_FLAG_IS_DRIVER = (1 << 6), + SD_FLAG_EXIT = (1 << 7), + SD_FLAG_CMD_APPLY_AUTO = (1 << 8), + SD_FLAG_IS_DEFERRED = (1 << 9), + SD_FLAG_BROWSER_ACTION = (1 << 10), + SD_FLAG_ADVANCED = (1 << 11) +}; + +enum setting_list_flags +{ + SL_FLAG_MAIN_MENU = (1 << 0), + SL_FLAG_DRIVER_OPTIONS = (1 << 1), + SL_FLAG_CORE_OPTIONS = (1 << 2), + SL_FLAG_CONFIGURATION_OPTIONS = (1 << 3), + SL_FLAG_REWIND_OPTIONS = (1 << 4), + SL_FLAG_VIDEO_OPTIONS = (1 << 5), + SL_FLAG_SHADER_OPTIONS = (1 << 6), + SL_FLAG_FONT_OPTIONS = (1 << 7), + SL_FLAG_AUDIO_OPTIONS = (1 << 8), + SL_FLAG_INPUT_OPTIONS = (1 << 9), + SL_FLAG_OVERLAY_OPTIONS = (1 << 10), + SL_FLAG_OSK_OVERLAY_OPTIONS = (1 << 11), + SL_FLAG_MENU_OPTIONS = (1 << 12), + SL_FLAG_UI_OPTIONS = (1 << 13), + SL_FLAG_CORE_UPDATER_OPTIONS = (1 << 14), + SL_FLAG_NETPLAY_OPTIONS = (1 << 15), + SL_FLAG_USER_OPTIONS = (1 << 16), + SL_FLAG_DIRECTORY_OPTIONS = (1 << 17), + SL_FLAG_PRIVACY_OPTIONS = (1 << 18), + SL_FLAG_PLAYLIST_OPTIONS = (1 << 19), + SL_FLAG_ARCHIVE_OPTIONS = (1 << 20), + SL_FLAG_PATCH_OPTIONS = (1 << 21), + SL_FLAG_RECORDING_OPTIONS = (1 << 21), + SL_FLAG_FRAME_THROTTLE_OPTIONS= (1 << 22), + SL_FLAG_LOGGING_OPTIONS = (1 << 23), + SL_FLAG_SAVING_OPTIONS = (1 << 24), + SL_FLAG_ALL = (1 << 25), +}; + +#define SL_FLAG_ALL_SETTINGS (SL_FLAG_ALL - SL_FLAG_MAIN_MENU) + +typedef void (*change_handler_t )(void *data); +typedef int (*action_toggle_handler_t )(void *data, unsigned action, bool wraparound); +typedef int (*action_up_or_down_handler_t )(void *data, unsigned action); +typedef int (*action_start_handler_t )(void *data); +typedef int (*action_iterate_handler_t )(unsigned action); +typedef int (*action_cancel_handler_t )(void *data, unsigned action); +typedef int (*action_ok_handler_t )(void *data, unsigned action); +typedef void (*get_string_representation_t )(void *data, char *s, size_t len); + +typedef struct rarch_setting_info +{ + int index; + int size; +} rarch_setting_info_t; + +typedef struct rarch_setting_group_info +{ + const char *name; +} rarch_setting_group_info_t; + +typedef struct rarch_setting +{ + enum setting_type type; + + const char *name; + uint32_t size; + + const char* short_description; + const char* group; + const char* subgroup; + + uint32_t index; + uint32_t index_offset; + + double min; + double max; + + const char* values; + uint64_t flags; + + change_handler_t change_handler; + change_handler_t deferred_handler; + change_handler_t read_handler; + action_start_handler_t action_start; + action_iterate_handler_t action_iterate; + action_toggle_handler_t action_toggle; + action_up_or_down_handler_t action_up_or_down; + action_cancel_handler_t action_cancel; + action_ok_handler_t action_ok; + get_string_representation_t get_string_representation; + + union + { + bool boolean; + int integer; + unsigned int unsigned_integer; + float fraction; + const char* string; + const struct retro_keybind* keybind; + } default_value; + + union + { + bool* boolean; + int* integer; + unsigned int* unsigned_integer; + float* fraction; + char* string; + struct retro_keybind* keybind; + } value; + + union + { + bool boolean; + int integer; + unsigned int unsigned_integer; + float fraction; + } original_value; + + struct + { + const char *empty_path; + } dir; + + struct + { + enum event_command idx; + bool triggered; + } cmd_trigger; + + struct + { + const char *off_label; + const char *on_label; + } boolean; + + unsigned bind_type; + unsigned browser_selection_type; + float step; + const char *rounding_fraction; + bool enforce_minrange; + bool enforce_maxrange; +} rarch_setting_t; + + +bool settings_list_append(rarch_setting_t **list, + rarch_setting_info_t *list_info, rarch_setting_t value); + +void settings_list_current_add_flags( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned values); + +void settings_list_current_add_bind_type( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + unsigned type); + +void settings_list_current_add_range( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + float min, float max, float step, + bool enforce_minrange_enable, bool enforce_maxrange_enable); + +void settings_list_current_add_values( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + const char *values); + +void settings_list_current_add_cmd( + rarch_setting_t **list, + rarch_setting_info_t *list_info, + enum event_command values); + +void settings_info_list_free(rarch_setting_info_t *list_info); + +void settings_list_free(rarch_setting_t *list); + +rarch_setting_info_t *settings_info_list_new(void); + +rarch_setting_t *settings_list_new(unsigned size); + void menu_setting_apply_deferred(void); int menu_setting_set_flags(rarch_setting_t *setting); diff --git a/menu/menu_settings_list.c b/menu/menu_settings_list.c deleted file mode 100644 index 2828c72a47..0000000000 --- a/menu/menu_settings_list.c +++ /dev/null @@ -1,135 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2013-2014 - Jason Fetters - * Copyright (C) 2011-2015 - Daniel De Matteis - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#include "menu_settings_list.h" - -void settings_info_list_free(rarch_setting_info_t *list_info) -{ - if (list_info) - free(list_info); - list_info = NULL; -} - -rarch_setting_info_t *settings_info_list_new(void) -{ - rarch_setting_info_t *list_info = (rarch_setting_info_t*) - calloc(1, sizeof(*list_info)); - - if (!list_info) - return NULL; - - list_info->size = 32; - - return list_info; -} - -bool settings_list_append(rarch_setting_t **list, - rarch_setting_info_t *list_info, rarch_setting_t value) -{ - if (!list || !*list || !list_info) - return false; - - if (list_info->index == list_info->size) - { - list_info->size *= 2; - *list = (rarch_setting_t*) - realloc(*list, sizeof(rarch_setting_t) * list_info->size); - if (!*list) - return false; - } - - (*list)[list_info->index++] = value; - return true; -} - -static void null_write_handler(void *data) -{ - (void)data; -} - -void settings_list_current_add_bind_type( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned type) -{ - unsigned idx = list_info->index - 1; - (*list)[idx].bind_type = type; -} - -void settings_list_current_add_flags( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values) -{ - unsigned idx = list_info->index - 1; - (*list)[idx].flags |= values; - - if (values & SD_FLAG_IS_DEFERRED) - { - (*list)[idx].deferred_handler = (*list)[idx].change_handler; - (*list)[idx].change_handler = null_write_handler; - } -} - -void settings_list_current_add_range( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - float min, float max, float step, - bool enforce_minrange_enable, bool enforce_maxrange_enable) -{ - unsigned idx = list_info->index - 1; - - (*list)[idx].min = min; - (*list)[idx].step = step; - (*list)[idx].max = max; - (*list)[idx].enforce_minrange = enforce_minrange_enable; - (*list)[idx].enforce_maxrange = enforce_maxrange_enable; - - settings_list_current_add_flags(list, list_info, SD_FLAG_HAS_RANGE); -} - -void settings_list_current_add_values( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - const char *values) -{ - unsigned idx = list_info->index - 1; - (*list)[idx].values = values; -} - -void settings_list_current_add_cmd( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum event_command values) -{ - unsigned idx = list_info->index - 1; - (*list)[idx].cmd_trigger.idx = values; -} - -void settings_list_free(rarch_setting_t *list) -{ - if (list) - free(list); -} - -rarch_setting_t *settings_list_new(unsigned size) -{ - rarch_setting_t *list = (rarch_setting_t*)calloc(size, sizeof(*list)); - if (!list) - return NULL; - - return list; -} diff --git a/menu/menu_settings_list.h b/menu/menu_settings_list.h deleted file mode 100644 index e9de3cf7b8..0000000000 --- a/menu/menu_settings_list.h +++ /dev/null @@ -1,244 +0,0 @@ -/* RetroArch - A frontend for libretro. - * Copyright (C) 2013-2014 - Jason Fetters - * Copyright (C) 2011-2015 - Daniel De Matteis - * - * RetroArch is free software: you can redistribute it and/or modify it under the terms - * of the GNU General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with RetroArch. - * If not, see . - */ - -#ifndef _SETTINGS_LIST_H -#define _SETTINGS_LIST_H - -#include -#include -#include - -#include "../command_event.h" - -#ifdef __cplusplus -extern "C" { -#endif - -enum setting_type -{ - ST_NONE = 0, - ST_ACTION, - ST_BOOL, - ST_INT, - ST_UINT, - ST_FLOAT, - ST_PATH, - ST_DIR, - ST_STRING, - ST_HEX, - ST_BIND, - ST_GROUP, - ST_SUB_GROUP, - ST_END_GROUP, - ST_END_SUB_GROUP -}; - -enum setting_flags -{ - SD_FLAG_PATH_DIR = (1 << 0), - SD_FLAG_PATH_FILE = (1 << 1), - SD_FLAG_ALLOW_EMPTY = (1 << 2), - SD_FLAG_VALUE_DESC = (1 << 3), - SD_FLAG_HAS_RANGE = (1 << 4), - SD_FLAG_ALLOW_INPUT = (1 << 5), - SD_FLAG_IS_DRIVER = (1 << 6), - SD_FLAG_EXIT = (1 << 7), - SD_FLAG_CMD_APPLY_AUTO = (1 << 8), - SD_FLAG_IS_DEFERRED = (1 << 9), - SD_FLAG_BROWSER_ACTION = (1 << 10), - SD_FLAG_ADVANCED = (1 << 11) -}; - -enum setting_list_flags -{ - SL_FLAG_MAIN_MENU = (1 << 0), - SL_FLAG_DRIVER_OPTIONS = (1 << 1), - SL_FLAG_CORE_OPTIONS = (1 << 2), - SL_FLAG_CONFIGURATION_OPTIONS = (1 << 3), - SL_FLAG_REWIND_OPTIONS = (1 << 4), - SL_FLAG_VIDEO_OPTIONS = (1 << 5), - SL_FLAG_SHADER_OPTIONS = (1 << 6), - SL_FLAG_FONT_OPTIONS = (1 << 7), - SL_FLAG_AUDIO_OPTIONS = (1 << 8), - SL_FLAG_INPUT_OPTIONS = (1 << 9), - SL_FLAG_OVERLAY_OPTIONS = (1 << 10), - SL_FLAG_OSK_OVERLAY_OPTIONS = (1 << 11), - SL_FLAG_MENU_OPTIONS = (1 << 12), - SL_FLAG_UI_OPTIONS = (1 << 13), - SL_FLAG_CORE_UPDATER_OPTIONS = (1 << 14), - SL_FLAG_NETPLAY_OPTIONS = (1 << 15), - SL_FLAG_USER_OPTIONS = (1 << 16), - SL_FLAG_DIRECTORY_OPTIONS = (1 << 17), - SL_FLAG_PRIVACY_OPTIONS = (1 << 18), - SL_FLAG_PLAYLIST_OPTIONS = (1 << 19), - SL_FLAG_ARCHIVE_OPTIONS = (1 << 20), - SL_FLAG_PATCH_OPTIONS = (1 << 21), - SL_FLAG_RECORDING_OPTIONS = (1 << 21), - SL_FLAG_FRAME_THROTTLE_OPTIONS= (1 << 22), - SL_FLAG_LOGGING_OPTIONS = (1 << 23), - SL_FLAG_SAVING_OPTIONS = (1 << 24), - SL_FLAG_ALL = (1 << 25), -}; - -#define SL_FLAG_ALL_SETTINGS (SL_FLAG_ALL - SL_FLAG_MAIN_MENU) - -typedef void (*change_handler_t )(void *data); -typedef int (*action_toggle_handler_t )(void *data, unsigned action, bool wraparound); -typedef int (*action_up_or_down_handler_t )(void *data, unsigned action); -typedef int (*action_start_handler_t )(void *data); -typedef int (*action_iterate_handler_t )(unsigned action); -typedef int (*action_cancel_handler_t )(void *data, unsigned action); -typedef int (*action_ok_handler_t )(void *data, unsigned action); -typedef void (*get_string_representation_t )(void *data, char *s, size_t len); - -typedef struct rarch_setting_info -{ - int index; - int size; -} rarch_setting_info_t; - -typedef struct rarch_setting_group_info -{ - const char *name; -} rarch_setting_group_info_t; - -typedef struct rarch_setting -{ - enum setting_type type; - - const char *name; - uint32_t size; - - const char* short_description; - const char* group; - const char* subgroup; - - uint32_t index; - uint32_t index_offset; - - double min; - double max; - - const char* values; - uint64_t flags; - - change_handler_t change_handler; - change_handler_t deferred_handler; - change_handler_t read_handler; - action_start_handler_t action_start; - action_iterate_handler_t action_iterate; - action_toggle_handler_t action_toggle; - action_up_or_down_handler_t action_up_or_down; - action_cancel_handler_t action_cancel; - action_ok_handler_t action_ok; - get_string_representation_t get_string_representation; - - union - { - bool boolean; - int integer; - unsigned int unsigned_integer; - float fraction; - const char* string; - const struct retro_keybind* keybind; - } default_value; - - union - { - bool* boolean; - int* integer; - unsigned int* unsigned_integer; - float* fraction; - char* string; - struct retro_keybind* keybind; - } value; - - union - { - bool boolean; - int integer; - unsigned int unsigned_integer; - float fraction; - } original_value; - - struct - { - const char *empty_path; - } dir; - - struct - { - enum event_command idx; - bool triggered; - } cmd_trigger; - - struct - { - const char *off_label; - const char *on_label; - } boolean; - - unsigned bind_type; - unsigned browser_selection_type; - float step; - const char *rounding_fraction; - bool enforce_minrange; - bool enforce_maxrange; -} rarch_setting_t; - - -bool settings_list_append(rarch_setting_t **list, - rarch_setting_info_t *list_info, rarch_setting_t value); - -void settings_list_current_add_flags( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned values); - -void settings_list_current_add_bind_type( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - unsigned type); - -void settings_list_current_add_range( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - float min, float max, float step, - bool enforce_minrange_enable, bool enforce_maxrange_enable); - -void settings_list_current_add_values( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - const char *values); - -void settings_list_current_add_cmd( - rarch_setting_t **list, - rarch_setting_info_t *list_info, - enum event_command values); - -void settings_info_list_free(rarch_setting_info_t *list_info); - -void settings_list_free(rarch_setting_t *list); - -rarch_setting_info_t *settings_info_list_new(void); - -rarch_setting_t *settings_list_new(unsigned size); - -#ifdef __cplusplus -} -#endif - -#endif