summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2007-03-17 12:33:34 +0000
committerJonathan Gordon <rockbox@jdgordon.info>2007-03-17 12:33:34 +0000
commitdaf66940b1a06de2681c91dcb8cf72d95a234e86 (patch)
treecf19ca0f426f3a44718fbe42ce64306ac28aa815
parent86ecc9588beca55162d7b4ef44ffcddd9c447600 (diff)
downloadrockbox-daf66940b1a06de2681c91dcb8cf72d95a234e86.tar.gz
rockbox-daf66940b1a06de2681c91dcb8cf72d95a234e86.zip
Unify the way functions are called from menus.
Optionally, the functions return value can be checked for a value to tell the menu to quit. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12821 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/menu.c20
-rw-r--r--apps/menu.h73
-rw-r--r--apps/menus/display_menu.c44
-rw-r--r--apps/menus/eq_menu.c57
-rw-r--r--apps/menus/main_menu.c49
-rw-r--r--apps/menus/playlist_menu.c18
-rw-r--r--apps/menus/recording_menu.c41
-rw-r--r--apps/menus/settings_menu.c35
-rw-r--r--apps/recorder/radio.c52
-rw-r--r--apps/root_menu.c3
10 files changed, 209 insertions, 183 deletions
diff --git a/apps/menu.c b/apps/menu.c
index 29dad82851..dd5a23b933 100644
--- a/apps/menu.c
+++ b/apps/menu.c
@@ -160,7 +160,6 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon)
160 *icon = bitmap_icons_6x8[menu_icon]; 160 *icon = bitmap_icons_6x8[menu_icon];
161 break; 161 break;
162 case MT_FUNCTION_CALL: 162 case MT_FUNCTION_CALL:
163 case MT_FUNCTION_WITH_PARAM:
164 case MT_RETURN_VALUE: 163 case MT_RETURN_VALUE:
165 if (menu_icon == Icon_NOICON) 164 if (menu_icon == Icon_NOICON)
166 *icon = bitmap_icons_6x8[Icon_Menu_functioncall]; 165 *icon = bitmap_icons_6x8[Icon_Menu_functioncall];
@@ -545,14 +544,21 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected)
545 } 544 }
546 break; 545 break;
547 case MT_FUNCTION_CALL: 546 case MT_FUNCTION_CALL:
547 {
548 int return_value;
548 action_signalscreenchange(); 549 action_signalscreenchange();
549 temp->function(); 550 if (temp->flags&MENU_FUNC_USEPARAM)
550 break; 551 return_value = temp->function->function_w_param(
551 case MT_FUNCTION_WITH_PARAM: 552 temp->function->param);
552 action_signalscreenchange(); 553 else
553 temp->func_with_param->function( 554 return_value = temp->function->function();
554 temp->func_with_param->param); 555 if (temp->flags&MENU_FUNC_CHECK_RETVAL)
556 {
557 if (return_value == temp->function->exit_value)
558 return return_value;
559 }
555 break; 560 break;
561 }
556 case MT_SETTING: 562 case MT_SETTING:
557 case MT_SETTING_W_TEXT: 563 case MT_SETTING_W_TEXT:
558 { 564 {
diff --git a/apps/menu.h b/apps/menu.h
index eed15d2396..6d7d113c8c 100644
--- a/apps/menu.h
+++ b/apps/menu.h
@@ -31,8 +31,7 @@ enum menu_item_type {
31 MT_SETTING_W_TEXT, /* same as setting, but uses different 31 MT_SETTING_W_TEXT, /* same as setting, but uses different
32 text for the setting title, 32 text for the setting title,
33 ID2P() or "literal" for the str param */ 33 ID2P() or "literal" for the str param */
34 MT_FUNCTION_CALL, /* used when the standard code wont work */ 34 MT_FUNCTION_CALL, /* call a function from the menus */
35 MT_FUNCTION_WITH_PARAM,
36 MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/ 35 MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/
37 MT_RETURN_VALUE, /* returns a value associated with an item */ 36 MT_RETURN_VALUE, /* returns a value associated with an item */
38 MT_OLD_MENU, /* used so we can wrap the old menu api 37 MT_OLD_MENU, /* used so we can wrap the old menu api
@@ -40,28 +39,36 @@ enum menu_item_type {
40}; 39};
41 40
42typedef int (*menu_function)(void); 41typedef int (*menu_function)(void);
43struct menu_func_with_param { 42struct menu_func {
44 int (*function)(void* param); 43 union {
45 void *param; 44 int (*function_w_param)(void* param); /* intptr_t instead of void*
45 for 64bit systems */
46 int (*function)(void);
47 };
48 void *param; /* passed to function_w_param */
49 int exit_value; /* exit do_menu() if function returns this value */
46}; 50};
47 51
48#define MENU_TYPE_MASK 0xF /* MT_* type */ 52#define MENU_TYPE_MASK 0xF /* MT_* type */
49/* these next two are mutually exclusive */ 53/* these next two are mutually exclusive */
50#define MENU_HAS_DESC 0x10 54#define MENU_HAS_DESC 0x10
51#define MENU_DYNAMIC_DESC 0x20 55#define MENU_DYNAMIC_DESC 0x20
52/* unless we need more flags*/ 56
53#define MENU_COUNT_MASK (~(MENU_TYPE_MASK|MENU_HAS_DESC|MENU_DYNAMIC_DESC)) 57/* Flags for MT_FUNCTION_CALL */
54#define MENU_COUNT_SHIFT 6 58#define MENU_FUNC_USEPARAM 0x40
59#define MENU_FUNC_CHECK_RETVAL 0x80
60
61#define MENU_COUNT_MASK 0xFFF
62#define MENU_COUNT_SHIFT 8
63#define MENU_ITEM_COUNT(c) ((c&MENU_COUNT_MASK)<<MENU_COUNT_SHIFT)
55 64
56struct menu_item_ex { 65struct menu_item_ex {
57 int flags; /* above defines */ 66 unsigned int flags; /* above defines */
58 union { 67 union {
59 const struct menu_item_ex **submenus; /* used with MT_MENU */ 68 const struct menu_item_ex **submenus; /* used with MT_MENU */
60 void *variable; /* used with MT_SETTING, 69 void *variable; /* used with MT_SETTING,
61 must be in the settings_list.c list */ 70 must be in the settings_list.c list */
62 int (*function)(void); /* used with MT_FUNCTION_CALL */ 71 const struct menu_func *function; /* MT_FUNCTION_* */
63 const struct menu_func_with_param
64 *func_with_param; /* MT_FUNCTION_WITH_PARAM */
65 const char **strings; /* used with MT_RETURN_ID */ 72 const char **strings; /* used with MT_RETURN_ID */
66 int value; /* MT_RETURN_VALUE */ 73 int value; /* MT_RETURN_VALUE */
67 }; 74 };
@@ -91,7 +98,6 @@ typedef int (*menu_callback_type)(int action,
91int do_menu(const struct menu_item_ex *menu, int *start_selected); 98int do_menu(const struct menu_item_ex *menu, int *start_selected);
92bool do_setting_from_menu(const struct menu_item_ex *temp); 99bool do_setting_from_menu(const struct menu_item_ex *temp);
93 100
94#define MENU_ITEM_COUNT(c) (c<<MENU_COUNT_SHIFT)
95/* In all the following macros the argument names are as follows: 101/* In all the following macros the argument names are as follows:
96 - name: The name for the variable (so it can be used in a MAKE_MENU() 102 - name: The name for the variable (so it can be used in a MAKE_MENU()
97 - str: the string to display for this menu item. use ID2P() for LANG_* id's 103 - str: the string to display for this menu item. use ID2P() for LANG_* id's
@@ -144,34 +150,27 @@ bool do_setting_from_menu(const struct menu_item_ex *temp);
144 150
145/* Use this to put a function call into the menu. 151/* Use this to put a function call into the menu.
146 When the user selects this item the function will be run, 152 When the user selects this item the function will be run,
147 when it exits the user will be back in the menu. return value is ignored */ 153 unless MENU_FUNC_IGNORE_RETVAL is set, when it exits the user
148#define MENUITEM_FUNCTION(name, str, func, callback, icon) \ 154 will be back in the menu and return value is ignored,
155 else if it returns exit_if do_mneu() will exit */
156#define MENUITEM_FUNCTION(name, flags, str, func, param, \
157 exit_if, callback, icon) \
149 static const struct menu_callback_with_desc name##_ = {callback,str,icon}; \ 158 static const struct menu_callback_with_desc name##_ = {callback,str,icon}; \
150 static const struct menu_item_ex name = \ 159 static const struct menu_func name##__ = {{(void*)func}, param, exit_if}; \
151 { MT_FUNCTION_CALL|MENU_HAS_DESC, { .function = func}, \ 160 /* should be const, but recording_settings wont let us do that */ \
152 {.callback_and_desc = & name##_}}; 161 const struct menu_item_ex name = \
153 162 { MT_FUNCTION_CALL|MENU_HAS_DESC|flags, \
154/* This one should be static'ed also, 163 { .function = & name##__}, {.callback_and_desc = & name##_}};
155 but cannot be done untill recording menu is done */
156/* Same as above, except the function will be called with a (void*)param. */
157#define MENUITEM_FUNCTION_WPARAM(name, str, func, param, callback, icon) \
158 static const struct menu_callback_with_desc name##_ = {callback,str,icon}; \
159 static const struct menu_func_with_param name##__ = {func, param}; \
160 const struct menu_item_ex name = \
161 { MT_FUNCTION_WITH_PARAM|MENU_HAS_DESC, \
162 { .func_with_param = &name##__}, \
163 {.callback_and_desc = & name##_}};
164 164
165/* As above, except the text is dynamic */ 165/* As above, except the text is dynamic */
166#define MENUITEM_FUNCTION_WPARAM_DYNTEXT(name, func, param, callback, \ 166#define MENUITEM_FUNCTION_DYNTEXT(name, flags, func, param, exit_if, \
167 text_callback, text_cb_data, icon) \ 167 text_callback, text_cb_data, callback, icon) \
168 static const struct menu_get_name_and_icon name##_ \ 168 static const struct menu_get_name_and_icon name##_ \
169 = {callback,text_callback,text_cb_data,icon};\ 169 = {callback,text_callback,text_cb_data,icon}; \
170 static const struct menu_func_with_param name##__ = {func, param}; \ 170 static const struct menu_func name##__ = {{(void*)func}, param, exit_if}; \
171 static const struct menu_item_ex name = \ 171 static const struct menu_item_ex name = \
172 { MT_FUNCTION_WITH_PARAM|MENU_DYNAMIC_DESC, \ 172 { MT_FUNCTION_CALL|MENU_DYNAMIC_DESC|flags, \
173 { .func_with_param = &name##__}, \ 173 { .function = & name##__}, {.menu_get_name_and_icon = & name##_}};
174 {.menu_get_name_and_icon = & name##_}};
175 174
176/* Use this to actually create a menu. the ... argument is a list of pointers 175/* Use this to actually create a menu. the ... argument is a list of pointers
177 to any of the above macro'd variables. (It can also have other menus in the list. */ 176 to any of the above macro'd variables. (It can also have other menus in the list. */
diff --git a/apps/menus/display_menu.c b/apps/menus/display_menu.c
index 23915dcfef..3714950223 100644
--- a/apps/menus/display_menu.c
+++ b/apps/menus/display_menu.c
@@ -149,7 +149,6 @@ static int set_bg_color(void)
149 screens[SCREEN_MAIN].set_background(global_settings.bg_color); 149 screens[SCREEN_MAIN].set_background(global_settings.bg_color);
150 return res; 150 return res;
151} 151}
152
153static int reset_color(void) 152static int reset_color(void)
154{ 153{
155 global_settings.fg_color = LCD_DEFAULT_FG; 154 global_settings.fg_color = LCD_DEFAULT_FG;
@@ -159,14 +158,14 @@ static int reset_color(void)
159 screens[SCREEN_MAIN].set_background(global_settings.bg_color); 158 screens[SCREEN_MAIN].set_background(global_settings.bg_color);
160 return 0; 159 return 0;
161} 160}
162MENUITEM_FUNCTION(clear_main_bd, ID2P(LANG_CLEAR_BACKDROP), 161MENUITEM_FUNCTION(clear_main_bd, 0, ID2P(LANG_CLEAR_BACKDROP),
163 clear_main_backdrop, NULL, Icon_NOICON); 162 clear_main_backdrop, NULL, 0, NULL, Icon_NOICON);
164MENUITEM_FUNCTION(set_bg_col, ID2P(LANG_BACKGROUND_COLOR), 163MENUITEM_FUNCTION(set_bg_col, 0, ID2P(LANG_BACKGROUND_COLOR),
165 set_bg_color, NULL, Icon_NOICON); 164 set_bg_color, NULL, 0, NULL, Icon_NOICON);
166MENUITEM_FUNCTION(set_fg_col, ID2P(LANG_FOREGROUND_COLOR), 165MENUITEM_FUNCTION(set_fg_col, 0, ID2P(LANG_FOREGROUND_COLOR),
167 set_fg_color, NULL, Icon_NOICON); 166 set_fg_color, NULL, 0, NULL, Icon_NOICON);
168MENUITEM_FUNCTION(reset_colors, ID2P(LANG_RESET_COLORS), 167MENUITEM_FUNCTION(reset_colors, 0, ID2P(LANG_RESET_COLORS),
169 reset_color, NULL, Icon_NOICON); 168 reset_color, NULL, 0, NULL, Icon_NOICON);
170#endif 169#endif
171 170
172/* now the actual menu */ 171/* now the actual menu */
@@ -498,12 +497,12 @@ static int peak_meter_max(void) {
498 settings_apply_pm_range(); 497 settings_apply_pm_range();
499 return retval; 498 return retval;
500} 499}
501MENUITEM_FUNCTION(peak_meter_scale_item, ID2P(LANG_PM_SCALE), 500MENUITEM_FUNCTION(peak_meter_scale_item, 0, ID2P(LANG_PM_SCALE),
502 peak_meter_scale, NULL, Icon_NOICON); 501 peak_meter_scale, NULL, 0, NULL, Icon_NOICON);
503MENUITEM_FUNCTION(peak_meter_min_item, ID2P(LANG_PM_MIN), 502MENUITEM_FUNCTION(peak_meter_min_item, 0, ID2P(LANG_PM_MIN),
504 peak_meter_min, NULL, Icon_NOICON); 503 peak_meter_min, NULL, 0, NULL, Icon_NOICON);
505MENUITEM_FUNCTION(peak_meter_max_item, ID2P(LANG_PM_MAX), 504MENUITEM_FUNCTION(peak_meter_max_item, 0, ID2P(LANG_PM_MAX),
506 peak_meter_max, NULL, Icon_NOICON); 505 peak_meter_max, NULL, 0, NULL, Icon_NOICON);
507MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, Icon_NOICON, 506MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, Icon_NOICON,
508 &peak_meter_release, &peak_meter_hold, 507 &peak_meter_release, &peak_meter_hold,
509 &peak_meter_clip_hold, 508 &peak_meter_clip_hold,
@@ -534,14 +533,17 @@ static int browse_folder(void *param)
534} 533}
535 534
536#ifdef HAVE_LCD_BITMAP 535#ifdef HAVE_LCD_BITMAP
537MENUITEM_FUNCTION_WPARAM(browse_fonts, ID2P(LANG_CUSTOM_FONT), 536MENUITEM_FUNCTION(browse_fonts, MENU_FUNC_USEPARAM,
538 browse_folder, (void*)&fonts, NULL, Icon_NOICON); 537 ID2P(LANG_CUSTOM_FONT),
538 browse_folder, (void*)&fonts, 0, NULL, Icon_NOICON);
539#endif 539#endif
540MENUITEM_FUNCTION_WPARAM(browse_wps, ID2P(LANG_WHILE_PLAYING), 540MENUITEM_FUNCTION(browse_wps, MENU_FUNC_USEPARAM,
541 browse_folder, (void*)&wps, NULL, Icon_NOICON); 541 ID2P(LANG_WHILE_PLAYING),
542 browse_folder, (void*)&wps, 0, NULL, Icon_NOICON);
542#ifdef HAVE_REMOTE_LCD 543#ifdef HAVE_REMOTE_LCD
543MENUITEM_FUNCTION_WPARAM(browse_rwps, ID2P(LANG_REMOTE_WHILE_PLAYING), 544MENUITEM_FUNCTION(browse_rwps, MENU_FUNC_USEPARAM,
544 browse_folder, (void*)&rwps, NULL, Icon_NOICON); 545 ID2P(LANG_REMOTE_WHILE_PLAYING),
546 browse_folder, (void*)&rwps, 0, NULL, Icon_NOICON);
545#endif 547#endif
546 548
547MENUITEM_SETTING(show_icons, &global_settings.show_icons, NULL); 549MENUITEM_SETTING(show_icons, &global_settings.show_icons, NULL);
diff --git a/apps/menus/eq_menu.c b/apps/menus/eq_menu.c
index 0cf63bb20d..f2c1f9b22d 100644
--- a/apps/menus/eq_menu.c
+++ b/apps/menus/eq_menu.c
@@ -142,21 +142,21 @@ MENUITEM_SETTING(gain_2, &global_settings.eq_band2_gain, dsp_set_coefs_callback)
142MENUITEM_SETTING(gain_3, &global_settings.eq_band3_gain, dsp_set_coefs_callback); 142MENUITEM_SETTING(gain_3, &global_settings.eq_band3_gain, dsp_set_coefs_callback);
143MENUITEM_SETTING(gain_4, &global_settings.eq_band4_gain, dsp_set_coefs_callback); 143MENUITEM_SETTING(gain_4, &global_settings.eq_band4_gain, dsp_set_coefs_callback);
144 144
145MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_0, do_option, (void*)&gain_0, NULL, 145MENUITEM_FUNCTION_DYNTEXT(gain_item_0, MENU_FUNC_USEPARAM, do_option, (void*)&gain_0,
146 gainitem_get_name, 146 0, gainitem_get_name, &global_settings.eq_band0_cutoff,
147 &global_settings.eq_band0_cutoff, Icon_NOICON); 147 NULL, Icon_NOICON);
148MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_1, do_option, (void*)&gain_1, NULL, 148MENUITEM_FUNCTION_DYNTEXT(gain_item_1, MENU_FUNC_USEPARAM, do_option, (void*)&gain_1,
149 gainitem_get_name, 149 0, gainitem_get_name, &global_settings.eq_band1_cutoff,
150 &global_settings.eq_band1_cutoff, Icon_NOICON); 150 NULL, Icon_NOICON);
151MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_2, do_option, (void*)&gain_2, NULL, 151MENUITEM_FUNCTION_DYNTEXT(gain_item_2, MENU_FUNC_USEPARAM, do_option, (void*)&gain_2,
152 gainitem_get_name, 152 0, gainitem_get_name, &global_settings.eq_band2_cutoff,
153 &global_settings.eq_band2_cutoff, Icon_NOICON); 153 NULL, Icon_NOICON);
154MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_3, do_option, (void*)&gain_3, NULL, 154MENUITEM_FUNCTION_DYNTEXT(gain_item_3, MENU_FUNC_USEPARAM, do_option, (void*)&gain_3,
155 gainitem_get_name, 155 0, gainitem_get_name, &global_settings.eq_band3_cutoff,
156 &global_settings.eq_band3_cutoff, Icon_NOICON); 156 NULL, Icon_NOICON);
157MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_4, do_option, (void*)&gain_4, NULL, 157MENUITEM_FUNCTION_DYNTEXT(gain_item_4, MENU_FUNC_USEPARAM, do_option, (void*)&gain_4,
158 gainitem_get_name, 158 0, gainitem_get_name, &global_settings.eq_band4_cutoff,
159 &global_settings.eq_band4_cutoff, Icon_NOICON); 159 NULL, Icon_NOICON);
160 160
161MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, Icon_NOICON, &gain_item_0, 161MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, Icon_NOICON, &gain_item_0,
162 &gain_item_1, &gain_item_2, &gain_item_3, &gain_item_4); 162 &gain_item_1, &gain_item_2, &gain_item_3, &gain_item_4);
@@ -192,12 +192,15 @@ int do_center_band_menu(void* param)
192} 192}
193MAKE_MENU(band_0_menu, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL, 193MAKE_MENU(band_0_menu, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL,
194 Icon_EQ, &cutoff_0, &q_0, &gain_0); 194 Icon_EQ, &cutoff_0, &q_0, &gain_0);
195MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_1_menu, do_center_band_menu, (void*)1, NULL, 195MENUITEM_FUNCTION_DYNTEXT(band_1_menu, MENU_FUNC_USEPARAM,
196 centerband_get_name, (void*)1, Icon_EQ); 196 do_center_band_menu, (void*)1, 0,
197MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_2_menu, do_center_band_menu, (void*)2, NULL, 197 centerband_get_name, (void*)1, NULL, Icon_EQ);
198 centerband_get_name, (void*)2, Icon_EQ); 198MENUITEM_FUNCTION_DYNTEXT(band_2_menu, MENU_FUNC_USEPARAM,
199MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_3_menu, do_center_band_menu, (void*)3, NULL, 199 do_center_band_menu, (void*)2, 0,
200 centerband_get_name, (void*)3, Icon_EQ); 200 centerband_get_name, (void*)2, NULL, Icon_EQ);
201MENUITEM_FUNCTION_DYNTEXT(band_3_menu, MENU_FUNC_USEPARAM,
202 do_center_band_menu, (void*)3, 0,
203 centerband_get_name, (void*)3, NULL, Icon_EQ);
201MAKE_MENU(band_4_menu, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL, 204MAKE_MENU(band_4_menu, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL,
202 Icon_EQ, &cutoff_4, &q_4, &gain_4); 205 Icon_EQ, &cutoff_4, &q_4, &gain_4);
203 206
@@ -625,13 +628,13 @@ bool eq_browse_presets(void)
625} 628}
626 629
627 630
628MENUITEM_FUNCTION(eq_graphical, ID2P(LANG_EQUALIZER_GRAPHICAL), 631MENUITEM_FUNCTION(eq_graphical, 0, ID2P(LANG_EQUALIZER_GRAPHICAL),
629 (int(*)(void))eq_menu_graphical, NULL, 632 (int(*)(void))eq_menu_graphical, NULL, 0, NULL,
630 Icon_EQ); 633 Icon_EQ);
631MENUITEM_FUNCTION(eq_save, ID2P(LANG_EQUALIZER_SAVE), 634MENUITEM_FUNCTION(eq_save, 0, ID2P(LANG_EQUALIZER_SAVE),
632 (int(*)(void))eq_save_preset, NULL, Icon_NOICON); 635 (int(*)(void))eq_save_preset, NULL, 0, NULL, Icon_NOICON);
633MENUITEM_FUNCTION(eq_browse, ID2P(LANG_EQUALIZER_BROWSE), 636MENUITEM_FUNCTION(eq_browse, 0, ID2P(LANG_EQUALIZER_BROWSE),
634 (int(*)(void))eq_browse_presets, NULL, Icon_NOICON); 637 (int(*)(void))eq_browse_presets, NULL, 0, NULL, Icon_NOICON);
635 638
636MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, Icon_EQ, 639MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, Icon_EQ,
637 &eq_enable, &eq_graphical, &eq_precut, &gain_menu, 640 &eq_enable, &eq_graphical, &eq_precut, &gain_menu,
diff --git a/apps/menus/main_menu.c b/apps/menus/main_menu.c
index bd7b35dea2..b91b2f5553 100644
--- a/apps/menus/main_menu.c
+++ b/apps/menus/main_menu.c
@@ -95,13 +95,14 @@ static int write_settings_file(void* param)
95 return settings_save_config((intptr_t)param); 95 return settings_save_config((intptr_t)param);
96} 96}
97 97
98MENUITEM_FUNCTION_WPARAM(browse_configs, ID2P(LANG_CUSTOM_CFG), 98MENUITEM_FUNCTION(browse_configs, MENU_FUNC_USEPARAM, ID2P(LANG_CUSTOM_CFG),
99 browse_folder, (void*)&config, NULL, Icon_NOICON); 99 browse_folder, (void*)&config, 0, NULL, Icon_NOICON);
100MENUITEM_FUNCTION_WPARAM(save_settings_item, ID2P(LANG_SAVE_SETTINGS), 100MENUITEM_FUNCTION(save_settings_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_SETTINGS),
101 write_settings_file, (void*)SETTINGS_SAVE_ALL, NULL, Icon_NOICON); 101 write_settings_file, (void*)SETTINGS_SAVE_ALL, 0, NULL, Icon_NOICON);
102MENUITEM_FUNCTION_WPARAM(save_theme_item, ID2P(LANG_SAVE_THEME), 102MENUITEM_FUNCTION(save_theme_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_THEME),
103 write_settings_file, (void*)SETTINGS_SAVE_THEME, NULL, Icon_NOICON); 103 write_settings_file, (void*)SETTINGS_SAVE_THEME, 0, NULL, Icon_NOICON);
104MENUITEM_FUNCTION(reset_settings_item,ID2P(LANG_RESET),reset_settings, NULL, Icon_NOICON); 104MENUITEM_FUNCTION(reset_settings_item, 0, ID2P(LANG_RESET),
105 reset_settings, NULL, 0, NULL, Icon_NOICON);
105 106
106MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config, 107MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config,
107 &browse_configs, &reset_settings_item, 108 &browse_configs, &reset_settings_item,
@@ -339,8 +340,8 @@ static bool show_info(void)
339 action_signalscreenchange(); 340 action_signalscreenchange();
340 return false; 341 return false;
341} 342}
342MENUITEM_FUNCTION(show_info_item, ID2P(LANG_INFO_MENU), 343MENUITEM_FUNCTION(show_info_item, 0, ID2P(LANG_INFO_MENU),
343 (menu_function)show_info, NULL, Icon_NOICON); 344 (menu_function)show_info, NULL, 0, NULL, Icon_NOICON);
344 345
345 346
346/* sleep Menu */ 347/* sleep Menu */
@@ -372,21 +373,23 @@ static int sleep_timer(void)
372 &sleep_timer_set, -5, 300, 0, sleep_timer_formatter); 373 &sleep_timer_set, -5, 300, 0, sleep_timer_formatter);
373} 374}
374 375
375MENUITEM_FUNCTION(sleep_timer_call, ID2P(LANG_SLEEP_TIMER), sleep_timer, 376MENUITEM_FUNCTION(sleep_timer_call, 0, ID2P(LANG_SLEEP_TIMER), sleep_timer,
376 NULL, Icon_Menu_setting); /* make it look like a 377 NULL, 0, NULL, Icon_Menu_setting); /* make it look like a
377 setting to the user */ 378 setting to the user */
378MENUITEM_FUNCTION(show_credits_item, ID2P(LANG_VERSION), 379MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_VERSION),
379 (menu_function)show_credits, NULL, Icon_NOICON); 380 (menu_function)show_credits, NULL, 0, NULL, Icon_NOICON);
380MENUITEM_FUNCTION(show_runtime_item, ID2P(LANG_RUNNING_TIME), 381MENUITEM_FUNCTION(show_runtime_item, 0, ID2P(LANG_RUNNING_TIME),
381 (menu_function)view_runtime, NULL, Icon_NOICON); 382 (menu_function)view_runtime, NULL, 0, NULL, Icon_NOICON);
382MENUITEM_FUNCTION(debug_menu_item, ID2P(LANG_DEBUG), 383MENUITEM_FUNCTION(debug_menu_item, 0, ID2P(LANG_DEBUG),
383 (menu_function)debug_menu, NULL, Icon_NOICON); 384 (menu_function)debug_menu, NULL, 0, NULL, Icon_NOICON);
384#ifdef SIMULATOR 385#ifdef SIMULATOR
385MENUITEM_FUNCTION(simulate_usb_item, ID2P(LANG_USB), 386MENUITEM_FUNCTION(simulate_usb_item, 0, ID2P(LANG_USB),
386 (menu_function)simulate_usb, NULL, Icon_NOICON); 387 (menu_function)simulate_usb, NULL, 0, NULL, Icon_NOICON);
387#ifdef ROCKBOX_HAS_LOGF 388#ifdef ROCKBOX_HAS_LOGF
388MENUITEM_FUNCTION(logfdisplay_item, "logf",(int (*)(void)) logfdisplay, NULL, Icon_NOICON); 389MENUITEM_FUNCTION(logfdisplay_item, 0, "logf",
389MENUITEM_FUNCTION(logfdump_item, "logfdump",(int (*)(void)) logfdump, NULL, Icon_NOICON); 390 (int (*)(void)) logfdisplay, NULL, 0, NULL, Icon_NOICON);
391MENUITEM_FUNCTION(logfdump_item, 0, "logfdump",
392 (int (*)(void)) logfdump, NULL, 0, NULL, Icon_NOICON);
390#endif 393#endif
391#endif 394#endif
392 395
@@ -406,8 +409,8 @@ MAKE_MENU(info_menu, ID2P(LANG_INFO), 0, Icon_Questionmark,
406/***********************************/ 409/***********************************/
407/* MAIN MENU */ 410/* MAIN MENU */
408 411
409MENUITEM_FUNCTION_WPARAM(browse_themes, ID2P(LANG_CUSTOM_THEME), 412MENUITEM_FUNCTION(browse_themes, MENU_FUNC_USEPARAM, ID2P(LANG_CUSTOM_THEME),
410 browse_folder, (void*)&theme, NULL, Icon_Folder); 413 browse_folder, (void*)&theme, 0, NULL, Icon_Folder);
411 414
412#ifdef HAVE_LCD_CHARCELLS 415#ifdef HAVE_LCD_CHARCELLS
413int mainmenu_callback(int action,const struct menu_item_ex *this_item) 416int mainmenu_callback(int action,const struct menu_item_ex *this_item)
diff --git a/apps/menus/playlist_menu.c b/apps/menus/playlist_menu.c
index d4b311154a..b73341c1d9 100644
--- a/apps/menus/playlist_menu.c
+++ b/apps/menus/playlist_menu.c
@@ -62,14 +62,16 @@ int save_playlist_screen(struct playlist_info* playlist)
62 62
63 return 0; 63 return 0;
64} 64}
65MENUITEM_FUNCTION(create_playlist_item, ID2P(LANG_CREATE_PLAYLIST), 65MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST),
66 (int(*)(void))create_playlist, NULL, Icon_NOICON); 66 (int(*)(void))create_playlist, NULL, 0, NULL, Icon_NOICON);
67MENUITEM_FUNCTION(view_playlist, ID2P(LANG_VIEW_DYNAMIC_PLAYLIST), 67MENUITEM_FUNCTION(view_playlist, 0, ID2P(LANG_VIEW_DYNAMIC_PLAYLIST),
68 (int(*)(void))playlist_viewer, NULL, Icon_NOICON); 68 (int(*)(void))playlist_viewer, NULL, 0, NULL, Icon_NOICON);
69MENUITEM_FUNCTION_WPARAM(save_playlist, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), 69MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST),
70 (int(*)(void*))save_playlist_screen, NULL, NULL, Icon_NOICON); 70 (int(*)(void*))save_playlist_screen,
71MENUITEM_FUNCTION(catalog, ID2P(LANG_CATALOG), 71 NULL, 0, NULL, Icon_NOICON);
72 (int(*)(void))catalog_view_playlists, NULL, Icon_NOICON); 72MENUITEM_FUNCTION(catalog, 0, ID2P(LANG_CATALOG),
73 (int(*)(void))catalog_view_playlists,
74 NULL, 0, NULL, Icon_NOICON);
73MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL); 75MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL);
74MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL); 76MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL);
75 77
diff --git a/apps/menus/recording_menu.c b/apps/menus/recording_menu.c
index 76763b101d..43bd8a781f 100644
--- a/apps/menus/recording_menu.c
+++ b/apps/menus/recording_menu.c
@@ -90,8 +90,8 @@ static int recsource_func(void)
90 &global_settings.rec_source, INT, names, 90 &global_settings.rec_source, INT, names,
91 n_opts, NULL ); 91 n_opts, NULL );
92} 92}
93MENUITEM_FUNCTION(recsource, ID2P(LANG_RECORDING_SOURCE), 93MENUITEM_FUNCTION(recsource, 0, ID2P(LANG_RECORDING_SOURCE),
94 recsource_func, recmenu_callback, Icon_Menu_setting); 94 recsource_func, NULL, 0, recmenu_callback, Icon_Menu_setting);
95 95
96#if CONFIG_CODEC == SWCODEC 96#if CONFIG_CODEC == SWCODEC
97/* Makes an options list from a source list of options and indexes */ 97/* Makes an options list from a source list of options and indexes */
@@ -205,8 +205,8 @@ static int recfrequency_func(void)
205 return ret; 205 return ret;
206#endif /* CONFIG_CODEC == SWCODEC */ 206#endif /* CONFIG_CODEC == SWCODEC */
207} /* recfrequency */ 207} /* recfrequency */
208MENUITEM_FUNCTION(recfrequency, ID2P(LANG_RECORDING_FREQUENCY), 208MENUITEM_FUNCTION(recfrequency, 0, ID2P(LANG_RECORDING_FREQUENCY),
209 recfrequency_func, NULL, Icon_Menu_setting); 209 recfrequency_func, NULL, 0, NULL, Icon_Menu_setting);
210 210
211 211
212static int recchannels_func(void) 212static int recchannels_func(void)
@@ -253,8 +253,8 @@ static int recchannels_func(void)
253 return ret; 253 return ret;
254#endif /* CONFIG_CODEC == SWCODEC */ 254#endif /* CONFIG_CODEC == SWCODEC */
255} 255}
256MENUITEM_FUNCTION(recchannels, ID2P(LANG_RECORDING_CHANNELS), 256MENUITEM_FUNCTION(recchannels, 0, ID2P(LANG_RECORDING_CHANNELS),
257 recchannels_func, NULL, Icon_Menu_setting); 257 recchannels_func, NULL, 0, NULL, Icon_Menu_setting);
258 258
259#if CONFIG_CODEC == SWCODEC 259#if CONFIG_CODEC == SWCODEC
260 260
@@ -279,11 +279,12 @@ static int recformat_func(void)
279 279
280 return res; 280 return res;
281} /* recformat */ 281} /* recformat */
282MENUITEM_FUNCTION(recformat, ID2P(LANG_RECORDING_FORMAT), 282MENUITEM_FUNCTION(recformat, 0, ID2P(LANG_RECORDING_FORMAT),
283 recformat_func, NULL, Icon_Menu_setting); 283 recformat_func, NULL, 0, NULL, Icon_Menu_setting);
284 284
285MENUITEM_FUNCTION(enc_global_config_menu_item, ID2P(LANG_ENCODER_SETTINGS), 285MENUITEM_FUNCTION(enc_global_config_menu_item, 0, ID2P(LANG_ENCODER_SETTINGS),
286 (int(*)(void))enc_global_config_menu, NULL, Icon_Submenu); 286 (int(*)(void))enc_global_config_menu,
287 NULL, 0, NULL, Icon_Submenu);
287 288
288#endif /* CONFIG_CODEC == SWCODEC */ 289#endif /* CONFIG_CODEC == SWCODEC */
289 290
@@ -323,8 +324,8 @@ static int recdirectory_func(void)
323 &global_settings.rec_directory, INT, 324 &global_settings.rec_directory, INT,
324 names, 2, NULL ); 325 names, 2, NULL );
325} 326}
326MENUITEM_FUNCTION(recdirectory, ID2P(LANG_RECORD_DIRECTORY), 327MENUITEM_FUNCTION(recdirectory, 0, ID2P(LANG_RECORD_DIRECTORY),
327 recdirectory_func, NULL, Icon_Menu_setting); 328 recdirectory_func, NULL, 0, NULL, Icon_Menu_setting);
328 329
329MENUITEM_SETTING(cliplight, &global_settings.cliplight, NULL); 330MENUITEM_SETTING(cliplight, &global_settings.cliplight, NULL);
330 331
@@ -362,10 +363,10 @@ static int agc_cliptime_func(void)
362 &global_settings.rec_agc_cliptime, 363 &global_settings.rec_agc_cliptime,
363 INT, names, 5, NULL ); 364 INT, names, 5, NULL );
364} 365}
365MENUITEM_FUNCTION(agc_preset, ID2P(LANG_RECORD_AGC_PRESET), 366MENUITEM_FUNCTION(agc_preset, 0, ID2P(LANG_RECORD_AGC_PRESET),
366 agc_preset_func, NULL, Icon_Menu_setting); 367 agc_preset_func, NULL, 0, NULL, Icon_Menu_setting);
367MENUITEM_FUNCTION(agc_cliptime, ID2P(LANG_RECORD_AGC_CLIPTIME), 368MENUITEM_FUNCTION(agc_cliptime, 0, ID2P(LANG_RECORD_AGC_CLIPTIME),
368 agc_cliptime_func, NULL, Icon_Menu_setting); 369 agc_cliptime_func, NULL, 0, NULL, Icon_Menu_setting);
369#endif /* HAVE_AGC */ 370#endif /* HAVE_AGC */
370 371
371/** Rec trigger **/ 372/** Rec trigger **/
@@ -796,8 +797,8 @@ bool rectrigger(void)
796 return retval; 797 return retval;
797} 798}
798 799
799MENUITEM_FUNCTION(rectrigger_item, ID2P(LANG_RECORD_TRIGGER), 800MENUITEM_FUNCTION(rectrigger_item, 0, ID2P(LANG_RECORD_TRIGGER),
800 (int(*)(void))rectrigger, NULL, Icon_Menu_setting); 801 (int(*)(void))rectrigger, NULL, 0, NULL, Icon_Menu_setting);
801 802
802 803
803 804
@@ -836,5 +837,5 @@ bool recording_menu(bool no_source)
836 return do_menu(&recording_setting_menu, NULL) == MENU_ATTACHED_USB; 837 return do_menu(&recording_setting_menu, NULL) == MENU_ATTACHED_USB;
837}; 838};
838 839
839MENUITEM_FUNCTION_WPARAM(recording_settings, ID2P(LANG_RECORDING_SETTINGS), 840MENUITEM_FUNCTION(recording_settings, MENU_FUNC_USEPARAM, ID2P(LANG_RECORDING_SETTINGS),
840 (int (*)(void*))recording_menu,0, NULL, Icon_NOICON); 841 (int (*)(void*))recording_menu, 0, 0, NULL, Icon_NOICON);
diff --git a/apps/menus/settings_menu.c b/apps/menus/settings_menu.c
index d150aac148..ace17a2055 100644
--- a/apps/menus/settings_menu.c
+++ b/apps/menus/settings_menu.c
@@ -62,15 +62,19 @@ static void tagcache_update_with_splash(void)
62MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL); 62MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL);
63#endif 63#endif
64MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL); 64MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL);
65MENUITEM_FUNCTION(tc_init, ID2P(LANG_TAGCACHE_FORCE_UPDATE), 65MENUITEM_FUNCTION(tc_init, 0, ID2P(LANG_TAGCACHE_FORCE_UPDATE),
66 (int(*)(void))tagcache_rebuild_with_splash, NULL, Icon_NOICON); 66 (int(*)(void))tagcache_rebuild_with_splash,
67MENUITEM_FUNCTION(tc_update, ID2P(LANG_TAGCACHE_UPDATE), 67 NULL, 0, NULL, Icon_NOICON);
68 (int(*)(void))tagcache_update_with_splash, NULL, Icon_NOICON); 68MENUITEM_FUNCTION(tc_update, 0, ID2P(LANG_TAGCACHE_UPDATE),
69 (int(*)(void))tagcache_update_with_splash,
70 NULL, 0, NULL, Icon_NOICON);
69MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL); 71MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL);
70MENUITEM_FUNCTION(tc_export, ID2P(LANG_TAGCACHE_EXPORT), 72MENUITEM_FUNCTION(tc_export, 0, ID2P(LANG_TAGCACHE_EXPORT),
71 (int(*)(void))tagtree_export, NULL, Icon_NOICON); 73 (int(*)(void))tagtree_export, NULL, 0,
72MENUITEM_FUNCTION(tc_import, ID2P(LANG_TAGCACHE_IMPORT), 74 NULL, Icon_NOICON);
73 (int(*)(void))tagtree_import, NULL, Icon_NOICON); 75MENUITEM_FUNCTION(tc_import, 0, ID2P(LANG_TAGCACHE_IMPORT),
76 (int(*)(void))tagtree_import, NULL, 0,
77 NULL, Icon_NOICON);
74MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON, 78MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON,
75#ifdef HAVE_TC_RAMCACHE 79#ifdef HAVE_TC_RAMCACHE
76 &tagcache_ram, 80 &tagcache_ram,
@@ -216,7 +220,8 @@ static int timedate_set(void)
216 return result; 220 return result;
217} 221}
218 222
219MENUITEM_FUNCTION(time_set, ID2P(LANG_TIME), timedate_set, NULL, Icon_NOICON); 223MENUITEM_FUNCTION(time_set, 0, ID2P(LANG_TIME),
224 timedate_set, NULL, 0, NULL, Icon_NOICON);
220MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL); 225MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL);
221MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat); 226MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat);
222#endif 227#endif
@@ -225,8 +230,8 @@ MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeforma
225MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL); 230MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL);
226 231
227#ifdef HAVE_RTC_ALARM 232#ifdef HAVE_RTC_ALARM
228MENUITEM_FUNCTION(alarm_screen_call, ID2P(LANG_ALARM_MOD_ALARM_MENU), 233MENUITEM_FUNCTION(alarm_screen_call, 0, ID2P(LANG_ALARM_MOD_ALARM_MENU),
229 (menu_function)alarm_screen, NULL, Icon_NOICON); 234 (menu_function)alarm_screen, NULL, 0, NULL, Icon_NOICON);
230#if CONFIG_TUNER || defined(HAVE_RECORDING) 235#if CONFIG_TUNER || defined(HAVE_RECORDING)
231 236
232#if CONFIG_TUNER && !defined(HAVE_RECORDING) 237#if CONFIG_TUNER && !defined(HAVE_RECORDING)
@@ -275,8 +280,8 @@ static int alarm_setting(void)
275 INT, items, i, NULL); 280 INT, items, i, NULL);
276} 281}
277 282
278MENUITEM_FUNCTION(alarm_wake_up_screen, ID2P(LANG_ALARM_WAKEUP_SCREEN), 283MENUITEM_FUNCTION(alarm_wake_up_screen, 0, ID2P(LANG_ALARM_WAKEUP_SCREEN),
279 alarm_setting, alarm_callback, Icon_Menu_setting); 284 alarm_setting, NULL, 0, alarm_callback, Icon_Menu_setting);
280#endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */ 285#endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */
281#endif /* HAVE_RTC_ALARM */ 286#endif /* HAVE_RTC_ALARM */
282 287
@@ -409,8 +414,8 @@ static int language_browse(void)
409{ 414{
410 return (int)rockbox_browse(LANG_DIR, SHOW_LNG); 415 return (int)rockbox_browse(LANG_DIR, SHOW_LNG);
411} 416}
412MENUITEM_FUNCTION(browse_langs, ID2P(LANG_LANGUAGE), language_browse, 417MENUITEM_FUNCTION(browse_langs, 0, ID2P(LANG_LANGUAGE), language_browse,
413 NULL, Icon_Language); 418 NULL, 0, NULL, Icon_Language);
414 419
415MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0, 420MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0,
416 Icon_General_settings_menu, 421 Icon_General_settings_menu,
diff --git a/apps/recorder/radio.c b/apps/recorder/radio.c
index ed14a4e282..47acae332f 100644
--- a/apps/recorder/radio.c
+++ b/apps/recorder/radio.c
@@ -1223,10 +1223,12 @@ static int clear_preset_list(void)
1223 return true; 1223 return true;
1224} 1224}
1225 1225
1226MENUITEM_FUNCTION(radio_edit_preset_item, ID2P(LANG_FM_EDIT_PRESET), 1226MENUITEM_FUNCTION(radio_edit_preset_item, 0,
1227 radio_edit_preset, NULL, Icon_NOICON); 1227 ID2P(LANG_FM_EDIT_PRESET),
1228MENUITEM_FUNCTION(radio_delete_preset_item, ID2P(LANG_FM_DELETE_PRESET), 1228 radio_edit_preset, NULL, 0, NULL, Icon_NOICON);
1229 radio_delete_preset, NULL, Icon_NOICON); 1229MENUITEM_FUNCTION(radio_delete_preset_item, 0,
1230 ID2P(LANG_FM_DELETE_PRESET),
1231 radio_delete_preset, NULL, 0, NULL, Icon_NOICON);
1230int radio_preset_callback(int action, const struct menu_item_ex *this_item) 1232int radio_preset_callback(int action, const struct menu_item_ex *this_item)
1231{ 1233{
1232 if (action == ACTION_STD_OK) 1234 if (action == ACTION_STD_OK)
@@ -1339,15 +1341,15 @@ char* get_mode_text(int selected_item, void * data, char *buffer)
1339 str(LANG_RADIO_SCAN_MODE)); 1341 str(LANG_RADIO_SCAN_MODE));
1340 return buffer; 1342 return buffer;
1341} 1343}
1342static int toggle_radio_mode(void* param) 1344static int toggle_radio_mode(void)
1343{ 1345{
1344 (void)param;
1345 radio_mode = (radio_mode == RADIO_SCAN_MODE) ? 1346 radio_mode = (radio_mode == RADIO_SCAN_MODE) ?
1346 RADIO_PRESET_MODE : RADIO_SCAN_MODE; 1347 RADIO_PRESET_MODE : RADIO_SCAN_MODE;
1347 return 0; 1348 return 0;
1348} 1349}
1349MENUITEM_FUNCTION_WPARAM_DYNTEXT(radio_mode_item, toggle_radio_mode, NULL, NULL, 1350MENUITEM_FUNCTION_DYNTEXT(radio_mode_item, 0,
1350 get_mode_text, NULL, Icon_NOICON); 1351 toggle_radio_mode, NULL, 0,
1352 get_mode_text, NULL, NULL, Icon_NOICON);
1351#endif 1353#endif
1352 1354
1353static int scan_presets(void) 1355static int scan_presets(void)
@@ -1447,6 +1449,7 @@ static int fm_recording_screen(void)
1447 1449
1448 return ret; 1450 return ret;
1449} 1451}
1452
1450#endif /* defined(HAVE_FMRADIO_IN) && CONFIG_CODEC == SWCODEC */ 1453#endif /* defined(HAVE_FMRADIO_IN) && CONFIG_CODEC == SWCODEC */
1451 1454
1452#if defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC 1455#if defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC
@@ -1467,35 +1470,36 @@ static int fm_recording_settings(void)
1467 1470
1468 return ret; 1471 return ret;
1469} 1472}
1473
1470#endif /* defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC */ 1474#endif /* defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC */
1471#endif /* HAVE_RECORDING */ 1475#endif /* HAVE_RECORDING */
1472 1476
1473#ifdef FM_RECORDING_SCREEN 1477#ifdef FM_RECORDING_SCREEN
1474MENUITEM_FUNCTION(recscreen_item, ID2P(LANG_RECORDING_MENU), 1478MENUITEM_FUNCTION(recscreen_item, 0, ID2P(LANG_RECORDING_MENU),
1475 fm_recording_screen, NULL, Icon_NOICON); 1479 fm_recording_screen, NULL, 0, NULL, Icon_NOICON);
1476#endif 1480#endif
1477#ifdef FM_RECORDING_SETTINGS 1481#ifdef FM_RECORDING_SETTINGS
1478MENUITEM_FUNCTION(recsettings_item, ID2P(LANG_RECORDING_SETTINGS), 1482MENUITEM_FUNCTION(recsettings_item, 0, ID2P(LANG_RECORDING_SETTINGS),
1479 fm_recording_settings, NULL, Icon_NOICON); 1483 fm_recording_settings, NULL, 0, NULL, Icon_NOICON);
1480#endif 1484#endif
1481#ifndef FM_PRESET 1485#ifndef FM_PRESET
1482MENUITEM_FUNCTION(radio_presets_item, ID2P(LANG_FM_BUTTONBAR_PRESETS), 1486MENUITEM_FUNCTION(radio_presets_item, 0, ID2P(LANG_FM_BUTTONBAR_PRESETS),
1483 handle_radio_presets, NULL, Icon_NOICON); 1487 handle_radio_presets, NULL, 0, NULL, Icon_NOICON);
1484#endif 1488#endif
1485#ifndef FM_PRESET_ADD 1489#ifndef FM_PRESET_ADD
1486MENUITEM_FUNCTION(radio_addpreset_item, ID2P(LANG_FM_ADD_PRESET), 1490MENUITEM_FUNCTION(radio_addpreset_item, 0, ID2P(LANG_FM_ADD_PRESET),
1487 radio_add_preset, NULL, Icon_NOICON); 1491 radio_add_preset, NULL, 0, NULL, Icon_NOICON);
1488#endif 1492#endif
1489 1493
1490 1494
1491MENUITEM_FUNCTION(presetload_item, ID2P(LANG_FM_PRESET_LOAD), 1495MENUITEM_FUNCTION(presetload_item, 0, ID2P(LANG_FM_PRESET_LOAD),
1492 load_preset_list, NULL, Icon_NOICON); 1496 load_preset_list, NULL, 0, NULL, Icon_NOICON);
1493MENUITEM_FUNCTION(presetsave_item, ID2P(LANG_FM_PRESET_SAVE), 1497MENUITEM_FUNCTION(presetsave_item, 0, ID2P(LANG_FM_PRESET_SAVE),
1494 save_preset_list, NULL, Icon_NOICON); 1498 save_preset_list, NULL, 0, NULL, Icon_NOICON);
1495MENUITEM_FUNCTION(presetclear_item, ID2P(LANG_FM_PRESET_CLEAR), 1499MENUITEM_FUNCTION(presetclear_item, 0, ID2P(LANG_FM_PRESET_CLEAR),
1496 clear_preset_list, NULL, Icon_NOICON); 1500 clear_preset_list, NULL, 0, NULL, Icon_NOICON);
1497MENUITEM_FUNCTION(scan_presets_item, ID2P(LANG_FM_SCAN_PRESETS), 1501MENUITEM_FUNCTION(scan_presets_item, 0, ID2P(LANG_FM_SCAN_PRESETS),
1498 scan_presets, NULL, Icon_NOICON); 1502 scan_presets, NULL, 0, NULL, Icon_NOICON);
1499 1503
1500MAKE_MENU(radio_menu_items, ID2P(LANG_FM_MENU), NULL, 1504MAKE_MENU(radio_menu_items, ID2P(LANG_FM_MENU), NULL,
1501 Icon_Radio_screen, 1505 Icon_Radio_screen,
diff --git a/apps/root_menu.c b/apps/root_menu.c
index 74b9df6ae8..451d4007db 100644
--- a/apps/root_menu.c
+++ b/apps/root_menu.c
@@ -327,7 +327,8 @@ static int do_shutdown(void)
327 sys_poweroff(); 327 sys_poweroff();
328 return 0; 328 return 0;
329} 329}
330MENUITEM_FUNCTION(do_shutdown_item, ID2P(LANG_SHUTDOWN), do_shutdown, NULL, Icon_NOICON); 330MENUITEM_FUNCTION(do_shutdown_item, 0, ID2P(LANG_SHUTDOWN),
331 do_shutdown, NULL, 0, NULL, Icon_NOICON);
331#endif 332#endif
332MAKE_MENU(root_menu_, ID2P(LANG_ROCKBOX_TITLE), 333MAKE_MENU(root_menu_, ID2P(LANG_ROCKBOX_TITLE),
333 NULL, Icon_Rockbox, 334 NULL, Icon_Rockbox,