1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Jonathan Gordon 2007-03-17 12:33:34 +00:00
parent 86ecc9588b
commit daf66940b1
10 changed files with 209 additions and 183 deletions

View file

@ -160,7 +160,6 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon)
*icon = bitmap_icons_6x8[menu_icon]; *icon = bitmap_icons_6x8[menu_icon];
break; break;
case MT_FUNCTION_CALL: case MT_FUNCTION_CALL:
case MT_FUNCTION_WITH_PARAM:
case MT_RETURN_VALUE: case MT_RETURN_VALUE:
if (menu_icon == Icon_NOICON) if (menu_icon == Icon_NOICON)
*icon = bitmap_icons_6x8[Icon_Menu_functioncall]; *icon = bitmap_icons_6x8[Icon_Menu_functioncall];
@ -545,14 +544,21 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected)
} }
break; break;
case MT_FUNCTION_CALL: case MT_FUNCTION_CALL:
{
int return_value;
action_signalscreenchange(); action_signalscreenchange();
temp->function(); if (temp->flags&MENU_FUNC_USEPARAM)
break; return_value = temp->function->function_w_param(
case MT_FUNCTION_WITH_PARAM: temp->function->param);
action_signalscreenchange(); else
temp->func_with_param->function( return_value = temp->function->function();
temp->func_with_param->param); if (temp->flags&MENU_FUNC_CHECK_RETVAL)
{
if (return_value == temp->function->exit_value)
return return_value;
}
break; break;
}
case MT_SETTING: case MT_SETTING:
case MT_SETTING_W_TEXT: case MT_SETTING_W_TEXT:
{ {

View file

@ -31,8 +31,7 @@ enum menu_item_type {
MT_SETTING_W_TEXT, /* same as setting, but uses different MT_SETTING_W_TEXT, /* same as setting, but uses different
text for the setting title, text for the setting title,
ID2P() or "literal" for the str param */ ID2P() or "literal" for the str param */
MT_FUNCTION_CALL, /* used when the standard code wont work */ MT_FUNCTION_CALL, /* call a function from the menus */
MT_FUNCTION_WITH_PARAM,
MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/ MT_RETURN_ID, /* returns the position of the selected item (starting at 0)*/
MT_RETURN_VALUE, /* returns a value associated with an item */ MT_RETURN_VALUE, /* returns a value associated with an item */
MT_OLD_MENU, /* used so we can wrap the old menu api MT_OLD_MENU, /* used so we can wrap the old menu api
@ -40,28 +39,36 @@ enum menu_item_type {
}; };
typedef int (*menu_function)(void); typedef int (*menu_function)(void);
struct menu_func_with_param { struct menu_func {
int (*function)(void* param); union {
void *param; int (*function_w_param)(void* param); /* intptr_t instead of void*
for 64bit systems */
int (*function)(void);
};
void *param; /* passed to function_w_param */
int exit_value; /* exit do_menu() if function returns this value */
}; };
#define MENU_TYPE_MASK 0xF /* MT_* type */ #define MENU_TYPE_MASK 0xF /* MT_* type */
/* these next two are mutually exclusive */ /* these next two are mutually exclusive */
#define MENU_HAS_DESC 0x10 #define MENU_HAS_DESC 0x10
#define MENU_DYNAMIC_DESC 0x20 #define MENU_DYNAMIC_DESC 0x20
/* unless we need more flags*/
#define MENU_COUNT_MASK (~(MENU_TYPE_MASK|MENU_HAS_DESC|MENU_DYNAMIC_DESC)) /* Flags for MT_FUNCTION_CALL */
#define MENU_COUNT_SHIFT 6 #define MENU_FUNC_USEPARAM 0x40
#define MENU_FUNC_CHECK_RETVAL 0x80
#define MENU_COUNT_MASK 0xFFF
#define MENU_COUNT_SHIFT 8
#define MENU_ITEM_COUNT(c) ((c&MENU_COUNT_MASK)<<MENU_COUNT_SHIFT)
struct menu_item_ex { struct menu_item_ex {
int flags; /* above defines */ unsigned int flags; /* above defines */
union { union {
const struct menu_item_ex **submenus; /* used with MT_MENU */ const struct menu_item_ex **submenus; /* used with MT_MENU */
void *variable; /* used with MT_SETTING, void *variable; /* used with MT_SETTING,
must be in the settings_list.c list */ must be in the settings_list.c list */
int (*function)(void); /* used with MT_FUNCTION_CALL */ const struct menu_func *function; /* MT_FUNCTION_* */
const struct menu_func_with_param
*func_with_param; /* MT_FUNCTION_WITH_PARAM */
const char **strings; /* used with MT_RETURN_ID */ const char **strings; /* used with MT_RETURN_ID */
int value; /* MT_RETURN_VALUE */ int value; /* MT_RETURN_VALUE */
}; };
@ -91,7 +98,6 @@ typedef int (*menu_callback_type)(int action,
int do_menu(const struct menu_item_ex *menu, int *start_selected); int do_menu(const struct menu_item_ex *menu, int *start_selected);
bool do_setting_from_menu(const struct menu_item_ex *temp); bool do_setting_from_menu(const struct menu_item_ex *temp);
#define MENU_ITEM_COUNT(c) (c<<MENU_COUNT_SHIFT)
/* In all the following macros the argument names are as follows: /* In all the following macros the argument names are as follows:
- name: The name for the variable (so it can be used in a MAKE_MENU() - name: The name for the variable (so it can be used in a MAKE_MENU()
- str: the string to display for this menu item. use ID2P() for LANG_* id's - 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);
/* Use this to put a function call into the menu. /* Use this to put a function call into the menu.
When the user selects this item the function will be run, When the user selects this item the function will be run,
when it exits the user will be back in the menu. return value is ignored */ unless MENU_FUNC_IGNORE_RETVAL is set, when it exits the user
#define MENUITEM_FUNCTION(name, str, func, callback, icon) \ will be back in the menu and return value is ignored,
else if it returns exit_if do_mneu() will exit */
#define MENUITEM_FUNCTION(name, flags, str, func, param, \
exit_if, callback, icon) \
static const struct menu_callback_with_desc name##_ = {callback,str,icon}; \ static const struct menu_callback_with_desc name##_ = {callback,str,icon}; \
static const struct menu_item_ex name = \ static const struct menu_func name##__ = {{(void*)func}, param, exit_if}; \
{ MT_FUNCTION_CALL|MENU_HAS_DESC, { .function = func}, \ /* should be const, but recording_settings wont let us do that */ \
{.callback_and_desc = & name##_}}; const struct menu_item_ex name = \
{ MT_FUNCTION_CALL|MENU_HAS_DESC|flags, \
/* This one should be static'ed also, { .function = & name##__}, {.callback_and_desc = & name##_}};
but cannot be done untill recording menu is done */
/* Same as above, except the function will be called with a (void*)param. */
#define MENUITEM_FUNCTION_WPARAM(name, str, func, param, callback, icon) \
static const struct menu_callback_with_desc name##_ = {callback,str,icon}; \
static const struct menu_func_with_param name##__ = {func, param}; \
const struct menu_item_ex name = \
{ MT_FUNCTION_WITH_PARAM|MENU_HAS_DESC, \
{ .func_with_param = &name##__}, \
{.callback_and_desc = & name##_}};
/* As above, except the text is dynamic */ /* As above, except the text is dynamic */
#define MENUITEM_FUNCTION_WPARAM_DYNTEXT(name, func, param, callback, \ #define MENUITEM_FUNCTION_DYNTEXT(name, flags, func, param, exit_if, \
text_callback, text_cb_data, icon) \ text_callback, text_cb_data, callback, icon) \
static const struct menu_get_name_and_icon name##_ \ static const struct menu_get_name_and_icon name##_ \
= {callback,text_callback,text_cb_data,icon};\ = {callback,text_callback,text_cb_data,icon}; \
static const struct menu_func_with_param name##__ = {func, param}; \ static const struct menu_func name##__ = {{(void*)func}, param, exit_if}; \
static const struct menu_item_ex name = \ static const struct menu_item_ex name = \
{ MT_FUNCTION_WITH_PARAM|MENU_DYNAMIC_DESC, \ { MT_FUNCTION_CALL|MENU_DYNAMIC_DESC|flags, \
{ .func_with_param = &name##__}, \ { .function = & name##__}, {.menu_get_name_and_icon = & name##_}};
{.menu_get_name_and_icon = & name##_}};
/* Use this to actually create a menu. the ... argument is a list of pointers /* Use this to actually create a menu. the ... argument is a list of pointers
to any of the above macro'd variables. (It can also have other menus in the list. */ to any of the above macro'd variables. (It can also have other menus in the list. */

View file

@ -149,7 +149,6 @@ static int set_bg_color(void)
screens[SCREEN_MAIN].set_background(global_settings.bg_color); screens[SCREEN_MAIN].set_background(global_settings.bg_color);
return res; return res;
} }
static int reset_color(void) static int reset_color(void)
{ {
global_settings.fg_color = LCD_DEFAULT_FG; global_settings.fg_color = LCD_DEFAULT_FG;
@ -159,14 +158,14 @@ static int reset_color(void)
screens[SCREEN_MAIN].set_background(global_settings.bg_color); screens[SCREEN_MAIN].set_background(global_settings.bg_color);
return 0; return 0;
} }
MENUITEM_FUNCTION(clear_main_bd, ID2P(LANG_CLEAR_BACKDROP), MENUITEM_FUNCTION(clear_main_bd, 0, ID2P(LANG_CLEAR_BACKDROP),
clear_main_backdrop, NULL, Icon_NOICON); clear_main_backdrop, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(set_bg_col, ID2P(LANG_BACKGROUND_COLOR), MENUITEM_FUNCTION(set_bg_col, 0, ID2P(LANG_BACKGROUND_COLOR),
set_bg_color, NULL, Icon_NOICON); set_bg_color, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(set_fg_col, ID2P(LANG_FOREGROUND_COLOR), MENUITEM_FUNCTION(set_fg_col, 0, ID2P(LANG_FOREGROUND_COLOR),
set_fg_color, NULL, Icon_NOICON); set_fg_color, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(reset_colors, ID2P(LANG_RESET_COLORS), MENUITEM_FUNCTION(reset_colors, 0, ID2P(LANG_RESET_COLORS),
reset_color, NULL, Icon_NOICON); reset_color, NULL, 0, NULL, Icon_NOICON);
#endif #endif
/* now the actual menu */ /* now the actual menu */
@ -498,12 +497,12 @@ static int peak_meter_max(void) {
settings_apply_pm_range(); settings_apply_pm_range();
return retval; return retval;
} }
MENUITEM_FUNCTION(peak_meter_scale_item, ID2P(LANG_PM_SCALE), MENUITEM_FUNCTION(peak_meter_scale_item, 0, ID2P(LANG_PM_SCALE),
peak_meter_scale, NULL, Icon_NOICON); peak_meter_scale, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(peak_meter_min_item, ID2P(LANG_PM_MIN), MENUITEM_FUNCTION(peak_meter_min_item, 0, ID2P(LANG_PM_MIN),
peak_meter_min, NULL, Icon_NOICON); peak_meter_min, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(peak_meter_max_item, ID2P(LANG_PM_MAX), MENUITEM_FUNCTION(peak_meter_max_item, 0, ID2P(LANG_PM_MAX),
peak_meter_max, NULL, Icon_NOICON); peak_meter_max, NULL, 0, NULL, Icon_NOICON);
MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, Icon_NOICON, MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, Icon_NOICON,
&peak_meter_release, &peak_meter_hold, &peak_meter_release, &peak_meter_hold,
&peak_meter_clip_hold, &peak_meter_clip_hold,
@ -534,14 +533,17 @@ static int browse_folder(void *param)
} }
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
MENUITEM_FUNCTION_WPARAM(browse_fonts, ID2P(LANG_CUSTOM_FONT), MENUITEM_FUNCTION(browse_fonts, MENU_FUNC_USEPARAM,
browse_folder, (void*)&fonts, NULL, Icon_NOICON); ID2P(LANG_CUSTOM_FONT),
browse_folder, (void*)&fonts, 0, NULL, Icon_NOICON);
#endif #endif
MENUITEM_FUNCTION_WPARAM(browse_wps, ID2P(LANG_WHILE_PLAYING), MENUITEM_FUNCTION(browse_wps, MENU_FUNC_USEPARAM,
browse_folder, (void*)&wps, NULL, Icon_NOICON); ID2P(LANG_WHILE_PLAYING),
browse_folder, (void*)&wps, 0, NULL, Icon_NOICON);
#ifdef HAVE_REMOTE_LCD #ifdef HAVE_REMOTE_LCD
MENUITEM_FUNCTION_WPARAM(browse_rwps, ID2P(LANG_REMOTE_WHILE_PLAYING), MENUITEM_FUNCTION(browse_rwps, MENU_FUNC_USEPARAM,
browse_folder, (void*)&rwps, NULL, Icon_NOICON); ID2P(LANG_REMOTE_WHILE_PLAYING),
browse_folder, (void*)&rwps, 0, NULL, Icon_NOICON);
#endif #endif
MENUITEM_SETTING(show_icons, &global_settings.show_icons, NULL); MENUITEM_SETTING(show_icons, &global_settings.show_icons, NULL);

View file

@ -142,21 +142,21 @@ MENUITEM_SETTING(gain_2, &global_settings.eq_band2_gain, dsp_set_coefs_callback)
MENUITEM_SETTING(gain_3, &global_settings.eq_band3_gain, dsp_set_coefs_callback); MENUITEM_SETTING(gain_3, &global_settings.eq_band3_gain, dsp_set_coefs_callback);
MENUITEM_SETTING(gain_4, &global_settings.eq_band4_gain, dsp_set_coefs_callback); MENUITEM_SETTING(gain_4, &global_settings.eq_band4_gain, dsp_set_coefs_callback);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_0, do_option, (void*)&gain_0, NULL, MENUITEM_FUNCTION_DYNTEXT(gain_item_0, MENU_FUNC_USEPARAM, do_option, (void*)&gain_0,
gainitem_get_name, 0, gainitem_get_name, &global_settings.eq_band0_cutoff,
&global_settings.eq_band0_cutoff, Icon_NOICON); NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_1, do_option, (void*)&gain_1, NULL, MENUITEM_FUNCTION_DYNTEXT(gain_item_1, MENU_FUNC_USEPARAM, do_option, (void*)&gain_1,
gainitem_get_name, 0, gainitem_get_name, &global_settings.eq_band1_cutoff,
&global_settings.eq_band1_cutoff, Icon_NOICON); NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_2, do_option, (void*)&gain_2, NULL, MENUITEM_FUNCTION_DYNTEXT(gain_item_2, MENU_FUNC_USEPARAM, do_option, (void*)&gain_2,
gainitem_get_name, 0, gainitem_get_name, &global_settings.eq_band2_cutoff,
&global_settings.eq_band2_cutoff, Icon_NOICON); NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_3, do_option, (void*)&gain_3, NULL, MENUITEM_FUNCTION_DYNTEXT(gain_item_3, MENU_FUNC_USEPARAM, do_option, (void*)&gain_3,
gainitem_get_name, 0, gainitem_get_name, &global_settings.eq_band3_cutoff,
&global_settings.eq_band3_cutoff, Icon_NOICON); NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_4, do_option, (void*)&gain_4, NULL, MENUITEM_FUNCTION_DYNTEXT(gain_item_4, MENU_FUNC_USEPARAM, do_option, (void*)&gain_4,
gainitem_get_name, 0, gainitem_get_name, &global_settings.eq_band4_cutoff,
&global_settings.eq_band4_cutoff, Icon_NOICON); NULL, Icon_NOICON);
MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, Icon_NOICON, &gain_item_0, MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, Icon_NOICON, &gain_item_0,
&gain_item_1, &gain_item_2, &gain_item_3, &gain_item_4); &gain_item_1, &gain_item_2, &gain_item_3, &gain_item_4);
@ -192,12 +192,15 @@ int do_center_band_menu(void* param)
} }
MAKE_MENU(band_0_menu, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL, MAKE_MENU(band_0_menu, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL,
Icon_EQ, &cutoff_0, &q_0, &gain_0); Icon_EQ, &cutoff_0, &q_0, &gain_0);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_1_menu, do_center_band_menu, (void*)1, NULL, MENUITEM_FUNCTION_DYNTEXT(band_1_menu, MENU_FUNC_USEPARAM,
centerband_get_name, (void*)1, Icon_EQ); do_center_band_menu, (void*)1, 0,
MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_2_menu, do_center_band_menu, (void*)2, NULL, centerband_get_name, (void*)1, NULL, Icon_EQ);
centerband_get_name, (void*)2, Icon_EQ); MENUITEM_FUNCTION_DYNTEXT(band_2_menu, MENU_FUNC_USEPARAM,
MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_3_menu, do_center_band_menu, (void*)3, NULL, do_center_band_menu, (void*)2, 0,
centerband_get_name, (void*)3, Icon_EQ); centerband_get_name, (void*)2, NULL, Icon_EQ);
MENUITEM_FUNCTION_DYNTEXT(band_3_menu, MENU_FUNC_USEPARAM,
do_center_band_menu, (void*)3, 0,
centerband_get_name, (void*)3, NULL, Icon_EQ);
MAKE_MENU(band_4_menu, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL, MAKE_MENU(band_4_menu, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL,
Icon_EQ, &cutoff_4, &q_4, &gain_4); Icon_EQ, &cutoff_4, &q_4, &gain_4);
@ -625,13 +628,13 @@ bool eq_browse_presets(void)
} }
MENUITEM_FUNCTION(eq_graphical, ID2P(LANG_EQUALIZER_GRAPHICAL), MENUITEM_FUNCTION(eq_graphical, 0, ID2P(LANG_EQUALIZER_GRAPHICAL),
(int(*)(void))eq_menu_graphical, NULL, (int(*)(void))eq_menu_graphical, NULL, 0, NULL,
Icon_EQ); Icon_EQ);
MENUITEM_FUNCTION(eq_save, ID2P(LANG_EQUALIZER_SAVE), MENUITEM_FUNCTION(eq_save, 0, ID2P(LANG_EQUALIZER_SAVE),
(int(*)(void))eq_save_preset, NULL, Icon_NOICON); (int(*)(void))eq_save_preset, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(eq_browse, ID2P(LANG_EQUALIZER_BROWSE), MENUITEM_FUNCTION(eq_browse, 0, ID2P(LANG_EQUALIZER_BROWSE),
(int(*)(void))eq_browse_presets, NULL, Icon_NOICON); (int(*)(void))eq_browse_presets, NULL, 0, NULL, Icon_NOICON);
MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, Icon_EQ, MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, Icon_EQ,
&eq_enable, &eq_graphical, &eq_precut, &gain_menu, &eq_enable, &eq_graphical, &eq_precut, &gain_menu,

View file

@ -95,13 +95,14 @@ static int write_settings_file(void* param)
return settings_save_config((intptr_t)param); return settings_save_config((intptr_t)param);
} }
MENUITEM_FUNCTION_WPARAM(browse_configs, ID2P(LANG_CUSTOM_CFG), MENUITEM_FUNCTION(browse_configs, MENU_FUNC_USEPARAM, ID2P(LANG_CUSTOM_CFG),
browse_folder, (void*)&config, NULL, Icon_NOICON); browse_folder, (void*)&config, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM(save_settings_item, ID2P(LANG_SAVE_SETTINGS), MENUITEM_FUNCTION(save_settings_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_SETTINGS),
write_settings_file, (void*)SETTINGS_SAVE_ALL, NULL, Icon_NOICON); write_settings_file, (void*)SETTINGS_SAVE_ALL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM(save_theme_item, ID2P(LANG_SAVE_THEME), MENUITEM_FUNCTION(save_theme_item, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_THEME),
write_settings_file, (void*)SETTINGS_SAVE_THEME, NULL, Icon_NOICON); write_settings_file, (void*)SETTINGS_SAVE_THEME, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(reset_settings_item,ID2P(LANG_RESET),reset_settings, NULL, Icon_NOICON); MENUITEM_FUNCTION(reset_settings_item, 0, ID2P(LANG_RESET),
reset_settings, NULL, 0, NULL, Icon_NOICON);
MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config, MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config,
&browse_configs, &reset_settings_item, &browse_configs, &reset_settings_item,
@ -339,8 +340,8 @@ static bool show_info(void)
action_signalscreenchange(); action_signalscreenchange();
return false; return false;
} }
MENUITEM_FUNCTION(show_info_item, ID2P(LANG_INFO_MENU), MENUITEM_FUNCTION(show_info_item, 0, ID2P(LANG_INFO_MENU),
(menu_function)show_info, NULL, Icon_NOICON); (menu_function)show_info, NULL, 0, NULL, Icon_NOICON);
/* sleep Menu */ /* sleep Menu */
@ -372,21 +373,23 @@ static int sleep_timer(void)
&sleep_timer_set, -5, 300, 0, sleep_timer_formatter); &sleep_timer_set, -5, 300, 0, sleep_timer_formatter);
} }
MENUITEM_FUNCTION(sleep_timer_call, ID2P(LANG_SLEEP_TIMER), sleep_timer, MENUITEM_FUNCTION(sleep_timer_call, 0, ID2P(LANG_SLEEP_TIMER), sleep_timer,
NULL, Icon_Menu_setting); /* make it look like a NULL, 0, NULL, Icon_Menu_setting); /* make it look like a
setting to the user */ setting to the user */
MENUITEM_FUNCTION(show_credits_item, ID2P(LANG_VERSION), MENUITEM_FUNCTION(show_credits_item, 0, ID2P(LANG_VERSION),
(menu_function)show_credits, NULL, Icon_NOICON); (menu_function)show_credits, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(show_runtime_item, ID2P(LANG_RUNNING_TIME), MENUITEM_FUNCTION(show_runtime_item, 0, ID2P(LANG_RUNNING_TIME),
(menu_function)view_runtime, NULL, Icon_NOICON); (menu_function)view_runtime, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(debug_menu_item, ID2P(LANG_DEBUG), MENUITEM_FUNCTION(debug_menu_item, 0, ID2P(LANG_DEBUG),
(menu_function)debug_menu, NULL, Icon_NOICON); (menu_function)debug_menu, NULL, 0, NULL, Icon_NOICON);
#ifdef SIMULATOR #ifdef SIMULATOR
MENUITEM_FUNCTION(simulate_usb_item, ID2P(LANG_USB), MENUITEM_FUNCTION(simulate_usb_item, 0, ID2P(LANG_USB),
(menu_function)simulate_usb, NULL, Icon_NOICON); (menu_function)simulate_usb, NULL, 0, NULL, Icon_NOICON);
#ifdef ROCKBOX_HAS_LOGF #ifdef ROCKBOX_HAS_LOGF
MENUITEM_FUNCTION(logfdisplay_item, "logf",(int (*)(void)) logfdisplay, NULL, Icon_NOICON); MENUITEM_FUNCTION(logfdisplay_item, 0, "logf",
MENUITEM_FUNCTION(logfdump_item, "logfdump",(int (*)(void)) logfdump, NULL, Icon_NOICON); (int (*)(void)) logfdisplay, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(logfdump_item, 0, "logfdump",
(int (*)(void)) logfdump, NULL, 0, NULL, Icon_NOICON);
#endif #endif
#endif #endif
@ -406,8 +409,8 @@ MAKE_MENU(info_menu, ID2P(LANG_INFO), 0, Icon_Questionmark,
/***********************************/ /***********************************/
/* MAIN MENU */ /* MAIN MENU */
MENUITEM_FUNCTION_WPARAM(browse_themes, ID2P(LANG_CUSTOM_THEME), MENUITEM_FUNCTION(browse_themes, MENU_FUNC_USEPARAM, ID2P(LANG_CUSTOM_THEME),
browse_folder, (void*)&theme, NULL, Icon_Folder); browse_folder, (void*)&theme, 0, NULL, Icon_Folder);
#ifdef HAVE_LCD_CHARCELLS #ifdef HAVE_LCD_CHARCELLS
int mainmenu_callback(int action,const struct menu_item_ex *this_item) int mainmenu_callback(int action,const struct menu_item_ex *this_item)

View file

@ -62,14 +62,16 @@ int save_playlist_screen(struct playlist_info* playlist)
return 0; return 0;
} }
MENUITEM_FUNCTION(create_playlist_item, ID2P(LANG_CREATE_PLAYLIST), MENUITEM_FUNCTION(create_playlist_item, 0, ID2P(LANG_CREATE_PLAYLIST),
(int(*)(void))create_playlist, NULL, Icon_NOICON); (int(*)(void))create_playlist, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(view_playlist, ID2P(LANG_VIEW_DYNAMIC_PLAYLIST), MENUITEM_FUNCTION(view_playlist, 0, ID2P(LANG_VIEW_DYNAMIC_PLAYLIST),
(int(*)(void))playlist_viewer, NULL, Icon_NOICON); (int(*)(void))playlist_viewer, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM(save_playlist, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST), MENUITEM_FUNCTION(save_playlist, MENU_FUNC_USEPARAM, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST),
(int(*)(void*))save_playlist_screen, NULL, NULL, Icon_NOICON); (int(*)(void*))save_playlist_screen,
MENUITEM_FUNCTION(catalog, ID2P(LANG_CATALOG), NULL, 0, NULL, Icon_NOICON);
(int(*)(void))catalog_view_playlists, NULL, Icon_NOICON); MENUITEM_FUNCTION(catalog, 0, ID2P(LANG_CATALOG),
(int(*)(void))catalog_view_playlists,
NULL, 0, NULL, Icon_NOICON);
MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL); MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL);
MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL); MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL);

View file

@ -90,8 +90,8 @@ static int recsource_func(void)
&global_settings.rec_source, INT, names, &global_settings.rec_source, INT, names,
n_opts, NULL ); n_opts, NULL );
} }
MENUITEM_FUNCTION(recsource, ID2P(LANG_RECORDING_SOURCE), MENUITEM_FUNCTION(recsource, 0, ID2P(LANG_RECORDING_SOURCE),
recsource_func, recmenu_callback, Icon_Menu_setting); recsource_func, NULL, 0, recmenu_callback, Icon_Menu_setting);
#if CONFIG_CODEC == SWCODEC #if CONFIG_CODEC == SWCODEC
/* Makes an options list from a source list of options and indexes */ /* Makes an options list from a source list of options and indexes */
@ -205,8 +205,8 @@ static int recfrequency_func(void)
return ret; return ret;
#endif /* CONFIG_CODEC == SWCODEC */ #endif /* CONFIG_CODEC == SWCODEC */
} /* recfrequency */ } /* recfrequency */
MENUITEM_FUNCTION(recfrequency, ID2P(LANG_RECORDING_FREQUENCY), MENUITEM_FUNCTION(recfrequency, 0, ID2P(LANG_RECORDING_FREQUENCY),
recfrequency_func, NULL, Icon_Menu_setting); recfrequency_func, NULL, 0, NULL, Icon_Menu_setting);
static int recchannels_func(void) static int recchannels_func(void)
@ -253,8 +253,8 @@ static int recchannels_func(void)
return ret; return ret;
#endif /* CONFIG_CODEC == SWCODEC */ #endif /* CONFIG_CODEC == SWCODEC */
} }
MENUITEM_FUNCTION(recchannels, ID2P(LANG_RECORDING_CHANNELS), MENUITEM_FUNCTION(recchannels, 0, ID2P(LANG_RECORDING_CHANNELS),
recchannels_func, NULL, Icon_Menu_setting); recchannels_func, NULL, 0, NULL, Icon_Menu_setting);
#if CONFIG_CODEC == SWCODEC #if CONFIG_CODEC == SWCODEC
@ -279,11 +279,12 @@ static int recformat_func(void)
return res; return res;
} /* recformat */ } /* recformat */
MENUITEM_FUNCTION(recformat, ID2P(LANG_RECORDING_FORMAT), MENUITEM_FUNCTION(recformat, 0, ID2P(LANG_RECORDING_FORMAT),
recformat_func, NULL, Icon_Menu_setting); recformat_func, NULL, 0, NULL, Icon_Menu_setting);
MENUITEM_FUNCTION(enc_global_config_menu_item, ID2P(LANG_ENCODER_SETTINGS), MENUITEM_FUNCTION(enc_global_config_menu_item, 0, ID2P(LANG_ENCODER_SETTINGS),
(int(*)(void))enc_global_config_menu, NULL, Icon_Submenu); (int(*)(void))enc_global_config_menu,
NULL, 0, NULL, Icon_Submenu);
#endif /* CONFIG_CODEC == SWCODEC */ #endif /* CONFIG_CODEC == SWCODEC */
@ -323,8 +324,8 @@ static int recdirectory_func(void)
&global_settings.rec_directory, INT, &global_settings.rec_directory, INT,
names, 2, NULL ); names, 2, NULL );
} }
MENUITEM_FUNCTION(recdirectory, ID2P(LANG_RECORD_DIRECTORY), MENUITEM_FUNCTION(recdirectory, 0, ID2P(LANG_RECORD_DIRECTORY),
recdirectory_func, NULL, Icon_Menu_setting); recdirectory_func, NULL, 0, NULL, Icon_Menu_setting);
MENUITEM_SETTING(cliplight, &global_settings.cliplight, NULL); MENUITEM_SETTING(cliplight, &global_settings.cliplight, NULL);
@ -362,10 +363,10 @@ static int agc_cliptime_func(void)
&global_settings.rec_agc_cliptime, &global_settings.rec_agc_cliptime,
INT, names, 5, NULL ); INT, names, 5, NULL );
} }
MENUITEM_FUNCTION(agc_preset, ID2P(LANG_RECORD_AGC_PRESET), MENUITEM_FUNCTION(agc_preset, 0, ID2P(LANG_RECORD_AGC_PRESET),
agc_preset_func, NULL, Icon_Menu_setting); agc_preset_func, NULL, 0, NULL, Icon_Menu_setting);
MENUITEM_FUNCTION(agc_cliptime, ID2P(LANG_RECORD_AGC_CLIPTIME), MENUITEM_FUNCTION(agc_cliptime, 0, ID2P(LANG_RECORD_AGC_CLIPTIME),
agc_cliptime_func, NULL, Icon_Menu_setting); agc_cliptime_func, NULL, 0, NULL, Icon_Menu_setting);
#endif /* HAVE_AGC */ #endif /* HAVE_AGC */
/** Rec trigger **/ /** Rec trigger **/
@ -796,8 +797,8 @@ bool rectrigger(void)
return retval; return retval;
} }
MENUITEM_FUNCTION(rectrigger_item, ID2P(LANG_RECORD_TRIGGER), MENUITEM_FUNCTION(rectrigger_item, 0, ID2P(LANG_RECORD_TRIGGER),
(int(*)(void))rectrigger, NULL, Icon_Menu_setting); (int(*)(void))rectrigger, NULL, 0, NULL, Icon_Menu_setting);
@ -836,5 +837,5 @@ bool recording_menu(bool no_source)
return do_menu(&recording_setting_menu, NULL) == MENU_ATTACHED_USB; return do_menu(&recording_setting_menu, NULL) == MENU_ATTACHED_USB;
}; };
MENUITEM_FUNCTION_WPARAM(recording_settings, ID2P(LANG_RECORDING_SETTINGS), MENUITEM_FUNCTION(recording_settings, MENU_FUNC_USEPARAM, ID2P(LANG_RECORDING_SETTINGS),
(int (*)(void*))recording_menu,0, NULL, Icon_NOICON); (int (*)(void*))recording_menu, 0, 0, NULL, Icon_NOICON);

View file

@ -62,15 +62,19 @@ static void tagcache_update_with_splash(void)
MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL); MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL);
#endif #endif
MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL); MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL);
MENUITEM_FUNCTION(tc_init, ID2P(LANG_TAGCACHE_FORCE_UPDATE), MENUITEM_FUNCTION(tc_init, 0, ID2P(LANG_TAGCACHE_FORCE_UPDATE),
(int(*)(void))tagcache_rebuild_with_splash, NULL, Icon_NOICON); (int(*)(void))tagcache_rebuild_with_splash,
MENUITEM_FUNCTION(tc_update, ID2P(LANG_TAGCACHE_UPDATE), NULL, 0, NULL, Icon_NOICON);
(int(*)(void))tagcache_update_with_splash, NULL, Icon_NOICON); MENUITEM_FUNCTION(tc_update, 0, ID2P(LANG_TAGCACHE_UPDATE),
(int(*)(void))tagcache_update_with_splash,
NULL, 0, NULL, Icon_NOICON);
MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL); MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL);
MENUITEM_FUNCTION(tc_export, ID2P(LANG_TAGCACHE_EXPORT), MENUITEM_FUNCTION(tc_export, 0, ID2P(LANG_TAGCACHE_EXPORT),
(int(*)(void))tagtree_export, NULL, Icon_NOICON); (int(*)(void))tagtree_export, NULL, 0,
MENUITEM_FUNCTION(tc_import, ID2P(LANG_TAGCACHE_IMPORT), NULL, Icon_NOICON);
(int(*)(void))tagtree_import, NULL, Icon_NOICON); MENUITEM_FUNCTION(tc_import, 0, ID2P(LANG_TAGCACHE_IMPORT),
(int(*)(void))tagtree_import, NULL, 0,
NULL, Icon_NOICON);
MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON, MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON,
#ifdef HAVE_TC_RAMCACHE #ifdef HAVE_TC_RAMCACHE
&tagcache_ram, &tagcache_ram,
@ -216,7 +220,8 @@ static int timedate_set(void)
return result; return result;
} }
MENUITEM_FUNCTION(time_set, ID2P(LANG_TIME), timedate_set, NULL, Icon_NOICON); MENUITEM_FUNCTION(time_set, 0, ID2P(LANG_TIME),
timedate_set, NULL, 0, NULL, Icon_NOICON);
MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL); MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL);
MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat); MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat);
#endif #endif
@ -225,8 +230,8 @@ MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeforma
MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL); MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL);
#ifdef HAVE_RTC_ALARM #ifdef HAVE_RTC_ALARM
MENUITEM_FUNCTION(alarm_screen_call, ID2P(LANG_ALARM_MOD_ALARM_MENU), MENUITEM_FUNCTION(alarm_screen_call, 0, ID2P(LANG_ALARM_MOD_ALARM_MENU),
(menu_function)alarm_screen, NULL, Icon_NOICON); (menu_function)alarm_screen, NULL, 0, NULL, Icon_NOICON);
#if CONFIG_TUNER || defined(HAVE_RECORDING) #if CONFIG_TUNER || defined(HAVE_RECORDING)
#if CONFIG_TUNER && !defined(HAVE_RECORDING) #if CONFIG_TUNER && !defined(HAVE_RECORDING)
@ -275,8 +280,8 @@ static int alarm_setting(void)
INT, items, i, NULL); INT, items, i, NULL);
} }
MENUITEM_FUNCTION(alarm_wake_up_screen, ID2P(LANG_ALARM_WAKEUP_SCREEN), MENUITEM_FUNCTION(alarm_wake_up_screen, 0, ID2P(LANG_ALARM_WAKEUP_SCREEN),
alarm_setting, alarm_callback, Icon_Menu_setting); alarm_setting, NULL, 0, alarm_callback, Icon_Menu_setting);
#endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */ #endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */
#endif /* HAVE_RTC_ALARM */ #endif /* HAVE_RTC_ALARM */
@ -409,8 +414,8 @@ static int language_browse(void)
{ {
return (int)rockbox_browse(LANG_DIR, SHOW_LNG); return (int)rockbox_browse(LANG_DIR, SHOW_LNG);
} }
MENUITEM_FUNCTION(browse_langs, ID2P(LANG_LANGUAGE), language_browse, MENUITEM_FUNCTION(browse_langs, 0, ID2P(LANG_LANGUAGE), language_browse,
NULL, Icon_Language); NULL, 0, NULL, Icon_Language);
MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0, MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0,
Icon_General_settings_menu, Icon_General_settings_menu,

View file

@ -1223,10 +1223,12 @@ static int clear_preset_list(void)
return true; return true;
} }
MENUITEM_FUNCTION(radio_edit_preset_item, ID2P(LANG_FM_EDIT_PRESET), MENUITEM_FUNCTION(radio_edit_preset_item, 0,
radio_edit_preset, NULL, Icon_NOICON); ID2P(LANG_FM_EDIT_PRESET),
MENUITEM_FUNCTION(radio_delete_preset_item, ID2P(LANG_FM_DELETE_PRESET), radio_edit_preset, NULL, 0, NULL, Icon_NOICON);
radio_delete_preset, NULL, Icon_NOICON); MENUITEM_FUNCTION(radio_delete_preset_item, 0,
ID2P(LANG_FM_DELETE_PRESET),
radio_delete_preset, NULL, 0, NULL, Icon_NOICON);
int radio_preset_callback(int action, const struct menu_item_ex *this_item) int radio_preset_callback(int action, const struct menu_item_ex *this_item)
{ {
if (action == ACTION_STD_OK) if (action == ACTION_STD_OK)
@ -1339,15 +1341,15 @@ char* get_mode_text(int selected_item, void * data, char *buffer)
str(LANG_RADIO_SCAN_MODE)); str(LANG_RADIO_SCAN_MODE));
return buffer; return buffer;
} }
static int toggle_radio_mode(void* param) static int toggle_radio_mode(void)
{ {
(void)param;
radio_mode = (radio_mode == RADIO_SCAN_MODE) ? radio_mode = (radio_mode == RADIO_SCAN_MODE) ?
RADIO_PRESET_MODE : RADIO_SCAN_MODE; RADIO_PRESET_MODE : RADIO_SCAN_MODE;
return 0; return 0;
} }
MENUITEM_FUNCTION_WPARAM_DYNTEXT(radio_mode_item, toggle_radio_mode, NULL, NULL, MENUITEM_FUNCTION_DYNTEXT(radio_mode_item, 0,
get_mode_text, NULL, Icon_NOICON); toggle_radio_mode, NULL, 0,
get_mode_text, NULL, NULL, Icon_NOICON);
#endif #endif
static int scan_presets(void) static int scan_presets(void)
@ -1447,6 +1449,7 @@ static int fm_recording_screen(void)
return ret; return ret;
} }
#endif /* defined(HAVE_FMRADIO_IN) && CONFIG_CODEC == SWCODEC */ #endif /* defined(HAVE_FMRADIO_IN) && CONFIG_CODEC == SWCODEC */
#if defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC #if defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC
@ -1467,35 +1470,36 @@ static int fm_recording_settings(void)
return ret; return ret;
} }
#endif /* defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC */ #endif /* defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC */
#endif /* HAVE_RECORDING */ #endif /* HAVE_RECORDING */
#ifdef FM_RECORDING_SCREEN #ifdef FM_RECORDING_SCREEN
MENUITEM_FUNCTION(recscreen_item, ID2P(LANG_RECORDING_MENU), MENUITEM_FUNCTION(recscreen_item, 0, ID2P(LANG_RECORDING_MENU),
fm_recording_screen, NULL, Icon_NOICON); fm_recording_screen, NULL, 0, NULL, Icon_NOICON);
#endif #endif
#ifdef FM_RECORDING_SETTINGS #ifdef FM_RECORDING_SETTINGS
MENUITEM_FUNCTION(recsettings_item, ID2P(LANG_RECORDING_SETTINGS), MENUITEM_FUNCTION(recsettings_item, 0, ID2P(LANG_RECORDING_SETTINGS),
fm_recording_settings, NULL, Icon_NOICON); fm_recording_settings, NULL, 0, NULL, Icon_NOICON);
#endif #endif
#ifndef FM_PRESET #ifndef FM_PRESET
MENUITEM_FUNCTION(radio_presets_item, ID2P(LANG_FM_BUTTONBAR_PRESETS), MENUITEM_FUNCTION(radio_presets_item, 0, ID2P(LANG_FM_BUTTONBAR_PRESETS),
handle_radio_presets, NULL, Icon_NOICON); handle_radio_presets, NULL, 0, NULL, Icon_NOICON);
#endif #endif
#ifndef FM_PRESET_ADD #ifndef FM_PRESET_ADD
MENUITEM_FUNCTION(radio_addpreset_item, ID2P(LANG_FM_ADD_PRESET), MENUITEM_FUNCTION(radio_addpreset_item, 0, ID2P(LANG_FM_ADD_PRESET),
radio_add_preset, NULL, Icon_NOICON); radio_add_preset, NULL, 0, NULL, Icon_NOICON);
#endif #endif
MENUITEM_FUNCTION(presetload_item, ID2P(LANG_FM_PRESET_LOAD), MENUITEM_FUNCTION(presetload_item, 0, ID2P(LANG_FM_PRESET_LOAD),
load_preset_list, NULL, Icon_NOICON); load_preset_list, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(presetsave_item, ID2P(LANG_FM_PRESET_SAVE), MENUITEM_FUNCTION(presetsave_item, 0, ID2P(LANG_FM_PRESET_SAVE),
save_preset_list, NULL, Icon_NOICON); save_preset_list, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(presetclear_item, ID2P(LANG_FM_PRESET_CLEAR), MENUITEM_FUNCTION(presetclear_item, 0, ID2P(LANG_FM_PRESET_CLEAR),
clear_preset_list, NULL, Icon_NOICON); clear_preset_list, NULL, 0, NULL, Icon_NOICON);
MENUITEM_FUNCTION(scan_presets_item, ID2P(LANG_FM_SCAN_PRESETS), MENUITEM_FUNCTION(scan_presets_item, 0, ID2P(LANG_FM_SCAN_PRESETS),
scan_presets, NULL, Icon_NOICON); scan_presets, NULL, 0, NULL, Icon_NOICON);
MAKE_MENU(radio_menu_items, ID2P(LANG_FM_MENU), NULL, MAKE_MENU(radio_menu_items, ID2P(LANG_FM_MENU), NULL,
Icon_Radio_screen, Icon_Radio_screen,

View file

@ -327,7 +327,8 @@ static int do_shutdown(void)
sys_poweroff(); sys_poweroff();
return 0; return 0;
} }
MENUITEM_FUNCTION(do_shutdown_item, ID2P(LANG_SHUTDOWN), do_shutdown, NULL, Icon_NOICON); MENUITEM_FUNCTION(do_shutdown_item, 0, ID2P(LANG_SHUTDOWN),
do_shutdown, NULL, 0, NULL, Icon_NOICON);
#endif #endif
MAKE_MENU(root_menu_, ID2P(LANG_ROCKBOX_TITLE), MAKE_MENU(root_menu_, ID2P(LANG_ROCKBOX_TITLE),
NULL, Icon_Rockbox, NULL, Icon_Rockbox,