summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAidan MacDonald <amachronic@protonmail.com>2022-11-30 14:28:31 +0000
committerAidan MacDonald <amachronic@protonmail.com>2022-12-17 13:36:38 +0000
commit767ddef550ec193c087064291b78d0e1db5e8fb0 (patch)
treef22cb97f56d5045baecc8caa40fe0e53a22ca8b7
parentc85a4f1fa4062e69f8ad8d9f4a8d70fe8c32bb82 (diff)
downloadrockbox-767ddef550.tar.gz
rockbox-767ddef550.zip
quickscreen: Settings ID to pointer conversion
Saves a good deal of code... Change-Id: Ibaf4138ddffd5d8f7cca560cc52645dbce44149c
-rw-r--r--apps/gui/quickscreen.c47
-rw-r--r--apps/gui/quickscreen.h3
-rw-r--r--apps/menu.c8
-rw-r--r--apps/settings.h2
-rw-r--r--apps/settings_list.c58
5 files changed, 39 insertions, 79 deletions
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 (i<nb_settings)
- {
- setting = &settings[i];
- if (setting->cfg_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