diff options
| author | Jonathan Gordon <rockbox@jdgordon.info> | 2007-02-08 10:28:42 +0000 |
|---|---|---|
| committer | Jonathan Gordon <rockbox@jdgordon.info> | 2007-02-08 10:28:42 +0000 |
| commit | fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab (patch) | |
| tree | 996bf94f160d31eb8879295efb3b159ebdea0042 /apps/menu.c | |
| parent | e645e2dcf2cc03c7e4c9a9d26ac93bbf82e8414b (diff) | |
| download | rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.zip rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.gz rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.bz2 rockbox-fe3cfcc9b2b0ce5f0862f891762794ddf42bb6ab.tar.xz | |
Convert the sound menu to the new system
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12230 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/menu.c')
| -rw-r--r-- | apps/menu.c | 71 |
1 files changed, 49 insertions, 22 deletions
diff --git a/apps/menu.c b/apps/menu.c index 9c5afbe..ae2797e 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -43,6 +43,7 @@ #include "misc.h" #include "action.h" #include "menus/exported_menus.h" +#include "string.h" #ifdef HAVE_LCD_BITMAP #include "icons.h" @@ -370,11 +371,12 @@ static int current_subitems[MAX_MENU_SUBITEMS]; static int current_subitems_count = 0; void get_menu_callback(const struct menu_item_ex *m, - menu_callback_type menu_callback) + menu_callback_type *menu_callback) { if (m->flags&MENU_HAS_DESC) - menu_callback= m->callback_and_desc->menu_callback; - else menu_callback = m->menu_callback; + *menu_callback= m->callback_and_desc->menu_callback; + else + *menu_callback = m->menu_callback; } static int get_menu_selection(int selected_item, const struct menu_item_ex *menu) @@ -403,7 +405,7 @@ static char * get_menu_item_name(int selected_item,void * data, char *buffer) if (type == MT_SETTING) { const struct settings_list *v - = find_setting(menu->variable); + = find_setting(menu->variable, NULL); if (v) return str(v->lang_id); else return "Not Done yet!"; @@ -419,7 +421,7 @@ static void init_menu_lists(const struct menu_item_ex *menu, current_subitems_count = 0; for (i=0; i<count; i++) { - get_menu_callback(menu->submenus[i],menu_callback); + get_menu_callback(menu->submenus[i],&menu_callback); if (menu_callback) { if (menu_callback(ACTION_REQUEST_MENUITEM,menu->submenus[i]) @@ -443,7 +445,7 @@ static void init_menu_lists(const struct menu_item_ex *menu, gui_synclist_limit_scroll(lists,true); gui_synclist_select_item(lists, selected); - get_menu_callback(menu,menu_callback); + get_menu_callback(menu,&menu_callback); if (callback && menu_callback) menu_callback(ACTION_ENTER_MENUITEM,menu); } @@ -505,7 +507,7 @@ int do_menu(const struct menu_item_ex *start_menu) continue; } - get_menu_callback(menu,menu_callback); + get_menu_callback(menu,&menu_callback); if (menu_callback) { action = menu_callback(action,menu); @@ -526,7 +528,7 @@ int do_menu(const struct menu_item_ex *start_menu) in_stringlist = false; if (stack_top > 0) { - get_menu_callback(menu,menu_callback); + get_menu_callback(menu,&menu_callback); if (menu_callback) { if (menu_callback(action,menu) == @@ -551,8 +553,9 @@ int do_menu(const struct menu_item_ex *start_menu) temp = menu->submenus[selected]; if (in_stringlist) type = (menu->flags&MENU_TYPE_MASK); - else type = (temp->flags&MENU_TYPE_MASK); - get_menu_callback(temp,menu_callback); + else + type = (temp->flags&MENU_TYPE_MASK); + get_menu_callback(temp, &menu_callback); if (menu_callback) { action = menu_callback(ACTION_ENTER_MENUITEM,temp); @@ -584,8 +587,10 @@ int do_menu(const struct menu_item_ex *start_menu) break; case MT_SETTING: { + int setting_id; const struct settings_list *setting = find_setting( - temp->variable); + temp->variable, + &setting_id); if (setting) { if ((setting->flags&F_BOOL_SETTING) == F_BOOL_SETTING) @@ -624,11 +629,10 @@ int do_menu(const struct menu_item_ex *start_menu) { var = (int*)setting->setting; } - DEBUGF("%x\n",setting->flags); if (setting->flags&F_INT_SETTING) - {DEBUGF("boo"); + { set_int(str(setting->lang_id), - str(setting->int_setting->unit), + NULL, setting->int_setting->unit,var, setting->int_setting->option_callback, setting->int_setting->step, @@ -639,18 +643,41 @@ int do_menu(const struct menu_item_ex *start_menu) else if (setting->flags&F_CHOICE_SETTING) { static struct opt_items options[MAX_OPTIONS]; + static char buffer[1024]; + char *buf_start = buffer; + int buf_free = 1024; int i,j, count = setting->choice_setting->count; for (i=0, j=0; i<count && i<MAX_OPTIONS; i++) { - options[j].string = - P2STR(setting->choice_setting->desc[i]); - options[j].voice_id = - P2ID(setting->choice_setting->desc[i]); - j++; + if (setting->flags&F_CHOICETALKS) + { + if (cfg_int_to_string(setting_id, i, + buf_start, buf_free)) + { + int len = strlen(buf_start) +1; + options[j].string = buf_start; + buf_start += len; + buf_free -= len; + options[j].voice_id = + setting->choice_setting->talks[i]; + j++; + } + } + else + { + options[j].string = + P2STR(setting-> + choice_setting->desc[i]); + options[j].voice_id = + P2ID(setting-> + choice_setting->desc[i]); + j++; + } } set_option(str(setting->lang_id), var, INT, - options,count, - setting->choice_setting->option_callback); + options,j, + setting-> + choice_setting->option_callback); } if (setting->flags&F_TEMPVAR) *(int*)setting->setting = temp_var; @@ -675,7 +702,7 @@ int do_menu(const struct menu_item_ex *start_menu) } break; } - get_menu_callback(temp,menu_callback); + get_menu_callback(temp,&menu_callback); if (type != MT_MENU && menu_callback) menu_callback(ACTION_EXIT_MENUITEM,temp); } |