summaryrefslogtreecommitdiff
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-767ddef550ec193c087064291b78d0e1db5e8fb0.tar.gz
rockbox-767ddef550ec193c087064291b78d0e1db5e8fb0.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
417 return ret; 417 return ret;
418} 418}
419 419
420static const struct settings_list *get_setting(int gs_value,
421 const struct settings_list *defaultval)
422{
423 if (gs_value != -1 && gs_value < nb_settings &&
424 is_setting_quickscreenable(&settings[gs_value]))
425 return &settings[gs_value];
426 return defaultval;
427}
428
429int quick_screen_quick(int button_enter) 420int quick_screen_quick(int button_enter)
430{ 421{
431 struct gui_quickscreen qs; 422 struct gui_quickscreen qs;
@@ -436,16 +427,13 @@ int quick_screen_quick(int button_enter)
436#endif 427#endif
437 bool usb = false; 428 bool usb = false;
438 429
439 qs.items[QUICKSCREEN_TOP] = 430 for (int i = 0; i < 4; ++i)
440 get_setting(global_settings.qs_items[QUICKSCREEN_TOP], NULL); 431 {
441 qs.items[QUICKSCREEN_LEFT] = 432 qs.items[i] = global_settings.qs_items[i];
442 get_setting(global_settings.qs_items[QUICKSCREEN_LEFT], 433
443 find_setting(&global_settings.playlist_shuffle, NULL)); 434 if (!is_setting_quickscreenable(qs.items[i]))
444 qs.items[QUICKSCREEN_RIGHT] = 435 qs.items[i] = NULL;
445 get_setting(global_settings.qs_items[QUICKSCREEN_RIGHT], 436 }
446 find_setting(&global_settings.repeat_mode, NULL));
447 qs.items[QUICKSCREEN_BOTTOM] =
448 get_setting(global_settings.qs_items[QUICKSCREEN_BOTTOM], NULL);
449 437
450 qs.callback = NULL; 438 qs.callback = NULL;
451 int ret = gui_syncquickscreen_run(&qs, button_enter, &usb); 439 int ret = gui_syncquickscreen_run(&qs, button_enter, &usb);
@@ -481,10 +469,14 @@ int quick_screen_quick(int button_enter)
481/* stuff to make the quickscreen configurable */ 469/* stuff to make the quickscreen configurable */
482bool is_setting_quickscreenable(const struct settings_list *setting) 470bool is_setting_quickscreenable(const struct settings_list *setting)
483{ 471{
472 if (!setting)
473 return true;
474
484 /* to keep things simple, only settings which have a lang_id set are ok */ 475 /* to keep things simple, only settings which have a lang_id set are ok */
485 if (setting->lang_id < 0 || (setting->flags&F_BANFROMQS)) 476 if (setting->lang_id < 0 || (setting->flags & F_BANFROMQS))
486 return false; 477 return false;
487 switch (setting->flags&F_T_MASK) 478
479 switch (setting->flags & F_T_MASK)
488 { 480 {
489 case F_T_BOOL: 481 case F_T_BOOL:
490 return true; 482 return true;
@@ -495,16 +487,3 @@ bool is_setting_quickscreenable(const struct settings_list *setting)
495 return false; 487 return false;
496 } 488 }
497} 489}
498
499void set_as_qs_item(const struct settings_list *setting,
500 enum quickscreen_item item)
501{
502 int i;
503 for (i = 0; i < nb_settings; i++)
504 {
505 if (&settings[i] == setting)
506 break;
507 }
508
509 global_settings.qs_items[item] = i;
510}
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
53extern int quick_screen_quick(int button_enter); 53extern int quick_screen_quick(int button_enter);
54int quickscreen_set_option(void *data); 54int quickscreen_set_option(void *data);
55bool is_setting_quickscreenable(const struct settings_list *setting); 55bool is_setting_quickscreenable(const struct settings_list *setting);
56void set_as_qs_item(const struct settings_list *setting, 56
57 enum quickscreen_item item);
58#endif /*_GUI_QUICK_SCREEN_H_*/ 57#endif /*_GUI_QUICK_SCREEN_H_*/
59#endif /* HAVE_QUICKSCREEN */ 58#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,
544 break; 544 break;
545#ifdef HAVE_QUICKSCREEN 545#ifdef HAVE_QUICKSCREEN
546 case 1: /* set as top QS item */ 546 case 1: /* set as top QS item */
547 set_as_qs_item(setting, QUICKSCREEN_TOP); 547 global_settings.qs_items[QUICKSCREEN_TOP] = setting;
548 break; 548 break;
549 case 2: /* set as left QS item */ 549 case 2: /* set as left QS item */
550 set_as_qs_item(setting, QUICKSCREEN_LEFT); 550 global_settings.qs_items[QUICKSCREEN_LEFT] = setting;
551 break; 551 break;
552 case 3: /* set as bottom QS item */ 552 case 3: /* set as bottom QS item */
553 set_as_qs_item(setting, QUICKSCREEN_BOTTOM); 553 global_settings.qs_items[QUICKSCREEN_BOTTOM] = setting;
554 break; 554 break;
555 case 4: /* set as right QS item */ 555 case 4: /* set as right QS item */
556 set_as_qs_item(setting, QUICKSCREEN_RIGHT); 556 global_settings.qs_items[QUICKSCREEN_RIGHT] = setting;
557 break; 557 break;
558 case 5: /* Add to faves. Same limitation on which can be 558 case 5: /* Add to faves. Same limitation on which can be
559 added to the shortcuts menu as the quickscreen */ 559 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
486#endif 486#endif
487 487
488#ifdef HAVE_QUICKSCREEN 488#ifdef HAVE_QUICKSCREEN
489 int qs_items[QUICKSCREEN_ITEM_COUNT]; 489 const struct settings_list *qs_items[QUICKSCREEN_ITEM_COUNT];
490#endif 490#endif
491 491
492 int timeformat; /* time format: 0=24 hour clock, 1=12 hour clock */ 492 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)
593} 593}
594 594
595#ifdef HAVE_QUICKSCREEN 595#ifdef HAVE_QUICKSCREEN
596static int find_setting_by_name(char*name) 596static void qs_load_from_cfg(void *var, char *value)
597{ 597{
598 int i = 0; 598 const struct settings_list **item = var;
599 const struct settings_list *setting; 599
600 if (!strcmp(name, "-")) 600 if (*value == '-')
601 return -1; 601 *item = NULL;
602 while (i<nb_settings) 602 else
603 { 603 *item = find_setting_by_cfgname(value, NULL);
604 setting = &settings[i];
605 if (setting->cfg_name && !strcmp(setting->cfg_name, name))
606 {
607 return i;
608 }
609 i++;
610 }
611 return -1;
612}
613static void qs_load_from_cfg(void* var, char*value)
614{
615 *(int*)var = find_setting_by_name(value);
616} 604}
617static char* qs_write_to_cfg(void* setting, char*buf, int buf_len) 605
606static char* qs_write_to_cfg(void *var, char *buf, int buf_len)
618{ 607{
619 int index = *(int*)setting; 608 const struct settings_list *setting = *(const struct settings_list **)var;
620 if (index < 0 || index >= nb_settings) 609
621 { 610 strmemccpy(buf, setting ? setting->cfg_name : "-", buf_len);
622 strmemccpy(buf, "-", buf_len);
623 return buf;
624 }
625 const struct settings_list *var = &settings[index];
626 strmemccpy(buf, var->cfg_name, buf_len);
627 return buf; 611 return buf;
628} 612}
629static bool qs_is_changed(void* setting, void* defaultval) 613
614static bool qs_is_changed(void* var, void* defaultval)
630{ 615{
631 int i = *(int*)setting; 616 const struct settings_list *defaultsetting = find_setting(defaultval, NULL);
632 if (i < 0 || i >= nb_settings) 617
633 return false; 618 return var != defaultsetting;
634 const struct settings_list *var = &settings[i];
635 return var != find_setting(defaultval, NULL);
636} 619}
637static void qs_set_default(void* setting, void* defaultval) 620
621static void qs_set_default(void* var, void* defaultval)
638{ 622{
639 if (defaultval == NULL) 623 *(const struct settings_list **)var = find_setting(defaultval, NULL);
640 *(int*)setting = -1;
641 find_setting(defaultval, (int*)setting);
642} 624}
643#endif 625#endif
644#ifdef HAVE_TOUCHSCREEN 626#ifdef HAVE_TOUCHSCREEN