(UI/QT) First attempt at dynamically generating settings instead

of manually specifying settings
This commit is contained in:
twinaphex 2019-04-15 06:16:55 +02:00
parent 1599f1f5d3
commit 085f25e81f
4 changed files with 248 additions and 185 deletions

View File

@ -4376,6 +4376,205 @@ bool menu_displaylist_setting(menu_displaylist_ctx_parse_entry_t *entry)
return true;
}
unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ctl_state type)
{
unsigned count = 0;
switch (type)
{
case DISPLAYLIST_MENU_SETTINGS_LIST:
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_WALLPAPER,
PARSE_ONLY_PATH, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_DYNAMIC_WALLPAPER,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_BACKGROUND_FILLER_THICKNESS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_BORDER_FILLER_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_BORDER_FILLER_THICKNESS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_FULL_WIDTH_LAYOUT,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_LINEAR_FILTER,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_INTERNAL_UPSCALE_LEVEL,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_ASPECT_RATIO,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_ASPECT_RATIO_LOCK,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_RGUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_RGUI_MENU_THEME_PRESET,
PARSE_ONLY_PATH, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_SHADOWS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_ALPHA_FACTOR,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_SCALE_FACTOR,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_FONT,
PARSE_ONLY_PATH, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_FONT_COLOR_RED,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_LAYOUT,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_RIBBON_ENABLE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_OZONE_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_OZONE_COLLAPSE_SIDEBAR,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_USE_PREFERRED_SYSTEM_COLOR_THEME,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_INLINE_THUMBNAILS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_THUMBNAILS,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_LEFT_THUMBNAILS,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_XMB_VERTICAL_THUMBNAILS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_SWAP_THUMBNAILS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DOWNSCALER,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DELAY,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_TICKER_TYPE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_TICKER_SPEED,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(list,
MENU_ENUM_LABEL_MENU_RGUI_EXTENDED_ASCII,
PARSE_ONLY_BOOL, false) == 0)
count++;
break;
default:
break;
}
return count;
}
bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist_info_t *info)
{
size_t i;
@ -6054,190 +6253,7 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist
case DISPLAYLIST_MENU_SETTINGS_LIST:
menu_entries_ctl(MENU_ENTRIES_CTL_CLEAR, info->list);
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_WALLPAPER,
PARSE_ONLY_PATH, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_DYNAMIC_WALLPAPER,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_FRAMEBUFFER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_BACKGROUND_FILLER_THICKNESS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_BORDER_FILLER_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_BORDER_FILLER_THICKNESS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_FULL_WIDTH_LAYOUT,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_LINEAR_FILTER,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_INTERNAL_UPSCALE_LEVEL,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_ASPECT_RATIO,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_ASPECT_RATIO_LOCK,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_HORIZONTAL_ANIMATION,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_RGUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_RGUI_MENU_THEME_PRESET,
PARSE_ONLY_PATH, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_SHADOWS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_DPI_OVERRIDE_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_DPI_OVERRIDE_VALUE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_ALPHA_FACTOR,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_SCALE_FACTOR,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_FONT,
PARSE_ONLY_PATH, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_FONT_COLOR_RED,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_LAYOUT,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_SHADOWS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_RIBBON_ENABLE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_OZONE_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_OZONE_COLLAPSE_SIDEBAR,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MATERIALUI_ICONS_ENABLE,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MATERIALUI_MENU_COLOR_THEME,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MATERIALUI_MENU_HEADER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MATERIALUI_MENU_FOOTER_OPACITY,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_USE_PREFERRED_SYSTEM_COLOR_THEME,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_INLINE_THUMBNAILS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_THUMBNAILS,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_LEFT_THUMBNAILS,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_XMB_VERTICAL_THUMBNAILS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_SWAP_THUMBNAILS,
PARSE_ONLY_BOOL, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DOWNSCALER,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DELAY,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_TICKER_TYPE,
PARSE_ONLY_UINT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_TICKER_SPEED,
PARSE_ONLY_FLOAT, false) == 0)
count++;
if (menu_displaylist_parse_settings_enum(info->list,
MENU_ENUM_LABEL_MENU_RGUI_EXTENDED_ASCII,
PARSE_ONLY_BOOL, false) == 0)
count++;
count = menu_displaylist_build_list(info->list, DISPLAYLIST_MENU_SETTINGS_LIST);
if (count == 0)
menu_entries_append_enum(info->list,

View File

@ -252,6 +252,8 @@ bool menu_displaylist_push(menu_displaylist_ctx_entry_t *entry);
void menu_displaylist_info_free(menu_displaylist_info_t *info);
unsigned menu_displaylist_build_list(file_list_t *list, enum menu_displaylist_ctl_state type);
void menu_displaylist_info_init(menu_displaylist_info_t *info);
bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist_info_t *info);

View File

@ -9479,6 +9479,7 @@ static bool setting_append_list(
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_menu_thumbnails;
menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true);
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_RADIO_BUTTONS;
CONFIG_UINT(
list, list_info,
@ -9495,6 +9496,7 @@ static bool setting_append_list(
(*list)[list_info->index - 1].get_string_representation =
&setting_get_string_representation_uint_menu_left_thumbnails;
menu_settings_list_current_add_range(list, list_info, 0, 3, 1, true, true);
(*list)[list_info->index - 1].ui_type = ST_UI_TYPE_UINT_RADIO_BUTTONS;
}
if (string_is_equal(settings->arrays.menu_driver, "xmb"))

View File

@ -1,5 +1,6 @@
#include "options.h"
#include "../viewoptionsdialog.h"
#include "../../verbosity.h"
UserInterfaceCategory::UserInterfaceCategory(QWidget *parent) :
OptionsCategory(parent)
@ -193,10 +194,51 @@ AppearancePage::AppearancePage(QObject *parent) :
QWidget *AppearancePage::widget()
{
unsigned i;
QWidget * widget = new QWidget;
FormLayout *layout = new FormLayout;
rarch_setting_t *thumbnails = menu_setting_find_enum(MENU_ENUM_LABEL_THUMBNAILS);
rarch_setting_t *thumbnails = menu_setting_find_enum(
MENU_ENUM_LABEL_THUMBNAILS);
file_list_t *list = (file_list_t*)calloc(1, sizeof(*list));
unsigned count = menu_displaylist_build_list(
list, DISPLAYLIST_MENU_SETTINGS_LIST);
/* TODO/FIXME - we haven't yet figured out how to
* put a radio button setting next to another radio
* button on the same row */
for (i = 0; i < list->size; i++)
{
menu_file_list_cbs_t *cbs = (menu_file_list_cbs_t*)
file_list_get_actiondata_at_offset(list, i);
switch (cbs->enum_idx)
{
/* TODO/FIXME - this is a dirty hack - if we
* detect this setting, we instead replace it with a
* color button and ignore the other two font color
* settings since they are already covered by this one
* color button */
case MENU_ENUM_LABEL_MENU_FONT_COLOR_RED:
layout->addUIntColorButton("Menu Font Color: ",
MENU_ENUM_LABEL_MENU_FONT_COLOR_RED,
MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN,
MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE);
break;
case MENU_ENUM_LABEL_MENU_FONT_COLOR_GREEN:
case MENU_ENUM_LABEL_MENU_FONT_COLOR_BLUE:
break;
default:
layout->add(cbs->enum_idx);
break;
}
file_list_free_actiondata(list, i);
}
file_list_free(list);
#if 0
layout->add(MENU_ENUM_LABEL_MENU_WALLPAPER);
layout->add(MENU_ENUM_LABEL_DYNAMIC_WALLPAPER);
layout->add(MENU_ENUM_LABEL_MENU_WALLPAPER_OPACITY);
@ -249,6 +291,7 @@ QWidget *AppearancePage::widget()
layout->add(MENU_ENUM_LABEL_MENU_RGUI_THUMBNAIL_DOWNSCALER);
layout->add(MENU_ENUM_LABEL_MENU_TICKER_TYPE);
layout->add(MENU_ENUM_LABEL_MENU_TICKER_SPEED);
#endif
widget->setLayout(layout);