Remove the need to double up the MENU macros in manu.h.

Icons are now used by their id which must be part of the icons_6x8 enum, 
or Icon_NOICON for none


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@12571 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jonathan Gordon 2007-03-03 13:52:14 +00:00
parent 7ae5f12449
commit 02a871780f
15 changed files with 153 additions and 161 deletions

View File

@ -30,6 +30,8 @@ typedef short ICON;
#define NOICON -1
#endif
#define Icon_NOICON -1
#define CURSOR_CHAR 0x92
#define CURSOR_WIDTH 6
#define CURSOR_HEIGHT 8

View File

@ -353,14 +353,14 @@ static char * get_menu_item_name(int selected_item,void * data, char *buffer)
static void menu_get_icon(int selected_item, void * data, ICON * icon)
{
const struct menu_item_ex *menu = (const struct menu_item_ex *)data;
ICON menu_icon = NOICON;
int menu_icon;
selected_item = get_menu_selection(selected_item, menu);
menu = menu->submenus[selected_item];
if (menu->flags&MENU_HAS_DESC)
menu_icon = menu->callback_and_desc->icon;
menu_icon = menu->callback_and_desc->icon_id;
else if (menu->flags&MENU_DYNAMIC_DESC)
menu_icon = menu->menu_get_name_and_icon->icon;
menu_icon = menu->menu_get_name_and_icon->icon_id;
switch (menu->flags&MENU_TYPE_MASK)
{
@ -368,18 +368,18 @@ static void menu_get_icon(int selected_item, void * data, ICON * icon)
*icon = bitmap_icons_6x8[Icon_Menu_setting];
break;
case MT_MENU:
if (menu_icon == NOICON)
if (menu_icon == Icon_NOICON)
*icon = bitmap_icons_6x8[Icon_Submenu];
else
*icon = menu_icon;
*icon = bitmap_icons_6x8[menu_icon];
break;
case MT_FUNCTION_CALL:
case MT_FUNCTION_WITH_PARAM:
case MT_RETURN_VALUE:
if (menu_icon == NOICON)
if (menu_icon == Icon_NOICON)
*icon = bitmap_icons_6x8[Icon_Menu_functioncall];
else
*icon = menu_icon;
*icon = bitmap_icons_6x8[menu_icon];
break;
default:
*icon = NOICON;
@ -415,10 +415,10 @@ static void init_menu_lists(const struct menu_item_ex *menu,
gui_synclist_init(lists,get_menu_item_name,(void*)menu,false,1);
#ifdef HAVE_LCD_BITMAP
if (menu->callback_and_desc->icon == NOICON)
if (menu->callback_and_desc->icon_id == Icon_NOICON)
icon = bitmap_icons_6x8[Icon_Submenu_Entered];
else
icon = menu->callback_and_desc->icon;
icon = bitmap_icons_6x8[menu->callback_and_desc->icon_id];
gui_synclist_set_title(lists, P2STR(menu->callback_and_desc->desc), icon);
gui_synclist_set_icon_callback(lists, menu_get_icon);
#else

View File

@ -100,9 +100,7 @@ struct menu_item_ex {
int (*menu_callback)(int action,
const struct menu_item_ex *this_item);
unsigned char *desc; /* string or ID */
#ifdef HAVE_LCD_BITMAP
ICON icon; /* Icon to display */
#endif
int icon_id; /* from icons_6x8 in icons.h */
} *callback_and_desc;
/* For when the item text is dynamic */
const struct menu_get_name_and_icon {
@ -110,9 +108,7 @@ struct menu_item_ex {
const struct menu_item_ex *this_item);
char *(*list_get_name)(int selected_item, void * data, char *buffer);
void *list_get_name_data;
#ifdef HAVE_LCD_BITMAP
ICON icon; /* Icon to display */
#endif
int icon_id;
} *menu_get_name_and_icon;
};
};
@ -143,13 +139,12 @@ bool do_setting_from_menu(const struct menu_item_ex *temp);
and its return value will be the index of the chosen item */
#define MENUITEM_STRINGLIST(name, str, callback, ... ) \
static const char *name##_[] = {__VA_ARGS__}; \
static const struct menu_callback_with_desc name##__ = {callback,str, NOICON};\
static const struct menu_callback_with_desc name##__ = {callback,str, Icon_NOICON};\
static const struct menu_item_ex name = \
{MT_RETURN_ID|MENU_HAS_DESC| \
MENU_ITEM_COUNT(sizeof( name##_)/sizeof(*name##_)), \
{ .submenus = name##_},{.callback_and_desc = & name##__}};
#ifdef HAVE_LCD_BITMAP /* Kill the player port already.... PLEASE!! */
/* returns a value associated with the item */
#define MENUITEM_RETURNVALUE(name, str, val, cb, icon) \
@ -208,38 +203,5 @@ bool do_setting_from_menu(const struct menu_item_ex *temp);
{ (void*)name##_},{.callback_and_desc = & name##__}};
#else /* HAVE_LCD_BITMAP */
#define MENUITEM_RETURNVALUE(name, str, val, cb, icon) \
static const struct menu_callback_with_desc name##_ = {cb,str}; \
static const struct menu_item_ex name = \
{ MT_RETURN_VALUE|MENU_HAS_DESC, { .value = val}, \
{.callback_and_desc = & name##_}};
#define MENUITEM_RETURNVALUE_DYNTEXT(name, val, cb, text_callback, text_cb_data, icon) \
static const struct menu_get_name_and_icon name##_ \
= {cb,text_callback,text_cb_data}; \
static const struct menu_item_ex name = \
{ MT_RETURN_VALUE|MENU_DYNAMIC_DESC, { .value = val}, \
{.menu_get_name_and_icon = & name##_}};
#define MENUITEM_FUNCTION(name, str, func, callback, icon) \
static const struct menu_callback_with_desc name##_ = {callback,str}; \
const struct menu_item_ex name = \
{ MT_FUNCTION_CALL|MENU_HAS_DESC, { .function = func}, \
{.callback_and_desc = & name##_}};
#define MENUITEM_FUNCTION_WPARAM(name, str, func, param, callback, icon) \
static const struct menu_callback_with_desc name##_ = {callback,str}; \
static const struct menu_func_with_param name##__ = {func, param}; \
static const struct menu_item_ex name = \
{ MT_FUNCTION_WITH_PARAM|MENU_HAS_DESC, \
{ .func_with_param = &name##__}, \
{.callback_and_desc = & name##_}};
#define MAKE_MENU( name, str, callback, icon, ... ) \
static const struct menu_item_ex *name##_[] = {__VA_ARGS__}; \
static const struct menu_callback_with_desc name##__ = {callback,str};\
const struct menu_item_ex name = \
{MT_MENU|MENU_HAS_DESC| \
MENU_ITEM_COUNT(sizeof( name##_)/sizeof(*name##_)), \
{ (void*)name##_},{.callback_and_desc = & name##__}};
#endif /* HAVE_LCD_BITMAP */
#endif /* End __MENU_H__ */

View File

@ -160,18 +160,18 @@ static int reset_color(void)
return 0;
}
MENUITEM_FUNCTION(clear_main_bd, ID2P(LANG_CLEAR_BACKDROP),
clear_main_backdrop, NULL, NOICON);
clear_main_backdrop, NULL, Icon_NOICON);
MENUITEM_FUNCTION(set_bg_col, ID2P(LANG_BACKGROUND_COLOR),
set_bg_color, NULL, NOICON);
set_bg_color, NULL, Icon_NOICON);
MENUITEM_FUNCTION(set_fg_col, ID2P(LANG_FOREGROUND_COLOR),
set_fg_color, NULL, NOICON);
set_fg_color, NULL, Icon_NOICON);
MENUITEM_FUNCTION(reset_colors, ID2P(LANG_RESET_COLORS),
reset_color, NULL, NOICON);
reset_color, NULL, Icon_NOICON);
#endif
/* now the actual menu */
MAKE_MENU(lcd_settings,ID2P(LANG_LCD_MENU),
NULL, bitmap_icons_6x8[Icon_Display_menu]
NULL, Icon_Display_menu
#if CONFIG_BACKLIGHT
,&backlight_timeout
# if CONFIG_CHARGING
@ -258,7 +258,7 @@ MENUITEM_SETTING(remote_reduce_ticking,
#endif
MAKE_MENU(lcd_remote_settings, ID2P(LANG_LCD_REMOTE_MENU),
NULL, bitmap_icons_6x8[Icon_Remote_Display_menu],
NULL, Icon_Remote_Display_menu,
&remote_backlight_timeout,
#if CONFIG_CHARGING
&remote_backlight_timeout_plugged,
@ -290,7 +290,7 @@ MENUITEM_SETTING(remote_scroll_speed, &global_settings.remote_scroll_speed, NULL
MENUITEM_SETTING(remote_scroll_delay, &global_settings.remote_scroll_delay, NULL);
MENUITEM_SETTING(remote_scroll_step, &global_settings.remote_scroll_step, NULL);
MENUITEM_SETTING(remote_bidir_limit, &global_settings.remote_bidir_limit, NULL);
MAKE_MENU(remote_scroll_sets, ID2P(LANG_REMOTE_SCROLL_SETS), 0, NOICON,
MAKE_MENU(remote_scroll_sets, ID2P(LANG_REMOTE_SCROLL_SETS), 0, Icon_NOICON,
&remote_scroll_speed, &remote_scroll_delay,
&remote_scroll_step, &remote_bidir_limit);
#endif /* HAVE_REMOTE_LCD */
@ -316,7 +316,7 @@ MENUITEM_SETTING(screen_scroll_step, &global_settings.screen_scroll_step, NULL);
#endif
MENUITEM_SETTING(scroll_paginated, &global_settings.scroll_paginated, NULL);
MAKE_MENU(scroll_settings_menu, ID2P(LANG_SCROLL_MENU), 0, NOICON,
MAKE_MENU(scroll_settings_menu, ID2P(LANG_SCROLL_MENU), 0, Icon_NOICON,
&scroll_speed, &scroll_delay,
#ifdef HAVE_LCD_BITMAP
&scroll_step,
@ -346,7 +346,7 @@ MENUITEM_SETTING(buttonbar, &global_settings.buttonbar, NULL);
#endif
MENUITEM_SETTING(volume_type, &global_settings.volume_type, NULL);
MENUITEM_SETTING(battery_display, &global_settings.battery_display, NULL);
MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, NOICON,
MAKE_MENU(bars_menu, ID2P(LANG_BARS_MENU), 0, Icon_NOICON,
&scrollbar_item, &statusbar,
#if CONFIG_KEYPAD == RECORDER_PAD
&buttonbar,
@ -493,12 +493,12 @@ static int peak_meter_max(void) {
return retval;
}
MENUITEM_FUNCTION(peak_meter_scale_item, ID2P(LANG_PM_SCALE),
peak_meter_scale, NULL, NOICON);
peak_meter_scale, NULL, Icon_NOICON);
MENUITEM_FUNCTION(peak_meter_min_item, ID2P(LANG_PM_MIN),
peak_meter_min, NULL, NOICON);
peak_meter_min, NULL, Icon_NOICON);
MENUITEM_FUNCTION(peak_meter_max_item, ID2P(LANG_PM_MAX),
peak_meter_max, NULL, NOICON);
MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, NOICON,
peak_meter_max, NULL, Icon_NOICON);
MAKE_MENU(peak_meter_menu, ID2P(LANG_PM_MENU), NULL, Icon_NOICON,
&peak_meter_clip_hold, &peak_meter_release,
&peak_meter_scale_item, &peak_meter_min_item, &peak_meter_max_item);
#endif /* HAVE_LCD_BITMAP */
@ -528,13 +528,13 @@ static int browse_folder(void *param)
#ifdef HAVE_LCD_BITMAP
MENUITEM_FUNCTION_WPARAM(browse_fonts, ID2P(LANG_CUSTOM_FONT),
browse_folder, (void*)&fonts, NULL, NOICON);
browse_folder, (void*)&fonts, NULL, Icon_NOICON);
#endif
MENUITEM_FUNCTION_WPARAM(browse_wps, ID2P(LANG_WHILE_PLAYING),
browse_folder, (void*)&wps, NULL, NOICON);
browse_folder, (void*)&wps, NULL, Icon_NOICON);
#ifdef HAVE_REMOTE_LCD
MENUITEM_FUNCTION_WPARAM(browse_rwps, ID2P(LANG_REMOTE_WHILE_PLAYING),
browse_folder, (void*)&rwps, NULL, NOICON);
browse_folder, (void*)&rwps, NULL, Icon_NOICON);
#endif
MENUITEM_SETTING(show_icons, &global_settings.show_icons, NULL);
@ -542,7 +542,7 @@ MENUITEM_SETTING(codepage_setting, &global_settings.default_codepage, NULL);
MAKE_MENU(display_menu, ID2P(LANG_DISPLAY),
NULL, bitmap_icons_6x8[Icon_Display_menu],
NULL, Icon_Display_menu,
#ifdef HAVE_LCD_BITMAP
&browse_fonts,
#endif

View File

@ -144,21 +144,21 @@ 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,
gainitem_get_name,
&global_settings.eq_band0_cutoff, NOICON);
&global_settings.eq_band0_cutoff, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_1, do_option, (void*)&gain_1, NULL,
gainitem_get_name,
&global_settings.eq_band1_cutoff, NOICON);
&global_settings.eq_band1_cutoff, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_2, do_option, (void*)&gain_2, NULL,
gainitem_get_name,
&global_settings.eq_band2_cutoff, NOICON);
&global_settings.eq_band2_cutoff, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_3, do_option, (void*)&gain_3, NULL,
gainitem_get_name,
&global_settings.eq_band3_cutoff, NOICON);
&global_settings.eq_band3_cutoff, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(gain_item_4, do_option, (void*)&gain_4, NULL,
gainitem_get_name,
&global_settings.eq_band4_cutoff, NOICON);
&global_settings.eq_band4_cutoff, Icon_NOICON);
MAKE_MENU(gain_menu, ID2P(LANG_EQUALIZER_GAIN), NULL, 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);
static const struct menu_item_ex *band_items[3][3] = {
@ -183,7 +183,7 @@ int do_center_band_menu(void* param)
cb_and_desc.menu_callback = NULL;
snprintf(desc, MAX_PATH, str(LANG_EQUALIZER_BAND_PEAK), band);
cb_and_desc.desc = desc;
cb_and_desc.icon = bitmap_icons_6x8[Icon_EQ];
cb_and_desc.icon_id = Icon_EQ;
menu.flags = MT_MENU|(3<<MENU_COUNT_SHIFT)|MENU_HAS_DESC;
menu.submenus = band_items[band-1];
menu.callback_and_desc = &cb_and_desc;
@ -191,17 +191,17 @@ int do_center_band_menu(void* param)
return 0;
}
MAKE_MENU(band_0_menu, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL,
bitmap_icons_6x8[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,
centerband_get_name, (void*)1, bitmap_icons_6x8[Icon_EQ]);
centerband_get_name, (void*)1, Icon_EQ);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_2_menu, do_center_band_menu, (void*)2, NULL,
centerband_get_name, (void*)2, bitmap_icons_6x8[Icon_EQ]);
centerband_get_name, (void*)2, Icon_EQ);
MENUITEM_FUNCTION_WPARAM_DYNTEXT(band_3_menu, do_center_band_menu, (void*)3, NULL,
centerband_get_name, (void*)3, bitmap_icons_6x8[Icon_EQ]);
centerband_get_name, (void*)3, Icon_EQ);
MAKE_MENU(band_4_menu, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL,
bitmap_icons_6x8[Icon_EQ], &cutoff_4, &q_4, &gain_4);
Icon_EQ, &cutoff_4, &q_4, &gain_4);
MAKE_MENU(advanced_eq_menu_, ID2P(LANG_EQUALIZER_ADVANCED), NULL, bitmap_icons_6x8[Icon_EQ],
MAKE_MENU(advanced_eq_menu_, ID2P(LANG_EQUALIZER_ADVANCED), NULL, Icon_EQ,
&band_0_menu, &band_1_menu, &band_2_menu, &band_3_menu, &band_4_menu);
@ -627,13 +627,13 @@ bool eq_browse_presets(void)
MENUITEM_FUNCTION(eq_graphical, ID2P(LANG_EQUALIZER_GRAPHICAL),
(int(*)(void))eq_menu_graphical, NULL,
bitmap_icons_6x8[Icon_EQ]);
Icon_EQ);
MENUITEM_FUNCTION(eq_save, ID2P(LANG_EQUALIZER_SAVE),
(int(*)(void))eq_save_preset, NULL, NOICON);
(int(*)(void))eq_save_preset, NULL, Icon_NOICON);
MENUITEM_FUNCTION(eq_browse, ID2P(LANG_EQUALIZER_BROWSE),
(int(*)(void))eq_browse_presets, NULL, NOICON);
(int(*)(void))eq_browse_presets, NULL, Icon_NOICON);
MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, bitmap_icons_6x8[Icon_EQ],
MAKE_MENU(equalizer_menu, ID2P(LANG_EQUALIZER), NULL, Icon_EQ,
&eq_enable, &eq_graphical, &eq_precut, &gain_menu,
&advanced_eq_menu_, &eq_save, &eq_browse);
@ -753,33 +753,33 @@ MENUITEM_SETTING(hw_eq_enable, &global_settings.eq_hw_enabled, hweq_enable_callb
MENUITEM_SETTING(hw_eq_cutoff_0, &global_settings.eq_hw_band0_cutoff, band0_callback);
MENUITEM_SETTING(hw_eq_gain_0, &global_settings.eq_hw_band0_gain, band0_callback);
MAKE_MENU(hw_eq_band0, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL, NOICON,
MAKE_MENU(hw_eq_band0, ID2P(LANG_EQUALIZER_BAND_LOW_SHELF), NULL, Icon_NOICON,
&hw_eq_cutoff_0, &hw_eq_gain_0);
MENUITEM_SETTING(hw_eq_cutoff_1, &global_settings.eq_hw_band1_center, band1_callback);
MENUITEM_SETTING(hw_eq_bandwidth_1, &global_settings.eq_hw_band1_bandwidth, band1_callback);
MENUITEM_SETTING(hw_eq_gain_1, &global_settings.eq_hw_band1_gain, band1_callback);
MAKE_MENU(hw_eq_band1, "Peak Filter 1", NULL, NOICON,
MAKE_MENU(hw_eq_band1, "Peak Filter 1", NULL, Icon_NOICON,
&hw_eq_cutoff_1, &hw_eq_bandwidth_1, &hw_eq_gain_1);
MENUITEM_SETTING(hw_eq_cutoff_2, &global_settings.eq_hw_band2_center, band2_callback);
MENUITEM_SETTING(hw_eq_bandwidth_2, &global_settings.eq_hw_band2_bandwidth, band2_callback);
MENUITEM_SETTING(hw_eq_gain_2, &global_settings.eq_hw_band2_gain, band2_callback);
MAKE_MENU(hw_eq_band2, "Peak Filter 2", NULL, NOICON,
MAKE_MENU(hw_eq_band2, "Peak Filter 2", NULL, Icon_NOICON,
&hw_eq_cutoff_2, &hw_eq_bandwidth_2, &hw_eq_gain_2);
MENUITEM_SETTING(hw_eq_cutoff_3, &global_settings.eq_hw_band3_center, band3_callback);
MENUITEM_SETTING(hw_eq_bandwidth_3, &global_settings.eq_hw_band3_bandwidth, band3_callback);
MENUITEM_SETTING(hw_eq_gain_3, &global_settings.eq_hw_band3_gain, band3_callback);
MAKE_MENU(hw_eq_band3, "Peak Filter 3", NULL, NOICON,
MAKE_MENU(hw_eq_band3, "Peak Filter 3", NULL, Icon_NOICON,
&hw_eq_cutoff_3, &hw_eq_bandwidth_3, &hw_eq_gain_3);
MENUITEM_SETTING(hw_eq_cutoff_4, &global_settings.eq_hw_band4_cutoff, band4_callback);
MENUITEM_SETTING(hw_eq_gain_4, &global_settings.eq_hw_band4_gain, band4_callback);
MAKE_MENU(hw_eq_band4, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL, NOICON,
MAKE_MENU(hw_eq_band4, ID2P(LANG_EQUALIZER_BAND_HIGH_SHELF), NULL, Icon_NOICON,
&hw_eq_cutoff_4, &hw_eq_gain_4);
MAKE_MENU(hw_eq_menu, ID2P(LANG_EQUALIZER_HARDWARE), NULL, bitmap_icons_6x8[Icon_EQ],
MAKE_MENU(hw_eq_menu, ID2P(LANG_EQUALIZER_HARDWARE), NULL, Icon_EQ,
&hw_eq_enable, &hw_eq_band0, &hw_eq_band1,
&hw_eq_band2, &hw_eq_band3, &hw_eq_band4);

View File

@ -96,14 +96,14 @@ static int write_settings_file(void* param)
}
MENUITEM_FUNCTION_WPARAM(browse_configs, ID2P(LANG_CUSTOM_CFG),
browse_folder, (void*)&config, NULL, NOICON);
browse_folder, (void*)&config, NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM(save_settings_item, ID2P(LANG_SAVE_SETTINGS),
write_settings_file, (void*)SETTINGS_SAVE_ALL, NULL, NOICON);
write_settings_file, (void*)SETTINGS_SAVE_ALL, NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM(save_theme_item, ID2P(LANG_SAVE_THEME),
write_settings_file, (void*)SETTINGS_SAVE_THEME, NULL, NOICON);
MENUITEM_FUNCTION(reset_settings_item,ID2P(LANG_RESET),reset_settings, NULL, NOICON);
write_settings_file, (void*)SETTINGS_SAVE_THEME, NULL, Icon_NOICON);
MENUITEM_FUNCTION(reset_settings_item,ID2P(LANG_RESET),reset_settings, NULL, Icon_NOICON);
MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, bitmap_icons_6x8[Icon_Config],
MAKE_MENU(manage_settings, ID2P(LANG_MANAGE_MENU), NULL, Icon_Config,
&browse_configs, &reset_settings_item,
&save_settings_item, &save_theme_item);
/* MANAGE SETTINGS MENU */
@ -340,7 +340,7 @@ static bool show_info(void)
return false;
}
MENUITEM_FUNCTION(show_info_item, ID2P(LANG_INFO_MENU),
(menu_function)show_info, NULL, NOICON);
(menu_function)show_info, NULL, Icon_NOICON);
/* sleep Menu */
@ -373,24 +373,24 @@ static int sleep_timer(void)
}
MENUITEM_FUNCTION(sleep_timer_call, ID2P(LANG_SLEEP_TIMER), sleep_timer,
NULL, bitmap_icons_6x8[Icon_Menu_setting]); /* make it look like a
NULL, Icon_Menu_setting); /* make it look like a
setting to the user */
MENUITEM_FUNCTION(show_credits_item, ID2P(LANG_VERSION),
(menu_function)show_credits, NULL, NOICON);
(menu_function)show_credits, NULL, Icon_NOICON);
MENUITEM_FUNCTION(show_runtime_item, ID2P(LANG_RUNNING_TIME),
(menu_function)view_runtime, NULL, NOICON);
(menu_function)view_runtime, NULL, Icon_NOICON);
MENUITEM_FUNCTION(debug_menu_item, ID2P(LANG_DEBUG),
(menu_function)debug_menu, NULL, NOICON);
(menu_function)debug_menu, NULL, Icon_NOICON);
#ifdef SIMULATOR
MENUITEM_FUNCTION(simulate_usb_item, ID2P(LANG_USB),
(menu_function)simulate_usb, NULL, NOICON);
(menu_function)simulate_usb, NULL, Icon_NOICON);
#ifdef ROCKBOX_HAS_LOGF
MENUITEM_FUNCTION(logfdisplay_item, "logf",(int (*)(void)) logfdisplay, NULL, NOICON);
MENUITEM_FUNCTION(logfdump_item, "logfdump",(int (*)(void)) logfdump, NULL, NOICON);
MENUITEM_FUNCTION(logfdisplay_item, "logf",(int (*)(void)) logfdisplay, NULL, Icon_NOICON);
MENUITEM_FUNCTION(logfdump_item, "logfdump",(int (*)(void)) logfdump, NULL, Icon_NOICON);
#endif
#endif
MAKE_MENU(info_menu, ID2P(LANG_INFO), 0, bitmap_icons_6x8[Icon_Questionmark],
MAKE_MENU(info_menu, ID2P(LANG_INFO), 0, Icon_Questionmark,
&show_info_item, &show_credits_item, &show_runtime_item,
&sleep_timer_call, &debug_menu_item
#ifdef SIMULATOR
@ -407,7 +407,7 @@ MAKE_MENU(info_menu, ID2P(LANG_INFO), 0, bitmap_icons_6x8[Icon_Questionmark],
/* MAIN MENU */
MENUITEM_FUNCTION_WPARAM(browse_themes, ID2P(LANG_CUSTOM_THEME),
browse_folder, (void*)&theme, NULL, bitmap_icons_6x8[Icon_Folder]);
browse_folder, (void*)&theme, NULL, Icon_Folder);
#ifdef HAVE_LCD_CHARCELLS
int mainmenu_callback(int action,const struct menu_item_ex *this_item)
@ -428,7 +428,7 @@ int mainmenu_callback(int action,const struct menu_item_ex *this_item)
#define mainmenu_callback NULL
#endif
MAKE_MENU(main_menu_, ID2P(LANG_SETTINGS_MENU), mainmenu_callback,
bitmap_icons_6x8[Icon_Submenu_Entered],
Icon_Submenu_Entered,
&sound_settings,
&settings_menu_item, &manage_settings, &browse_themes,
#ifdef HAVE_RECORDING

View File

@ -60,7 +60,7 @@ MENUITEM_SETTING(play_selected, &global_settings.play_selected, NULL);
MENUITEM_SETTING(ff_rewind_accel, &global_settings.ff_rewind_accel, NULL);
MENUITEM_SETTING(ff_rewind_min_step, &global_settings.ff_rewind_min_step, NULL);
MAKE_MENU(ff_rewind_settings_menu, ID2P(LANG_WIND_MENU), 0, NOICON,
MAKE_MENU(ff_rewind_settings_menu, ID2P(LANG_WIND_MENU), 0, Icon_NOICON,
&ff_rewind_min_step, &ff_rewind_accel);
#if CONFIG_CODEC == SWCODEC
int buffermargin_callback(int action,const struct menu_item_ex *this_item)
@ -95,7 +95,7 @@ MENUITEM_SETTING(crossfade_fade_out_duration,
&global_settings.crossfade_fade_out_duration, setcrossfadeonexit_callback);
MENUITEM_SETTING(crossfade_fade_out_mixmode,
&global_settings.crossfade_fade_out_mixmode,NULL);
MAKE_MENU(crossfade_settings_menu,ID2P(LANG_CROSSFADE),0, NOICON,
MAKE_MENU(crossfade_settings_menu,ID2P(LANG_CROSSFADE),0, Icon_NOICON,
&crossfade, &crossfade_fade_in_delay, &crossfade_fade_in_duration,
&crossfade_fade_out_delay, &crossfade_fade_out_duration,
&crossfade_fade_out_mixmode);
@ -117,7 +117,7 @@ MENUITEM_SETTING(replaygain, &global_settings.replaygain ,replaygain_callback);
MENUITEM_SETTING(replaygain_noclip, &global_settings.replaygain_noclip ,replaygain_callback);
MENUITEM_SETTING(replaygain_type, &global_settings.replaygain_type ,replaygain_callback);
MENUITEM_SETTING(replaygain_preamp, &global_settings.replaygain_preamp ,replaygain_callback);
MAKE_MENU(replaygain_settings_menu,ID2P(LANG_REPLAYGAIN),0, NOICON,
MAKE_MENU(replaygain_settings_menu,ID2P(LANG_REPLAYGAIN),0, Icon_NOICON,
&replaygain,&replaygain_noclip,
&replaygain_type,&replaygain_preamp);
@ -165,12 +165,12 @@ MENUITEM_SETTING(cuesheet, &global_settings.cuesheet, cuesheet_callback);
MENUITEM_SETTING(unplug_mode, &global_settings.unplug_mode, NULL);
MENUITEM_SETTING(unplug_rw, &global_settings.unplug_rw, NULL);
MENUITEM_SETTING(unplug_autoresume, &global_settings.unplug_autoresume, NULL);
MAKE_MENU(unplug_menu, ID2P(LANG_UNPLUG), 0, NOICON,
MAKE_MENU(unplug_menu, ID2P(LANG_UNPLUG), 0, Icon_NOICON,
&unplug_mode, &unplug_rw, &unplug_autoresume);
#endif
MAKE_MENU(playback_menu_item,ID2P(LANG_PLAYBACK),0,
bitmap_icons_6x8[Icon_Playback_menu],
Icon_Playback_menu,
&shuffle_item, &repeat_mode, &play_selected,
&ff_rewind_settings_menu,
&buffer_margin, &fade_on_stop, &party_mode,

View File

@ -63,21 +63,21 @@ int save_playlist_screen(struct playlist_info* playlist)
return 0;
}
MENUITEM_FUNCTION(create_playlist_item, ID2P(LANG_CREATE_PLAYLIST),
(int(*)(void))create_playlist, NULL, NOICON);
(int(*)(void))create_playlist, NULL, Icon_NOICON);
MENUITEM_FUNCTION(view_playlist, ID2P(LANG_VIEW_DYNAMIC_PLAYLIST),
(int(*)(void))playlist_viewer, NULL, NOICON);
(int(*)(void))playlist_viewer, NULL, Icon_NOICON);
MENUITEM_FUNCTION_WPARAM(save_playlist, ID2P(LANG_SAVE_DYNAMIC_PLAYLIST),
(int(*)(void*))save_playlist_screen, NULL, NULL, NOICON);
(int(*)(void*))save_playlist_screen, NULL, NULL, Icon_NOICON);
MENUITEM_FUNCTION(catalog, ID2P(LANG_CATALOG),
(int(*)(void))catalog_view_playlists, NULL, NOICON);
(int(*)(void))catalog_view_playlists, NULL, Icon_NOICON);
MENUITEM_SETTING(recursive_dir_insert, &global_settings.recursive_dir_insert, NULL);
MENUITEM_SETTING(warn_on_erase, &global_settings.warnon_erase_dynplaylist, NULL);
MAKE_MENU(playlist_settings, ID2P(LANG_PLAYLIST_MENU), NULL,
bitmap_icons_6x8[Icon_Playlist],
Icon_Playlist,
&recursive_dir_insert, &warn_on_erase);
MAKE_MENU(playlist_options, ID2P(LANG_PLAYLIST_MENU), NULL,
bitmap_icons_6x8[Icon_Playlist],
Icon_Playlist,
&create_playlist_item, &view_playlist, &save_playlist, &catalog);
bool playlist_menu(void)

View File

@ -32,5 +32,5 @@
/* TEMP */
bool recording_menu(bool no_source); /* from apps/sound_menu.h */
MENUITEM_FUNCTION_WPARAM(recording_settings, ID2P(LANG_RECORDING_SETTINGS),
(int (*)(void*))recording_menu,0, NULL, NOICON);
(int (*)(void*))recording_menu,0, NULL, Icon_NOICON);
#endif

View File

@ -47,15 +47,15 @@ MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL);
#endif
MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL);
MENUITEM_FUNCTION(tc_init, ID2P(LANG_TAGCACHE_FORCE_UPDATE),
(int(*)(void))tagcache_rebuild, NULL, NOICON);
(int(*)(void))tagcache_rebuild, NULL, Icon_NOICON);
MENUITEM_FUNCTION(tc_update, ID2P(LANG_TAGCACHE_UPDATE),
(int(*)(void))tagcache_update, NULL, NOICON);
(int(*)(void))tagcache_update, NULL, Icon_NOICON);
MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL);
MENUITEM_FUNCTION(tc_export, ID2P(LANG_TAGCACHE_EXPORT),
(int(*)(void))tagtree_export, NULL, NOICON);
(int(*)(void))tagtree_export, NULL, Icon_NOICON);
MENUITEM_FUNCTION(tc_import, ID2P(LANG_TAGCACHE_IMPORT),
(int(*)(void))tagtree_import, NULL, NOICON);
MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, NOICON,
(int(*)(void))tagtree_import, NULL, Icon_NOICON);
MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON,
#ifdef HAVE_TC_RAMCACHE
&tagcache_ram,
#endif
@ -91,7 +91,7 @@ static int fileview_callback(int action,const struct menu_item_ex *this_item)
return action;
}
MAKE_MENU(file_menu, ID2P(LANG_FILE), 0, bitmap_icons_6x8[Icon_file_view_menu],
MAKE_MENU(file_menu, ID2P(LANG_FILE), 0, Icon_file_view_menu,
&sort_case, &sort_dir, &sort_file,
&dirfilter, &browse_current, &show_path_in_browser);
/* FILE VIEW MENU */
@ -121,7 +121,7 @@ static int usbcharging_callback(int action,const struct menu_item_ex *this_item)
MENUITEM_SETTING(usb_charging, &global_settings.usb_charging, usbcharging_callback);
#endif
#endif
MAKE_MENU(battery_menu, ID2P(LANG_BATTERY_MENU), 0, NOICON,
MAKE_MENU(battery_menu, ID2P(LANG_BATTERY_MENU), 0, Icon_NOICON,
&battery_capacity,
#if BATTERY_TYPES_COUNT > 1
&battery_type,
@ -160,7 +160,7 @@ static int dircache_callback(int action,const struct menu_item_ex *this_item)
}
MENUITEM_SETTING(dircache, &global_settings.dircache, dircache_callback);
#endif
MAKE_MENU(disk_menu, ID2P(LANG_DISK_MENU), 0, NOICON,
MAKE_MENU(disk_menu, ID2P(LANG_DISK_MENU), 0, Icon_NOICON,
&disk_spindown,
#ifdef HAVE_DIRCACHE
&dircache,
@ -200,9 +200,9 @@ static int timedate_set(void)
return result;
}
MENUITEM_FUNCTION(time_set, ID2P(LANG_TIME), timedate_set, NULL, NOICON);
MENUITEM_FUNCTION(time_set, ID2P(LANG_TIME), timedate_set, NULL, Icon_NOICON);
MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL);
MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, NOICON, &time_set, &timeformat);
MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat);
#endif
/* System menu */
@ -210,13 +210,13 @@ MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL);
#ifdef HAVE_RTC_ALARM
MENUITEM_FUNCTION(alarm_screen_call, ID2P(LANG_ALARM_MOD_ALARM_MENU),
(menu_function)alarm_screen, NULL, NOICON);
(menu_function)alarm_screen, NULL, Icon_NOICON);
#endif
/* Limits menu */
MENUITEM_SETTING(max_files_in_dir, &global_settings.max_files_in_dir, NULL);
MENUITEM_SETTING(max_files_in_playlist, &global_settings.max_files_in_playlist, NULL);
MAKE_MENU(limits_menu, ID2P(LANG_LIMITS_MENU), 0, NOICON,
MAKE_MENU(limits_menu, ID2P(LANG_LIMITS_MENU), 0, Icon_NOICON,
&max_files_in_dir, &max_files_in_playlist);
#if CONFIG_CODEC == MAS3507D
@ -242,7 +242,7 @@ MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL);
MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL);
MAKE_MENU(system_menu, ID2P(LANG_SYSTEM),
0, bitmap_icons_6x8[Icon_System_menu],
0, Icon_System_menu,
&start_screen,
#ifndef SIMULATOR
&battery_menu,
@ -294,7 +294,7 @@ MENUITEM_SETTING(autocreatebookmark,
MENUITEM_SETTING(autoloadbookmark, &global_settings.autoloadbookmark, NULL);
MENUITEM_SETTING(usemrb, &global_settings.usemrb, NULL);
MAKE_MENU(bookmark_settings_menu, ID2P(LANG_BOOKMARK_SETTINGS), 0,
bitmap_icons_6x8[Icon_Bookmark],
Icon_Bookmark,
&autocreatebookmark, &autoloadbookmark, &usemrb);
/* BOOKMARK MENU */
/***********************************/
@ -328,7 +328,7 @@ static int talk_callback(int action,const struct menu_item_ex *this_item)
}
return action;
}
MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, bitmap_icons_6x8[Icon_Voice],
MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice,
&talk_menu, &talk_dir, &talk_file_item);
/* VOICE MENU */
/***********************************/
@ -340,10 +340,10 @@ static int language_browse(void)
return (int)rockbox_browse(LANG_DIR, SHOW_LNG);
}
MENUITEM_FUNCTION(browse_langs, ID2P(LANG_LANGUAGE), language_browse,
NULL, bitmap_icons_6x8[Icon_Language]);
NULL, Icon_Language);
MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0,
bitmap_icons_6x8[Icon_General_settings_menu],
Icon_General_settings_menu,
&playback_menu_item, &playlist_settings, &file_menu,
#ifdef HAVE_TAGCACHE
&tagcache_menu,

View File

@ -72,7 +72,7 @@ MENUITEM_SETTING(stereo_width, &global_settings.stereo_width, soundmenu_callback
&global_settings.crossfeed_hf_attenuation, soundmenu_callback);
MENUITEM_SETTING(crossfeed_hf_cutoff,
&global_settings.crossfeed_hf_cutoff, soundmenu_callback);
MAKE_MENU(crossfeed_menu,ID2P(LANG_CROSSFEED), NULL, NOICON,
MAKE_MENU(crossfeed_menu,ID2P(LANG_CROSSFEED), NULL, Icon_NOICON,
&crossfeed, &crossfeed_direct_gain, &crossfeed_cross_gain,
&crossfeed_hf_attenuation, &crossfeed_hf_cutoff);
@ -93,7 +93,7 @@ MENUITEM_SETTING(stereo_width, &global_settings.stereo_width, soundmenu_callback
MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, bitmap_icons_6x8[Icon_Audio],
MAKE_MENU(sound_settings, ID2P(LANG_SOUND_SETTINGS), NULL, Icon_Audio,
&volume,
&bass,&treble,
&balance,&channel_config,&stereo_width

View File

@ -43,6 +43,32 @@ enum {
Icon_Config,
};
/* put icons from the 6x8 enum here if the player
doesnt have an icon for it */
enum unused_but_needed {
Icon_Cursor,
Icon_Font,
Icon_Preset,
Icon_Keyboard,
Icon_Reverse_Cursor,
Icon_Questionmark,
Icon_Menu_setting,
Icon_Menu_functioncall,
Icon_Submenu,
Icon_Submenu_Entered,
Icon_Recording,
Icon_Voice,
Icon_General_settings_menu,
Icon_System_menu,
Icon_Playback_menu,
Icon_Display_menu,
Icon_Remote_Display_menu,
Icon_Radio_screen,
Icon_file_view_menu,
Icon_EQ,
Icon_Rockbox,
Icon6x8Last,
};
#endif
#endif /* _ICONS_H_ */

View File

@ -49,6 +49,8 @@ enum icons_5x8 {
Icon5x8Last
};
/* If any icons are added to this enum, they must be
added to the unused_but_needed enum in ../player/icons.h */
enum icons_6x8 {
Icon_Audio,
Icon_Folder,

View File

@ -1206,9 +1206,9 @@ static int clear_preset_list(void)
}
MENUITEM_FUNCTION(radio_edit_preset_item, ID2P(LANG_FM_EDIT_PRESET),
radio_edit_preset, NULL, NOICON);
radio_edit_preset, NULL, Icon_NOICON);
MENUITEM_FUNCTION(radio_delete_preset_item, ID2P(LANG_FM_DELETE_PRESET),
radio_delete_preset, NULL, NOICON);
radio_delete_preset, NULL, Icon_NOICON);
int radio_preset_callback(int action, const struct menu_item_ex *this_item)
{
(void)this_item;
@ -1217,7 +1217,7 @@ int radio_preset_callback(int action, const struct menu_item_ex *this_item)
return action;
}
MAKE_MENU(handle_radio_preset_menu, ID2P(LANG_FM_BUTTONBAR_PRESETS),
radio_preset_callback, NOICON, &radio_edit_preset_item,
radio_preset_callback, Icon_NOICON, &radio_edit_preset_item,
&radio_delete_preset_item);
/* present a list of preset stations */
char * presets_get_name(int selected_item, void * data, char *buffer)
@ -1335,7 +1335,7 @@ static int toggle_radio_mode(void* param)
return 0;
}
MENUITEM_FUNCTION_WPARAM_DYNTEXT(radio_mode_item, toggle_radio_mode, NULL, NULL,
get_mode_text, NULL, NOICON);
get_mode_text, NULL, Icon_NOICON);
#endif
static int scan_presets(void)
@ -1434,7 +1434,7 @@ static int fm_recording_screen(void)
return ret;
}
MENUITEM_FUNCTION(recscreen_item, ID2P(LANG_RECORDING_MENU),
fm_recording_screen, NULL, NOICON);
fm_recording_screen, NULL, Icon_NOICON);
#endif /* defined(HAVE_FMRADIO_IN) && CONFIG_CODEC == SWCODEC */
#if defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC
@ -1456,31 +1456,31 @@ static int fm_recording_settings(void)
return ret;
}
MENUITEM_FUNCTION(recsettings_item, ID2P(LANG_RECORDING_SETTINGS),
fm_recording_settings, NULL, NOICON);
fm_recording_settings, NULL, Icon_NOICON);
#endif /* defined(HAVE_FMRADIO_IN) || CONFIG_CODEC != SWCODEC */
#endif /* HAVE_RECORDING */
#endif /* SIMULATOR */
#ifndef FM_PRESET
MENUITEM_FUNCTION(radio_presets_item, ID2P(LANG_FM_BUTTONBAR_PRESETS),
handle_radio_presets, NULL, NOICON);
handle_radio_presets, NULL, Icon_NOICON);
#endif
#ifndef FM_PRESET_ADD
MENUITEM_FUNCTION(radio_addpreset_item, ID2P(LANG_FM_ADD_PRESET),
radio_add_preset, NULL, NOICON);
radio_add_preset, NULL, Icon_NOICON);
#endif
MENUITEM_FUNCTION(presetload_item, ID2P(LANG_FM_PRESET_LOAD),
load_preset_list, NULL, NOICON);
load_preset_list, NULL, Icon_NOICON);
MENUITEM_FUNCTION(presetsave_item, ID2P(LANG_FM_PRESET_SAVE),
save_preset_list, NULL, NOICON);
save_preset_list, NULL, Icon_NOICON);
MENUITEM_FUNCTION(presetclear_item, ID2P(LANG_FM_PRESET_CLEAR),
clear_preset_list, NULL, NOICON);
clear_preset_list, NULL, Icon_NOICON);
MENUITEM_FUNCTION(scan_presets_item, ID2P(LANG_FM_SCAN_PRESETS),
scan_presets, NULL, NOICON);
scan_presets, NULL, Icon_NOICON);
MAKE_MENU(radio_menu_items, ID2P(LANG_FM_MENU), NULL,
bitmap_icons_6x8[Icon_Radio_screen],
Icon_Radio_screen,
#ifndef FM_PRESET
&radio_presets_item,
#endif

View File

@ -224,11 +224,11 @@ static void check_boot(void)
int item_callback(int action, const struct menu_item_ex *this_item) ;
MENUITEM_RETURNVALUE(file_browser, ID2P(LANG_DIR_BROWSER), GO_TO_FILEBROWSER,
NULL, bitmap_icons_6x8[Icon_file_view_menu]);
NULL, Icon_file_view_menu);
MENUITEM_RETURNVALUE(db_browser, ID2P(LANG_TAGCACHE), GO_TO_DBBROWSER,
NULL, bitmap_icons_6x8[Icon_Audio]);
NULL, Icon_Audio);
MENUITEM_RETURNVALUE(rocks_browser, ID2P(LANG_PLUGINS), GO_TO_BROWSEPLUGINS,
NULL, bitmap_icons_6x8[Icon_Plugin]);
NULL, Icon_Plugin);
char *get_wps_item_name(int selected_item, void * data, char *buffer)
{
(void)selected_item; (void)data; (void)buffer;
@ -237,30 +237,30 @@ char *get_wps_item_name(int selected_item, void * data, char *buffer)
return str(LANG_RESUME_PLAYBACK);
}
MENUITEM_RETURNVALUE_DYNTEXT(wps_item, GO_TO_WPS, NULL, get_wps_item_name,
NULL, bitmap_icons_6x8[Icon_Playback_menu]);
NULL, Icon_Playback_menu);
#ifdef HAVE_RECORDING
MENUITEM_RETURNVALUE(rec, ID2P(LANG_RECORDING_MENU), GO_TO_RECSCREEN,
NULL, bitmap_icons_6x8[Icon_Recording]);
NULL, Icon_Recording);
#endif
#if CONFIG_TUNER
MENUITEM_RETURNVALUE(fm, ID2P(LANG_FM_RADIO), GO_TO_FM,
item_callback, bitmap_icons_6x8[Icon_Radio_screen]);
item_callback, Icon_Radio_screen);
#endif
MENUITEM_RETURNVALUE(menu_, ID2P(LANG_SETTINGS_MENU), GO_TO_MAINMENU,
NULL, bitmap_icons_6x8[Icon_Submenu_Entered]);
NULL, Icon_Submenu_Entered);
MENUITEM_RETURNVALUE(bookmarks, ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS),
GO_TO_RECENTBMARKS, item_callback,
bitmap_icons_6x8[Icon_Bookmark]);
Icon_Bookmark);
#ifdef HAVE_LCD_CHARCELLS
static int do_shutdown(void)
{
sys_poweroff();
return 0;
}
MENUITEM_FUNCTION(do_shutdown_item, ID2P(LANG_SHUTDOWN), do_shutdown, NULL, NOICON);
MENUITEM_FUNCTION(do_shutdown_item, ID2P(LANG_SHUTDOWN), do_shutdown, NULL, Icon_NOICON);
#endif
MAKE_MENU(root_menu_, ID2P(LANG_ROCKBOX_TITLE),
NULL, bitmap_icons_6x8[Icon_Rockbox],
NULL, Icon_Rockbox,
&bookmarks, &file_browser, &db_browser,
&wps_item, &menu_,
#ifdef HAVE_RECORDING