static int eq_do_simple_menu(void * param) { (void)param; struct simplelist_info info; struct settings_list setting; char title[MAX_PATH]; simplelist_info_init(&info, str(LANG_EQUALIZER_GAIN), EQ_NUM_BANDS, NULL); info.get_name = (list_get_name*)gainitem_get_name; info.get_talk = gainitem_speak_item; info.get_icon = gainitem_get_icon; info.action_callback = simplelist_action_callback; info.selection = -1; info.title_icon = Icon_Submenu; setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP; setting.lang_id = LANG_GAIN; setting.default_val.int_ = 0; setting.int_setting = &gain_int_setting; while (true) { simplelist_show_list(&info); if (info.selection < 0) break; pcmbuf_set_low_latency(true); setting.setting = &global_settings.eq_band_settings[info.selection].gain; option_screen(&setting, NULL, false, gainitem_get_name(info.selection, NULL, title, MAX_PATH)); eq_apply(); pcmbuf_set_low_latency(false); } return 0; }
bool set_option(const char* string, const void* variable, enum optiontype type, const struct opt_items* options, int numoptions, void (*function)(int)) { int temp; struct settings_list item; struct int_setting data = { function, UNIT_INT, 0, numoptions-1, 1, set_option_formatter, set_option_get_talk_id }; set_option_options = options; item.int_setting = &data; item.flags = F_INT_SETTING|F_T_INT; item.lang_id = -1; item.cfg_vals = (char*)string; item.setting = &temp; if (type == BOOL) temp = *(bool*)variable? 1: 0; else temp = *(int*)variable; if (!option_screen(&item, NULL, false, NULL)) { if (type == BOOL) *(bool*)variable = (temp == 1); else *(int*)variable = temp; return false; } return true; }
static int volume_limit_callback(int action,const struct menu_item_ex *this_item) { (void)this_item; static struct int_setting volume_limit_int_setting; volume_limit_int_setting.option_callback = NULL; volume_limit_int_setting.unit = UNIT_DB; volume_limit_int_setting.min = sound_min(SOUND_VOLUME); volume_limit_int_setting.max = sound_max(SOUND_VOLUME); volume_limit_int_setting.step = sound_steps(SOUND_VOLUME); volume_limit_int_setting.formatter = NULL; volume_limit_int_setting.get_talk_id = get_dec_talkid; struct settings_list setting; setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP; setting.lang_id = LANG_VOLUME_LIMIT; setting.default_val.int_ = sound_max(SOUND_VOLUME); setting.int_setting = &volume_limit_int_setting; switch (action) { case ACTION_ENTER_MENUITEM: setting.setting = &global_settings.volume_limit; option_screen(&setting, NULL, false, ID2P(LANG_VOLUME_LIMIT)); case ACTION_EXIT_MENUITEM: /* on exit */ setvol(); break; } return action; }
bool set_int_ex(const unsigned char* string, const char* unit, int voice_unit, const int* variable, void (*function)(int), int step, int min, int max, const char* (*formatter)(char*, size_t, int, const char*), int32_t (*get_talk_id)(int, int)) { (void)unit; struct settings_list item; struct int_setting data = { function, voice_unit, min, max, step, formatter, get_talk_id }; item.int_setting = &data; item.flags = F_INT_SETTING|F_T_INT; item.lang_id = -1; item.cfg_vals = (char*)string; item.setting = (void *)variable; return option_screen(&item, NULL, false, NULL); }
static int eq_do_advanced_menu(void * param) { (void)param; struct simplelist_info info; struct settings_list setting; char title[MAX_PATH]; int band, item; intptr_t selected_band = -1; simplelist_info_init(&info, str(LANG_EQUALIZER_ADVANCED), EQ_NUM_BANDS, &selected_band); info.get_name = (list_get_name*)advancedmenu_item_get_name; info.get_talk = advancedmenu_speak_item; info.get_icon = advancedmenu_get_icon; info.action_callback = simplelist_action_callback; info.selection = -1; info.title_icon = Icon_EQ; setting.flags = F_BANFROMQS|F_INT_SETTING|F_T_INT|F_NO_WRAP; while (true) { simplelist_show_list(&info); if (info.selection < 0) break; selection_to_banditem(info.selection, selected_band, &band, &item); switch (item) { case 0: /* title, do nothing */ { int extra; if (selected_band == band) { extra = 0; selected_band = -1; } else { extra = 3; selected_band = band; } info.selection = band; info.count = EQ_NUM_BANDS + extra; continue; } case 1: /* cutoff */ if (band == 0 || band == EQ_NUM_BANDS - 1) setting.lang_id = LANG_EQUALIZER_BAND_CUTOFF; else setting.lang_id = LANG_EQUALIZER_BAND_CENTER; setting.default_val.int_ = eq_defaults[band].cutoff; setting.int_setting = &cutoff_int_setting; setting.setting = &global_settings.eq_band_settings[band].cutoff; break; case 2: /* Q */ setting.lang_id = LANG_EQUALIZER_BAND_Q; setting.default_val.int_ = eq_defaults[band].q; setting.int_setting = &q_int_setting; setting.setting = &global_settings.eq_band_settings[band].q; break; case 3: /* Gain */ setting.lang_id = LANG_GAIN; setting.default_val.int_ = eq_defaults[band].gain; setting.int_setting = &gain_int_setting; setting.setting = &global_settings.eq_band_settings[band].gain; break; } pcmbuf_set_low_latency(true); advancedmenu_item_get_name(info.selection, &selected_band, title, MAX_PATH); option_screen(&setting, NULL, false, title[0] == '\t' ? &title[1] : title); eq_apply(); pcmbuf_set_low_latency(false); } return 0; }