From 767ddef550ec193c087064291b78d0e1db5e8fb0 Mon Sep 17 00:00:00 2001 From: Aidan MacDonald Date: Wed, 30 Nov 2022 14:28:31 +0000 Subject: quickscreen: Settings ID to pointer conversion Saves a good deal of code... Change-Id: Ibaf4138ddffd5d8f7cca560cc52645dbce44149c --- apps/gui/quickscreen.c | 47 +++++++++++----------------------------- apps/gui/quickscreen.h | 3 +-- apps/menu.c | 8 +++---- apps/settings.h | 2 +- apps/settings_list.c | 58 +++++++++++++++++--------------------------------- 5 files changed, 39 insertions(+), 79 deletions(-) (limited to 'apps') diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c index 4eebe09fd3..356f74b283 100644 --- a/apps/gui/quickscreen.c +++ b/apps/gui/quickscreen.c @@ -417,15 +417,6 @@ static int gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter return ret; } -static const struct settings_list *get_setting(int gs_value, - const struct settings_list *defaultval) -{ - if (gs_value != -1 && gs_value < nb_settings && - is_setting_quickscreenable(&settings[gs_value])) - return &settings[gs_value]; - return defaultval; -} - int quick_screen_quick(int button_enter) { struct gui_quickscreen qs; @@ -436,16 +427,13 @@ int quick_screen_quick(int button_enter) #endif bool usb = false; - qs.items[QUICKSCREEN_TOP] = - get_setting(global_settings.qs_items[QUICKSCREEN_TOP], NULL); - qs.items[QUICKSCREEN_LEFT] = - get_setting(global_settings.qs_items[QUICKSCREEN_LEFT], - find_setting(&global_settings.playlist_shuffle, NULL)); - qs.items[QUICKSCREEN_RIGHT] = - get_setting(global_settings.qs_items[QUICKSCREEN_RIGHT], - find_setting(&global_settings.repeat_mode, NULL)); - qs.items[QUICKSCREEN_BOTTOM] = - get_setting(global_settings.qs_items[QUICKSCREEN_BOTTOM], NULL); + for (int i = 0; i < 4; ++i) + { + qs.items[i] = global_settings.qs_items[i]; + + if (!is_setting_quickscreenable(qs.items[i])) + qs.items[i] = NULL; + } qs.callback = NULL; int ret = gui_syncquickscreen_run(&qs, button_enter, &usb); @@ -481,10 +469,14 @@ int quick_screen_quick(int button_enter) /* stuff to make the quickscreen configurable */ bool is_setting_quickscreenable(const struct settings_list *setting) { + if (!setting) + return true; + /* to keep things simple, only settings which have a lang_id set are ok */ - if (setting->lang_id < 0 || (setting->flags&F_BANFROMQS)) + if (setting->lang_id < 0 || (setting->flags & F_BANFROMQS)) return false; - switch (setting->flags&F_T_MASK) + + switch (setting->flags & F_T_MASK) { case F_T_BOOL: return true; @@ -495,16 +487,3 @@ bool is_setting_quickscreenable(const struct settings_list *setting) return false; } } - -void set_as_qs_item(const struct settings_list *setting, - enum quickscreen_item item) -{ - int i; - for (i = 0; i < nb_settings; i++) - { - if (&settings[i] == setting) - break; - } - - global_settings.qs_items[item] = i; -} diff --git a/apps/gui/quickscreen.h b/apps/gui/quickscreen.h index 6082b5a883..bd8008bd34 100644 --- a/apps/gui/quickscreen.h +++ b/apps/gui/quickscreen.h @@ -53,7 +53,6 @@ struct gui_quickscreen extern int quick_screen_quick(int button_enter); int quickscreen_set_option(void *data); bool is_setting_quickscreenable(const struct settings_list *setting); -void set_as_qs_item(const struct settings_list *setting, - enum quickscreen_item item); + #endif /*_GUI_QUICK_SCREEN_H_*/ #endif /* HAVE_QUICKSCREEN */ diff --git a/apps/menu.c b/apps/menu.c index 2ef8e0d839..f317f579a4 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -544,16 +544,16 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, break; #ifdef HAVE_QUICKSCREEN case 1: /* set as top QS item */ - set_as_qs_item(setting, QUICKSCREEN_TOP); + global_settings.qs_items[QUICKSCREEN_TOP] = setting; break; case 2: /* set as left QS item */ - set_as_qs_item(setting, QUICKSCREEN_LEFT); + global_settings.qs_items[QUICKSCREEN_LEFT] = setting; break; case 3: /* set as bottom QS item */ - set_as_qs_item(setting, QUICKSCREEN_BOTTOM); + global_settings.qs_items[QUICKSCREEN_BOTTOM] = setting; break; case 4: /* set as right QS item */ - set_as_qs_item(setting, QUICKSCREEN_RIGHT); + global_settings.qs_items[QUICKSCREEN_RIGHT] = setting; break; case 5: /* Add to faves. Same limitation on which can be added to the shortcuts menu as the quickscreen */ diff --git a/apps/settings.h b/apps/settings.h index 75a346e223..1c298d8330 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -486,7 +486,7 @@ struct user_settings #endif #ifdef HAVE_QUICKSCREEN - int qs_items[QUICKSCREEN_ITEM_COUNT]; + const struct settings_list *qs_items[QUICKSCREEN_ITEM_COUNT]; #endif int timeformat; /* time format: 0=24 hour clock, 1=12 hour clock */ diff --git a/apps/settings_list.c b/apps/settings_list.c index ab02683d94..2ff4258c54 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -593,52 +593,34 @@ static void eq_set_default(void* setting, void* defaultval) } #ifdef HAVE_QUICKSCREEN -static int find_setting_by_name(char*name) +static void qs_load_from_cfg(void *var, char *value) { - int i = 0; - const struct settings_list *setting; - if (!strcmp(name, "-")) - return -1; - while (icfg_name && !strcmp(setting->cfg_name, name)) - { - return i; - } - i++; - } - return -1; -} -static void qs_load_from_cfg(void* var, char*value) -{ - *(int*)var = find_setting_by_name(value); + const struct settings_list **item = var; + + if (*value == '-') + *item = NULL; + else + *item = find_setting_by_cfgname(value, NULL); } -static char* qs_write_to_cfg(void* setting, char*buf, int buf_len) + +static char* qs_write_to_cfg(void *var, char *buf, int buf_len) { - int index = *(int*)setting; - if (index < 0 || index >= nb_settings) - { - strmemccpy(buf, "-", buf_len); - return buf; - } - const struct settings_list *var = &settings[index]; - strmemccpy(buf, var->cfg_name, buf_len); + const struct settings_list *setting = *(const struct settings_list **)var; + + strmemccpy(buf, setting ? setting->cfg_name : "-", buf_len); return buf; } -static bool qs_is_changed(void* setting, void* defaultval) + +static bool qs_is_changed(void* var, void* defaultval) { - int i = *(int*)setting; - if (i < 0 || i >= nb_settings) - return false; - const struct settings_list *var = &settings[i]; - return var != find_setting(defaultval, NULL); + const struct settings_list *defaultsetting = find_setting(defaultval, NULL); + + return var != defaultsetting; } -static void qs_set_default(void* setting, void* defaultval) + +static void qs_set_default(void* var, void* defaultval) { - if (defaultval == NULL) - *(int*)setting = -1; - find_setting(defaultval, (int*)setting); + *(const struct settings_list **)var = find_setting(defaultval, NULL); } #endif #ifdef HAVE_TOUCHSCREEN -- cgit v1.2.3