diff -U 3 -H -d -r -N rockbox_svn.orig/apps/SOURCES rockbox_svn/apps/SOURCES --- rockbox_svn.orig/apps/SOURCES 2007-07-03 11:58:13.437500000 -0500 +++ rockbox_svn/apps/SOURCES 2007-07-15 16:11:13.460000600 -0500 @@ -43,6 +43,9 @@ #endif filetree.c scrobbler.c +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +ipod_scroll_wheel_gui.c +#endif screen_access.c gui/buttonbar.c diff -U 3 -H -d -r -N rockbox_svn.orig/apps/gui/list.c rockbox_svn/apps/gui/list.c --- rockbox_svn.orig/apps/gui/list.c 2007-07-03 11:56:21.468750000 -0500 +++ rockbox_svn/apps/gui/list.c 2007-07-15 20:25:14.872525000 -0500 @@ -37,6 +37,10 @@ #include "sound.h" #include "misc.h" +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +#include "ipod_scroll_wheel_gui.h" +#endif + #ifdef HAVE_LCD_CHARCELLS #define SCROLL_LIMIT 1 #else @@ -507,7 +511,7 @@ } /* select an item above the current one */ -static void gui_list_select_above(struct gui_list * gui_list, +void gui_list_select_above(struct gui_list * gui_list, int items, int nb_lines) { gui_list->selected_item -= items; @@ -562,7 +566,7 @@ } } /* select an item below the current one */ -static void gui_list_select_below(struct gui_list * gui_list, +void gui_list_select_below(struct gui_list * gui_list, int items, int nb_lines) { int bottom; @@ -817,8 +821,7 @@ gui_list_select_item(&(lists->gui_list[i]), item_number); } -static void gui_synclist_select_next_page(struct gui_synclist * lists, - enum screen_type screen) +void gui_synclist_select_next_page(struct gui_synclist * lists, enum screen_type screen) { int i; FOR_NB_SCREENS(i) @@ -826,8 +829,7 @@ screens[screen].nb_lines); } -static void gui_synclist_select_previous_page(struct gui_synclist * lists, - enum screen_type screen) +void gui_synclist_select_previous_page(struct gui_synclist * lists, enum screen_type screen) { int i; FOR_NB_SCREENS(i) @@ -951,8 +953,12 @@ #endif case ACTION_STD_PREV: case ACTION_STD_PREVREPEAT: + #if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + gui_synclist_handle_accel( lists, SCREEN_MAIN, BACKWARD); + #else FOR_NB_SCREENS(i) gui_list_select_at_offset(&(lists->gui_list[i]), -next_item_modifier); + #endif if (queue_count(&button_queue) < FRAMEDROP_TRIGGER) gui_synclist_draw(lists); yield(); @@ -960,8 +966,12 @@ case ACTION_STD_NEXT: case ACTION_STD_NEXTREPEAT: + #if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + gui_synclist_handle_accel( lists, SCREEN_MAIN, FORWARD ); + #else FOR_NB_SCREENS(i) gui_list_select_at_offset(&(lists->gui_list[i]), next_item_modifier); + #endif if (queue_count(&button_queue) < FRAMEDROP_TRIGGER) gui_synclist_draw(lists); yield(); diff -U 3 -H -d -r -N rockbox_svn.orig/apps/gui/list.c.orig rockbox_svn/apps/gui/list.c.orig --- rockbox_svn.orig/apps/gui/list.c.orig 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/gui/list.c.orig 2007-07-03 11:56:21.468750000 -0500 @@ -0,0 +1,1028 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: list.c 13680 2007-06-21 13:21:33Z jdgordon $ + * + * Copyright (C) 2005 by Kevin Ferrare + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" +#include "lcd.h" +#include "font.h" +#include "button.h" +#include "sprintf.h" +#include "string.h" +#include "settings.h" +#include "kernel.h" +#include "system.h" + +#include "action.h" +#include "screen_access.h" +#include "list.h" +#include "scrollbar.h" +#include "statusbar.h" +#include "textarea.h" +#include "lang.h" +#include "sound.h" +#include "misc.h" + +#ifdef HAVE_LCD_CHARCELLS +#define SCROLL_LIMIT 1 +#else +#define SCROLL_LIMIT (nb_lines<3?1:2) +#endif + +/* The minimum number of pending button events in queue before starting + * to limit list drawing interval. + */ +#define FRAMEDROP_TRIGGER 6 + +#ifdef HAVE_LCD_BITMAP +static int offset_step = 16; /* pixels per screen scroll step */ +/* should lines scroll out of the screen */ +static bool offset_out_of_view = false; +#endif +static struct gui_list* last_list_displayed[NB_SCREENS]; + +#define SHOW_LIST_TITLE ((gui_list->title != NULL) && \ + (gui_list->display->nb_lines > 2)) + +static void gui_list_select_at_offset(struct gui_list * gui_list, int offset); + +/* + * Initializes a scrolling list + * - gui_list : the list structure to initialize + * - callback_get_item_name : pointer to a function that associates a label + * to a given item number + * - data : extra data passed to the list callback + * - scroll_all : + * - selected_size : + */ +static void gui_list_init(struct gui_list * gui_list, + list_get_name callback_get_item_name, + void * data, + bool scroll_all, + int selected_size + ) +{ + gui_list->callback_get_item_icon = NULL; + gui_list->callback_get_item_name = callback_get_item_name; + gui_list->display = NULL; + gui_list_set_nb_items(gui_list, 0); + gui_list->selected_item = 0; + gui_list->start_item = 0; + gui_list->limit_scroll = false; + gui_list->data=data; + gui_list->cursor_flash_state=false; +#ifdef HAVE_LCD_BITMAP + gui_list->offset_position = 0; +#endif + gui_list->scroll_all=scroll_all; + gui_list->selected_size=selected_size; + gui_list->title = NULL; + gui_list->title_width = 0; + gui_list->title_icon = Icon_NOICON; + + gui_list->last_displayed_selected_item = -1 ; + gui_list->last_displayed_start_item = -1 ; + gui_list->show_selection_marker = true; + +#ifdef HAVE_LCD_COLOR + gui_list->title_color = -1; + gui_list->callback_get_item_color = NULL; +#endif +} + +/* this toggles the selection bar or cursor */ +void gui_synclist_hide_selection_marker(struct gui_synclist * lists, bool hide) +{ + int i; + FOR_NB_SCREENS(i) + lists->gui_list[i].show_selection_marker = !hide; +} + +/* + * Attach the scrolling list to a screen + * (The previous screen attachement is lost) + * - gui_list : the list structure + * - display : the screen to attach + */ +static void gui_list_set_display(struct gui_list * gui_list, struct screen * display) +{ + if(gui_list->display != 0) /* we switched from a previous display */ + gui_list->display->stop_scroll(); + gui_list->display = display; +#ifdef HAVE_LCD_CHARCELLS + display->double_height(false); +#endif + gui_list_select_at_offset(gui_list, 0); +} + +/* + * One call on 2, the selected lune will either blink the cursor or + * invert/display normal the selected line + * - gui_list : the list structure + */ +static void gui_list_flash(struct gui_list * gui_list) +{ + struct screen * display=gui_list->display; + gui_list->cursor_flash_state=!gui_list->cursor_flash_state; + int selected_line=gui_list->selected_item-gui_list->start_item+SHOW_LIST_TITLE; +#ifdef HAVE_LCD_BITMAP + int line_ypos=display->getymargin()+display->char_height*selected_line; + if (global_settings.invert_cursor) + { + int line_xpos=display->getxmargin(); + display->set_drawmode(DRMODE_COMPLEMENT); + display->fillrect(line_xpos, line_ypos, display->width, + display->char_height); + display->set_drawmode(DRMODE_SOLID); + display->invertscroll(0, selected_line); + } + else + { + int cursor_xpos=(global_settings.scrollbar && + display->nb_lines < gui_list->nb_items)?1:0; + screen_put_cursorxy(display, cursor_xpos, selected_line, + gui_list->cursor_flash_state); + } + display->update_rect(0, line_ypos,display->width, + display->char_height); +#else + screen_put_cursorxy(display, 0, selected_line, + gui_list->cursor_flash_state); + gui_textarea_update(display); +#endif +} + + +#ifdef HAVE_LCD_BITMAP +static int gui_list_get_item_offset(struct gui_list * gui_list, int item_width, + int text_pos) +{ + struct screen * display=gui_list->display; + int item_offset; + + if (offset_out_of_view) + { + item_offset = gui_list->offset_position; + } + else + { + /* if text is smaller then view */ + if (item_width <= display->width - text_pos) + { + item_offset = 0; + } + else + { + /* if text got out of view */ + if (gui_list->offset_position > + item_width - (display->width - text_pos)) + item_offset = item_width - (display->width - text_pos); + else + item_offset = gui_list->offset_position; + } + } + + return item_offset; +} +#endif + +/* + * Draws the list on the attached screen + * - gui_list : the list structure + */ +static void gui_list_draw_smart(struct gui_list *gui_list) +{ + struct screen * display=gui_list->display; + int text_pos; + bool draw_icons = (gui_list->callback_get_item_icon != NULL && global_settings.show_icons); + bool draw_cursor; + int i; + int lines; + static int last_lines[NB_SCREENS] = {0}; +#ifdef HAVE_LCD_BITMAP + int item_offset; + int old_margin = display->getxmargin(); +#endif + int start, end; + bool partial_draw = false; + +#ifdef HAVE_LCD_BITMAP + display->setfont(FONT_UI); + gui_textarea_update_nblines(display); +#endif + /* Speed up UI by drawing the changed contents only. */ + if (gui_list == last_list_displayed[gui_list->display->screen_type] + && gui_list->last_displayed_start_item == gui_list->start_item + && gui_list->selected_size == 1) + { + partial_draw = true; + } + + lines = display->nb_lines - SHOW_LIST_TITLE; + if (last_lines[display->screen_type] != lines) + { + gui_list_select_at_offset(gui_list, 0); + last_lines[display->screen_type] = lines; + } + + if (partial_draw) + { + end = gui_list->last_displayed_selected_item - gui_list->start_item; + i = gui_list->selected_item - gui_list->start_item; + if (i < end ) + { + start = i; + end++; + } + else + { + start = end; + end = i + 1; + } + } + else + { + gui_textarea_clear(display); + start = 0; + end = display->nb_lines; + gui_list->last_displayed_start_item = gui_list->start_item; + last_list_displayed[gui_list->display->screen_type] = gui_list; + } + + gui_list->last_displayed_selected_item = gui_list->selected_item; + + /* position and draw the list title & icon */ + if (SHOW_LIST_TITLE && !partial_draw) + { + if (gui_list->title_icon != NOICON && draw_icons) + { + screen_put_icon(display, 0, 0, gui_list->title_icon); +#ifdef HAVE_LCD_BITMAP + text_pos = get_icon_width(display->screen_type)+2; /* pixels */ +#else + text_pos = 1; /* chars */ +#endif + } + else + { + text_pos = 0; + } + +#ifdef HAVE_LCD_BITMAP + int title_style = STYLE_DEFAULT; +#ifdef HAVE_LCD_COLOR + if (gui_list->title_color >= 0) + { + title_style |= STYLE_COLORED; + title_style |= gui_list->title_color; + } +#endif + screen_set_xmargin(display, text_pos); /* margin for title */ + item_offset = gui_list_get_item_offset(gui_list, gui_list->title_width, + text_pos); + if (item_offset > gui_list->title_width - (display->width - text_pos)) + display->puts_style_offset(0, 0, gui_list->title, + title_style, item_offset); + else + display->puts_scroll_style_offset(0, 0, gui_list->title, + title_style, item_offset); +#else + display->puts_scroll(text_pos, 0, gui_list->title); +#endif + } + + /* Adjust the position of icon, cursor, text for the list */ +#ifdef HAVE_LCD_BITMAP + gui_textarea_update_nblines(display); + bool draw_scrollbar; + + draw_scrollbar = (global_settings.scrollbar && + lines < gui_list->nb_items); + + draw_cursor = !global_settings.invert_cursor && + gui_list->show_selection_marker; + text_pos = 0; /* here it's in pixels */ + if(draw_scrollbar || SHOW_LIST_TITLE) /* indent if there's + a title */ + { + text_pos += SCROLLBAR_WIDTH; + } + if(draw_cursor) + text_pos += get_icon_width(display->screen_type) + 2; + + if(draw_icons) + text_pos += get_icon_width(display->screen_type) + 2; +#else + draw_cursor = true; + if(draw_icons) + text_pos = 2; /* here it's in chars */ + else + text_pos = 1; +#endif + +#ifdef HAVE_LCD_BITMAP + screen_set_xmargin(display, text_pos); /* margin for list */ +#endif + + if (SHOW_LIST_TITLE) + { + start++; + if (end < display->nb_lines) + end++; + } + + for (i = start; i < end; i++) + { + unsigned char *s; + char entry_buffer[MAX_PATH]; + unsigned char *entry_name; + int current_item = gui_list->start_item + + (SHOW_LIST_TITLE ? i-1 : i); + + /* When there are less items to display than the + * current available space on the screen, we stop*/ + if(current_item >= gui_list->nb_items) + break; + s = gui_list->callback_get_item_name(current_item, + gui_list->data, + entry_buffer); + entry_name = P2STR(s); + +#ifdef HAVE_LCD_BITMAP + int style = STYLE_DEFAULT; + /* position the string at the correct offset place */ + int item_width,h; + display->getstringsize(entry_name, &item_width, &h); + item_offset = gui_list_get_item_offset(gui_list, item_width, text_pos); +#endif + +#ifdef HAVE_LCD_COLOR + /* if the list has a color callback */ + if (gui_list->callback_get_item_color) + { + int color = gui_list->callback_get_item_color(current_item, + gui_list->data); + /* if color selected */ + if (color >= 0) + { + style |= STYLE_COLORED; + style |= color; + } + } +#endif + + if(gui_list->show_selection_marker && + current_item >= gui_list->selected_item && + current_item < gui_list->selected_item + gui_list->selected_size) + {/* The selected item must be displayed scrolling */ +#ifdef HAVE_LCD_BITMAP + if (global_settings.invert_cursor)/* Display inverted-line-style*/ + { + style |= STYLE_INVERT; + } + else /* if (!global_settings.invert_cursor) */ + { + if (current_item % gui_list->selected_size != 0) + draw_cursor = false; + } + /* if the text is smaller than the viewport size */ + if (item_offset > item_width - (display->width - text_pos)) + { + /* don't scroll */ + display->puts_style_offset(0, i, entry_name, + style, item_offset); + } + else + { + display->puts_scroll_style_offset(0, i, entry_name, + style, item_offset); + } +#else + display->puts_scroll(text_pos, i, entry_name); +#endif + + if (draw_cursor) + { + screen_put_icon_with_offset(display, 0, i, + (draw_scrollbar || SHOW_LIST_TITLE)? + SCROLLBAR_WIDTH: 0, + 0, Icon_Cursor); + } + } + else + {/* normal item */ + if(gui_list->scroll_all) + { +#ifdef HAVE_LCD_BITMAP + display->puts_scroll_style_offset(0, i, entry_name, + style, item_offset); +#else + display->puts_scroll(text_pos, i, entry_name); +#endif + } + else + { +#ifdef HAVE_LCD_BITMAP + display->puts_style_offset(0, i, entry_name, + style, item_offset); +#else + display->puts(text_pos, i, entry_name); +#endif + } + } + /* Icons display */ + if(draw_icons) + { + enum themable_icons icon; + icon = gui_list->callback_get_item_icon(current_item, gui_list->data); + if(icon > Icon_NOICON) + { +#ifdef HAVE_LCD_BITMAP + int x = draw_cursor?1:0; + int x_off = (draw_scrollbar || SHOW_LIST_TITLE) ? SCROLLBAR_WIDTH: 0; + screen_put_icon_with_offset(display, x, i, + x_off, 0, icon); +#else + screen_put_icon(display, 1, i, icon); +#endif + } + } + } + +#ifdef HAVE_LCD_BITMAP + /* Draw the scrollbar if needed*/ + if(draw_scrollbar) + { + int y_start = gui_textarea_get_ystart(display); + if (SHOW_LIST_TITLE) + y_start += display->char_height; + int scrollbar_y_end = display->char_height * + lines + y_start; + gui_scrollbar_draw(display, 0, y_start, SCROLLBAR_WIDTH-1, + scrollbar_y_end - y_start, gui_list->nb_items, + gui_list->start_item, + gui_list->start_item + lines, VERTICAL); + } + + screen_set_xmargin(display, old_margin); +#endif + + gui_textarea_update(display); +} + +/* + * Force a full screen update. + */ +static void gui_list_draw(struct gui_list *gui_list) +{ + last_list_displayed[gui_list->display->screen_type] = NULL; + return gui_list_draw_smart(gui_list); +} + +/* + * Selects an item in the list + * - gui_list : the list structure + * - item_number : the number of the item which will be selected + */ +static void gui_list_select_item(struct gui_list * gui_list, int item_number) +{ + if( item_number > gui_list->nb_items-1 || item_number < 0 ) + return; + gui_list->selected_item = item_number; + gui_list_select_at_offset(gui_list, 0); +} + +/* select an item above the current one */ +static void gui_list_select_above(struct gui_list * gui_list, + int items, int nb_lines) +{ + gui_list->selected_item -= items; + + /* in bottom "3rd" of the screen, so dont move the start item. + by 3rd I mean above SCROLL_LIMIT lines above the end of the screen */ + if (items && gui_list->start_item + SCROLL_LIMIT < gui_list->selected_item) + { + if (gui_list->show_selection_marker == false) + { + gui_list->start_item -= items; + if (gui_list->start_item < 0) + gui_list->start_item = 0; + } + return; + } + if (gui_list->selected_item < 0) + { + if(gui_list->limit_scroll) + { + gui_list->selected_item = 0; + gui_list->start_item = 0; + } + else + { + gui_list->selected_item += gui_list->nb_items; + if (global_settings.scroll_paginated) + { + gui_list->start_item = gui_list->nb_items - nb_lines; + } + } + } + if (gui_list->nb_items > nb_lines) + { + if (global_settings.scroll_paginated) + { + if (gui_list->start_item > gui_list->selected_item) + gui_list->start_item = MAX(0, gui_list->start_item - nb_lines); + } + else + { + int top_of_screen = gui_list->selected_item - SCROLL_LIMIT; + int temp = MIN(top_of_screen, gui_list->nb_items - nb_lines); + gui_list->start_item = MAX(0, temp); + } + } + else gui_list->start_item = 0; + if (gui_list->selected_size > 1) + { + if (gui_list->start_item + nb_lines == gui_list->selected_item) + gui_list->start_item++; + } +} +/* select an item below the current one */ +static void gui_list_select_below(struct gui_list * gui_list, + int items, int nb_lines) +{ + int bottom; + + gui_list->selected_item += items; + bottom = gui_list->nb_items - nb_lines; + + /* always move the screen if selection isnt "visible" */ + if (items && gui_list->show_selection_marker == false) + { + if (bottom < 0) + bottom = 0; + gui_list->start_item = MIN(bottom, gui_list->start_item + + items); + return; + } + /* in top "3rd" of the screen, so dont move the start item */ + if (items && + (gui_list->start_item + nb_lines - SCROLL_LIMIT > gui_list->selected_item) + && (gui_list->selected_item < gui_list->nb_items)) + { + if (gui_list->show_selection_marker == false) + { + if (bottom < 0) + bottom = 0; + gui_list->start_item = MIN(bottom, + gui_list->start_item + items); + } + return; + } + + if (gui_list->selected_item >= gui_list->nb_items) + { + if(gui_list->limit_scroll) + { + gui_list->selected_item = gui_list->nb_items-gui_list->selected_size; + gui_list->start_item = MAX(0,gui_list->nb_items - nb_lines); + } + else + { + gui_list->selected_item = 0; + gui_list->start_item = 0; + } + return; + } + + if (gui_list->nb_items > nb_lines) + { + if (global_settings.scroll_paginated) + { + if (gui_list->start_item + nb_lines <= gui_list->selected_item) + gui_list->start_item = MIN(bottom, gui_list->selected_item); + } + else + { + int top_of_screen = gui_list->selected_item + SCROLL_LIMIT - nb_lines; + int temp = MAX(0, top_of_screen); + gui_list->start_item = MIN(bottom, temp); + } + } + else gui_list->start_item = 0; +} + +static void gui_list_select_at_offset(struct gui_list * gui_list, int offset) +{ + /* do this here instead of in both select_above and select_below */ + int nb_lines = gui_list->display->nb_lines; + if (SHOW_LIST_TITLE) + nb_lines--; + + if (gui_list->selected_size > 1) + { + offset *= gui_list->selected_size; + /* always select the first item of multi-line lists */ + offset -= offset%gui_list->selected_size; + } + if (offset == 0 && global_settings.scroll_paginated && + (gui_list->nb_items > nb_lines)) + { + int bottom = gui_list->nb_items - nb_lines; + gui_list->start_item = MIN(gui_list->selected_item, bottom); + } + else if (offset < 0) + gui_list_select_above(gui_list, -offset, nb_lines); + else + gui_list_select_below(gui_list, offset, nb_lines); +} + +/* + * Adds an item to the list (the callback will be asked for one more item) + * - gui_list : the list structure + */ +static void gui_list_add_item(struct gui_list * gui_list) +{ + gui_list->nb_items++; + /* if only one item in the list, select it */ + if(gui_list->nb_items == 1) + gui_list->selected_item = 0; +} + +/* + * Removes an item to the list (the callback will be asked for one less item) + * - gui_list : the list structure + */ +static void gui_list_del_item(struct gui_list * gui_list) +{ + if(gui_list->nb_items > 0) + { + gui_textarea_update_nblines(gui_list->display); + int nb_lines = gui_list->display->nb_lines; + + int dist_selected_from_end = gui_list->nb_items + - gui_list->selected_item - 1; + int dist_start_from_end = gui_list->nb_items + - gui_list->start_item - 1; + if(dist_selected_from_end == 0) + { + /* Oops we are removing the selected item, + select the previous one */ + gui_list->selected_item--; + } + gui_list->nb_items--; + + /* scroll the list if needed */ + if( (dist_start_from_end < nb_lines) && (gui_list->start_item != 0) ) + gui_list->start_item--; + } +} + +#ifdef HAVE_LCD_BITMAP + +/* + * Makes all the item in the list scroll by one step to the right. + * Should stop increasing the value when reaching the widest item value + * in the list. + */ +static void gui_list_scroll_right(struct gui_list * gui_list) +{ + /* FIXME: This is a fake right boundry limiter. there should be some + * callback function to find the longest item on the list in pixels, + * to stop the list from scrolling past that point */ + gui_list->offset_position+=offset_step; + if (gui_list->offset_position > 1000) + gui_list->offset_position = 1000; +} + +/* + * Makes all the item in the list scroll by one step to the left. + * stops at starting position. + */ +static void gui_list_scroll_left(struct gui_list * gui_list) +{ + gui_list->offset_position-=offset_step; + if (gui_list->offset_position < 0) + gui_list->offset_position = 0; +} +void gui_list_screen_scroll_step(int ofs) +{ + offset_step = ofs; +} + +void gui_list_screen_scroll_out_of_view(bool enable) +{ + if (enable) + offset_out_of_view = true; + else + offset_out_of_view = false; +} +#endif /* HAVE_LCD_BITMAP */ + +/* + * Set the title and title icon of the list. Setting title to NULL disables + * both the title and icon. Use NOICON if there is no icon. + */ +static void gui_list_set_title(struct gui_list * gui_list, + char * title, enum themable_icons icon) +{ + gui_list->title = title; + gui_list->title_icon = icon; + if (title) { +#ifdef HAVE_LCD_BITMAP + gui_list->display->getstringsize(title, &gui_list->title_width, NULL); +#else + gui_list->title_width = strlen(title); +#endif + } else { + gui_list->title_width = 0; + } +} + +/* + * Synchronized lists stuffs + */ +void gui_synclist_init( + struct gui_synclist * lists, + list_get_name callback_get_item_name, + void * data, + bool scroll_all, + int selected_size + ) +{ + int i; + FOR_NB_SCREENS(i) + { + gui_list_init(&(lists->gui_list[i]), + callback_get_item_name, + data, scroll_all, selected_size); + gui_list_set_display(&(lists->gui_list[i]), &(screens[i])); + } +} + +void gui_synclist_set_nb_items(struct gui_synclist * lists, int nb_items) +{ + int i; + FOR_NB_SCREENS(i) + { + gui_list_set_nb_items(&(lists->gui_list[i]), nb_items); +#ifdef HAVE_LCD_BITMAP + lists->gui_list[i].offset_position = 0; +#endif + } +} +int gui_synclist_get_nb_items(struct gui_synclist * lists) +{ + return gui_list_get_nb_items(&((lists)->gui_list[0])); +} +int gui_synclist_get_sel_pos(struct gui_synclist * lists) +{ + return gui_list_get_sel_pos(&((lists)->gui_list[0])); +} +void gui_synclist_set_icon_callback(struct gui_synclist * lists, + list_get_icon icon_callback) +{ + int i; + FOR_NB_SCREENS(i) + { + gui_list_set_icon_callback(&(lists->gui_list[i]), icon_callback); + } +} + +void gui_synclist_draw(struct gui_synclist * lists) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_draw(&(lists->gui_list[i])); +} + +void gui_synclist_select_item(struct gui_synclist * lists, int item_number) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_select_item(&(lists->gui_list[i]), item_number); +} + +static void gui_synclist_select_next_page(struct gui_synclist * lists, + enum screen_type screen) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_select_at_offset(&(lists->gui_list[i]), + screens[screen].nb_lines); +} + +static void gui_synclist_select_previous_page(struct gui_synclist * lists, + enum screen_type screen) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_select_at_offset(&(lists->gui_list[i]), + -screens[screen].nb_lines); +} + +void gui_synclist_add_item(struct gui_synclist * lists) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_add_item(&(lists->gui_list[i])); +} + +void gui_synclist_del_item(struct gui_synclist * lists) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_del_item(&(lists->gui_list[i])); +} + +void gui_synclist_limit_scroll(struct gui_synclist * lists, bool scroll) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_limit_scroll(&(lists->gui_list[i]), scroll); +} + +void gui_synclist_set_title(struct gui_synclist * lists, + char * title, enum themable_icons icon) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_set_title(&(lists->gui_list[i]), title, icon); +} + +void gui_synclist_flash(struct gui_synclist * lists) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_flash(&(lists->gui_list[i])); +} + +#ifdef HAVE_LCD_BITMAP +static void gui_synclist_scroll_right(struct gui_synclist * lists) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_scroll_right(&(lists->gui_list[i])); +} + +static void gui_synclist_scroll_left(struct gui_synclist * lists) +{ + int i; + FOR_NB_SCREENS(i) + gui_list_scroll_left(&(lists->gui_list[i])); +} +#endif /* HAVE_LCD_BITMAP */ + +unsigned gui_synclist_do_button(struct gui_synclist * lists, + unsigned button,enum list_wrap wrap) +{ +#ifdef HAVE_LCD_BITMAP + static bool scrolling_left = false; +#endif + static int next_item_modifier = 1; + static int last_accel_tick = 0; + int i; + + if (global_settings.list_accel_start_delay) + { + int start_delay = global_settings.list_accel_start_delay * (HZ/2); + int accel_wait = global_settings.list_accel_wait * HZ/2; + + if (get_action_statuscode(NULL)&ACTION_REPEAT) + { + if (!last_accel_tick) + last_accel_tick = current_tick + start_delay; + else if (current_tick >= + last_accel_tick + accel_wait) + { + last_accel_tick = current_tick; + next_item_modifier++; + } + } + else if (last_accel_tick) + { + next_item_modifier = 1; + last_accel_tick = 0; + } + } + + switch (wrap) + { + case LIST_WRAP_ON: + gui_synclist_limit_scroll(lists, false); + break; + case LIST_WRAP_OFF: + gui_synclist_limit_scroll(lists, true); + break; + case LIST_WRAP_UNLESS_HELD: + if (button == ACTION_STD_PREVREPEAT || + button == ACTION_STD_NEXTREPEAT || + button == ACTION_LISTTREE_PGUP || + button == ACTION_LISTTREE_PGDOWN) + gui_synclist_limit_scroll(lists, true); + else gui_synclist_limit_scroll(lists, false); + break; + }; + + switch(button) + { +#ifdef HAVE_VOLUME_IN_LIST + case ACTION_LIST_VOLUP: + global_settings.volume += 2; + /* up two because the falthrough brings it down one */ + case ACTION_LIST_VOLDOWN: + global_settings.volume--; + setvol(); + return button; +#endif + case ACTION_STD_PREV: + case ACTION_STD_PREVREPEAT: + FOR_NB_SCREENS(i) + gui_list_select_at_offset(&(lists->gui_list[i]), -next_item_modifier); + if (queue_count(&button_queue) < FRAMEDROP_TRIGGER) + gui_synclist_draw(lists); + yield(); + return ACTION_STD_PREV; + + case ACTION_STD_NEXT: + case ACTION_STD_NEXTREPEAT: + FOR_NB_SCREENS(i) + gui_list_select_at_offset(&(lists->gui_list[i]), next_item_modifier); + if (queue_count(&button_queue) < FRAMEDROP_TRIGGER) + gui_synclist_draw(lists); + yield(); + return ACTION_STD_NEXT; + +#ifdef HAVE_LCD_BITMAP + case ACTION_TREE_ROOT_INIT: + /* After this button press ACTION_TREE_PGLEFT is allowed + to skip to root. ACTION_TREE_ROOT_INIT must be defined in the + keymaps as a repeated button press (the same as the repeated + ACTION_TREE_PGLEFT) with the pre condition being the non-repeated + button press */ + if (lists->gui_list[0].offset_position == 0) + { + scrolling_left = false; + return ACTION_STD_CANCEL; + } + case ACTION_TREE_PGRIGHT: + gui_synclist_scroll_right(lists); + gui_synclist_draw(lists); + return ACTION_TREE_PGRIGHT; + case ACTION_TREE_PGLEFT: + if(!scrolling_left && (lists->gui_list[0].offset_position == 0)) + return ACTION_STD_CANCEL; + gui_synclist_scroll_left(lists); + gui_synclist_draw(lists); + scrolling_left = true; /* stop ACTION_TREE_PAGE_LEFT + skipping to root */ + return ACTION_TREE_PGLEFT; +#endif + +/* for pgup / pgdown, we are obliged to have a different behaviour depending + * on the screen for which the user pressed the key since for example, remote + * and main screen doesn't have the same number of lines */ + case ACTION_LISTTREE_PGUP: + { + int screen = +#ifdef HAVE_REMOTE_LCD + get_action_statuscode(NULL)&ACTION_REMOTE ? + SCREEN_REMOTE : +#endif + SCREEN_MAIN; + gui_synclist_select_previous_page(lists, screen); + gui_synclist_draw(lists); + yield(); + } + return ACTION_STD_NEXT; + + case ACTION_LISTTREE_PGDOWN: + { + int screen = +#ifdef HAVE_REMOTE_LCD + get_action_statuscode(NULL)&ACTION_REMOTE ? + SCREEN_REMOTE : +#endif + SCREEN_MAIN; + gui_synclist_select_next_page(lists, screen); + gui_synclist_draw(lists); + yield(); + } + return ACTION_STD_PREV; + } + return 0; +} diff -U 3 -H -d -r -N rockbox_svn.orig/apps/gui/list.h rockbox_svn/apps/gui/list.h --- rockbox_svn.orig/apps/gui/list.h 2007-07-03 11:56:21.593750000 -0500 +++ rockbox_svn/apps/gui/list.h 2007-07-15 20:31:37.341275000 -0500 @@ -116,7 +116,6 @@ list_get_color *callback_get_item_color; #endif }; - /* * Sets the numbers of items the list can currently display * note that the list's context like the currently pointed item is resetted @@ -177,6 +176,23 @@ */ #define gui_list_limit_scroll(gui_list, scroll) \ (gui_list)->limit_scroll=scroll +struct gui_synclist * lists; +extern void gui_list_select_below(struct gui_list * gui_list, int items, int nb_lines); +extern void gui_list_select_above(struct gui_list * gui_list, int items, int nb_lines); +extern void gui_synclist_select_next_page(struct gui_synclist * lists, enum screen_type screen); +extern void gui_synclist_select_previous_page(struct gui_synclist * lists, enum screen_type screen); + + /* + * Advance/retreat in the list by n percent of the total list elements, + * by at least one line if percent_lines != 0 + * - gui_list : the list structure + * - percent_lines : the percent of the total number of lines to try to move the cursor + * postive adavnces forward, negative retreats back, 0 has no effect + */ +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +extern void gui_list_select_relative_percent( struct gui_list * gui_list, + int percent_lines ); +#endif /* * This part handles as many lists as there are connected screens diff -U 3 -H -d -r -N rockbox_svn.orig/apps/gui/list.h.orig rockbox_svn/apps/gui/list.h.orig --- rockbox_svn.orig/apps/gui/list.h.orig 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/gui/list.h.orig 2007-07-03 11:56:21.593750000 -0500 @@ -0,0 +1,233 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: list.h 13656 2007-06-17 21:16:34Z lostlogic $ + * + * Copyright (C) 2005 by Kevin Ferrare + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef _GUI_LIST_H_ +#define _GUI_LIST_H_ + +#include "config.h" +#include "icon.h" +#include "screen_access.h" + +#define SCROLLBAR_WIDTH 6 + +enum list_wrap { + LIST_WRAP_ON = 0, + LIST_WRAP_OFF, + LIST_WRAP_UNLESS_HELD, +}; + +/* + * The gui_list is based on callback functions, if you want the list + * to display something you have to provide it a function that + * tells it what to display. + * There are three callback function : + * one to get the text, one to get the icon and one to get the color + */ + +/* + * Icon callback + * - selected_item : an integer that tells the number of the item to display + * - data : a void pointer to the data you gave to the list when you + * initialized it + * Returns a pointer to the icon, the value inside it is used to display the + * icon after the function returns. + * Note : we use the ICON type because the real type depends of the plateform + */ +typedef enum themable_icons list_get_icon(int selected_item, void * data); +/* + * Text callback + * - selected_item : an integer that tells the number of the item to display + * - data : a void pointer to the data you gave to the list when you + * initialized it + * - buffer : a buffer to put the resulting text on it + * (The content of the buffer may not be used by the list, we use + * the return value of the function in all cases to avoid filling + * a buffer when it's not necessary) + * Returns a pointer to a string that contains the text to display + */ +typedef char * list_get_name(int selected_item, void * data, char * buffer); +#ifdef HAVE_LCD_COLOR +/* + * Color callback + * - selected_item : an integer that tells the number of the item to display + * - data : a void pointer to the data you gave to the list when you + * initialized it + * Returns an int with the lower 16 bits representing the color to display the + * selected item, negative value for default coloring. + */ +typedef int list_get_color(int selected_item, void * data); +#endif + +struct gui_list +{ + /* defines wether the list should stop when reaching the top/bottom + * or should continue (by going to bottom/top) */ + bool limit_scroll; + /* wether the text of the whole items of the list have to be + * scrolled or only for the selected item */ + bool scroll_all; + bool cursor_flash_state; + + int nb_items; + int selected_item; + int start_item; /* the item that is displayed at the top of the screen */ + /* the number of lines that are selected at the same time */ + int selected_size; + /* These are used to calculate how much of the screen content we need + to redraw. */ + int last_displayed_selected_item; + int last_displayed_start_item; +#ifdef HAVE_LCD_BITMAP + int offset_position; /* the list's screen scroll placement in pixels */ +#endif + /* Cache the width of the title string in pixels/characters */ + int title_width; + + list_get_icon *callback_get_item_icon; + list_get_name *callback_get_item_name; + + struct screen * display; + /* The data that will be passed to the callback function YOU implement */ + void * data; + /* The optional title, set to NULL for none */ + char * title; + /* Optional title icon */ + enum themable_icons title_icon; + bool show_selection_marker; /* set to true by default */ + +#ifdef HAVE_LCD_COLOR + int title_color; + list_get_color *callback_get_item_color; +#endif +}; + +/* + * Sets the numbers of items the list can currently display + * note that the list's context like the currently pointed item is resetted + * - gui_list : the list structure + * - nb_items : the numbers of items you want + */ +#define gui_list_set_nb_items(gui_list, nb) \ + (gui_list)->nb_items = nb + +/* + * Returns the numbers of items currently in the list + * - gui_list : the list structure + */ +#define gui_list_get_nb_items(gui_list) \ + (gui_list)->nb_items + +/* + * Sets the icon callback function + * - gui_list : the list structure + * - _callback : the callback function + */ +#define gui_list_set_icon_callback(gui_list, _callback) \ + (gui_list)->callback_get_item_icon=_callback + +#ifdef HAVE_LCD_COLOR +/* + * Sets the color callback function + * - gui_list : the list structure + * - _callback : the callback function + */ +#define gui_list_set_color_callback(gui_list, _callback) \ + (gui_list)->callback_get_item_color=_callback +#endif + +/* + * Gives the position of the selected item + * - gui_list : the list structure + * Returns the position + */ +#define gui_list_get_sel_pos(gui_list) \ + (gui_list)->selected_item + + +#ifdef HAVE_LCD_BITMAP +/* parse global setting to static int */ +extern void gui_list_screen_scroll_step(int ofs); + +/* parse global setting to static bool */ +extern void gui_list_screen_scroll_out_of_view(bool enable); +#endif /* HAVE_LCD_BITMAP */ +/* + * Tells the list wether it should stop when reaching the top/bottom + * or should continue (by going to bottom/top) + * - gui_list : the list structure + * - scroll : + * - true : stops when reaching top/bottom + * - false : continues to go to bottom/top when reaching top/bottom + */ +#define gui_list_limit_scroll(gui_list, scroll) \ + (gui_list)->limit_scroll=scroll + +/* + * This part handles as many lists as there are connected screens + * (the api is similar to the ones above) + * The lists on the screens are synchronized ; + * theirs items and selected items are the same, but of course, + * they can be displayed on screens with different sizes + * The final aim is to let the programmer handle many lists in one + * function call and make its code independant from the number of screens + */ +struct gui_synclist +{ + struct gui_list gui_list[NB_SCREENS]; +}; + +extern void gui_synclist_init( + struct gui_synclist * lists, + list_get_name callback_get_item_name, + void * data, + bool scroll_all, + int selected_size + ); +extern void gui_synclist_set_nb_items(struct gui_synclist * lists, int nb_items); +extern void gui_synclist_set_icon_callback(struct gui_synclist * lists, list_get_icon icon_callback); +extern int gui_synclist_get_nb_items(struct gui_synclist * lists); + +extern int gui_synclist_get_sel_pos(struct gui_synclist * lists); + +extern void gui_synclist_draw(struct gui_synclist * lists); +extern void gui_synclist_select_item(struct gui_synclist * lists, + int item_number); +extern void gui_synclist_add_item(struct gui_synclist * lists); +extern void gui_synclist_del_item(struct gui_synclist * lists); +extern void gui_synclist_limit_scroll(struct gui_synclist * lists, bool scroll); +extern void gui_synclist_flash(struct gui_synclist * lists); +extern void gui_synclist_set_title(struct gui_synclist * lists, char * title, + int icon); +extern void gui_synclist_hide_selection_marker(struct gui_synclist *lists, + bool hide); +/* + * Do the action implied by the given button, + * returns the action taken if any, 0 else + * - lists : the synchronized lists + * - button : the keycode of a pressed button + * - specifies weather to allow the list to wrap or not, values at top of page + * returned value : + * - ACTION_STD_NEXT when moving forward (next item or pgup) + * - ACTION_STD_PREV when moving backward (previous item or pgdown) + */ +extern unsigned gui_synclist_do_button(struct gui_synclist * lists, + unsigned button, + enum list_wrap); + +#endif /* _GUI_LIST_H_ */ diff -U 3 -H -d -r -N rockbox_svn.orig/apps/ipod_scroll_wheel_gui.c rockbox_svn/apps/ipod_scroll_wheel_gui.c --- rockbox_svn.orig/apps/ipod_scroll_wheel_gui.c 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/ipod_scroll_wheel_gui.c 2007-07-15 22:30:43.731900000 -0500 @@ -0,0 +1,176 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) TP Diffenbach (2006) + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" + +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + +#include "button.h" +#include "settings.h" +#include "logf.h" +#include "list.h" +#include "screen_access.h" +#include "statusbar.h" +#include "ipod_scroll_wheel_gui.h" + + struct scroll_accel_jump { + enum { NOACCEL, PAGE, PERCENT } jump_type; + unsigned int amount; + unsigned int lines; +}; + +struct scroll_accel_jump scroll_accel_jumps[] = { { NOACCEL, 0, 0 }, { PAGE, 1, 0 }, { PERCENT, 5, 0 } , { PERCENT, 10, 0 } }; + +static void calculate_jump_lines( struct scroll_accel_jump* j, unsigned int list_items, unsigned int screen_lines ) { + j->lines = j->jump_type == PERCENT + ? ( j->amount * list_items ) / 100 + : j->amount * screen_lines; +} + +static inline unsigned int list_items( struct gui_list* list ) { + return list->nb_items; +} + +static inline unsigned int screen_lines( struct gui_list* list ) { + return list->display->nb_lines; +} + +static struct scroll_accel_jump* find_accel_for_list( + struct gui_list* list, struct scroll_accel_jump* jump, unsigned int raw_accel ) { + unsigned int l_items = list_items( list ); + unsigned int s_lines = screen_lines( list ); + + /* never accel in a list <= page long */ + if( raw_accel == 0 || l_items <= s_lines ) { + return jump; + } + + /* otherwise, find the highest possible accel */ + calculate_jump_lines( jump + raw_accel, l_items, s_lines ); + + while( raw_accel > 1 ) { + calculate_jump_lines( jump + raw_accel - 1, l_items, s_lines ); + if( jump[ raw_accel ].lines > jump[ raw_accel - 1 ].lines ) break; + --raw_accel; + } + return jump + raw_accel; +} + + +/* public functions declared in header */ +/* these next two really belong in list.c */ +void gui_synclist_select_forward_n_lines( struct gui_synclist* lists, unsigned int lines ) +{ + int i; + int screen = +#ifdef HAVE_REMOTE_LCD + get_action_statuscode(NULL)&ACTION_REMOTE ? + SCREEN_REMOTE : +#endif + SCREEN_MAIN; + FOR_NB_SCREENS(i) + gui_synclist_select_next_page(lists, screen ); +} + +void gui_synclist_select_back_n_lines( struct gui_synclist* lists, unsigned int lines ) +{ + int i; + int screen = +#ifdef HAVE_REMOTE_LCD + get_action_statuscode(NULL)&ACTION_REMOTE ? + SCREEN_REMOTE : +#endif + SCREEN_MAIN; + FOR_NB_SCREENS(i) + gui_synclist_select_previous_page(lists, screen); +} + + +/* this goes away in production, I think */ +static int get_ipod_scroll_wheel_acceration_and_cps( int* speed ) { +#ifdef SIMULATOR + int cps = 4; +#else + int cps = get_ipod_scroll_wheel_clicks_per_second(); +#endif + *speed = cps; + unsigned int acps = cps < 0 ? -cps : cps; + int a = acps < global_settings.ipod_scroll_wheel_acceleration_fast + ? 0 + : ( acps < global_settings.ipod_scroll_wheel_acceleration_faster + ? 1 + : ( acps < global_settings.ipod_scroll_wheel_acceleration_fastest + ? 2 + : 3 ) ); +#ifdef ROCKBOX_HAS_LOGF + logf( "g:%d,%d", cps, a ); +#endif + return a; +} + + +/* dispatch the correct synclist function depending on scroll acceleration factor */ +void gui_synclist_handle_accel( struct gui_synclist * lists, enum screen_type screen, enum list_dir dir) +{ + int cps; + struct scroll_accel_jump* jump = find_accel_for_list( + &(lists->gui_list[ screen ] ), scroll_accel_jumps, get_ipod_scroll_wheel_acceration_and_cps( &cps ) ); + + int nb_lines = lists->gui_list[screen].display->nb_lines; + + int offset = lists->gui_list[screen].selected_size; + + if( jump->jump_type == NOACCEL ) { + if( dir == FORWARD ) + gui_list_select_below(&(lists->gui_list[screen]), offset, nb_lines); + else + gui_list_select_above(&(lists->gui_list[screen]), offset, nb_lines); + } else { + if( dir == FORWARD ) + gui_synclist_select_forward_n_lines( lists, jump->lines ); + else + gui_synclist_select_back_n_lines( lists, jump->lines ); + } + +} + + unsigned int get_ipod_scroll_wheel_acceration( void ) { +#ifdef SIMULATOR + int cps = 4; +#else + int cps = get_ipod_scroll_wheel_clicks_per_second(); +#endif + + unsigned int acps = cps < 0 ? -cps : cps; + int a = acps < global_settings.ipod_scroll_wheel_acceleration_fast + ? 0 + : ( acps < global_settings.ipod_scroll_wheel_acceleration_faster + ? 1 + : ( acps < global_settings.ipod_scroll_wheel_acceleration_fastest + ? 2 + : 3 ) ); + + return a; + } + +unsigned int get_and_display_ipod_scroll_wheel_acceration( void ) { + int cps; + int a = get_ipod_scroll_wheel_acceration_and_cps( &cps ); + return a; +} +#endif diff -U 3 -H -d -r -N rockbox_svn.orig/apps/ipod_scroll_wheel_gui.h rockbox_svn/apps/ipod_scroll_wheel_gui.h --- rockbox_svn.orig/apps/ipod_scroll_wheel_gui.h 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/ipod_scroll_wheel_gui.h 2007-07-15 16:11:13.553751200 -0500 @@ -0,0 +1,45 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * + * Copyright (C) TP Diffenbach (2006) + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#ifndef _IPOD_SCROLL_WHEEL_GUI_H_ +#define _IPOD_SCROLL_WHEEL_GUI_H_ +#include "config.h" + +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +#include "list.h" +#include "screen_access.h" + +extern void gui_synclist_select_forward_n_lines(struct gui_synclist* lists, unsigned int lines ); +extern void gui_synclist_select_back_n_lines(struct gui_synclist* lists, unsigned int lines ); + +enum list_dir { BACKWARD, FORWARD }; +/* dispatch the correct synclist function depending on scroll acceleration factor + * may adjust the actual accelration depending on list length + * displays adjusted acceleration to the statusbar (if the statusbar is on, clients don't need to check) +*/ +extern void gui_synclist_handle_accel( struct gui_synclist* lists, enum screen_type screen, enum list_dir dir); + +/* returns the accelreation */ +#ifndef SIMULATOR +extern unsigned int get_ipod_scroll_wheel_acceration( void ); +#endif + +/* returns the accelreation and displays it to the statusbar (if the statusbar is on, clients don't need to check) */ +extern unsigned int get_and_display_ipod_scroll_wheel_acceration( void ); + +#endif +#endif diff -U 3 -H -d -r -N rockbox_svn.orig/apps/lang/english.lang rockbox_svn/apps/lang/english.lang --- rockbox_svn.orig/apps/lang/english.lang 2007-07-10 20:29:03.906250000 -0500 +++ rockbox_svn/apps/lang/english.lang 2007-07-15 16:11:13.585001400 -0500 @@ -11048,3 +11048,59 @@ *: "Can't write to recording directory" + + id: LANG_IPOD_SCROLL_WHEEL_SPEED + desc: "Ipod Scroll Wheel Acceleration By Speed" Submenu in "System" menu + user: + + *: "Ipod Scroll Wheel Acceleration" + + + *: "Ipod Scroll Wheel Acceleration" + + + *: "Ipod Scroll Wheel Acceleration" + + + + id: LANG_IPOD_SCROLL_WHEEL_FAST + desc: "Ipod Scroll Wheel By Speed Fast Threshold" Submenu in "Ipod Scroll Wheel Acceleration By Speed" menu + user: + + *: "Minimum speed for 'fast' acceleration" + + + *: "Minimum speed for 'fast' acceleration" + + + *: "Minimum speed for 'fast' acceleration" + + + + id: LANG_IPOD_SCROLL_WHEEL_FASTER + desc: "Ipod Scroll Wheel By Speed Faster Threshold" Submenu in "Ipod Scroll Wheel Acceleration By Speed" menu + user: + + *: "Minimum speed for 'faster' acceleration" + + + *: "Minimum speed for 'faster' acceleration" + + + *: "Minimum speed for 'faster' acceleration" + + + + id: LANG_IPOD_SCROLL_WHEEL_FASTEST + desc: "Ipod Scroll Wheel By Speed Fastest Threshold" Submenu in "Ipod Scroll Wheel Acceleration By Speed" menu + user: + + *: "Minimum speed for 'fastest' acceleration" + + + *: "Minimum speed for 'fastest' acceleration" + + + *: "Minimum speed for 'fastest' acceleration" + + diff -U 3 -H -d -r -N rockbox_svn.orig/apps/lang/english.lang.orig rockbox_svn/apps/lang/english.lang.orig --- rockbox_svn.orig/apps/lang/english.lang.orig 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/lang/english.lang.orig 2007-07-10 20:29:03.906250000 -0500 @@ -0,0 +1,11050 @@ +# __________ __ ___. +# Open \______ \ ____ ____ | | _\_ |__ _______ ___ +# Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +# Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +# Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +# \/ \/ \/ \/ \/ +# $Id: english.lang 13838 2007-07-10 07:41:37Z jdgordon $ +# +# This is the master of the language files. This is the original, the one with +# all the existing strings Rockbox features. +# +# The target names used for target-specific strings are set in the ARCHOS +# variable in the root Makefile +# +# *WARNING* +# +# If you want to add a new string, add it to the end of this file! +# If you want to remove a string, just blank it, don't actually remove it! +# +# If you re-order things or remove entries, you must bump the binary language +# file version number in both the 'genlang' tool and the language loader code. +# +# The "voice' entry contains how we want the speech UI to pronounce the phrase. +# +# Since this file is both the master for the language system, as well as the +# source for generating english strings, make sure that all strings +# are *identical* to the strings within the english.lang file. The +# strings are the ones that'll be exposed and used by other languages +# when doing updates etc, while the ones are used when this file is +# used to simply get the full set of english strings for a particular target. +# + + id: LANG_SET_BOOL_YES + desc: bool true representation + user: + + *: "Yes" + + + *: "Yes" + + + *: "Yes" + + + + id: LANG_SET_BOOL_NO + desc: bool false representation + user: + + *: "No" + + + *: "No" + + + *: "No" + + + + id: LANG_ON + desc: Used in a lot of places + user: + + *: "On" + + + *: "On" + + + *: "On" + + + + id: LANG_OFF + desc: Used in a lot of places + user: + + *: "Off" + + + *: "Off" + + + *: "Off" + + + + id: LANG_RESUME_SETTING_ASK + desc: in settings_menu + user: + + *: "Ask" + + + *: "Ask" + + + *: "Ask" + + + + id: LANG_ALWAYS + desc: used in various places + user: + + *: "Always" + + + *: "Always" + + + *: "Always" + + + + id: LANG_WAIT + desc: general please wait splash + user: + + *: "Loading..." + + + *: "Loading..." + + + *: "" + + + + id: LANG_CONFIRM_SHUTDOWN + desc: in shutdown screen + user: + + *: "Press OFF to shut down" + + + *: "Press OFF to shut down" + + + *: "" + + + + id: LANG_SHUTTINGDOWN + desc: in main menu + user: + + *: "Shutting down..." + + + *: "Shutting down..." + + + *: "" + + + + id: LANG_RESTARTING_PLAYBACK + desc: splash screen displayed when pcm buffer size is changed + user: + + *: "Restarting playback..." + + + *: "Restarting playback..." + + + *: "" + + + + id: LANG_REMOVE_MMC + desc: before acknowledging usb in case an MMC is inserted (Ondio) + user: + + *: "Please remove inserted MMC" + + + *: "Please remove inserted MMC" + + + *: "Please remove multimedia card" + + + + id: LANG_MENU_SETTING_CANCEL + desc: Visual confirmation of canceling a changed setting + user: + + *: "Canceled" + + + *: "Cancelled" + + + *: "" + + + + id: LANG_FAILED + desc: Something failed. To be appended after actions + user: + + *: "Failed" + + + *: "Failed" + + + *: "" + + + + id: LANG_BOOKMARK_MENU_RECENT_BOOKMARKS + desc: in the main menu + user: + + *: "Recent Bookmarks" + + + *: "Recent Bookmarks" + + + *: "Recent Bookmarks" + + + + id: LANG_SOUND_SETTINGS + desc: in the main menu + user: + + *: "Sound Settings" + + + *: "Sound Settings" + + + *: "Sound Settings" + + + + id: LANG_GENERAL_SETTINGS + desc: in the main menu + user: + + *: "General Settings" + + + *: "General Settings" + + + *: "General Settings" + + + + id: LANG_MANAGE_MENU + desc: in the main menu + user: + + *: "Manage Settings" + + + *: "Manage Settings" + + + *: "Manage Settings" + + + + id: LANG_CUSTOM_THEME + desc: in the main menu + user: + + *: "Browse Themes" + + + *: "Browse Themes" + + + *: "Browse Themes" + + + + id: LANG_FM_RADIO + desc: in the main menu + user: + + *: "FM Radio" + + + *: "FM Radio" + + + *: "FM Radio" + + + + id: LANG_RECORDING + desc: in the main menu + user: + + *: "Recording" + + + *: "Recording" + + + *: "Recording" + + + + id: LANG_PLAYLIST_MENU + desc: in the main menu + user: + + *: "Playlist" + + + *: "Playlist" + + + *: "Playlist" + + + + id: LANG_PLUGINS + desc: in the main menu + user: + + *: "Plugins" + + + *: "Plugins" + + + *: "Plugins" + + + + id: LANG_INFO + desc: in the main menu + user: + + *: "System" + + + *: "System" + + + *: "System" + + + + id: LANG_SHUTDOWN + desc: in main menu + user: + + *: "Shut down" + + + *: "Shut down" + + + *: "Shut down" + + + + id: LANG_VOLUME + desc: in sound_settings + user: + + *: "Volume" + + + *: "Volume" + + + *: "Volume" + + + + id: LANG_BASS + desc: in sound_settings + user: + + *: "Bass" + + + *: "Bass" + + + *: "Bass" + + + + id: LANG_TREBLE + desc: in sound_settings + user: + + *: "Treble" + + + *: "Treble" + + + *: "Treble" + + + + id: LANG_BALANCE + desc: in sound_settings + user: + + *: "Balance" + + + *: "Balance" + + + *: "Balance" + + + + id: LANG_CHANNEL_MENU + desc: in sound_settings + user: + + *: "Channels" + + + *: "Channels" + + + *: "Channels" + + + + id: LANG_CHANNEL + desc: in sound_settings + user: + + *: "Channel Configuration" + + + *: "Channel Configuration" + + + *: "Channel Configuration" + + + + id: LANG_CHANNEL_STEREO + desc: in sound_settings + user: + + *: "Stereo" + + + *: "Stereo" + + + *: "Stereo" + + + + id: LANG_CHANNEL_MONO + desc: in sound_settings + user: + + *: "Mono" + + + *: "Mono" + + + *: "Mono" + + + + id: LANG_CHANNEL_CUSTOM + desc: in sound_settings + user: + + *: "Custom" + + + *: "Custom" + + + *: "Custom" + + + + id: LANG_CHANNEL_LEFT + desc: in sound_settings + user: + + *: "Mono Left" + + + *: "Mono Left" + + + *: "Mono Left" + + + + id: LANG_CHANNEL_RIGHT + desc: in sound_settings + user: + + *: "Mono Right" + + + *: "Mono Right" + + + *: "Mono Right" + + + + id: LANG_CHANNEL_KARAOKE + desc: in sound_settings + user: + + *: "Karaoke" + + + *: "Karaoke" + + + *: "Karaoke" + + + + id: LANG_STEREO_WIDTH + desc: in sound_settings + user: + + *: "Stereo Width" + + + *: "Stereo Width" + + + *: "Stereo Width" + + + + id: LANG_LOUDNESS + desc: in sound_settings + user: + + *: "Loudness" + + + *: "Loudness" + + + *: "Loudness" + + + + id: LANG_AUTOVOL + desc: in sound_settings + user: + + *: "Auto Volume" + + + *: "Auto Volume" + + + *: "Auto Volume" + + + + id: LANG_DECAY + desc: in sound_settings + user: + + *: "AV Decay Time" + + + *: "AV Decay Time" + + + *: "" + + + + id: LANG_SUPERBASS + desc: in sound settings + user: + + *: "Super Bass" + + + *: "Super Bass" + + + *: "Super Bass" + + + + id: LANG_MDB_ENABLE + desc: in sound settings + user: + + *: "MDB Enable" + + + *: "MDB Enable" + + + *: "MDB Enable" + + + + id: LANG_MDB_STRENGTH + desc: in sound settings + user: + + *: "MDB Strength" + + + *: "MDB Strength" + + + *: "MDB Strength" + + + + id: LANG_MDB_HARMONICS + desc: in sound settings + user: + + *: "MDB Harmonics" + + + *: "MDB Harmonics" + + + *: "MDB Harmonics" + + + + id: LANG_MDB_CENTER + desc: in sound settings + user: + + *: "MDB Center Frequency" + + + *: "MDB Center Frequency" + + + *: "MDB Center Frequency" + + + + id: LANG_MDB_SHAPE + desc: in sound settings + user: + + *: "MDB Shape" + + + *: "MDB Shape" + + + *: "MDB Shape" + + + + id: LANG_CROSSFEED + desc: in sound settings + user: + + *: "Crossfeed" + + + *: "Crossfeed" + + + *: "Crossfeed" + + + + id: LANG_EQUALIZER + desc: in the sound settings menu + user: + + *: "Equalizer" + + + *: "Equalizer" + + + *: "Equalizer" + + + + id: LANG_PLAYBACK + desc: in settings_menu() + user: + + *: "Playback" + + + *: "Playback" + + + *: "Playback" + + + + id: LANG_FILE + desc: in settings_menu() + user: + + *: "File View" + + + *: "File View" + + + *: "File View" + + + + id: LANG_DISPLAY + desc: in settings_menu() + user: + + *: "Display" + + + *: "Display" + + + *: "Display" + + + + id: LANG_SYSTEM + desc: in settings_menu() + user: + + *: "System" + + + *: "System" + + + *: "System" + + + + id: LANG_BOOKMARK_SETTINGS + desc: in general settings + user: + + *: "Bookmarking" + + + *: "Bookmarking" + + + *: "Bookmarking" + + + + id: LANG_LANGUAGE + desc: in settings_menu + user: + + *: "Language" + + + *: "Language" + + + *: "Language" + + + + id: LANG_VOICE + desc: root of voice menu + user: + + *: "Voice" + + + *: "Voice" + + + *: "Voice" + + + + id: LANG_CUSTOM_CFG + desc: in setting_menu() + user: + + *: "Browse .cfg files" + + + *: "Browse .cfg files" + + + *: "Browse configuration files" + + + + id: LANG_FIRMWARE + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_RESET + desc: in system_settings_menu() + user: + + *: "Reset Settings" + + + *: "Reset Settings" + + + *: "Reset Settings" + + + + id: LANG_RESET_ASK_RECORDER + desc: confirm to reset settings + user: + + *: "Are You Sure?" + + + *: "Are You Sure?" + + + *: "" + + + + id: LANG_CONFIRM_WITH_PLAY_RECORDER + desc: Generic recorder string to use to confirm + user: + + *: "PLAY = Yes" + h100,h120,h300: "NAVI = Yes" + ipod*: "SELECT = Yes" + x5: "SELECT = Yes" + h10,h10_5gb: "SELECT = Yes" + gigabeatf: "SELECT = Yes" + e200: "SELECT = Yes" + + + *: "PLAY = Yes" + h100,h120,h300: "NAVI = Yes" + ipod*: "SELECT = Yes" + x5: "SELECT = Yes" + h10,h10_5gb: "SELECT = Yes" + gigabeatf: "SELECT = Yes" + e200: "SELECT = Yes" + + + *: "" + + + + id: LANG_CANCEL_WITH_ANY_RECORDER + desc: Generic recorder string to use to cancel + user: + + *: "Any Other = No" + + + *: "Any Other = No" + + + *: "" + + + + id: LANG_RESET_DONE_SETTING + desc: visual confirmation after settings reset + user: + + *: "Settings" + + + *: "Settings" + + + *: "" + + + + id: LANG_RESET_DONE_CLEAR + desc: visual confirmation after settings reset + user: + + *: "Cleared" + + + *: "Cleared" + + + *: "" + + + + id: LANG_RESET_DONE_CANCEL + desc: Visual confirmation of cancelation + user: + + *: "Canceled" + + + *: "Cancelled" + + + *: "" + + + + id: LANG_SAVE_SETTINGS + desc: in system_settings_menu() + user: + + *: "Write .cfg file" + + + *: "Write .cfg file" + + + *: "Write configuration file" + + + + id: LANG_SETTINGS_SAVE_PLAYER + desc: displayed if save settings has failed + user: + + *: "Save Failed" + + + *: "Save Failed" + + + *: "" + + + + id: LANG_SETTINGS_BATTERY_PLAYER + desc: if save settings has failed + user: + + *: "Partition?" + + + *: "Partition?" + + + *: "" + + + + id: LANG_SETTINGS_SAVE_RECORDER + desc: displayed if save settings has failed + user: + + *: "Save Failed" + + + *: "Save Failed" + + + *: "" + + + + id: LANG_SETTINGS_BATTERY_RECORDER + desc: if save settings has failed + user: + + *: "No partition?" + + + *: "No partition?" + + + *: "" + + + + id: LANG_RECORDING_MENU + desc: in the recording sub menu + user: + + *: "Recording" + + + *: "Recording" + + + *: "Recording" + + + + id: LANG_RECORDING_SETTINGS + desc: in the main menu + user: + + *: "Recording Settings" + + + *: "Recording Settings" + + + *: "Recording Settings" + + + + id: LANG_EQUALIZER_ENABLED + desc: in the equalizer settings menu + user: + + *: "Enable EQ" + + + *: "Enable EQ" + + + *: "Enable equalizer" + + + + id: LANG_EQUALIZER_GRAPHICAL + desc: in the equalizer settings menu + user: + + *: "Graphical EQ" + + + *: "Graphical EQ" + + + *: "Graphical equalizer" + + + + id: LANG_EQUALIZER_PRECUT + desc: in eq settings + user: + + *: "Precut" + + + *: "Precut" + + + *: "Pre-cut" + + + + id: LANG_EQUALIZER_GAIN + desc: in the equalizer settings menu + user: + + *: "Simple EQ Settings" + + + *: "Simple EQ Settings" + + + *: "Simple equalizer settings" + + + + id: LANG_EQUALIZER_ADVANCED + desc: in the equalizer settings menu + user: + + *: "Advanced EQ Settings" + + + *: "Advanced EQ Settings" + + + *: "Advanced equalizer settings" + + + + id: LANG_EQUALIZER_SAVE + desc: in the equalizer settings menu + user: + + *: "Save EQ Preset" + + + *: "Save EQ Preset" + + + *: "Save equalizer preset" + + + + id: LANG_EQUALIZER_BROWSE + desc: in the equalizer settings menu + user: + + *: "Browse EQ Presets" + + + *: "Browse EQ Presets" + + + *: "Browse equalizer presets" + + + + id: LANG_EQUALIZER_EDIT_MODE + desc: in the equalizer settings menu + user: + + *: "Edit mode: %s" + + + *: "Edit mode: %s" + + + *: "" + + + + id: LANG_EQUALIZER_GAIN_ITEM + desc: in the equalizer settings menu + user: + + *: "%d Hz Band Gain" + + + *: "%d Hz Band Gain" + + + *: "" + + + + id: LANG_EQUALIZER_BAND_LOW_SHELF + desc: in the equalizer settings menu + user: + + *: "Low Shelf Filter" + + + *: "Low Shelf Filter" + + + *: "Low shelf filter" + + + + id: LANG_EQUALIZER_BAND_PEAK + desc: in the equalizer settings menu + user: + + *: "Peak Filter %d" + + + *: "Peak Filter %d" + + + *: "Peak filter" + + + + id: LANG_EQUALIZER_BAND_HIGH_SHELF + desc: in the equalizer settings menu + user: + + *: "High Shelf Filter" + + + *: "High Shelf Filter" + + + *: "High shelf filter" + + + + id: LANG_EQUALIZER_BAND_CUTOFF + desc: in the equalizer settings menu + user: + + *: "Cutoff Frequency" + + + *: "Cutoff Frequency" + + + *: "Cutoff Frequency" + + + + id: LANG_EQUALIZER_BAND_CENTER + desc: in the equalizer settings menu + user: + + *: "Center Frequency" + + + *: "Center Frequency" + + + *: "Center frequency" + + + + id: LANG_EQUALIZER_BAND_Q + desc: in the equalizer settings menu + user: + + *: "Q" + + + *: "Q" + + + *: "Q" + + + + id: LANG_EQUALIZER_BAND_GAIN + desc: in the equalizer settings menu + user: + + *: "Gain" + + + *: "Gain" + + + *: "Gain" + + + + id: LANG_CREATE_PLAYLIST + desc: Menu option for creating a playlist + user: + + *: "Create Playlist" + + + *: "Create Playlist" + + + *: "Create Playlist" + + + + id: LANG_VIEW_DYNAMIC_PLAYLIST + desc: in playlist menu. + user: + + *: "View Current Playlist" + + + *: "View Current Playlist" + + + *: "View Current Playlist" + + + + id: LANG_SAVE_DYNAMIC_PLAYLIST + desc: in playlist menu. + user: + + *: "Save Current Playlist" + + + *: "Save Current Playlist" + + + *: "Save Current Playlist" + + + + id: LANG_RECURSE_DIRECTORY + desc: In playlist menu + user: + + *: "Recursively Insert Directories" + + + *: "Recursively Insert Directories" + + + *: "Recursively Insert Directories" + + + + id: LANG_WARN_ERASEDYNPLAYLIST_MENU + desc: in playlist options menu, option to warn when erasing dynamic playlist + user: + + *: "Warn When Erasing Dynamic Playlist" + + + *: "Warn When Erasing Dynamic Playlist" + + + *: "Warn When Erasing Dynamic Playlist" + + + + id: LANG_INFO_MENU + desc: in the info menu + user: + + *: "Rockbox Info" + + + *: "Rockbox Info" + + + *: "Rockbox Info" + + + + id: LANG_VERSION + desc: in the info menu + user: + + *: "Version" + + + *: "Version" + + + *: "Version" + + + + id: LANG_DEBUG + desc: in the info menu + user: + + *: "Debug (Keep Out!)" + + + *: "Debug (Keep Out!)" + + + *: "Debug, keep out!" + + + + id: LANG_USB + desc: in the info menu + user: + + *: "USB (Sim)" + + + *: "USB (Sim)" + + + *: "" + + + + id: LANG_SHUFFLE + desc: in settings_menu + user: + + *: "Shuffle" + + + *: "Shuffle" + + + *: "Shuffle" + + + + id: LANG_REPEAT + desc: in settings_menu + user: + + *: "Repeat" + + + *: "Repeat" + + + *: "Repeat" + + + + id: LANG_REPEAT_ALL + desc: repeat playlist once all songs have completed + user: + + *: "All" + + + *: "All" + + + *: "All" + + + + id: LANG_REPEAT_ONE + desc: repeat one song + user: + + *: "One" + + + *: "One" + + + *: "One" + + + + id: LANG_REPEAT_AB + desc: repeat one song + user: + + *: "A-B" + + + *: "A-B" + + + *: "A-B" + + + + id: LANG_PLAY_SELECTED + desc: in settings_menu + user: + + *: "Play Selected First" + + + *: "Play Selected First" + + + *: "Play Selected File First" + + + + id: LANG_RESUME + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_WIND_MENU + desc: in the playback sub menu + user: + + *: "Fast-Forward/Rewind" + + + *: "Fast-Forward/Rewind" + + + *: "Fast forward and Rewind" + + + + id: LANG_MP3BUFFER_MARGIN + desc: MP3 buffer margin time + user: + + *: "Anti-Skip Buffer" + + + *: "Anti-Skip Buffer" + + + *: "Anti-Skip Buffer" + + + + id: LANG_FADE_ON_STOP + desc: options menu to set fade on stop or pause + user: + + *: "Fade on Stop/Pause" + + + *: "Fade on Stop/Pause" + + + *: "Fade On Stop and Pause" + + + + id: LANG_PARTY_MODE + desc: party mode + user: + + *: "Party Mode" + + + *: "Party Mode" + + + *: "Party Mode" + + + + id: LANG_CROSSFADE + desc: in playback settings + user: + + *: "Crossfade" + + + *: "Crossfade" + + + *: "Crossfade" + + + + id: LANG_REPLAYGAIN + desc: in replaygain + user: + + *: "Replaygain" + + + *: "Replaygain" + + + *: "Replaygain" + + + + id: LANG_BEEP + desc: in playback settings + user: + + *: "Beep Volume" + + + *: "Beep Volume" + + + *: "Beep Volume" + + + + id: LANG_WEAK + desc: in beep volume in playback settings + user: + + *: "Weak" + + + *: "Weak" + + + *: "Weak" + + + + id: LANG_MODERATE + desc: in beep volume in playback settings + user: + + *: "Moderate" + + + *: "Moderate" + + + *: "Moderate" + + + + id: LANG_STRONG + desc: in beep volume in playback settings + user: + + *: "Strong" + + + *: "Strong" + + + *: "Strong" + + + + id: LANG_SPDIF_ENABLE + desc: in playback settings menu. enable/disable the optical out + user: + + *: "Optical Output" + + + *: "Optical Output" + + + *: "Optical Output" + + + + id: LANG_ID3_ORDER + desc: in playback settings screen + user: + + *: "ID3 Tag Priority" + + + *: "ID3 Tag Priority" + + + *: "ID3 Tag Priority" + + + + id: LANG_ID3_V1_FIRST + desc: in playback settings screen + user: + + *: "V1 then V2" + + + *: "V1 then V2" + + + *: "Version 1 then version 2" + + + + id: LANG_ID3_V2_FIRST + desc: in playback settings screen + user: + + *: "V2 then V1" + + + *: "V2 then V1" + + + *: "Version 2 then version 1" + + + + id: LANG_NEXT_FOLDER + desc: in settings_menu. Should we allow move to next/prev folder from last/first track of current one + user: + + *: "Auto-Change Directory" + + + *: "Auto-Change Directory" + + + *: "Auto-Change Directory" + + + + id: LANG_TAGCACHE + desc: in settings menu + user: + + *: "Database" + + + *: "Database" + + + *: "Database" + + + + id: LANG_TAGCACHE_DISK + desc: + user: + + *: "" + + + *: "" + + + *: "" + + + + id: LANG_TAGCACHE_RAM + desc: in tag cache settings + user: + + *: "Load to RAM" + + + *: "Load to RAM" + + + *: "Load to RAM" + + + + id: LANG_TAGCACHE_FORCE_UPDATE + desc: in tag cache settings + user: + + *: "Initialize now" + + + *: "Initialize now" + + + *: "Initialize now" + + + + id: LANG_TAGCACHE_FORCE_UPDATE_SPLASH + desc: in tag cache settings + user: + + *: "Updating in background" + + + *: "Updating in background" + + + *: "" + + + + id: LANG_TAGCACHE_INIT + desc: while initializing tagcache on boot + user: + + *: "Committing database" + + + *: "Committing database" + + + *: "" + + + + id: LANG_RUNTIMEDB_ACTIVE + desc: in settings_menu. + user: + + *: "Gather Runtime Data" + + + *: "Gather Runtime Data" + + + *: "Gather Runtime Data" + + + + id: LANG_SORT_CASE + desc: in settings_menu + user: + + *: "Sort Case Sensitive" + + + *: "Sort Case Sensitive" + + + *: "Sort Case Sensitive" + + + + id: LANG_SORT_DIR + desc: browser sorting setting + user: + + *: "Sort Directories" + + + *: "Sort Directories" + + + *: "sort directories" + + + + id: LANG_SORT_FILE + desc: browser sorting setting + user: + + *: "Sort Files" + + + *: "Sort Files" + + + *: "sort files" + + + + id: LANG_SORT_ALPHA + desc: browser sorting setting + user: + + *: "Alphabetical" + + + *: "Alphabetical" + + + *: "Alphabetical" + + + + id: LANG_SORT_DATE + desc: browser sorting setting + user: + + *: "By Date" + + + *: "By Date" + + + *: "By Date" + + + + id: LANG_SORT_DATE_REVERSE + desc: browser sorting setting + user: + + *: "By Newest Date" + + + *: "By Newest Date" + + + *: "By Newest Date" + + + + id: LANG_SORT_TYPE + desc: browser sorting setting + user: + + *: "By Type" + + + *: "By Type" + + + *: "By Type" + + + + id: LANG_FILTER + desc: setting name for dir filter + user: + + *: "Show Files" + + + *: "Show Files" + + + *: "Show Files" + + + + id: LANG_FILTER_ALL + desc: show all files + user: + + *: "All" + + + *: "All" + + + *: "All" + + + + id: LANG_FILTER_SUPPORTED + desc: show all file types supported by Rockbox + user: + + *: "Supported" + + + *: "Supported" + + + *: "Supported" + + + + id: LANG_FILTER_MUSIC + desc: show only music-related files + user: + + *: "Music" + + + *: "Music" + + + *: "Music" + + + + id: LANG_FILTER_PLAYLIST + desc: show only playlist + user: + + *: "Playlists" + + + *: "Playlists" + + + *: "Playlists" + + + + id: LANG_FILTER_ID3DB + desc: show ID3 Database + user: + + *: "Database" + + + *: "Database" + + + *: "Database" + + + + id: LANG_FOLLOW + desc: in settings_menu + user: + + *: "Follow Playlist" + + + *: "Follow Playlist" + + + *: "Follow Playlist" + + + + id: LANG_SHOW_ICONS + desc: in settings_menu + user: + + *: "Show Icons" + + + *: "Show Icons" + + + *: "Show Icons" + + + + id: LANG_CUSTOM_FONT + desc: in setting_menu() + user: + + *: "Browse Fonts" + + + *: "Browse Fonts" + + + *: "Browse Fonts" + + + + id: LANG_WHILE_PLAYING + desc: in settings_menu() + user: + + *: "Browse .wps files" + + + *: "Browse .wps files" + + + *: "Browse while-playing-screen files" + + + + id: LANG_REMOTE_WHILE_PLAYING + desc: in settings_menu() + user: + + *: "Browse .rwps files" + + + *: "Browse .rwps files" + + + *: "Browse remote while-playing-screen files" + + + + id: LANG_LCD_MENU + desc: in the display sub menu + user: + + *: "LCD Settings" + + + *: "LCD Settings" + + + *: "LCD Settings" + + + + id: LANG_LCD_REMOTE_MENU + desc: in the display sub menu + user: + + *: "Remote-LCD Settings" + + + *: "Remote-LCD Settings" + + + *: "Remote LCD settings" + + + + id: LANG_SCROLL_MENU + desc: in display_settings_menu() + user: + + *: "Scrolling" + + + *: "Scrolling" + + + *: "Scrolling" + + + + id: LANG_BARS_MENU + desc: in the display sub menu + user: + + *: "Status-/Scrollbar" + + + *: "Status-/Scrollbar" + + + *: "Status- and Scrollbar" + + + + id: LANG_PM_MENU + desc: in the display menu + user: + + *: "Peak Meter" + + + *: "Peak Meter" + + + *: "Peak Meter" + + + + id: LANG_DEFAULT_CODEPAGE + desc: default encoding used with id3 tags + user: + + *: "Default Codepage" + + + *: "Default Codepage" + + + *: "Default codepage" + + + + id: LANG_CODEPAGE_LATIN1 + desc: in codepage setting menu + user: + + *: "Latin1 (ISO-8859-1)" + + + *: "Latin1 (ISO-8859-1)" + + + *: "Latin 1" + + + + id: LANG_CODEPAGE_GREEK + desc: in codepage setting menu + user: + + *: "Greek (ISO-8859-7)" + + + *: "Greek (ISO-8859-7)" + + + *: "Greek" + + + + id: LANG_CODEPAGE_HEBREW + desc: in codepage setting menu + user: + + *: "Hebrew (ISO-8859-8)" + + + *: "Hebrew (ISO-8859-8)" + + + *: "Hebrew" + + + + id: LANG_CODEPAGE_CYRILLIC + desc: in codepage setting menu + user: + + *: "Cyrillic (CP1251)" + + + *: "Cyrillic (CP1251)" + + + *: "Cyrillic" + + + + id: LANG_CODEPAGE_THAI + desc: in codepage setting menu + user: + + *: "Thai (ISO-8859-11)" + + + *: "Thai (ISO-8859-11)" + + + *: "Thai" + + + + id: LANG_CODEPAGE_ARABIC + desc: in codepage setting menu + user: + + *: "Arabic (CP1256)" + + + *: "Arabic (CP1256)" + + + *: "Arabic" + + + + id: LANG_CODEPAGE_TURKISH + desc: in codepage setting menu + user: + + *: "Turkish (ISO-8859-9)" + + + *: "Turkish (ISO-8859-9)" + + + *: "Turkish" + + + + id: LANG_CODEPAGE_LATIN_EXTENDED + desc: in codepage setting menu + user: + + *: "Latin Extended (ISO-8859-2)" + + + *: "Latin Extended (ISO-8859-2)" + + + *: "Latin extended" + + + + id: LANG_CODEPAGE_JAPANESE + desc: in codepage setting menu + user: + + *: "Japanese (SJIS)" + + + *: "Japanese (SJIS)" + + + *: "Japanese" + + + + id: LANG_CODEPAGE_SIMPLIFIED + desc: in codepage setting menu + user: + + *: "Simp. Chinese (GB2312)" + + + *: "Simp. Chinese (GB2312)" + + + *: "Simplified Chinese" + + + + id: LANG_CODEPAGE_KOREAN + desc: in codepage setting menu + user: + + *: "Korean (KSX1001)" + + + *: "Korean (KSX1001)" + + + *: "Korean" + + + + id: LANG_CODEPAGE_TRADITIONAL + desc: in codepage setting menu + user: + + *: "Trad. Chinese (BIG5)" + + + *: "Trad. Chinese (BIG5)" + + + *: "Traditional Chinese" + + + + id: LANG_CODEPAGE_UTF8 + desc: in codepage setting menu + user: + + *: "Unicode (UTF-8)" + + + *: "Unicode (UTF-8)" + + + *: "Unicode" + + + + id: LANG_BATTERY_MENU + desc: in the system sub menu + user: + + *: "Battery" + + + *: "Battery" + + + *: "Battery" + + + + id: LANG_DISK_MENU + desc: in the system sub menu + user: + + *: "Disk" + + + *: "Disk" + + + *: "Disk" + + + + id: LANG_TIME_MENU + desc: in the system sub menu + user: + + *: "Time & Date" + + + *: "Time & Date" + + + *: "Time and Date" + + + + id: LANG_POWEROFF_IDLE + desc: in settings_menu + user: + + *: "Idle Poweroff" + + + *: "Idle Poweroff" + + + *: "Idle Poweroff" + + + + id: LANG_SLEEP_TIMER + desc: sleep timer setting + user: + + *: "Sleep Timer" + + + *: "Sleep Timer" + + + *: "Sleep Timer" + + + + id: LANG_ALARM_MOD_ALARM_MENU + desc: The name of the additional entry in the main menu for the RTC alarm mod. + user: + + *: "Wake-Up Alarm" + + + *: "Wake-Up Alarm" + + + *: "Wake-Up Alarm" + + + + id: LANG_LIMITS_MENU + desc: in the system sub menu + user: + + *: "Limits" + + + *: "Limits" + + + *: "Limits" + + + + id: LANG_LINE_IN + desc: in settings_menu + user: + + *: "Line In" + + + *: "Line In" + + + *: "Line In" + + + + id: LANG_CAR_ADAPTER_MODE + desc: Displayed for setting car adapter mode to on/off + user: + + *: "Car Adapter Mode" + + + *: "Car Adapter Mode" + + + *: "Car Adapter Mode" + + + + id: LANG_BOOKMARK_SETTINGS_AUTOCREATE + desc: prompt for user to decide to create an bookmark + user: + + *: "Bookmark on Stop" + + + *: "Bookmark on Stop" + + + *: "Bookmark on Stop" + + + + id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES + desc: Save in recent bookmarks only + user: + + *: "Yes - Recent only" + + + *: "Yes - Recent only" + + + *: "Yes - Recent only" + + + + id: LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK + desc: Save in recent bookmarks only + user: + + *: "Ask - Recent only" + + + *: "Ask - Recent only" + + + *: "Ask - Recent only" + + + + id: LANG_BOOKMARK_SETTINGS_AUTOLOAD + desc: prompt for user to decide to create a bookmark + user: + + *: "Load Last Bookmark" + + + *: "Load Last Bookmark" + + + *: "Load Last Bookmark" + + + + id: LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS + desc: Configuration option to maintain a list of recent bookmarks + user: + + *: "Maintain a List of Recent Bookmarks?" + + + *: "Maintain a List of Recent Bookmarks?" + + + *: "Maintain a List of Recent Bookmarks?" + + + + id: LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY + desc: Save only on bookmark for each playlist in recent bookmarks + user: + + *: "Unique only" + + + *: "Unique only" + + + *: "Unique only" + + + + id: LANG_VOICE_MENU + desc: item of voice menu, enable/disable the voice UI + user: + + *: "Voice Menus" + + + *: "Voice Menus" + + + *: "Voice Menus" + + + + id: LANG_VOICE_DIR + desc: item of voice menu, set the voice mode for directories + user: + + *: "Voice Directories" + + + *: "Voice Directories" + + + *: "Voice Directories" + + + + id: LANG_VOICE_FILE + desc: item of voice menu, set the voice mode for files + user: + + *: "Voice Filenames" + + + *: "Voice Filenames" + + + *: "Voice Filenames" + + + + id: LANG_VOICE_NUMBER + desc: "talkbox" mode for files+directories + user: + + *: "Numbers" + + + *: "Numbers" + + + *: "Numbers" + + + + id: LANG_VOICE_SPELL + desc: "talkbox" mode for files+directories + user: + + *: "Spell" + + + *: "Spell" + + + *: "Spell" + + + + id: LANG_VOICE_DIR_HOVER + desc: "talkbox" mode for directories + files + user: + + *: ".talk mp3 clip" + + + *: ".talk mp3 clip" + + + *: "talk mp3 clip" + + + + id: LANG_RECORDING_QUALITY + desc: in the recording settings + user: + + *: "Quality" + + + *: "Quality" + + + *: "Quality" + + + + id: LANG_RECORDING_FREQUENCY + desc: in the recording settings + user: + + *: "Frequency" + + + *: "Frequency" + + + *: "Frequency" + + + + id: LANG_RECORDING_SOURCE + desc: in the recording settings + user: + + *: "Source" + + + *: "Source" + + + *: "Source" + + + + id: LANG_RECORDING_SRC_MIC + desc: in the recording settings + user: + + *: "Mic" + h100,h120,h300: "Internal Mic" + + + *: "Mic" + h100,h120,h300: "Internal Mic" + + + *: "Microphone" + h100,h120,h300: "Internal Microphone" + + + + id: LANG_RECORDING_SRC_LINE + desc: in the recording settings + user: + + *: "Line In" + + + *: "Line In" + + + *: "Line In" + + + + id: LANG_RECORDING_SRC_DIGITAL + desc: in the recording settings + user: + + *: "Digital" + + + *: "Digital" + + + *: "Digital" + + + + id: LANG_RECORDING_CHANNELS + desc: in the recording settings + user: + + *: "Channels" + + + *: "Channels" + + + *: "Channels" + + + + id: LANG_RECORDING_EDITABLE + desc: Editable recordings setting + user: + + *: "Independent Frames" + + + *: "Independent Frames" + + + *: "Independent Frames" + + + + id: LANG_RECORD_TIMESPLIT + desc: Record split menu + user: + + *: "File Split Options" + + + *: "File Split Options" + + + *: "File Split Options" + + + + id: LANG_RECORD_PRERECORD_TIME + desc: in recording settings_menu + user: + + *: "Prerecord Time" + + + *: "Prerecord Time" + + + *: "Pre-Record time" + + + + id: LANG_RECORD_DIRECTORY + desc: in recording settings_menu + user: + + *: "Directory" + + + *: "Directory" + + + *: "Directory" + + + + id: LANG_RECORD_CURRENT_DIR + desc: in recording directory options + user: + + *: "Current Directory" + + + *: "Current Directory" + + + *: "Current directory" + + + + id: LANG_RECORD_STARTUP + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_RECORD_TRIGGER + desc: in recording settings_menu + user: + + *: "Trigger" + + + *: "Trigger" + + + *: "Trigger" + + + + id: LANG_CLIP_LIGHT + desc: in record settings menu. + user: + + *: "Clipping Light" + + + *: "Clipping Light" + + + *: "Clipping Light" + + + + id: LANG_MAIN_UNIT + desc: in record settings menu. + user: + + *: "Main Unit Only" + + + *: "Main Unit Only" + + + *: "Main unit only" + + + + id: LANG_REMOTE_UNIT + desc: in record settings menu. + user: + + *: "Remote Unit Only" + + + *: "Remote Unit Only" + + + *: "Remote unit only" + + + + id: LANG_REMOTE_MAIN + desc: in record settings menu. + user: + + *: "Main and Remote Unit" + + + *: "Main and Remote Unit" + + + *: "Main and remote unit" + + + + id: LANG_FFRW_STEP + desc: in settings_menu + user: + + *: "FF/RW Min Step" + + + *: "FF/RW Min Step" + + + *: "Minimum Step" + + + + id: LANG_FFRW_ACCEL + desc: in settings_menu + user: + + *: "FF/RW Accel" + + + *: "FF/RW Accel" + + + *: "Acceleration" + + + + id: LANG_CROSSFADE_ENABLE + desc: in crossfade settings menu + user: + + *: "Enable Crossfade" + + + *: "Enable Crossfade" + + + *: "Enable Crossfade" + + + + id: LANG_TRACKSKIP + desc: in crossfade settings + user: + + *: "Track Skip Only" + + + *: "Track Skip Only" + + + *: "Track Skip Only" + + + + id: LANG_CROSSFADE_FADE_IN_DELAY + desc: in crossfade settings menu + user: + + *: "Fade-In Delay" + + + *: "Fade-In Delay" + + + *: "Fade-In Delay" + + + + id: LANG_CROSSFADE_FADE_IN_DURATION + desc: in crossfade settings menu + user: + + *: "Fade-In Duration" + + + *: "Fade-In Duration" + + + *: "Fade-In Duration" + + + + id: LANG_CROSSFADE_FADE_OUT_DELAY + desc: in crossfade settings menu + user: + + *: "Fade-Out Delay" + + + *: "Fade-Out Delay" + + + *: "Fade-Out Delay" + + + + id: LANG_CROSSFADE_FADE_OUT_DURATION + desc: in crossfade settings menu + user: + + *: "Fade-Out Duration" + + + *: "Fade-Out Duration" + + + *: "Fade-Out Duration" + + + + id: LANG_CROSSFADE_FADE_OUT_MODE + desc: in crossfade settings menu + user: + + *: "Fade-Out Mode" + + + *: "Fade-Out Mode" + + + *: "Fade-Out Mode" + + + + id: LANG_MIX + desc: in playback settings, crossfade option + user: + + *: "Mix" + + + *: "Mix" + + + *: "Mix" + + + + id: LANG_REPLAYGAIN_ENABLE + desc: in replaygain + user: + + *: "Enable Replaygain" + + + *: "Enable Replaygain" + + + *: "Enable Replaygain" + + + + id: LANG_REPLAYGAIN_NOCLIP + desc: in replaygain + user: + + *: "Prevent Clipping" + + + *: "Prevent Clipping" + + + *: "Prevent Clipping" + + + + id: LANG_REPLAYGAIN_MODE + desc: in replaygain + user: + + *: "Replaygain Type" + + + *: "Replaygain Type" + + + *: "Replaygain Type" + + + + id: LANG_ALBUM_GAIN + desc: in replaygain + user: + + *: "Album Gain" + + + *: "Album Gain" + + + *: "Album Gain" + + + + id: LANG_TRACK_GAIN + desc: in replaygain + user: + + *: "Track Gain" + + + *: "Track Gain" + + + *: "Track Gain" + + + + id: LANG_SHUFFLE_GAIN + desc: use track gain if shuffle mode is on, album gain otherwise + user: + + *: "Track Gain if Shuffling" + + + *: "Track Gain if Shuffling" + + + *: "Track Gain if Shuffling" + + + + id: LANG_REPLAYGAIN_PREAMP + desc: in replaygain settings + user: + + *: "Pre-amp" + + + *: "Pre-amp" + + + *: "Preamp" + + + + id: LANG_BACKLIGHT + desc: in settings_menu + user: + + *: "Backlight" + + + *: "Backlight" + + + *: "Backlight" + + + + id: LANG_BACKLIGHT_ON_WHEN_CHARGING + desc: in display_settings_menu, backlight timeout with charger connected + user: + + *: "Backlight (While Plugged In)" + + + *: "Backlight (While Plugged In)" + + + *: "Backlight (While Plugged In)" + + + + id: LANG_CAPTION_BACKLIGHT + desc: in settings_menu + user: + + *: "Caption Backlight" + + + *: "Caption Backlight" + + + *: "Caption Backlight" + + + + id: LANG_BACKLIGHT_FADE_IN + desc: in settings_menu + user: + + *: "Backlight Fade In" + + + *: "Backlight Fade In" + + + *: "Backlight Fade In" + + + + id: LANG_BACKLIGHT_FADE_OUT + desc: in settings_menu + user: + + *: "Backlight Fade Out" + + + *: "Backlight Fade Out" + + + *: "Backlight Fade Out" + + + + id: LANG_BRIGHTNESS + desc: in settings_menu + user: + + *: "Brightness" + + + *: "Brightness" + + + *: "Brightness" + + + + id: LANG_CONTRAST + desc: in settings_menu + user: + + *: "Contrast" + + + *: "Contrast" + + + *: "Contrast" + + + + id: LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS + desc: Backlight behaviour setting + user: + + *: "First Keypress Enables Backlight Only" + + + *: "First Keypress Enables Backlight Only" + + + *: "First Keypress Enables Backlight Only" + + + + id: LANG_INVERT + desc: in settings_menu + user: + + *: "LCD Mode" + + + *: "LCD Mode" + + + *: "LCD Mode" + + + + id: LANG_INVERT_LCD_NORMAL + desc: in settings_menu + user: + + *: "Normal" + + + *: "Normal" + + + *: "Normal" + + + + id: LANG_INVERT_LCD_INVERSE + desc: in settings_menu + user: + + *: "Inverse" + + + *: "Inverse" + + + *: "Inverse" + + + + id: LANG_FLIP_DISPLAY + desc: in settings_menu, option to turn display+buttos by 180 degreed + user: + + *: "Upside Down" + + + *: "Upside Down" + + + *: "Upside Down" + + + + id: LANG_INVERT_CURSOR + desc: in settings_menu + user: + + *: "Line Selector" + + + *: "Line Selector" + + + *: "Line Selector" + + + + id: LANG_INVERT_CURSOR_POINTER + desc: in settings_menu + user: + + *: "Pointer" + + + *: "Pointer" + + + *: "Pointer" + + + + id: LANG_INVERT_CURSOR_BAR + desc: in settings_menu + user: + + *: "Bar (Inverse)" + + + *: "Bar (Inverse)" + + + *: "Inverse Bar" + + + + id: LANG_CLEAR_BACKDROP + desc: text for LCD settings menu + user: + + *: "Clear Backdrop" + + + *: "Clear Backdrop" + + + *: "Clear Backdrop" + + + + id: LANG_BACKGROUND_COLOR + desc: menu entry to set the background color + user: + + *: "Background Colour" + + + *: "Background Colour" + + + *: "Background Colour" + + + + id: LANG_FOREGROUND_COLOR + desc: menu entry to set the foreground color + user: + + *: "Foreground Colour" + + + *: "Foreground Colour" + + + *: "Foreground Colour" + + + + id: LANG_RESET_COLORS + desc: menu + user: + + *: "Reset Colours" + + + *: "Reset Colours" + + + *: "Reset Colours" + + + + id: LANG_REDUCE_TICKING + desc: in remote lcd settings menu + user: + + *: "Reduce Ticking" + + + *: "Reduce Ticking" + + + *: "Reduce Ticking" + + + + id: LANG_SCROLL_SPEED + desc: in display_settings_menu() + user: + + *: "Scroll Speed" + + + *: "Scroll Speed" + + + *: "Scroll Speed" + + + + id: LANG_SCROLL + desc: in settings_menu + user: + + *: "Scroll Speed Setting Example" + + + *: "Scroll Speed Setting Example" + + + *: "" + + + + id: LANG_SCROLL_DELAY + desc: Delay before scrolling + user: + + *: "Scroll Start Delay" + + + *: "Scroll Start Delay" + + + *: "Scroll Start Delay" + + + + id: LANG_SCROLL_STEP + desc: Pixels to advance per scroll + user: + + *: "Scroll Step Size" + + + *: "Scroll Step Size" + + + *: "Scroll Step Size" + + + + id: LANG_SCROLL_STEP_EXAMPLE + desc: Pixels to advance per scroll + user: + + *: "Scroll Step Size Setting Example Text" + + + *: "Scroll Step Size Setting Example Text" + + + *: "" + + + + id: LANG_BIDIR_SCROLL + desc: Bidirectional scroll limit + user: + + *: "Bidirectional Scroll Limit" + + + *: "Bidirectional Scroll Limit" + + + *: "Bidirectional Scroll Limit" + + + + id: LANG_JUMP_SCROLL + desc: (player) menu altarnative for jump scroll + user: + + *: "Jump Scroll" + + + *: "Jump Scroll" + + + *: "Jump Scroll" + + + + id: LANG_ONE_TIME + desc: (player) the jump scroll shall be done "one time" + user: + + *: "One time" + + + *: "One time" + + + *: "One time" + + + + id: LANG_JUMP_SCROLL_DELAY + desc: (player) Delay before making a jump scroll + user: + + *: "Jump Scroll Delay" + + + *: "Jump Scroll Delay" + + + *: "Jump Scroll Delay" + + + + id: LANG_SCREEN_SCROLL_VIEW + desc: should lines scroll out of the screen + user: + + *: "Screen Scrolls Out Of View" + + + *: "Screen Scrolls Out Of View" + + + *: "Screen Scrolls Out Of View" + + + + id: LANG_SCREEN_SCROLL_STEP + desc: Pixels to advance per Screen scroll + user: + + *: "Screen Scroll Step Size" + + + *: "Screen Scroll Step Size" + + + *: "Screen Scroll Step Size" + + + + id: LANG_SCROLL_PAGINATED + desc: jump to new page when scrolling + user: + + *: "Paged Scrolling" + + + *: "Paged Scrolling" + + + *: "Paged scrolling" + + + + id: LANG_SCROLL_BAR + desc: display menu, F3 substitute + user: + + *: "Scroll Bar" + + + *: "Scroll Bar" + + + *: "Scroll Bar" + + + + id: LANG_STATUS_BAR + desc: display menu, F3 substitute + user: + + *: "Status Bar" + + + *: "Status Bar" + + + *: "Status Bar" + + + + id: LANG_BUTTON_BAR + desc: in settings menu + user: + + *: "Button Bar" + + + *: "Button Bar" + + + *: "Button Bar" + + + + id: LANG_VOLUME_DISPLAY + desc: Volume type title + user: + + *: "Volume Display" + + + *: "Volume Display" + + + *: "Volume Display" + + + + id: LANG_BATTERY_DISPLAY + desc: Battery type title + user: + + *: "Battery Display" + + + *: "Battery Display" + + + *: "Battery Display" + + + + id: LANG_DISPLAY_GRAPHIC + desc: Label for type of icon display + user: + + *: "Graphic" + + + *: "Graphic" + + + *: "Graphic" + + + + id: LANG_DISPLAY_NUMERIC + desc: Label for type of icon display + user: + + *: "Numeric" + + + *: "Numeric" + + + *: "Numeric" + + + + id: LANG_PM_RELEASE + desc: in the peak meter menu + user: + + *: "Peak Release" + + + *: "Peak Release" + + + *: "Peak Release" + + + + id: LANG_PM_UNITS_PER_READ + desc: in the peak meter menu + user: + + *: "Units Per Read" + + + *: "Units Per Read" + + + *: "Units Per Read" + + + + id: LANG_PM_PEAK_HOLD + desc: in the peak meter menu + user: + + *: "Peak Hold Time" + + + *: "Peak Hold Time" + + + *: "Peak Hold Time" + + + + id: LANG_PM_CLIP_HOLD + desc: in the peak meter menu + user: + + *: "Clip Hold Time" + + + *: "Clip Hold Time" + + + *: "Clip Hold Time" + + + + id: LANG_PM_ETERNAL + desc: in the peak meter menu + user: + + *: "Eternal" + + + *: "Eternal" + + + *: "Eternal" + + + + id: LANG_PM_SCALE + desc: in the peak meter menu + user: + + *: "Scale" + + + *: "Scale" + + + *: "Scale" + + + + id: LANG_PM_DBFS + desc: in the peak meter menu + user: + + *: "Logarithmic (dB)" + + + *: "Logarithmic (dB)" + + + *: "Logarithmic decibel" + + + + id: LANG_PM_LINEAR + desc: in the peak meter menu + user: + + *: "Linear (%)" + + + *: "Linear (%)" + + + *: "Linear percent" + + + + id: LANG_PM_MIN + desc: in the peak meter menu + user: + + *: "Minimum Of Range" + + + *: "Minimum Of Range" + + + *: "Minimum Of Range" + + + + id: LANG_PM_MAX + desc: in the peak meter menu + user: + + *: "Maximum Of Range" + + + *: "Maximum Of Range" + + + *: "Maximum Of Range" + + + + id: LANG_BATTERY_CAPACITY + desc: in settings_menu + user: + + *: "Battery Capacity" + + + *: "Battery Capacity" + + + *: "Battery Capacity" + + + + id: LANG_BATTERY_TYPE + desc: in battery settings + user: + + *: "Battery Type" + + + *: "Battery Type" + + + *: "Battery type" + + + + id: LANG_BATTERY_TYPE_ALKALINE + desc: in battery settings + user: + + *: "Alkaline" + + + *: "Alkaline" + + + *: "Alkaline" + + + + id: LANG_BATTERY_TYPE_NIMH + desc: in battery settings + user: + + *: "NiMH" + + + *: "NiMH" + + + *: "Nickel metal hydride" + + + + id: LANG_SPINDOWN + desc: in settings_menu + user: + + *: "Disk Spindown" + + + *: "Disk Spindown" + + + *: "Disk Spindown" + + + + id: LANG_POWEROFF + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_DIRCACHE_ENABLE + desc: in directory cache settings + user: + + *: "Directory Cache" + + + *: "Directory Cache" + + + *: "Directory Cache" + + + + id: LANG_DIRCACHE_REBOOT + desc: DEPRECATED + user: + + *: "" + + + *: "" + + + *: "" + + + + id: LANG_DIRCACHE_BUILDING + desc: when booting up and rebuilding the cache + user: + + *: "Scanning disk..." + + + *: "Scanning disk..." + + + *: "" + + + + id: LANG_TIME + desc: in settings_menu + user: + + *: "Set Time/Date" + + + *: "Set Time/Date" + + + *: "Set Time and Date" + + + + id: LANG_TIMEFORMAT + desc: select the time format of time in status bar + user: + + *: "Time Format" + + + *: "Time Format" + + + *: "Time Format" + + + + id: LANG_12_HOUR_CLOCK + desc: option for 12 hour clock + user: + + *: "12 Hour Clock" + + + *: "12 Hour Clock" + + + *: "12 Hour Clock" + + + + id: LANG_24_HOUR_CLOCK + desc: option for 24 hour clock + user: + + *: "24 Hour Clock" + + + *: "24 Hour Clock" + + + *: "24 Hour Clock" + + + + id: LANG_MAX_FILES_IN_DIR + desc: in settings_menu + user: + + *: "Max Files in Dir Browser" + + + *: "Max Files in Dir Browser" + + + *: "Maximum files in directory browser" + + + + id: LANG_MAX_FILES_IN_PLAYLIST + desc: in settings_menu + user: + + *: "Max Playlist Size" + + + *: "Max Playlist Size" + + + *: "Maximum playlist size" + + + + id: LANG_PLAYLIST + desc: Used when you need to say playlist, also voiced + user: + + *: "Playlist" + + + *: "Playlist" + + + *: "Playlist" + + + + id: LANG_BOOKMARK_MENU + desc: Text on main menu to get to bookmark commands + user: + + *: "Bookmarks" + + + *: "Bookmarks" + + + *: "Bookmarks" + + + + id: LANG_MENU_SHOW_ID3_INFO + desc: Menu option to start tag viewer + user: + + *: "Show ID3 Info" + + + *: "Show ID3 Info" + + + *: "Show ID3 Info" + + + + id: LANG_MENU_SET_RATING + desc: in wps context menu + user: + + *: "Set Song Rating" + + + *: "Set Song Rating" + + + *: "Set Song Rating" + + + + id: LANG_RATING + desc: in set_rating + user: + + *: "Rating:" + + + *: "Rating:" + + + *: "" + + + + id: LANG_RENAME + desc: The verb/action Rename + user: + + *: "Rename" + + + *: "Rename" + + + *: "Rename" + + + + id: LANG_CUT + desc: The verb/action Cut + user: + + *: "Cut" + + + *: "Cut" + + + *: "Cut" + + + + id: LANG_COPY + desc: The verb/action Copy + user: + + *: "Copy" + + + *: "Copy" + + + *: "Copy" + + + + id: LANG_PASTE + desc: The verb/action Paste + user: + + *: "Paste" + + + *: "Paste" + + + *: "Paste" + + + + id: LANG_REALLY_OVERWRITE + desc: The verb/action Paste + user: + + *: "File/directory exists. Overwrite?" + + + *: "File/directory exists. Overwrite?" + + + *: "" + + + + id: LANG_DELETE + desc: The verb/action Delete + user: + + *: "Delete" + + + *: "Delete" + + + *: "Delete" + + + + id: LANG_SET_AS_BACKDROP + desc: text for onplay menu entry + user: + + *: "Set As Backdrop" + + + *: "Set As Backdrop" + + + *: "Set As Backdrop" + + + + id: LANG_DELETE_DIR + desc: in on+play menu + user: + + *: "Delete Directory" + + + *: "Delete Directory" + + + *: "delete directory" + + + + id: LANG_REALLY_DELETE + desc: Really Delete? + user: + + *: "Delete?" + + + *: "Delete?" + + + *: "" + + + + id: LANG_DELETED + desc: A file has beed deleted + user: + + *: "Deleted" + + + *: "Deleted" + + + *: "" + + + + id: LANG_ONPLAY_OPEN_WITH + desc: Onplay open with + user: + + *: "Open With..." + + + *: "Open With..." + + + *: "open with" + + + + id: LANG_CREATE_DIR + desc: in main menu + user: + + *: "Create Directory" + + + *: "Create Directory" + + + *: "Create Directory" + + + + id: LANG_PITCH + desc: "pitch" in the pitch screen + user: + + *: "Pitch" + + + *: "Pitch" + + + *: "Pitch" + + + + id: LANG_VIEW + desc: in on+play menu + user: + + *: "View" + + + *: "View" + + + *: "View" + + + + id: LANG_SHUFFLE_PLAYLIST + desc: in playlist menu, reshuffles the order in which songs are played + user: + + *: "Reshuffle" + + + *: "Reshuffle" + + + *: "Reshuffle" + + + + id: LANG_INSERT + desc: in onplay menu. insert a track/playlist into dynamic playlist. + user: + + *: "Insert" + + + *: "Insert" + + + *: "Insert" + + + + id: LANG_INSERT_FIRST + desc: in onplay menu. insert a track/playlist into dynamic playlist. + user: + + *: "Insert next" + + + *: "Insert next" + + + *: "Insert next" + + + + id: LANG_INSERT_LAST + desc: in onplay menu. append a track/playlist into dynamic playlist. + user: + + *: "Insert last" + + + *: "Insert last" + + + *: "Insert last" + + + + id: LANG_INSERT_SHUFFLED + desc: in onplay menu. insert a track/playlist randomly into dynamic playlist + user: + + *: "Insert shuffled" + + + *: "Insert shuffled" + + + *: "Insert shuffled" + + + + id: LANG_QUEUE + desc: The verb/action Queue + user: + + *: "Queue" + + + *: "Queue" + + + *: "Queue" + + + + id: LANG_QUEUE_FIRST + desc: in onplay menu. queue a track/playlist into dynamic playlist. + user: + + *: "Queue next" + + + *: "Queue next" + + + *: "Queue next" + + + + id: LANG_QUEUE_LAST + desc: in onplay menu. queue a track/playlist at end of playlist. + user: + + *: "Queue last" + + + *: "Queue last" + + + *: "Queue last" + + + + id: LANG_QUEUE_SHUFFLED + desc: in onplay menu. queue a track/playlist randomly into dynamic playlist + user: + + *: "Queue shuffled" + + + *: "Queue shuffled" + + + *: "Queue shuffled" + + + + id: LANG_SEARCH_IN_PLAYLIST + desc: in playlist menu. + user: + + *: "Search In Playlist" + + + *: "Search In Playlist" + + + *: "Search In Playlist" + + + + id: LANG_PLAYLIST_SEARCH_MSG + desc: splash number of tracks inserted + user: + + *: "Searching... %d found (%s)" + + + *: "Searching... %d found (%s)" + + + *: "" + + + + id: LANG_BOOKMARK_MENU_CREATE + desc: Used off of the bookmark menu to create a bookmark + user: + + *: "Create Bookmark" + + + *: "Create Bookmark" + + + *: "Create Bookmark" + + + + id: LANG_BOOKMARK_MENU_LIST + desc: Used off of the bookmark menu to list available bookmarks for the currently playing directory or M3U + user: + + *: "List Bookmarks" + + + *: "List Bookmarks" + + + *: "List Bookmarks" + + + + id: LANG_ROCKBOX_INFO + desc: displayed topmost on the info screen + user: + + *: "Rockbox Info:" + + + *: "Rockbox Info:" + + + *: "" + + + + id: LANG_BUFFER_STAT_PLAYER + desc: the buffer size player-screen width, %d MB %d fraction of MB + user: + + *: "Buf: %d.%03dMB" + + + *: "Buf: %d.%03dMB" + + + *: "" + + + + id: LANG_BUFFER_STAT_RECORDER + desc: the buffer size recorder-screen width, %d MB %d fraction of MB + user: + + *: "Buffer: %d.%03dMB" + + + *: "Buffer: %d.%03dMB" + + + *: "" + + + + id: LANG_BATTERY_CHARGE + desc: tells that the battery is charging, instead of battery level + user: + + *: "Battery: Charging" + + + *: "Battery: Charging" + + + *: "Charging" + + + + id: LANG_BATTERY_TOPOFF_CHARGE + desc: in info display, shows that top off charge is running + user: + + *: "Battery: Top-Off Chg" + + + *: "Battery: Top-Off Chg" + + + *: "Top off charge" + + + + id: LANG_BATTERY_TRICKLE_CHARGE + desc: in info display, shows that trickle charge is running + user: + + *: "Battery: Trickle Chg" + + + *: "Battery: Trickle Chg" + + + *: "Trickle charge" + + + + id: LANG_BATTERY_TIME + desc: battery level in % and estimated time remaining + user: + + *: "Battery: %d%% %dh %dm" + player,recorder,fmrecorder,recorderv2,ondiosp,ondiofm,ifp7xx: "%d%% %dh %dm" + h10,ipodmini,ipodmini2g: "Batt: %d%% %dh %dm" + + + *: "Battery: %d%% %dh %dm" + player,recorder,fmrecorder,recorderv2,ondiosp,ondiofm,ifp7xx: "%d%% %dh %dm" + h10,ipodmini,ipodmini2g: "Batt: %d%% %dh %dm" + + + *: "Battery level" + + + + id: LANG_DISK_SIZE_INFO + desc: disk size info + user: + + *: "Disk:" + + + *: "Disk:" + + + *: "" + + + + id: LANG_DISK_FREE_INFO + desc: disk size info + user: + + *: "Free:" + + + *: "Free:" + + + *: "Free diskspace:" + + + + id: LANG_DISK_NAME_INTERNAL + desc: in info menu; name for internal disk with multivolume (keep short!) + user: + + *: "Int:" + + + *: "Int:" + + + *: "Internal" + + + + id: LANG_DISK_NAME_MMC + desc: in info menu; name for external disk with multivolume (Ondio; keep short!) + user: + + *: "MMC:" + + + *: "MMC:" + + + *: "Multimedia card" + + + + id: VOICE_CURRENT_TIME + desc: spoken only, for wall clock announce + user: + + *: "" + + + *: "" + + + *: "Current time:" + + + + id: LANG_PITCH_UP + desc: in wps + user: + + *: "Pitch Up" + + + *: "Pitch Up" + + + *: "" + + + + id: LANG_PITCH_DOWN + desc: in wps + user: + + *: "Pitch Down" + + + *: "Pitch Down" + + + *: "" + + + + id: LANG_PAUSE + desc: in wps + user: + + *: "Pause" + + + *: "Pause" + + + *: "" + + + + id: LANG_F2_MODE + desc: in wps F2 pressed + user: + + *: "Mode:" + + + *: "Mode:" + + + *: "" + + + + id: LANG_F3_STATUS + desc: in wps F3 pressed + user: + + *: "Status" + + + *: "Status" + + + *: "" + + + + id: LANG_F3_SCROLL + desc: in wps F3 pressed + user: + + *: "Scroll" + + + *: "Scroll" + + + *: "" + + + + id: LANG_F3_BAR + desc: in wps F3 pressed + user: + + *: "Bar" + + + *: "Bar" + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_LIST_BOOKMARKS + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_EXIT + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_BOOKMARK_TEXT + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_INDEX_TEXT + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_TIME_TEXT + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_PLAY + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_SELECT_DELETE + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_BOOKMARK_AUTOLOAD_QUERY + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_AUTO_BOOKMARK_QUERY + desc: prompt for user to decide to create an bookmark + user: + + *: "Create a Bookmark?" + + + *: "Create a Bookmark?" + + + *: "" + + + + id: LANG_BOOKMARK_CREATE_SUCCESS + desc: Indicates bookmark was successfully created + user: + + *: "Bookmark Created" + + + *: "Bookmark Created" + + + *: "" + + + + id: LANG_BOOKMARK_CREATE_FAILURE + desc: Indicates bookmark was not created + user: + + *: "Bookmark Failed!" + + + *: "Bookmark Failed!" + + + *: "" + + + + id: LANG_BOOKMARK_LOAD_EMPTY + desc: Indicates bookmark was empty + user: + + *: "Bookmark Empty" + + + *: "Bookmark Empty" + + + *: "" + + + + id: LANG_TIME_SET + desc: used in set_time() + user: + + *: "ON = Set" + h100,h120,h300: "NAVI = Set" + ipod*: "SELECT = Set" + x5: "SELECT = Set" + h10,h10_5gb: "SELECT = Set" + gigabeatf: "SELECT = Set" + e200: "SELECT = Set" + + + *: "ON = Set" + h100,h120,h300: "NAVI = Set" + ipod*: "SELECT = Set" + x5: "SELECT = Set" + h10,h10_5gb: "SELECT = Set" + gigabeatf: "SELECT = Set" + e200: "SELECT = Set" + + + *: "" + + + + id: LANG_TIME_REVERT + desc: used in set_time() + user: + + *: "OFF = Revert" + h100,h120,h300: "STOP = Revert" + ipod*,e200: "MENU = Revert" + x5: "RECORD = Revert" + h10,h10_5gb: "PREV = Revert" + gigabeatf: "POWER = Revert" + + + *: "OFF = Revert" + h100,h120,h300: "STOP = Revert" + ipod*,e200: "MENU = Revert" + x5: "RECORD = Revert" + h10,h10_5gb: "PREV = Revert" + gigabeatf: "POWER = Revert" + + + *: "" + + + + id: LANG_KEYLOCK_ON_PLAYER + desc: displayed when key lock is on + user: + + *: "Key Lock ON" + + + *: "Key Lock ON" + + + *: "" + + + + id: LANG_KEYLOCK_OFF_PLAYER + desc: displayed when key lock is turned off + user: + + *: "Key Lock OFF" + + + *: "Key Lock OFF" + + + *: "" + + + + id: LANG_KEYLOCK_ON_RECORDER + desc: displayed when key lock is on + user: + + *: "Keylock is ON" + + + *: "Keylock is ON" + + + *: "" + + + + id: LANG_KEYLOCK_OFF_RECORDER + desc: displayed when key lock is turned off + user: + + *: "Keylock is OFF" + + + *: "Keylock is OFF" + + + *: "" + + + + id: LANG_RECORDING_TIME + desc: Display of recorded time + user: + + *: "Time:" + + + *: "Time:" + + + *: "" + + + + id: LANG_RECORD_TIMESPLIT_REC + desc: Display of record timer interval setting, on the record screen + user: + + *: "Split Time:" + + + *: "Split Time:" + + + *: "" + + + + id: LANG_RECORDING_SIZE + desc: Display of recorded file size + user: + + *: "Size:" + + + *: "Size:" + + + *: "" + + + + id: LANG_RECORD_PRERECORD + desc: in recording and radio screen + user: + + *: "Pre-Recording" + + + *: "Pre-Recording" + + + *: "" + + + + id: LANG_RECORDING_GAIN + desc: in the recording screen + user: + + *: "Gain" + + + *: "Gain" + + + *: "" + + + + id: LANG_RECORDING_LEFT + desc: in the recording screen + user: + + *: "Gain Left" + + + *: "Gain Left" + + + *: "" + + + + id: LANG_RECORDING_RIGHT + desc: in the recording screen + user: + + *: "Gain Right" + + + *: "Gain Right" + + + *: "" + + + + id: LANG_RECORDING_GAIN_ANALOG + desc: in the recording screen + user: + + *: "A" + + + *: "A" + + + *: "" + + + + id: LANG_RECORDING_GAIN_DIGITAL + desc: in the recording screen + user: + + *: "D" + + + *: "D" + + + *: "" + + + + id: LANG_DISK_FULL + desc: in recording screen + user: + + *: "The disk is full. Press OFF to continue." + h100,h120,h300: "The disk is full. Press STOP to continue." + + + *: "The disk is full. Press OFF to continue." + h100,h120,h300: "The disk is full. Press STOP to continue." + + + *: "" + + + + id: LANG_RECORD_TRIGGER_MODE + desc: in recording settings_menu + user: + + *: "Trigger" + + + *: "Trigger" + + + *: "" + + + + id: LANG_RECORD_TRIG_NOREARM + desc: in recording settings_menu + user: + + *: "Once" + + + *: "Once" + + + *: "" + + + + id: LANG_RECORD_TRIG_REARM + desc: in recording settings_menu + user: + + *: "Repeat" + + + *: "Repeat" + + + *: "" + + + + id: LANG_RECORD_START_THRESHOLD + desc: in recording settings_menu + user: + + *: "Start Above" + + + *: "Start Above" + + + *: "" + + + + id: LANG_RECORD_MIN_DURATION + desc: in recording settings_menu + user: + + *: "for at least" + + + *: "for at least" + + + *: "" + + + + id: LANG_RECORD_STOP_THRESHOLD + desc: in recording settings_menu + user: + + *: "Stop Below" + + + *: "Stop Below" + + + *: "" + + + + id: LANG_RECORD_STOP_POSTREC + desc: in recording settings_menu + user: + + *: "for at least" + + + *: "for at least" + + + *: "" + + + + id: LANG_RECORD_STOP_GAP + desc: in recording settings_menu + user: + + *: "Presplit Gap" + + + *: "Presplit Gap" + + + *: "" + + + + id: LANG_DB_INF + desc: -inf db for values below measurement + user: + + *: "-inf" + + + *: "-inf" + + + *: "" + + + + id: LANG_RECORD_TRIG_IDLE + desc: waiting for threshold + user: + + *: "Trigger Idle" + + + *: "Trigger Idle" + + + *: "" + + + + id: LANG_RECORD_TRIGGER_ACTIVE + desc: + user: + + *: "Trigger Active" + + + *: "Trigger Active" + + + *: "" + + + + id: LANG_ALARM_MOD_TIME + desc: The current alarm time shown in the alarm menu for the RTC alarm mod. + user: + + *: "Alarm Time: %02d:%02d" + + + *: "Alarm Time: %02d:%02d" + + + *: "" + + + + id: LANG_ALARM_MOD_TIME_TO_GO + desc: The time until the alarm will go off shown in the alarm menu for the RTC alarm mod. + user: + + *: "Waking Up In %d:%02d" + + + *: "Waking Up In %d:%02d" + + + *: "" + + + + id: LANG_ALARM_MOD_SHUTDOWN + desc: The text that tells the user that the alarm time is ok and the device shuts off (for the RTC alarm mod). + user: + + *: "Alarm Set" + + + *: "Alarm Set" + + + *: "" + + + + id: LANG_ALARM_MOD_ERROR + desc: The text that tells that the time is incorrect (for the RTC alarm mod). + user: + + *: "Alarm Time Is Too Soon!" + + + *: "Alarm Time Is Too Soon!" + + + *: "" + + + + id: LANG_ALARM_MOD_KEYS + desc: Shown key functions in alarm menu (for the RTC alarm mod). + user: + + *: "PLAY=Set OFF=Cancel" + ipod*: "SELECT=Set MENU=Cancel" + + + *: "PLAY=Set OFF=Cancel" + ipod*: "SELECT=Set MENU=Cancel" + + + *: "" + + + + id: LANG_ALARM_MOD_DISABLE + desc: Announce that the RTC alarm has been turned off + user: + + *: "Alarm Disabled" + + + *: "Alarm Disabled" + + + *: "" + + + + id: LANG_COLOR_RGB_LABELS + desc: what to show for the 'R' 'G' 'B' ONE LETTER EACH + user: + + *: "RGB" + + + *: "RGB" + + + *: "" + + + + id: LANG_COLOR_RGB_VALUE + desc: in color screen + user: + + *: "RGB: %02X%02X%02X" + + + *: "RGB: %02X%02X%02X" + + + *: "" + + + + id: LANG_COLOR_UNACCEPTABLE + desc: splash when user selects an invalid colour + user: + + *: "Invalid colour" + + + *: "Invalid colour" + + + *: "" + + + + id: LANG_ID3_TITLE + desc: in tag viewer + user: + + *: "[Title]" + + + *: "[Title]" + + + *: "" + + + + id: LANG_ID3_ARTIST + desc: in tag viewer + user: + + *: "[Artist]" + + + *: "[Artist]" + + + *: "" + + + + id: LANG_ID3_ALBUM + desc: in tag viewer + user: + + *: "[Album]" + + + *: "[Album]" + + + *: "" + + + + id: LANG_ID3_TRACKNUM + desc: in tag viewer + user: + + *: "[Tracknum]" + + + *: "[Tracknum]" + + + *: "" + + + + id: LANG_ID3_GENRE + desc: in tag viewer + user: + + *: "[Genre]" + + + *: "[Genre]" + + + *: "" + + + + id: LANG_ID3_YEAR + desc: in tag viewer + user: + + *: "[Year]" + + + *: "[Year]" + + + *: "" + + + + id: LANG_ID3_LENGTH + desc: in tag viewer + user: + + *: "[Length]" + + + *: "[Length]" + + + *: "" + + + + id: LANG_ID3_PLAYLIST + desc: in tag viewer + user: + + *: "[Playlist]" + + + *: "[Playlist]" + + + *: "" + + + + id: LANG_ID3_BITRATE + desc: in tag viewer + user: + + *: "[Bitrate]" + + + *: "[Bitrate]" + + + *: "" + + + + id: LANG_UNIT_DB + desc: in browse_id3 + user: + + *: "dB" + + + *: "dB" + + + *: "" + + + + id: LANG_ID3_VBR + desc: in browse_id3 + user: + + *: " (VBR)" + + + *: " (VBR)" + + + *: "" + + + + id: LANG_ID3_FRECUENCY + desc: in tag viewer + user: + + *: "[Frequency]" + + + *: "[Frequency]" + + + *: "" + + + + id: LANG_ID3_TRACK_GAIN + desc: in tag viewer + user: + + *: "[Track Gain]" + + + *: "[Track Gain]" + + + *: "" + + + + id: LANG_ID3_ALBUM_GAIN + desc: in tag viewer + user: + + *: "[Album Gain]" + + + *: "[Album Gain]" + + + *: "" + + + + id: LANG_ID3_PATH + desc: in tag viewer + user: + + *: "[Path]" + + + *: "[Path]" + + + *: "" + + + + id: LANG_ID3_NO_INFO + desc: in tag viewer + user: + + *: "" + + + *: "" + + + *: "" + + + + id: LANG_WEEKDAY_SUNDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Sun" + + + *: "Sun" + + + *: "" + + + + id: LANG_WEEKDAY_MONDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Mon" + + + *: "Mon" + + + *: "" + + + + id: LANG_WEEKDAY_TUESDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Tue" + + + *: "Tue" + + + *: "" + + + + id: LANG_WEEKDAY_WEDNESDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Wed" + + + *: "Wed" + + + *: "" + + + + id: LANG_WEEKDAY_THURSDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Thu" + + + *: "Thu" + + + *: "" + + + + id: LANG_WEEKDAY_FRIDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Fri" + + + *: "Fri" + + + *: "" + + + + id: LANG_WEEKDAY_SATURDAY + desc: Maximum 3-letter abbreviation for weekday + user: + + *: "Sat" + + + *: "Sat" + + + *: "" + + + + id: LANG_MONTH_JANUARY + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Jan" + + + *: "Jan" + + + *: "January" + + + + id: LANG_MONTH_FEBRUARY + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Feb" + + + *: "Feb" + + + *: "February" + + + + id: LANG_MONTH_MARCH + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Mar" + + + *: "Mar" + + + *: "March" + + + + id: LANG_MONTH_APRIL + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Apr" + + + *: "Apr" + + + *: "April" + + + + id: LANG_MONTH_MAY + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "May" + + + *: "May" + + + *: "May" + + + + id: LANG_MONTH_JUNE + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Jun" + + + *: "Jun" + + + *: "June" + + + + id: LANG_MONTH_JULY + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Jul" + + + *: "Jul" + + + *: "July" + + + + id: LANG_MONTH_AUGUST + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Aug" + + + *: "Aug" + + + *: "August" + + + + id: LANG_MONTH_SEPTEMBER + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Sep" + + + *: "Sep" + + + *: "September" + + + + id: LANG_MONTH_OCTOBER + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Oct" + + + *: "Oct" + + + *: "October" + + + + id: LANG_MONTH_NOVEMBER + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Nov" + + + *: "Nov" + + + *: "November" + + + + id: LANG_MONTH_DECEMBER + desc: Maximum 3-letter abbreviation for monthname + user: + + *: "Dec" + + + *: "Dec" + + + *: "December" + + + + id: VOICE_ZERO + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "0" + + + + id: VOICE_ONE + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "1" + + + + id: VOICE_TWO + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "2" + + + + id: VOICE_THREE + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "3" + + + + id: VOICE_FOUR + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "4" + + + + id: VOICE_FIFE + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "5" + + + + id: VOICE_SIX + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "6" + + + + id: VOICE_SEVEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "7" + + + + id: VOICE_EIGHT + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "8" + + + + id: VOICE_NINE + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "9" + + + + id: VOICE_TEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "10" + + + + id: VOICE_ELEVEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "11" + + + + id: VOICE_TWELVE + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "12" + + + + id: VOICE_THIRTEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "13" + + + + id: VOICE_FOURTEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "14" + + + + id: VOICE_FIFTEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "15" + + + + id: VOICE_SIXTEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "16" + + + + id: VOICE_SEVENTEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "17" + + + + id: VOICE_EIGHTEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "18" + + + + id: VOICE_NINETEEN + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "19" + + + + id: VOICE_TWENTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "20" + + + + id: VOICE_THIRTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "30" + + + + id: VOICE_FORTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "40" + + + + id: VOICE_FIFTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "50" + + + + id: VOICE_SIXTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "60" + + + + id: VOICE_SEVENTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "70" + + + + id: VOICE_EIGHTY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "80" + + + + id: VOICE_NINETY + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "90" + + + + id: VOICE_HUNDRED + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "hundred" + + + + id: VOICE_THOUSAND + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "thousand" + + + + id: VOICE_MILLION + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "million" + + + + id: VOICE_BILLION + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "billion" + + + + id: VOICE_MINUS + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "minus" + + + + id: VOICE_PLUS + desc: spoken only, for composing numbers + user: + + *: "" + + + *: "" + + + *: "plus" + + + + id: VOICE_MILLISECONDS + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "milliseconds" + + + + id: VOICE_SECOND + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "second" + + + + id: VOICE_SECONDS + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "seconds" + + + + id: VOICE_MINUTE + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "minute" + + + + id: VOICE_MINUTES + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "minutes" + + + + id: VOICE_HOUR + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "hour" + + + + id: VOICE_HOURS + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "hours" + + + + id: VOICE_KHZ + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "kilohertz" + + + + id: VOICE_DB + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "decibel" + + + + id: VOICE_PERCENT + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "percent" + + + + id: VOICE_MILLIAMPHOURS + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "milli-amp hours" + + + + id: VOICE_PIXEL + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "pixel" + + + + id: VOICE_PER_SEC + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "per second" + + + + id: VOICE_HERTZ + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "hertz" + + + + id: LANG_BYTE + desc: a unit postfix + user: + + *: "B" + + + *: "B" + + + *: "" + + + + id: LANG_KILOBYTE + desc: a unit postfix, also voiced + user: + + *: "KB" + + + *: "KB" + + + *: "kilobyte" + + + + id: LANG_MEGABYTE + desc: a unit postfix, also voiced + user: + + *: "MB" + + + *: "MB" + + + *: "megabyte" + + + + id: LANG_GIGABYTE + desc: a unit postfix, also voiced + user: + + *: "GB" + + + *: "GB" + + + *: "gigabyte" + + + + id: LANG_POINT + desc: decimal separator for composing numbers + user: + + *: "." + + + *: "." + + + *: "point" + + + + id: VOICE_CHAR_A + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "A" + + + + id: VOICE_CHAR_B + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "B" + + + + id: VOICE_CHAR_C + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "C" + + + + id: VOICE_CHAR_D + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "D" + + + + id: VOICE_CHAR_E + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "E" + + + + id: VOICE_CHAR_F + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "F" + + + + id: VOICE_CHAR_G + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "G" + + + + id: VOICE_CHAR_H + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "H" + + + + id: VOICE_CHAR_I + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "I" + + + + id: VOICE_CHAR_J + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "J" + + + + id: VOICE_CHAR_K + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "K" + + + + id: VOICE_CHAR_L + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "L" + + + + id: VOICE_CHAR_M + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "M" + + + + id: VOICE_CHAR_N + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "N" + + + + id: VOICE_CHAR_O + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "O" + + + + id: VOICE_CHAR_P + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "P" + + + + id: VOICE_CHAR_Q + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "Q" + + + + id: VOICE_CHAR_R + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "R" + + + + id: VOICE_CHAR_S + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "S" + + + + id: VOICE_CHAR_T + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "T" + + + + id: VOICE_CHAR_U + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "U" + + + + id: VOICE_CHAR_V + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "V" + + + + id: VOICE_CHAR_W + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "W" + + + + id: VOICE_CHAR_X + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "X" + + + + id: VOICE_CHAR_Y + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "Y" + + + + id: VOICE_CHAR_Z + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "Z" + + + + id: VOICE_DOT + desc: spoken only, for spelling + user: + + *: "" + + + *: "" + + + *: "dot" + + + + id: VOICE_PAUSE + desc: spoken only, for spelling, a split second of silence (difficult to author) + user: + + *: "" + + + *: "" + + + *: " " + + + + id: VOICE_FILE + desc: spoken only, prefix for file number + user: + + *: "" + + + *: "" + + + *: "file" + + + + id: VOICE_DIR + desc: spoken only, prefix for directory number + user: + + *: "" + + + *: "" + + + *: "folder" + + + + id: VOICE_EXT_MPA + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "audio" + + + + id: VOICE_EXT_CFG + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "configuration" + + + + id: VOICE_EXT_WPS + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "while-playing-screen" + + + + id: VOICE_EXT_TXT + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "text" + + + + id: VOICE_EXT_ROCK + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "plugin" + + + + id: VOICE_EXT_FONT + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "font" + + + + id: VOICE_EXT_BMARK + desc: spoken only, for file extension and the word in general + user: + + *: "" + + + *: "" + + + *: "bookmark" + + + + id: VOICE_EXT_UCL + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "flash" + + + + id: VOICE_EXT_AJZ + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "firmware" + + + + id: VOICE_EXT_RWPS + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "remote while-playing-screen" + + + + id: VOICE_EXT_KBD + desc: spoken only, for file extension + user: + + *: "" + + + *: "" + + + *: "keyboard" + + + + id: LANG_PLAYLIST_LOAD + desc: displayed on screen while loading a playlist + user: + + *: "Loading..." + + + *: "Loading..." + + + *: "" + + + + id: LANG_PLAYLIST_SHUFFLE + desc: displayed on screen while shuffling a playlist + user: + + *: "Shuffling..." + + + *: "Shuffling..." + + + *: "" + + + + id: LANG_PLAYLIST_BUFFER_FULL + desc: in playlist.indices() when playlist is full + user: + + *: "Playlist Buffer Full" + + + *: "Playlist Buffer Full" + + + *: "" + + + + id: LANG_END_PLAYLIST_PLAYER + desc: DEPRECATED + user: + + *: "" + + + *: deprecated + + + *: "" + + + + id: LANG_END_PLAYLIST_RECORDER + desc: when playlist has finished + user: + + *: "End of Song List" + player: "End of List" + + + *: "End of Song List" + player: "End of List" + + + *: "" + + + + id: LANG_CREATING + desc: Screen feedback during playlist creation + user: + + *: "Creating" + + + *: "Creating" + + + *: "" + + + + id: LANG_PLAYLIST_INSERT_COUNT + desc: splash number of tracks inserted + user: + + *: "Inserted %d tracks (%s)" + + + *: "Inserted %d tracks (%s)" + + + *: "" + + + + id: LANG_PLAYLIST_QUEUE_COUNT + desc: splash number of tracks queued + user: + + *: "Queued %d tracks (%s)" + + + *: "Queued %d tracks (%s)" + + + *: "" + + + + id: LANG_PLAYLIST_SAVE_COUNT + desc: splash number of tracks saved + user: + + *: "Saved %d tracks (%s)" + + + *: "Saved %d tracks (%s)" + + + *: "" + + + + id: LANG_RECURSE_DIRECTORY_QUESTION + desc: Asked from onplay screen + user: + + *: "Recursively?" + + + *: "Recursively?" + + + *: "" + + + + id: LANG_WARN_ERASEDYNPLAYLIST_PROMPT + desc: prompt shown when about to erase a modified dynamic playlist + user: + + *: "Erase dynamic playlist?" + + + *: "Erase dynamic playlist?" + + + *: "" + + + + id: LANG_NOTHING_TO_RESUME + desc: Error message displayed when resume button pressed but no playlist + user: + + *: "Nothing to resume" + + + *: "Nothing to resume" + + + *: "" + + + + id: LANG_PLAYLIST_CONTROL_UPDATE_ERROR + desc: Playlist error + user: + + *: "Error updating playlist control file" + + + *: "Error updating playlist control file" + + + *: "" + + + + id: LANG_PLAYLIST_ACCESS_ERROR + desc: Playlist error + user: + + *: "Error accessing playlist file" + + + *: "Error accessing playlist file" + + + *: "" + + + + id: LANG_PLAYLIST_CONTROL_ACCESS_ERROR + desc: Playlist error + user: + + *: "Error accessing playlist control file" + + + *: "Error accessing playlist control file" + + + *: "" + + + + id: LANG_PLAYLIST_DIRECTORY_ACCESS_ERROR + desc: Playlist error + user: + + *: "Error accessing directory" + + + *: "Error accessing directory" + + + *: "" + + + + id: LANG_PLAYLIST_CONTROL_INVALID + desc: Playlist resume error + user: + + *: "Playlist control file is invalid" + + + *: "Playlist control file is invalid" + + + *: "" + + + + id: LANG_FM_STATION + desc: in radio screen + user: + + *: "Station: %d.%02d MHz" + + + *: "Station: %d.%02d MHz" + + + *: "" + + + + id: LANG_FM_NO_PRESETS + desc: error when preset list is empty + user: + + *: "No presets" + + + *: "No presets" + + + *: "" + + + + id: LANG_FM_ADD_PRESET + desc: in radio menu + user: + + *: "Add Preset" + + + *: "Add Preset" + + + *: "Add Preset" + + + + id: LANG_FM_EDIT_PRESET + desc: in radio screen + user: + + *: "Edit Preset" + + + *: "Edit Preset" + + + *: "Edit Preset" + + + + id: LANG_FM_DELETE_PRESET + desc: in radio screen + user: + + *: "Remove Preset" + + + *: "Remove Preset" + + + *: "Remove Preset" + + + + id: LANG_FM_PRESET_SAVE_FAILED + desc: in radio screen + user: + + *: "Preset Save Failed" + + + *: "Preset Save Failed" + + + *: "" + + + + id: LANG_FM_NO_FREE_PRESETS + desc: in radio screen + user: + + *: "The Preset List is Full" + + + *: "The Preset List is Full" + + + *: "" + + + + id: LANG_BUTTONBAR_MENU + desc: in button bar + user: + + *: "Menu" + + + *: "Menu" + + + *: "" + + + + id: LANG_FM_BUTTONBAR_EXIT + desc: in radio screen + user: + + *: "Exit" + + + *: "Exit" + + + *: "" + + + + id: LANG_FM_BUTTONBAR_ACTION + desc: in radio screen + user: + + *: "Action" + + + *: "Action" + + + *: "" + + + + id: LANG_FM_BUTTONBAR_PRESETS + desc: in button bar + user: + + *: "Preset" + + + *: "Preset" + + + *: "" + + + + id: LANG_FM_BUTTONBAR_ADD + desc: in radio screen + user: + + *: "Add" + + + *: "Add" + + + *: "" + + + + id: LANG_FM_BUTTONBAR_RECORD + desc: in radio screen + user: + + *: "Record" + + + *: "Record" + + + *: "" + + + + id: LANG_FM_MONO_MODE + desc: in radio screen + user: + + *: "Force mono" + + + *: "Force mono" + + + *: "Force mono" + + + + id: LANG_FM_FREEZE + desc: splash screen during freeze in radio mode + user: + + *: "Screen frozen!" + + + *: "Screen frozen!" + + + *: "" + + + + id: LANG_FM_SCAN_PRESETS + desc: in radio menu + user: + + *: "Auto-Scan Presets" + + + *: "Auto-Scan Presets" + + + *: "Auto scan presets" + + + + id: LANG_FM_CLEAR_PRESETS + desc: confirmation if presets can be cleared + user: + + *: "Clear Current Presets?" + + + *: "Clear Current Presets?" + + + *: "" + + + + id: LANG_FM_SCANNING + desc: during auto scan + user: + + *: "Scanning %d.%02d MHz" + + + *: "Scanning %d.%02d MHz" + + + *: "" + + + + id: LANG_FM_DEFAULT_PRESET_NAME + desc: default preset name for auto scan mode + user: + + *: "%d.%02d MHz" + + + *: "%d.%02d MHz" + + + *: "" + + + + id: LANG_FM_TUNE_MODE + desc: in radio screen / menu + user: + + *: "Mode:" + + + *: "Mode:" + + + *: "" + + + + id: LANG_RADIO_SCAN_MODE + desc: in radio screen / menu + user: + + *: "Scan" + + + *: "Scan" + + + *: "" + + + + id: LANG_RADIO_PRESET_MODE + desc: in radio screen / menu + user: + + *: "Preset" + + + *: "Preset" + + + *: "" + + + + id: LANG_DIRBROWSE_F1 + desc: in dir browser, F1 button bar text + user: + + *: "Menu" + + + *: "Menu" + + + *: "" + + + + id: LANG_DIRBROWSE_F2 + desc: in dir browser, F2 button bar text + user: + + *: "Option" + + + *: "Option" + + + *: "" + + + + id: LANG_DIRBROWSE_F3 + desc: in dir browser, F3 button bar text + user: + + *: "LCD" + + + *: "LCD" + + + *: "" + + + + id: LANG_SHOWDIR_BUFFER_FULL + desc: in showdir(), displayed on screen when you reach buffer limit + user: + + *: "Dir Buffer is Full!" + + + *: "Dir Buffer is Full!" + + + *: "" + + + + id: LANG_LANGUAGE_LOADED + desc: shown when a language has been loaded from the dir browser + user: + + *: "New Language" + + + *: "New Language" + + + *: "" + + + + id: LANG_SETTINGS_LOADED + desc: Feedback shown when a .cfg file is loaded + user: + + *: "Settings Loaded" + + + *: "Settings Loaded" + + + *: "" + + + + id: LANG_SETTINGS_SAVED + desc: Feedback shown when a .cfg file is saved + user: + + *: "Settings Saved" + + + *: "Settings Saved" + + + *: "" + + + + id: LANG_BOOT_CHANGED + desc: File browser discovered the boot file was changed + user: + + *: "Boot changed" + + + *: "Boot changed" + + + *: "" + + + + id: LANG_REBOOT_NOW + desc: Do you want to reboot? + user: + + *: "Reboot now?" + + + *: "Reboot now?" + + + *: "" + + + + id: LANG_OFF_ABORT + desc: Used on recorder models + user: + + *: "OFF to abort" + h100,h120,h300: "STOP to abort" + ipod*: "PLAY/PAUSE to abort" + x5: "Long PLAY to abort" + h10,h10_5gb: "PREV to abort" + e200: "PREV to abort" + + + *: "OFF to abort" + h100,h120,h300: "STOP to abort" + ipod*: "PLAY/PAUSE to abort" + x5: "Long PLAY to abort" + h10,h10_5gb: "PREV to abort" + e200: "PREV to abort" + + + *: "" + + + + id: LANG_STOP_ABORT + desc: Used on player models + user: + + *: "STOP to abort" + + + *: "STOP to abort" + + + *: "" + + + + id: LANG_NO_FILES + desc: in settings_menu + user: + + *: "No files" + + + *: "No files" + + + *: "" + + + + id: LANG_BACKDROP_LOADED + desc: text for splash to indicate a new backdrop has been loaded successfully + user: + + *: "Backdrop Loaded" + + + *: "Backdrop Loaded" + + + *: "" + + + + id: LANG_BACKDROP_FAILED + desc: text for splash to indicate a failure to load a bitmap as backdrop + user: + + *: "Backdrop Failed" + + + *: "Backdrop Failed" + + + *: "" + + + + id: LANG_KEYBOARD_LOADED + desc: shown when a keyboard has been loaded from the dir browser + user: + + *: "New Keyboard" + + + *: "New Keyboard" + + + *: "" + + + + id: LANG_ID3DB_ARTISTS + desc: ID3 virtual folder name + user: + + *: "Artists" + + + *: "Artists" + + + *: "" + + + + id: LANG_ID3DB_ALBUMS + desc: ID3 virtual folder name + user: + + *: "Albums" + + + *: "Albums" + + + *: "" + + + + id: LANG_ID3DB_SONGS + desc: ID3 virtual folder name + user: + + *: "Songs" + + + *: "Songs" + + + *: "" + + + + id: LANG_ID3DB_GENRES + desc: in tag cache + user: + + *: "Genres" + + + *: "Genres" + + + *: "" + + + + id: LANG_ID3DB_SEARCH + desc: ID3 virtual folder name + user: + + *: "Search" + + + *: "Search" + + + *: "" + + + + id: LANG_ID3DB_SEARCH_ARTISTS + desc: ID3 virtual folder name + user: + + *: "Search Artists" + + + *: "Search Artists" + + + *: "" + + + + id: LANG_ID3DB_SEARCH_ALBUMS + desc: ID3 virtual folder name + user: + + *: "Search Albums" + + + *: "Search Albums" + + + *: "" + + + + id: LANG_ID3DB_SEARCH_SONGS + desc: ID3 virtual folder name + user: + + *: "Search Songs" + + + *: "Search Songs" + + + *: "" + + + + id: LANG_ID3DB_MATCHES + desc: ID3 virtual folder name + user: + + *: "Found %d matches" + + + *: "Found %d matches" + + + *: "" + + + + id: LANG_ID3DB_ALL_SONGS + desc: ID3 virtual folder name + user: + + *: "" + + + *: "" + + + *: "" + + + + id: LANG_MOVE + desc: The verb/action Move + user: + + *: "Move" + + + *: "Move" + + + *: "Move" + + + + id: LANG_MOVE_FAILED + desc: Error message displayed in playlist viewer + user: + + *: "Move Failed" + + + *: "Move Failed" + + + *: "" + + + + id: LANG_SHOW_INDICES + desc: in playlist viewer menu + user: + + *: "Show Indices" + + + *: "Show Indices" + + + *: "Show Indices" + + + + id: LANG_TRACK_DISPLAY + desc: in playlist viewer on+play menu + user: + + *: "Track Display" + + + *: "Track Display" + + + *: "Track Display" + + + + id: LANG_DISPLAY_TRACK_NAME_ONLY + desc: track display options + user: + + *: "Track Name Only" + + + *: "Track Name Only" + + + *: "Track Name Only" + + + + id: LANG_DISPLAY_FULL_PATH + desc: track display options + user: + + *: "Full Path" + + + *: "Full Path" + + + *: "Full Path" + + + + id: LANG_REMOVE + desc: in playlist viewer on+play menu + user: + + *: "Remove" + + + *: "Remove" + + + *: "Remove" + + + + id: LANG_FILE_OPTIONS + desc: in playlist viewer on+play menu + user: + + *: "File Options" + + + *: "File Options" + + + *: "File Options" + + + + id: LANG_PLUGIN_CANT_OPEN + desc: Plugin open error message + user: + + *: "Can't open %s" + + + *: "Can't open %s" + + + *: "" + + + + id: LANG_READ_FAILED + desc: There was an error reading a file + user: + + *: "Failed reading %s" + + + *: "Failed reading %s" + + + *: "" + + + + id: LANG_PLUGIN_WRONG_MODEL + desc: The plugin is not compatible with the archos model trying to run it + user: + + *: "Incompatible model" + + + *: "Incompatible model" + + + *: "" + + + + id: LANG_PLUGIN_WRONG_VERSION + desc: The plugin is not compatible with the rockbox version trying to run it + user: + + *: "Incompatible version" + + + *: "Incompatible version" + + + *: "" + + + + id: LANG_PLUGIN_ERROR + desc: The plugin return an error code + user: + + *: "Plugin returned error" + + + *: "Plugin returned error" + + + *: "" + + + + id: LANG_FILETYPES_EXTENSION_FULL + desc: Extension array full + user: + + *: "Extension array full" + + + *: "Extension array full" + + + *: "" + + + + id: LANG_FILETYPES_FULL + desc: Filetype array full + user: + + *: "Filetype array full" + + + *: "Filetype array full" + + + *: "" + + + + id: LANG_FILETYPES_PLUGIN_NAME_LONG + desc: Viewer plugin name too long + user: + + *: "Plugin name too long" + + + *: "Plugin name too long" + + + *: "" + + + + id: LANG_FILETYPES_STRING_BUFFER_EMPTY + desc: Filetype string buffer empty + user: + + *: "Filetype string buffer empty" + + + *: "Filetype string buffer empty" + + + *: "" + + + + id: LANG_RESUME_CONFIRM_PLAYER + desc: possible answers to resume question + user: + + *: "(PLAY/STOP)" + + + *: "(PLAY/STOP)" + + + *: "" + + + + id: LANG_FM_PRESET_LOAD + desc: load preset list in fm radio + user: + + *: "Load Preset List" + + + *: "Load Preset List" + + + *: "Load Preset List" + + + + id: LANG_FM_PRESET_SAVE + desc: Save preset list in fm radio + user: + + *: "Save Preset List" + + + *: "Save Preset List" + + + *: "Save Preset List" + + + + id: LANG_FM_PRESET_CLEAR + desc: clear preset list in fm radio + user: + + *: "Clear Preset List" + + + *: "Clear Preset List" + + + *: "Clear Preset List" + + + + id: LANG_FMR + desc: Used when you need to say Preset List, also voiced + user: + + *: "Preset List" + + + *: "Preset List" + + + *: "Preset List" + + + + id: LANG_FM_FIRST_AUTOSCAN + desc: When you run the radio without an fmr file in settings + user: + + *: "No settings found. Autoscan?" + + + *: "No settings found. Autoscan?" + + + *: "" + + + + id: LANG_FM_SAVE_CHANGES + desc: When you try to exit radio to confirm save + user: + + *: "Save Changes?" + + + *: "Save Changes?" + + + *: "" + + + + id: LANG_PIXELS + desc: In the settings menu + user: + + *: "pixels" + + + *: "pixels" + + + *: "pixels" + + + + id: LANG_CROSSFEED_DIRECT_GAIN + desc: in crossfeed settings + user: + + *: "Direct Gain" + + + *: "Direct Gain" + + + *: "Direct gain" + + + + id: LANG_CROSSFEED_CROSS_GAIN + desc: in crossfeed settings + + *: "Cross Gain" + + + *: "Cross Gain" + + + *: "Cross gain" + + + + id: LANG_CROSSFEED_HF_ATTENUATION + desc: in crossfeed settings + + *: "High-Frequency Attenuation" + + + *: "High-Frequency Attenuation" + + + *: "High-frequency attenuation" + + + + id: LANG_CROSSFEED_HF_CUTOFF + desc: in crossfeed settings + + *: "High-Frequency Cutoff" + + + *: "High-Frequency Cutoff" + + + *: "High-frequency cutoff" + + + + id: LANG_UNIT_HERTZ + desc: in sound settings + + *: "Hz" + + + *: "Hz" + + + *: "" + + + + id: LANG_TAGCACHE_BUSY + desc: when trying to shutdown and tagcache is committing + + *: "Database is not ready" + + + *: "Database is not ready" + + + *: "Database is not ready" + + + + id: LANG_TAGNAVI_ALL_TRACKS + desc: "" entry in tag browser + user: + + *: "" + + + *: "" + + + *: "All tracks" + + + + id: LANG_INVALID_FILENAME + desc: "invalid filename entered" error message + user: + + *: "Invalid Filename!" + + + *: "Invalid Filename!" + + + *: "Invalid Filename" + + + + id: LANG_REMOTE_SCROLL_SETS + desc: "Remote Scrolling Options" Submenu in "Scrolling Options" menu + user: + + *: "Remote Scrolling Options" + + + *: "Remote Scrolling Options" + + + *: "Remote Scrolling Options" + + + + id: LANG_TAGCACHE_UPDATE + desc: in tag cache settings + user: + + *: "Update Now" + + + *: "Update Now" + + + *: "Update Now" + + + + id: LANG_TAGCACHE_AUTOUPDATE + desc: in tag cache settings + user: + + *: "Auto Update" + + + *: "Auto Update" + + + *: "Auto Update" + + + + id: LANG_TAGCACHE_EXPORT + desc: in tag cache settings + user: + + *: "Export Modifications" + + + *: "Export Modifications" + + + *: "Export Modifications" + + + + id: LANG_CATALOG + desc: in onplay menu + user: + + *: "Playlist Catalog" + + + *: "Playlist Catalog" + + + *: "Playlist Catalog" + + + + id: LANG_CATALOG_ADD_TO + desc: in onplay playlist catalog submenu + user: + + *: "Add to Playlist" + + + *: "Add to Playlist" + + + *: "Add to Playlist" + + + + id: LANG_CATALOG_ADD_TO_NEW + desc: in onplay playlist catalog submenu + user: + + *: "Add to New Playlist" + + + *: "Add to New Playlist" + + + *: "Add to New Playlist" + + + + id: LANG_CATALOG_VIEW + desc: in onplay playlist catalog submenu + user: + + *: "View Catalog" + + + *: "View Catalog" + + + *: "View Catalog" + + + + id: LANG_CATALOG_NO_DIRECTORY + desc: error message when playlist catalog directory doesn't exist + user: + + *: "%s doesn't exist" + + + *: "%s doesn't exist" + + + *: "" + + + + id: LANG_CATALOG_NO_PLAYLISTS + desc: error message when no playlists for playlist catalog + user: + + *: "No Playlists" + + + *: "No Playlists" + + + *: "" + + + + id: LANG_TAGCACHE_IMPORT + desc: in tag cache settings + user: + + *: "Import Modifications" + + + *: "Import Modifications" + + + *: "Import Modifications" + + + + id: LANG_SPLIT_MEASURE + desc: in record timesplit options + + *: "Split Measure" + + + *: "Split Measure" + + + *: "Split Measure" + + + + id: LANG_SPLIT_TYPE + desc: in record timesplit options + + *: "What to do when Splitting" + + + *: "What to do when Splitting" + + + *: "What to do when Splitting" + + + + id: LANG_SPLIT_TIME + desc: in record timesplit options + + *: "Split Time" + + + *: "Split Time" + + + *: "Split Time" + + + + id: LANG_SPLIT_SIZE + desc: in record timesplit options + + *: "Split Filesize" + + + *: "Split Filesize" + + + *: "Split Filesize" + + + + id: LANG_REC_TIME + desc: in record timesplit options + user: + + *: "Time" + + + *: "Time" + + + *: "Time" + + + + id: LANG_REC_SIZE + desc: in record timesplit options + user: + + *: "Filesize" + + + *: "Filesize" + + + *: "Filesize" + + + + id: LANG_START_NEW_FILE + desc: in record timesplit options + user: + + *: "Start new file" + + + *: "Start new file" + + + *: "Start new file" + + + + id: LANG_STOP_RECORDING + desc: in record timesplit options + user: + + *: "Stop recording" + + + *: "Stop recording" + + + *: "Stop recording" + + + + id: LANG_REMOTE_LCD_OFF + desc: Remote lcd off splash + user: + + *: "Remote Display OFF" + + + *: "Remote Display OFF" + + + *: "Remote Display OFF" + + + + id: LANG_REMOTE_LCD_ON + desc: Remote lcd off splash + user: + + *: "(Vol- : Re-enable)" + + + *: "(Vol- : Re-enable)" + + + *: "(Vol- : Re-enable)" + + + + id: LANG_BACKLIGHT_ON_BUTTON_HOLD_NORMAL + desc: in lcd settings + user: + + *: "Normal" + + + *: "Normal" + + + *: "Normal" + + + + id: LANG_BACKLIGHT_ON_BUTTON_HOLD + desc: in lcd settings + user: + + *: "Backlight (On Hold Key)" + + + *: "Backlight (On Hold Key)" + + + *: "Backlight on hold key" + + + + id: LANG_NEVER + desc: in lcd settings + user: + + *: "Never" + + + *: "Never" + + + *: "Never" + + + + id: LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF + desc: In display settings, time to switch LCD chip into power saving state + user: + + *: "Sleep (After Backlight Off)" + + + *: "Sleep (After Backlight Off)" + + + *: "Sleep after backlight off" + + + + id: LANG_SYSFONT_SET_BOOL_YES + desc: bool true representation + user: + + *: "Yes" + + + *: "Yes" + + + *: "Yes" + + + + id: LANG_SYSFONT_SET_BOOL_NO + desc: bool false representation + user: + + *: "No" + + + *: "No" + + + *: "No" + + + + id: LANG_SYSFONT_ON + desc: Used in a lot of places + user: + + *: "On" + + + *: "On" + + + *: "On" + + + + id: LANG_SYSFONT_OFF + desc: Used in a lot of places + user: + + *: "Off" + + + *: "Off" + + + *: "Off" + + + + id: LANG_SYSFONT_VOLUME + desc: in sound_settings + user: + + *: "Volume" + + + *: "Volume" + + + *: "Volume" + + + + id: LANG_SYSFONT_CHANNEL_STEREO + desc: in sound_settings + user: + + *: "Stereo" + + + *: "Stereo" + + + *: "Stereo" + + + + id: LANG_SYSFONT_CHANNEL_MONO + desc: in sound_settings + user: + + *: "Mono" + + + *: "Mono" + + + *: "Mono" + + + + id: LANG_SYSFONT_EQUALIZER_EDIT_MODE + desc: in the equalizer settings menu + user: + + *: "Edit mode: %s" + + + *: "Edit mode: %s" + + + *: "" + + + + id: LANG_SYSFONT_EQUALIZER_BAND_CUTOFF + desc: in the equalizer settings menu + user: + + *: "Cutoff Frequency" + + + *: "Cutoff Frequency" + + + *: "Cutoff Frequency" + + + + id: LANG_SYSFONT_EQUALIZER_BAND_GAIN + desc: in the equalizer settings menu + user: + + *: "Gain" + + + *: "Gain" + + + *: "Gain" + + + + id: LANG_SYSFONT_SHUFFLE + desc: in settings_menu + user: + + *: "Shuffle" + + + *: "Shuffle" + + + *: "Shuffle" + + + + id: LANG_SYSFONT_REPEAT + desc: in settings_menu + user: + + *: "Repeat" + + + *: "Repeat" + + + *: "Repeat" + + + + id: LANG_SYSFONT_REPEAT_ALL + desc: repeat playlist once all songs have completed + user: + + *: "All" + + + *: "All" + + + *: "All" + + + + id: LANG_SYSFONT_REPEAT_ONE + desc: repeat one song + user: + + *: "One" + + + *: "One" + + + *: "One" + + + + id: LANG_SYSFONT_REPEAT_AB + desc: repeat one song + user: + + *: "A-B" + + + *: "A-B" + + + *: "A-B" + + + + id: LANG_SYSFONT_FILTER + desc: setting name for dir filter + user: + + *: "Show Files" + + + *: "Show Files" + + + *: "Show Files" + + + + id: LANG_SYSFONT_FILTER_ALL + desc: show all files + user: + + *: "All" + + + *: "All" + + + *: "All" + + + + id: LANG_SYSFONT_FILTER_SUPPORTED + desc: show all file types supported by Rockbox + user: + + *: "Supported" + + + *: "Supported" + + + *: "Supported" + + + + id: LANG_SYSFONT_FILTER_MUSIC + desc: show only music-related files + user: + + *: "Music" + + + *: "Music" + + + *: "Music" + + + + id: LANG_SYSFONT_FILTER_PLAYLIST + desc: show only playlist + user: + + *: "Playlists" + + + *: "Playlists" + + + *: "Playlists" + + + + id: LANG_SYSFONT_FILTER_ID3DB + desc: show ID3 Database + user: + + *: "Database" + + + *: "Database" + + + *: "Database" + + + + id: LANG_SYSFONT_RECORDING_QUALITY + desc: in the recording settings + user: + + *: "Quality" + + + *: "Quality" + + + *: "Quality" + + + + id: LANG_SYSFONT_RECORDING_FREQUENCY + desc: in the recording settings + user: + + *: "Frequency" + + + *: "Frequency" + + + *: "Frequency" + + + + id: LANG_SYSFONT_RECORDING_SOURCE + desc: in the recording settings + user: + + *: "Source" + + + *: "Source" + + + *: "Source" + + + + id: LANG_SYSFONT_RECORDING_SRC_MIC + desc: in the recording settings + user: + + *: "Int. Mic" + + + *: "Int. Mic" + + + *: "Internal Microphone" + + + + id: LANG_SYSFONT_RECORDING_SRC_LINE + desc: in the recording settings + user: + + *: "Line In" + + + *: "Line In" + + + *: "Line In" + + + + id: LANG_SYSFONT_RECORDING_SRC_DIGITAL + desc: in the recording settings + user: + + *: "Digital" + + + *: "Digital" + + + *: "Digital" + + + + id: LANG_SYSFONT_RECORDING_CHANNELS + desc: in the recording settings + user: + + *: "Channels" + + + *: "Channels" + + + *: "Channels" + + + + id: LANG_SYSFONT_RECORD_TRIGGER + desc: in recording settings_menu + user: + + *: "Trigger" + + + *: "Trigger" + + + *: "Trigger" + + + + id: LANG_SYSFONT_FLIP_DISPLAY + desc: in settings_menu, option to turn display+buttos by 180 degreed + user: + + *: "Upside Down" + + + *: "Upside Down" + + + *: "Upside Down" + + + + id: LANG_SYSFONT_SCROLL_BAR + desc: display menu, F3 substitute + user: + + *: "Scroll Bar" + + + *: "Scroll Bar" + + + *: "Scroll Bar" + + + + id: LANG_SYSFONT_STATUS_BAR + desc: display menu, F3 substitute + user: + + *: "Status Bar" + + + *: "Status Bar" + + + *: "Status Bar" + + + + id: LANG_SYSFONT_PITCH + desc: "pitch" in the pitch screen + user: + + *: "Pitch" + + + *: "Pitch" + + + *: "Pitch" + + + + id: LANG_SYSFONT_PITCH_UP + desc: in wps + user: + + *: "Pitch Up" + + + *: "Pitch Up" + + + *: "" + + + + id: LANG_SYSFONT_PITCH_DOWN + desc: in wps + user: + + *: "Pitch Down" + + + *: "Pitch Down" + + + *: "" + + + + id: LANG_SYSFONT_F2_MODE + desc: in wps F2 pressed + user: + + *: "Mode:" + + + *: "Mode:" + + + *: "" + + + + id: LANG_SYSFONT_RECORDING_TIME + desc: Display of recorded time + user: + + *: "Time:" + + + *: "Time:" + + + *: "" + + + + id: LANG_SYSFONT_RECORD_TIMESPLIT_REC + desc: Display of record timer interval setting, on the record screen + user: + + *: "Split Time:" + + + *: "Split Time:" + + + *: "" + + + + id: LANG_SYSFONT_RECORDING_SIZE + desc: Display of recorded file size + user: + + *: "Size:" + + + *: "Size:" + + + *: "" + + + + id: LANG_SYSFONT_RECORD_PRERECORD + desc: in recording and radio screen + user: + + *: "Pre-Recording" + + + *: "Pre-Recording" + + + *: "" + + + + id: LANG_SYSFONT_RECORDING_GAIN + desc: in the recording screen + user: + + *: "Gain" + + + *: "Gain" + + + *: "" + + + + id: LANG_SYSFONT_RECORDING_LEFT + desc: in the recording screen + user: + + *: "Gain Left" + + + *: "Gain Left" + + + *: "" + + + + id: LANG_SYSFONT_RECORDING_RIGHT + desc: in the recording screen + user: + + *: "Gain Right" + + + *: "Gain Right" + + + *: "" + + + + id: LANG_SYSFONT_DISK_FULL + desc: in recording screen + user: + + *: "The disk is full. Press OFF to continue." + h100,h120,h300: "The disk is full. Press STOP to continue." + + + *: "The disk is full. Press OFF to continue." + h100,h120,h300: "The disk is full. Press STOP to continue." + + + *: "" + + + + id: LANG_SYSFONT_DIRBROWSE_F1 + desc: in dir browser, F1 button bar text + user: + + *: "Menu" + + + *: "Menu" + + + *: "" + + + + id: LANG_SYSFONT_DIRBROWSE_F2 + desc: in dir browser, F2 button bar text + user: + + *: "Option" + + + *: "Option" + + + *: "" + + + + id: LANG_SYSFONT_DIRBROWSE_F3 + desc: in dir browser, F3 button bar text + user: + + *: "LCD" + + + *: "LCD" + + + *: "" + + + + id: LANG_SYSFONT_SPLIT_SIZE + desc: in record timesplit options + + *: "Split Filesize" + + + *: "Split Filesize" + + + *: "Split Filesize" + + + + id: LANG_LOADING_PERCENT + desc: splash number of percents loaded + user: + + *: "Loading... %d%% done (%s)" + + + *: "Loading... %d%% done (%s)" + + + *: "" + + + + id: LANG_EQUALIZER_HARDWARE + desc: in the sound settings menu + user: + + *: "Hardware Equalizer" + + + *: "Hardware Equalizer" + + + *: "Hardware equalizer" + + + + id: LANG_EQUALIZER_HARDWARE_ENABLED + desc: in the equalizer settings menu + user: + + *: "Enable Hardware EQ" + + + *: "Enable Hardware EQ" + + + *: "Enable hardware equalizer" + + + + id: LANG_EQUALIZER_BANDWIDTH + desc: in the equalizer settings menu + user: + + *: "Bandwidth" + + + *: "Bandwidth" + + + *: "Bandwidth" + + + + id: LANG_EQUALIZER_HARDWARE_BANDWIDTH_NARROW + desc: in the equalizer settings menu + user: + + *: "Narrow" + + + *: "Narrow" + + + *: "Narrow" + + + + id: LANG_EQUALIZER_HARDWARE_BANDWIDTH_WIDE + desc: in the equalizer settings menu + user: + + *: "Wide" + + + *: "Wide" + + + *: "Wide" + + + + id: LANG_SHOW_PATH + desc: in settings_menu + user: + + *: "Show Path" + + + *: "Show Path" + + + *: "Show Path" + + + + id: LANG_SHOW_PATH_CURRENT + desc: in show path menu + user: + + *: "Current Directory Only" + + + *: "Current Directory Only" + + + *: "Current Directory Only" + + + + id: LANG_SHOW_PATH_FULL + desc: in show path menu + user: + + *: "Full Path" + + + *: "Full Path" + + + *: "Full Path" + + + + id: LANG_RECORD_AGC_PRESET + desc: automatic gain control in record settings + + *: "Automatic Gain Control" + + + *: "Automatic Gain Control" + + + *: "Automatic gain control" + + + + id: LANG_AGC_SAFETY + desc: AGC preset + + *: "Safety (clip)" + + + *: "Safety (clip)" + + + *: "Safety (clip)" + + + + id: LANG_AGC_LIVE + desc: AGC preset + + *: "Live (slow)" + + + *: "Live (slow)" + + + *: "Live (slow)" + + + + id: LANG_AGC_DJSET + desc: AGC preset + + *: "DJ-Set (slow)" + + + *: "DJ-Set (slow)" + + + *: "DJ set (slow)" + + + + id: LANG_AGC_MEDIUM + desc: AGC preset + + *: "Medium" + + + *: "Medium" + + + *: "Medium" + + + + id: LANG_AGC_VOICE + desc: AGC preset + + *: "Voice (fast)" + + + *: "Voice (fast)" + + + *: "Voice (fast)" + + + + id: LANG_RECORD_AGC_CLIPTIME + desc: in record settings + + *: "AGC clip time" + + + *: "AGC clip time" + + + *: "AGC clip time" + + + + id: LANG_SYSFONT_RECORDING_AGC_PRESET + desc: automatic gain control in recording screen + + *: "AGC" + + + *: "AGC" + + + *: "AGC" + + + + id: LANG_RECORDING_AGC_MAXGAIN + desc: AGC maximum gain in recording screen + + *: "AGC max. gain" + + + *: "AGC max. gain" + + + *: "AGC maximum gain" + + + + id: VOICE_KBIT_PER_SEC + desc: spoken only, a unit postfix + user: + + *: "" + + + *: "" + + + *: "kilobits per second" + + + + id: LANG_SYSFONT_RECORDING_FILENAME + desc: Filename header in recording screen + user: + + *: "Filename:" + + + *: "Filename:" + + + *: "" + + + + id: LANG_UNPLUG + desc: in settings_menu. + user: + + *: "Pause on Headphone Unplug" + + + *: "Pause on Headphone Unplug" + + + *: "Pause on Headphone Unplug" + + + + id: LANG_UNPLUG_RESUME + desc: in pause_phones_menu. + user: + + *: "Pause and Resume" + + + *: "Pause and Resume" + + + *: "Pause and Resume" + + + + id: LANG_UNPLUG_RW + desc: in pause_phones_menu. + user: + + *: "Duration to Rewind" + + + *: "Duration to Rewind" + + + *: "Duration to Rewind" + + + + id: LANG_UNPLUG_DISABLE_AUTORESUME + desc: in pause_phones_menu. + user: + + *: "Disable resume on startup if phones unplugged" + + + *: "Disable resume on startup if phones unplugged" + + + *: "Disable resume on startup if phones unplugged" + + + + id: LANG_FM_REGION + desc: fm tuner region setting + + *: "Region" + + + *: "Region" + + + *: "Region" + + + + id: LANG_FM_EUROPE + desc: fm tuner region europe + + *: "Europe" + + + *: "Europe" + + + *: "Europe" + + + + id: LANG_FM_US + desc: fm region us / canada + + *: "US / Canada" + + + *: "US / Canada" + + + *: "US / Canada" + + + + id: LANG_FM_JAPAN + desc: fm region japan + + *: "Japan" + + + *: "Japan" + + + *: "Japan" + + + + id: LANG_FM_KOREA + desc: fm region korea + + *: "Korea" + + + *: "Korea" + + + *: "Korea" + + + + id: LANG_RANDOM + desc: random folder + + *: "Random" + + + *: "Random" + + + *: "Random" + + + + id: LANG_AUDIOSCROBBLER + desc: "Last.fm Log" in the playback menu + user: + + *: "Last.fm Log" + + + *: "Last.fm Log" + + + *: "Last.fm Log" + + + + id: LANG_PLEASE_REBOOT + desc: when activating an option that requires a reboot + user: + + *: "Please reboot to enable" + + + *: "Please reboot to enable" + + + *: "" + + + + id: LANG_DITHERING + desc: in the sound settings menu + user: + + *: "Dithering" + + + *: "Dithering" + + + *: "Dithering" + + + + id: LANG_SYSFONT_PITCH_UP_SEMITONE + desc: in wps + user: + + *: "Semitone Up" + + + *: "Semitone Up" + + + *: "" + + + + id: LANG_SYSFONT_PITCH_DOWN_SEMITONE + desc: in wps + user: + + *: "Semitone Down" + + + *: "Semitone Down" + + + *: "" + + + + id: LANG_RECORDING_FORMAT + desc: audio format item in recording menu + user: + + *: "Format" + + + *: "Format" + + + *: "Format" + + + + id: LANG_AFMT_MPA_L3 + desc: audio format description + user: + + *: "MPEG Layer 3" + + + *: "MPEG Layer 3" + + + *: "MPEG Layer 3" + + + + id: LANG_AFMT_PCM_WAV + desc: audio format description + user: + + *: "PCM Wave" + + + *: "PCM Wave" + + + *: "PCM Wave" + + + + id: LANG_AFMT_WAVPACK + desc: audio format description + user: + + *: "WavPack" + + + *: "WavPack" + + + *: "WavPack" + + + + id: LANG_ENCODER_SETTINGS + desc: encoder settings + user: + + *: "Encoder Settings" + + + *: "Encoder Settings" + + + *: "Encoder Settings" + + + + id: LANG_NO_SETTINGS + desc: when something has settings in a certain context + user: + + *: "(No Settings)" + + + *: "(No Settings)" + + + *: "No settings available" + + + + id: LANG_SOURCE_FREQUENCY + desc: when recording source frequency setting must follow source + user: + + *: "(Same As Source)" + + + *: "(Same As Source)" + + + *: "Same As Source" + + + + id: LANG_BITRATE + desc: bits-kilobits per unit time + user: + + *: "Bitrate" + + + *: "Bitrate" + + + *: "Bitrate" + + + + id: LANG_RECORD_TRIGGER_TYPE + desc: in recording trigger menu + + *: "Trigtype" + + + *: "Trigtype" + + + *: "Trigtype" + + + + id: LANG_RECORD_TRIGGER_STOP + desc: trigger types + + *: "Stop" + + + *: "Stop" + + + *: "Stop" + + + + id: LANG_RECORD_TRIGGER_PAUSE + desc: trigger types + + *: "Pause" + + + *: "Pause" + + + *: "Pause" + + + + id: LANG_RECORD_TRIGGER_NEWFILESTP + desc: trigger types + + *: "New file" + + + *: "New file" + + + *: "New file" + + + + id: LANG_WARNING_BATTERY_LOW + desc: general warning + user: + + *: "WARNING! Low Battery!" + + + *: "WARNING! Low Battery!" + + + *: "" + + + + id: LANG_WARNING_BATTERY_EMPTY + desc: general warning + user: + + *: "Battery empty! RECHARGE!" + + + *: "Battery empty! RECHARGE!" + + + *: "" + + + + id: LANG_AFMT_AIFF + desc: audio format description + user: + + *: "AIFF" + + + *: "AIFF" + + + *: "AIFF" + + + + id: LANG_SYSFONT_AGC_SAFETY + desc: AGC preset + + *: "Safety (clip)" + + + *: "Safety (clip)" + + + *: "Safety (clip)" + + + + id: LANG_SYSFONT_AGC_LIVE + desc: AGC preset + + *: "Live (slow)" + + + *: "Live (slow)" + + + *: "Live (slow)" + + + + id: LANG_SYSFONT_AGC_DJSET + desc: AGC preset + + *: "DJ-Set (slow)" + + + *: "DJ-Set (slow)" + + + *: "DJ set (slow)" + + + + id: LANG_SYSFONT_AGC_MEDIUM + desc: AGC preset + + *: "Medium" + + + *: "Medium" + + + *: "Medium" + + + + id: LANG_SYSFONT_AGC_VOICE + desc: AGC preset + + *: "Voice (fast)" + + + *: "Voice (fast)" + + + *: "Voice (fast)" + + + + id: LANG_SYSFONT_RECORDING_AGC_MAXGAIN + desc: AGC maximum gain in recording screen + + *: "AGC max. gain" + + + *: "AGC max. gain" + + + *: "AGC maximum gain" + + + + id: LANG_PROPERTIES + desc: browser file/dir properties + user: + + *: "Properties" + + + *: "Properties" + + + *: "Properties" + + + + id: LANG_SHUFFLE_TRACKSKIP + desc: in settings_menu + user: + + *: "Shuffle and Track Skip" + + + *: "Shuffle and Track Skip" + + + *: "Shuffle and Track Skip" + + + + id: LANG_RUNNING_TIME + desc: in run time screen + user: + + *: "Running Time" + + + *: "Running Time" + + + *: "Running Time" + + + + id: LANG_CURRENT_TIME + desc: in run time screen + user: + + *: "Current Time" + + + *: "Current Time" + + + *: "Current Time" + + + + id: LANG_TOP_TIME + desc: in run time screen + user: + + *: "Top Time" + + + *: "Top Time" + + + *: "Top Time" + + + + id: LANG_CLEAR_TIME + desc: in run time screen + user: + + *: "Clear Time?" + + + *: "Clear Time?" + + + *: "Clear Time?" + + + + id: LANG_REPLACE + desc: in onplay menu. Replace the current playlist with a new one. + user: + + *: "Play Next" + + + *: "Play Next" + + + *: "Play Next" + + + + id: LANG_SAVE_THEME + desc: save a theme file + user: + + *: "Save Theme Settings" + + + *: "Save Theme Settings" + + + *: "Save Theme Settings" + + + + id: LANG_USB_CHARGING + desc: in Battery menu + user: + + *: "Charge During USB Connection" + + + *: "Charge During USB Connection" + + + *: "Charge During U S B Connection" + + + + id: LANG_ID3_ALBUMARTIST + desc: in tag viewer + user: + + *: "[Album Artist]" + + + *: "[Album Artist]" + + + *: "" + + + + id: LANG_ID3_COMMENT + desc: in tag viewer + user: + + *: "[Comment]" + + + *: "[Comment]" + + + *: "" + + + + id: LANG_CUESHEET + desc: + user: + + *: "Cuesheet" + + + *: "Cuesheet" + + + *: "Cuesheet" + + + + id: LANG_CUESHEET_ENABLE + desc: cuesheet support option + user: + + *: "Cuesheet Support" + + + *: "Cuesheet Support" + + + *: "Cuesheet Support" + + + + id: LANG_FM_MENU + desc: fm menu title + user: + + *: "FM Radio Menu" + + + *: "FM Radio Menu" + + + *: "FM Radio Menu" + + + + id: LANG_DIR_BROWSER + desc: in root menu + user: + + *: "Files" + + + *: "Files" + + + *: "Files" + + + + id: LANG_SETTINGS_MENU + desc: in root menu + user: + + *: "Settings" + + + *: "Settings" + + + *: "Settings" + + + + id: LANG_NOW_PLAYING + desc: in root menu + user: + + *: "Now Playing" + + + *: "Now Playing" + + + *: "Now Playing" + + + + id: LANG_RESUME_PLAYBACK + desc: in root menu + user: + + *: "Resume Playback" + + + *: "Resume Playback" + + + *: "Resume Playback" + + + + id: LANG_START_SCREEN + desc: in root menu setting + user: + + *: "Start Screen" + + + *: "Start Screen" + + + *: "Start Screen" + + + + id: LANG_ROCKBOX_TITLE + desc: in root menu + user: + + *: "Rockbox" + + + *: "Rockbox" + + + *: "Rockbox" + + + + id: LANG_MAIN_MENU + desc: in root menu setting + user: + + *: "Main Menu" + + + *: "Main Menu" + + + *: "Main Menu" + + + + id: LANG_PREVIOUS_SCREEN + desc: in root menu setting + user: + + *: "Previous Screen" + + + *: "Previous Screen" + + + *: "Previous Screen" + + + + id: LANG_ALARM_WAKEUP_SCREEN + desc: in alarm menu setting + user: + + *: "Alarm Wake up Screen" + + + *: "Alarm Wake up Screen" + + + *: "Alarm Wake up Screen" + + + + id: LANG_BUILDING_DATABASE + desc: splash database building progress + user: + + *: "Building database... %d found (OFF to return)" + h100,h120,h300: "Building database... %d found (STOP to return)" + ipod*: "Building database... %d found (PLAY/PAUSE to return)" + x5: "Building database... %d found (Long PLAY to return)" + h10,h10_5gb: "Building database... %d found (PREV to return)" + e200: "Building database... %d found (PREV to return)" + + + *: "Building database... %d found (OFF to return)" + h100,h120,h300: "Building database... %d found (STOP to return)" + ipod*: "Building database... %d found (PLAY/PAUSE to return)" + x5: "Building database... %d found (Long PLAY to return)" + h10,h10_5gb: "Building database... %d found (PREV to return)" + e200: "Building database... %d found (PREV to return)" + + + *: "" + + + + id: LANG_ONPLAY_MENU_TITLE + desc: title for the onplay menus + user: + + *: "Context Menu" + + + *: "Context Menu" + + + *: "Context Menu" + + + + id: LANG_BUTTONLIGHT_TIMEOUT + desc: in settings_menu + user: + + *: "" + e200: "Wheel Light Timeout" + gigabeatf: "Button Light Timeout" + + + *: "" + e200: "Wheel Light Timeout" + gigabeatf: "Button Light Timeout" + + + *: "" + e200: "Wheel Light Timeout" + gigabeatf: "Button Light Timeout" + + + + id: LANG_BUTTONLIGHT_BRIGHTNESS + desc: in settings_menu + user: + + *: "" + gigabeatf: "Button Light Brightness" + + + *: "" + gigabeatf: "Button Light Brightness" + + + *: "" + gigabeatf: "Button Light Brightness" + + + + id: LANG_PLAYLISTVIEWER_SETTINGS + desc: title for the playlist viewer settings menus + user: + + *: "Playlist Viewer Settings" + + + *: "Playlist Viewer Settings" + + + *: "Playlist Viewer Settings" + + + + id: LANG_BROWSE_CUESHEET + desc: + user: + + *: "Browse Cuesheet" + + + *: "Browse Cuesheet" + + + *: "Browse Cuesheet" + + + + id: LANG_COPYING + desc: + user: + + *: "Copying..." + + + *: "Copying..." + + + *: "Copying" + + + + id: LANG_DELETING + desc: + user: + + *: "Deleting..." + + + *: "Deleting..." + + + *: "Deleting" + + + + id: LANG_MOVING + desc: + user: + + *: "Moving..." + + + *: "Moving..." + + + *: "Moving" + + + + id: LANG_BOOKMARK_SELECT_BOOKMARK + desc: bookmark selection list title + user: + + *: "Select Bookmark" + + + *: "Select Bookmark" + + + *: "Select Bookmark" + + + + id: LANG_BOOKMARK_DONT_RESUME + desc: top item in the list when asking user about bookmark auto load + user: + + *: "" + + + *: "" + + + *: "Do Not Resume" + + + + id: LANG_BOOKMARK_SHUFFLE + desc: bookmark selection list, bookmark enables shuffle + user: + + *: ", Shuffle" + + + *: ", Shuffle" + + + *: "" + + + + id: LANG_BOOKMARK_INVALID + desc: bookmark selection list, bookmark couldn't be parsed + user: + + *: "" + + + *: "" + + + *: "Invalid Bookmark" + + + + id: LANG_BOOKMARK_CONTEXT_MENU + desc: bookmark selection list context menu + user: + + *: "Bookmark Actions" + + + *: "Bookmark Actions" + + + *: "Bookmark Actions" + + + + id: LANG_BOOKMARK_CONTEXT_RESUME + desc: bookmark context menu, resume this bookmark + user: + + *: "Resume" + + + *: "Resume" + + + *: "Resume" + + + + id: LANG_BOOKMARK_CONTEXT_DELETE + desc: bookmark context menu, delete this bookmark + user: + + *: "Delete" + + + *: "Delete" + + + *: "Delete" + + + + id: VOICE_BOOKMARK_SELECT_INDEX_TEXT + desc: voice only, used in the bookmark list to label index number + user: + + *: "" + + + *: "" + + + *: "Index" + + + + id: VOICE_BOOKMARK_SELECT_TIME_TEXT + desc: voice only, used in the bookmark select list to label elapsed time + user: + + *: "" + + + *: "" + + + *: "Time" + + + + id: LANG_LISTACCEL_START_DELAY + desc: Delay before list starts accelerating + user: + + *: "List Acceleration Start Delay" + + + *: "List Acceleration Start Delay" + + + *: "List Acceleration Start Delay" + + + + id: LANG_LISTACCEL_ACCEL_SPEED + desc: list acceleration speed + user: + + *: "List Acceleration Speed" + + + *: "List Acceleration Speed" + + + *: "List Acceleration Speed" + + + + id: LANG_VOICE_DIR_TALK + desc: Item of voice menu, whether to use directory .talk clips + user: + + *: "Use Directory .talk Clips" + + + *: "Use Directory .talk Clips" + + + *: "Use Directory .talk Clips" + + + + id: LANG_VOICE_FILE_TALK + desc: Item of voice menu, whether to use file .talk clips + user: + + *: "Use File .talk Clips" + + + *: "Use File .talk Clips" + + + *: "Use File .talk Clips" + + + + id: LANG_SET_AS_REC_DIR + desc: + user: + + *: "Set As Recording Directory" + + + *: "Set As Recording Directory" + + + *: "Set As Recording Directory" + + + + id: LANG_CLEAR_REC_DIR + desc: + user: + + *: "Clear Recording Directory" + + + *: "Clear Recording Directory" + + + *: "Clear Recording Directory" + + + + id: LANG_REC_DIR_NOT_WRITABLE + desc: + user: + + *: "Can't write to recording directory" + + + *: "Can't write to recording directory" + + + *: "Can't write to recording directory" + + diff -U 3 -H -d -r -N rockbox_svn.orig/apps/menus/settings_menu.c rockbox_svn/apps/menus/settings_menu.c --- rockbox_svn.orig/apps/menus/settings_menu.c 2007-07-15 15:54:56.672499200 -0500 +++ rockbox_svn/apps/menus/settings_menu.c 2007-07-15 16:11:13.631876700 -0500 @@ -333,6 +333,18 @@ MENUITEM_SETTING(buttonlight_brightness, &global_settings.buttonlight_brightness, NULL); #endif +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +MENUITEM_SETTING(ipod_scroll_wheel_acceleration_fast, &global_settings.ipod_scroll_wheel_acceleration_fast, NULL); +MENUITEM_SETTING(ipod_scroll_wheel_acceleration_faster, &global_settings.ipod_scroll_wheel_acceleration_faster, NULL); +MENUITEM_SETTING(ipod_scroll_wheel_acceleration_fastest, &global_settings.ipod_scroll_wheel_acceleration_fastest, NULL); + +MAKE_MENU(ipod_scroll_wheel_acceleration_menu, ID2P(LANG_IPOD_SCROLL_WHEEL_SPEED), 0, Icon_NOICON, + &ipod_scroll_wheel_acceleration_fast, + &ipod_scroll_wheel_acceleration_faster, + &ipod_scroll_wheel_acceleration_fastest, + ); +#endif + MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), 0, Icon_System_menu, &start_screen, @@ -365,6 +377,9 @@ #ifdef HAVE_BUTTONLIGHT_BRIGHTNESS &buttonlight_brightness #endif +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + &ipod_scroll_wheel_acceleration_menu, +#endif ); /* SYSTEM MENU */ diff -U 3 -H -d -r -N rockbox_svn.orig/apps/menus/settings_menu.c.orig rockbox_svn/apps/menus/settings_menu.c.orig --- rockbox_svn.orig/apps/menus/settings_menu.c.orig 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/menus/settings_menu.c.orig 2007-07-15 15:54:56.672499200 -0500 @@ -0,0 +1,459 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: settings_menu.c 13900 2007-07-15 03:56:04Z jdgordon $ + * + * Copyright (C) 2007 Jonathan Gordon + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include +#include +#include +#include +#include "config.h" +#include "lang.h" +#include "action.h" +#include "settings.h" +#include "menu.h" +#include "sound_menu.h" +#include "exported_menus.h" +#include "tree.h" +#include "tagtree.h" +#include "usb.h" +#include "splash.h" +#include "talk.h" +#include "sprintf.h" +#include "powermgmt.h" +#ifdef HAVE_RTC_ALARM +#include "alarm_menu.h" +#endif +#if CONFIG_TUNER +#include "radio.h" +#endif + +/***********************************/ +/* TAGCACHE MENU */ +#ifdef HAVE_TAGCACHE + +static void tagcache_rebuild_with_splash(void) +{ + tagcache_rebuild(); + gui_syncsplash(HZ*2, str(LANG_TAGCACHE_FORCE_UPDATE_SPLASH)); +} + +static void tagcache_update_with_splash(void) +{ + tagcache_update(); + gui_syncsplash(HZ*2, str(LANG_TAGCACHE_FORCE_UPDATE_SPLASH)); +} + +#ifdef HAVE_TC_RAMCACHE +MENUITEM_SETTING(tagcache_ram, &global_settings.tagcache_ram, NULL); +#endif +MENUITEM_SETTING(tagcache_autoupdate, &global_settings.tagcache_autoupdate, NULL); +MENUITEM_FUNCTION(tc_init, 0, ID2P(LANG_TAGCACHE_FORCE_UPDATE), + (int(*)(void))tagcache_rebuild_with_splash, + NULL, NULL, Icon_NOICON); +MENUITEM_FUNCTION(tc_update, 0, ID2P(LANG_TAGCACHE_UPDATE), + (int(*)(void))tagcache_update_with_splash, + NULL, NULL, Icon_NOICON); +MENUITEM_SETTING(runtimedb, &global_settings.runtimedb, NULL); +MENUITEM_FUNCTION(tc_export, 0, ID2P(LANG_TAGCACHE_EXPORT), + (int(*)(void))tagtree_export, NULL, + NULL, Icon_NOICON); +MENUITEM_FUNCTION(tc_import, 0, ID2P(LANG_TAGCACHE_IMPORT), + (int(*)(void))tagtree_import, NULL, + NULL, Icon_NOICON); +MAKE_MENU(tagcache_menu, ID2P(LANG_TAGCACHE), 0, Icon_NOICON, +#ifdef HAVE_TC_RAMCACHE + &tagcache_ram, +#endif + &tagcache_autoupdate, &tc_init, &tc_update, &runtimedb, + &tc_export, &tc_import); +#endif /* HAVE_TAGCACHE */ +/* TAGCACHE MENU */ +/***********************************/ + +/***********************************/ +/* FILE VIEW MENU */ +static int fileview_callback(int action,const struct menu_item_ex *this_item); +MENUITEM_SETTING(sort_case, &global_settings.sort_case, NULL); +MENUITEM_SETTING(sort_dir, &global_settings.sort_dir, fileview_callback); +MENUITEM_SETTING(sort_file, &global_settings.sort_file, fileview_callback); +MENUITEM_SETTING(dirfilter, &global_settings.dirfilter, NULL); +MENUITEM_SETTING(browse_current, &global_settings.browse_current, NULL); +MENUITEM_SETTING(show_path_in_browser, &global_settings.show_path_in_browser, NULL); +static int fileview_callback(int action,const struct menu_item_ex *this_item) +{ + static int oldval; + int *variable = this_item->variable; + switch (action) + { + case ACTION_ENTER_MENUITEM: /* on entering an item */ + oldval = *variable; + break; + case ACTION_EXIT_MENUITEM: /* on exit */ + if (*variable != oldval) + reload_directory(); /* force reload if this has changed */ + break; + } + return action; +} + +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 */ +/***********************************/ + + +/***********************************/ +/* SYSTEM MENU */ + +/* Battery */ +#ifndef SIMULATOR +#if BATTERY_CAPACITY_INC > 0 +MENUITEM_SETTING(battery_capacity, &global_settings.battery_capacity, NULL); +#endif +#if BATTERY_TYPES_COUNT > 1 +MENUITEM_SETTING(battery_type, &global_settings.battery_type, NULL); +#endif +#ifdef HAVE_USB_POWER +#if CONFIG_CHARGING +static int usbcharging_callback(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_EXIT_MENUITEM: /* on exit */ + usb_charging_enable(global_settings.usb_charging); + break; + } + return action; +} +MENUITEM_SETTING(usb_charging, &global_settings.usb_charging, usbcharging_callback); +#endif +#endif +MAKE_MENU(battery_menu, ID2P(LANG_BATTERY_MENU), 0, Icon_NOICON, +#if BATTERY_CAPACITY_INC > 0 + &battery_capacity, +#endif +#if BATTERY_TYPES_COUNT > 1 + &battery_type, +#endif +#ifdef HAVE_USB_POWER +#if CONFIG_CHARGING + &usb_charging, +#endif +#endif + ); +#endif /* SIMULATOR */ +/* Disk */ +#ifndef HAVE_MMC +MENUITEM_SETTING(disk_spindown, &global_settings.disk_spindown, NULL); +#ifdef HAVE_DIRCACHE +static int dircache_callback(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_EXIT_MENUITEM: /* on exit */ + switch (global_settings.dircache) + { + case true: + if (!dircache_is_enabled()) + gui_syncsplash(HZ*2, str(LANG_PLEASE_REBOOT)); + break; + case false: + if (dircache_is_enabled()) + dircache_disable(); + break; + } + break; + } + return action; +} +MENUITEM_SETTING(dircache, &global_settings.dircache, dircache_callback); +#endif +MAKE_MENU(disk_menu, ID2P(LANG_DISK_MENU), 0, Icon_NOICON, + &disk_spindown, +#ifdef HAVE_DIRCACHE + &dircache, +#endif + ); +#endif + +/* Time & Date */ +#if CONFIG_RTC +static int timedate_set(void) +{ + struct tm tm; + int result; + + /* Make a local copy of the time struct */ + memcpy(&tm, get_time(), sizeof(struct tm)); + + /* do some range checks */ + /* This prevents problems with time/date setting after a power loss */ + if (!valid_time(&tm)) + { +/* Macros to convert a 2-digit string to a decimal constant. + (YEAR), MONTH and DAY are set by the date command, which outputs + DAY as 00..31 and MONTH as 01..12. The leading zero would lead to + misinterpretation as an octal constant. */ +#define S100(x) 1 ## x +#define C2DIG2DEC(x) (S100(x)-100) + + tm.tm_hour = 0; + tm.tm_min = 0; + tm.tm_sec = 0; + tm.tm_mday = C2DIG2DEC(DAY); + tm.tm_mon = C2DIG2DEC(MONTH)-1; + tm.tm_wday = 1; + tm.tm_year = YEAR-1900; + } + + result = (int)set_time_screen(str(LANG_TIME), &tm); + + if(tm.tm_year != -1) { + set_time(&tm); + } + return result; +} + +MENUITEM_FUNCTION(time_set, 0, ID2P(LANG_TIME), + timedate_set, NULL, NULL, Icon_NOICON); +MENUITEM_SETTING(timeformat, &global_settings.timeformat, NULL); +MAKE_MENU(time_menu, ID2P(LANG_TIME_MENU), 0, Icon_NOICON, &time_set, &timeformat); +#endif + +/* System menu */ +MENUITEM_SETTING(poweroff, &global_settings.poweroff, NULL); + +#ifdef HAVE_RTC_ALARM +MENUITEM_FUNCTION(alarm_screen_call, 0, ID2P(LANG_ALARM_MOD_ALARM_MENU), + (menu_function)alarm_screen, NULL, NULL, Icon_NOICON); +#if CONFIG_TUNER || defined(HAVE_RECORDING) + +#if CONFIG_TUNER && !defined(HAVE_RECORDING) +/* This need only be shown if we dont have recording, because if we do + then always show the setting item, because there will always be at least + 2 items */ +static int alarm_callback(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_REQUEST_MENUITEM: + if (radio_hardware_present() == 0) + return ACTION_EXIT_MENUITEM; + break; + } + return action; +} +#else +#define alarm_callback NULL +#endif /* CONFIG_TUNER && !HAVE_RECORDING */ +/* have to do this manually because the setting screen + doesnt handle variable item count */ +static int alarm_setting(void) +{ + struct opt_items items[ALARM_START_COUNT]; + int i = 0; + items[i].string = str(LANG_RESUME_PLAYBACK); + items[i].voice_id = LANG_RESUME_PLAYBACK; + i++; +#if CONFIG_TUNER + if (radio_hardware_present()) + { + items[i].string = str(LANG_FM_RADIO); + items[i].voice_id = LANG_FM_RADIO; + i++; + } +#endif +#ifdef HAVE_RECORDING + items[i].string = str(LANG_RECORDING); + items[i].voice_id = LANG_RECORDING; + i++; +#endif + return set_option(str(LANG_ALARM_WAKEUP_SCREEN), + &global_settings.alarm_wake_up_screen, + INT, items, i, NULL); +} + +MENUITEM_FUNCTION(alarm_wake_up_screen, 0, ID2P(LANG_ALARM_WAKEUP_SCREEN), + alarm_setting, NULL, alarm_callback, Icon_Menu_setting); +#endif /* CONFIG_TUNER || defined(HAVE_RECORDING) */ +#endif /* HAVE_RTC_ALARM */ + +/* 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, Icon_NOICON, + &max_files_in_dir, &max_files_in_playlist); + +#if CONFIG_CODEC == MAS3507D +void dac_line_in(bool enable); +static int linein_callback(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_EXIT_MENUITEM: /* on exit */ +#ifndef SIMULATOR + dac_line_in(global_settings.line_in); +#endif + break; + } + return action; +} +MENUITEM_SETTING(line_in, &global_settings.line_in, linein_callback); +#endif +#if CONFIG_CHARGING +MENUITEM_SETTING(car_adapter_mode, &global_settings.car_adapter_mode, NULL); +#endif +MENUITEM_SETTING(start_screen, &global_settings.start_in_screen, NULL); + +#ifdef HAVE_BUTTON_LIGHT +MENUITEM_SETTING(button_light_timeout, &global_settings.button_light_timeout, NULL); +#endif + +#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS +MENUITEM_SETTING(buttonlight_brightness, &global_settings.buttonlight_brightness, NULL); +#endif + +MAKE_MENU(system_menu, ID2P(LANG_SYSTEM), + 0, Icon_System_menu, + &start_screen, +#ifndef SIMULATOR + &battery_menu, +#endif +#ifndef HAVE_MMC + &disk_menu, +#endif +#if CONFIG_RTC + &time_menu, +#endif + &poweroff, +#ifdef HAVE_RTC_ALARM + &alarm_screen_call, +#if defined(HAVE_RECORDING) || CONFIG_TUNER + &alarm_wake_up_screen, +#endif +#endif + &limits_menu, +#if CONFIG_CODEC == MAS3507D + &line_in, +#endif +#if CONFIG_CHARGING + &car_adapter_mode, +#endif +#ifdef HAVE_BUTTON_LIGHT + &button_light_timeout, +#endif +#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS + &buttonlight_brightness +#endif + ); + +/* SYSTEM MENU */ +/***********************************/ + + +/***********************************/ +/* BOOKMARK MENU */ +static int bmark_callback(int action,const struct menu_item_ex *this_item) +{ + (void)this_item; + switch (action) + { + case ACTION_EXIT_MENUITEM: /* on exit */ + if(global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_YES || + global_settings.autocreatebookmark == BOOKMARK_RECENT_ONLY_ASK) + { + if(global_settings.usemrb == BOOKMARK_NO) + global_settings.usemrb = BOOKMARK_YES; + + } + break; + } + return action; +} +MENUITEM_SETTING(autocreatebookmark, + &global_settings.autocreatebookmark, bmark_callback); +MENUITEM_SETTING(autoloadbookmark, &global_settings.autoloadbookmark, NULL); +MENUITEM_SETTING(usemrb, &global_settings.usemrb, NULL); +MAKE_MENU(bookmark_settings_menu, ID2P(LANG_BOOKMARK_SETTINGS), 0, + Icon_Bookmark, + &autocreatebookmark, &autoloadbookmark, &usemrb); +/* BOOKMARK MENU */ +/***********************************/ + +/***********************************/ +/* VOICE MENU */ +static int talk_callback(int action,const struct menu_item_ex *this_item); +MENUITEM_SETTING(talk_menu_item, &global_settings.talk_menu, NULL); +MENUITEM_SETTING(talk_dir_item, &global_settings.talk_dir, NULL); +MENUITEM_SETTING(talk_dir_clip_item, &global_settings.talk_dir_clip, talk_callback); +MENUITEM_SETTING(talk_file_item, &global_settings.talk_file, NULL); +MENUITEM_SETTING(talk_file_clip_item, &global_settings.talk_file_clip, talk_callback); +static int talk_callback(int action,const struct menu_item_ex *this_item) +{ + static int oldval = 0; + switch (action) + { + case ACTION_ENTER_MENUITEM: + oldval = global_settings.talk_file_clip; + break; + case ACTION_EXIT_MENUITEM: +#if CONFIG_CODEC == SWCODEC + audio_set_crossfade(global_settings.crossfade); +#endif + if (this_item == &talk_dir_clip_item) + break; + if (!oldval && global_settings.talk_file_clip) + { + /* force reload if newly talking thumbnails, + because the clip presence is cached only if enabled */ + reload_directory(); + } + break; + } + return action; +} +MAKE_MENU(voice_settings_menu, ID2P(LANG_VOICE), 0, Icon_Voice, + &talk_menu_item, &talk_dir_item, &talk_dir_clip_item, + &talk_file_item, &talk_file_clip_item); +/* VOICE MENU */ +/***********************************/ + +/***********************************/ +/* SETTINGS MENU */ +static int language_browse(void) +{ + return (int)rockbox_browse(LANG_DIR, SHOW_LNG); +} +MENUITEM_FUNCTION(browse_langs, 0, ID2P(LANG_LANGUAGE), language_browse, + NULL, NULL, Icon_Language); + +MAKE_MENU(settings_menu_item, ID2P(LANG_GENERAL_SETTINGS), 0, + Icon_General_settings_menu, + &playback_menu_item, &playlist_settings, &file_menu, +#ifdef HAVE_TAGCACHE + &tagcache_menu, +#endif + &display_menu, &system_menu, + &bookmark_settings_menu, &browse_langs, &voice_settings_menu ); +/* SETTINGS MENU */ +/***********************************/ diff -U 3 -H -d -r -N rockbox_svn.orig/apps/settings.h rockbox_svn/apps/settings.h --- rockbox_svn.orig/apps/settings.h 2007-07-13 02:20:04.531250000 -0500 +++ rockbox_svn/apps/settings.h 2007-07-15 16:11:13.663126900 -0500 @@ -712,6 +712,11 @@ #if defined(HAVE_RTC_ALARM) && \ (defined(HAVE_RECORDING) || CONFIG_TUNER) int alarm_wake_up_screen; + #if (CONFIG_KEYPAD == IPOD_4G_PAD) && !defined(IPOD_MINI) + unsigned int ipod_scroll_wheel_acceleration_fast; + unsigned int ipod_scroll_wheel_acceleration_faster; + unsigned int ipod_scroll_wheel_acceleration_fastest; + #endif #endif /* customizable icons */ #ifdef HAVE_LCD_BITMAP diff -U 3 -H -d -r -N rockbox_svn.orig/apps/settings.h.orig rockbox_svn/apps/settings.h.orig --- rockbox_svn.orig/apps/settings.h.orig 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/settings.h.orig 2007-07-13 02:20:04.531250000 -0500 @@ -0,0 +1,745 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: settings.h 13851 2007-07-11 05:41:23Z jdgordon $ + * + * Copyright (C) 2002 by wavey@wavey.org + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#ifndef __SETTINGS_H__ +#define __SETTINGS_H__ + +#include +#include "inttypes.h" +#include "config.h" +#include "file.h" +#include "dircache.h" +#include "timefuncs.h" +#include "tagcache.h" +#ifndef __PCTOOL__ +#include "button.h" +#endif + +#if CONFIG_CODEC == SWCODEC +#include "audio.h" +#endif + +#ifdef HAVE_BACKLIGHT_BRIGHTNESS +#include "backlight.h" /* for [MIN|MAX]_BRIGHTNESS_SETTING */ +#endif + +/** Setting values defines **/ + +/* name of directory where configuration, fonts and other data + * files are stored */ +#ifdef __PCTOOL__ +#define ROCKBOX_DIR "." +#define ROCKBOX_DIR_LEN 1 +#else +#define ROCKBOX_DIR "/.rockbox" +#define ROCKBOX_DIR_LEN 9 +#endif + +#define FONT_DIR ROCKBOX_DIR "/fonts" +#define LANG_DIR ROCKBOX_DIR "/langs" +#define WPS_DIR ROCKBOX_DIR "/wps" +#define THEME_DIR ROCKBOX_DIR "/themes" +#define ICON_DIR ROCKBOX_DIR "/icons" +#define PLUGIN_DIR ROCKBOX_DIR "/rocks" +#define VIEWERS_DIR ROCKBOX_DIR "/viewers" +#define BACKDROP_DIR ROCKBOX_DIR "/backdrops" +#define REC_BASE_DIR "/" +#define EQS_DIR ROCKBOX_DIR "/eqs" +#define CODECS_DIR ROCKBOX_DIR "/codecs" +#define RECPRESETS_DIR ROCKBOX_DIR "/recpresets" +#define FMPRESET_PATH ROCKBOX_DIR "/fmpresets" + +#define VIEWERS_CONFIG ROCKBOX_DIR "/viewers.config" +#define CONFIGFILE ROCKBOX_DIR "/config.cfg" +#define FIXEDSETTINGSFILE ROCKBOX_DIR "/fixed.cfg" + +#define MAX_FILENAME 32 + + +#define BOOKMARK_NO 0 +#define BOOKMARK_YES 1 +#define BOOKMARK_ASK 2 +#define BOOKMARK_UNIQUE_ONLY 2 +#define BOOKMARK_RECENT_ONLY_YES 3 +#define BOOKMARK_RECENT_ONLY_ASK 4 +#define FF_REWIND_1000 0 +#define FF_REWIND_2000 1 +#define FF_REWIND_3000 2 +#define FF_REWIND_4000 3 +#define FF_REWIND_5000 4 +#define FF_REWIND_6000 5 +#define FF_REWIND_8000 6 +#define FF_REWIND_10000 7 +#define FF_REWIND_15000 8 +#define FF_REWIND_20000 9 +#define FF_REWIND_25000 10 +#define FF_REWIND_30000 11 +#define FF_REWIND_45000 12 +#define FF_REWIND_60000 13 + +#define TRIG_MODE_OFF 0 +#define TRIG_MODE_NOREARM 1 +#define TRIG_MODE_REARM 2 + +#define TRIG_DURATION_COUNT 13 +extern const char * const trig_durations[TRIG_DURATION_COUNT]; + +#define CROSSFADE_ENABLE_SHUFFLE 1 +#define CROSSFADE_ENABLE_TRACKSKIP 2 +#define CROSSFADE_ENABLE_SHUFFLE_AND_TRACKSKIP 3 +#define CROSSFADE_ENABLE_ALWAYS 4 + +#define FOLDER_ADVANCE_OFF 0 +#define FOLDER_ADVANCE_NEXT 1 +#define FOLDER_ADVANCE_RANDOM 2 + +/* system defines */ +#ifndef TARGET_TREE + +#ifndef HAVE_LCD_COLOR +#define DEFAULT_CONTRAST_SETTING 40 +#endif + +#if defined HAVE_LCD_CHARCELLS +#define MIN_CONTRAST_SETTING 5 +#define MAX_CONTRAST_SETTING 31 +#else +#define MIN_CONTRAST_SETTING 5 +#define MAX_CONTRAST_SETTING 63 +#endif + +/* As it was */ +#ifdef HAVE_REMOTE_LCD +#ifndef DEFAULT_REMOTE_CONTRAST_SETTING +/* May be defined in config file if driver code needs the value */ +#define DEFAULT_REMOTE_CONTRAST_SETTING 42 +#endif +#define MIN_REMOTE_CONTRAST_SETTING MIN_CONTRAST_SETTING +#define MAX_REMOTE_CONTRAST_SETTING MAX_CONTRAST_SETTING +#endif + +#endif /* !TARGET_TREE */ + +#if !defined(HAVE_LCD_COLOR) +#define HAVE_LCD_CONTRAST +#endif + +/* repeat mode options */ +enum +{ + REPEAT_OFF, + REPEAT_ALL, + REPEAT_ONE, + REPEAT_SHUFFLE, +#ifdef AB_REPEAT_ENABLE + REPEAT_AB, +#endif + NUM_REPEAT_MODES +}; + +/* dir filter options */ +/* Note: Any new filter modes need to be added before NUM_FILTER_MODES. + * Any new rockbox browse filter modes (accessible through the menu) + * must be added after NUM_FILTER_MODES. */ +enum { SHOW_ALL, SHOW_SUPPORTED, SHOW_MUSIC, SHOW_PLAYLIST, SHOW_ID3DB, + NUM_FILTER_MODES, + SHOW_WPS, SHOW_RWPS, SHOW_FMR, SHOW_CFG, SHOW_LNG, SHOW_MOD, SHOW_FONT, SHOW_PLUGINS}; + +/* recursive dir insert options */ +enum { RECURSE_OFF, RECURSE_ON, RECURSE_ASK }; + +/* replaygain types */ +enum { REPLAYGAIN_TRACK = 0, REPLAYGAIN_ALBUM, REPLAYGAIN_SHUFFLE }; + +/* show path types */ +enum { SHOW_PATH_OFF = 0, SHOW_PATH_CURRENT, SHOW_PATH_FULL }; + +/* Alarm settings */ +#ifdef HAVE_RTC_ALARM +enum { ALARM_START_WPS = 0, +#if CONFIG_TUNER + ALARM_START_FM, +#endif +#ifdef HAVE_RECORDING + ALARM_START_REC, +#endif + ALARM_START_COUNT + }; +#if CONFIG_TUNER && defined(HAVE_RECORDING) +#define ALARM_SETTING_TEXT "wps,fm,rec" +#elif CONFIG_TUNER +#define ALARM_SETTING_TEXT "wps,fm" +#elif defined(HAVE_RECORDING) +#define ALARM_SETTING_TEXT "wps,rec" +#endif + +#endif /* HAVE_RTC_ALARM */ +/** virtual pointer stuff.. move to another .h maybe? **/ +/* These define "virtual pointers", which could either be a literal string, + or a mean a string ID if the pointer is in a certain range. + This helps to save space for menus and options. */ + +#define VIRT_SIZE 0xFFFF /* more than enough for our string ID range */ +#ifdef SIMULATOR +/* a space which is defined in stubs.c */ +extern unsigned char vp_dummy[VIRT_SIZE]; +#define VIRT_PTR vp_dummy +#else +/* a location where we won't store strings, 0 is the fastest */ +#define VIRT_PTR ((unsigned char*)0) +#endif + +/* form a "virtual pointer" out of a language ID */ +#define ID2P(id) (VIRT_PTR + id) + +/* resolve a pointer which could be a virtualized ID or a literal */ +#define P2STR(p) (char *)((p>=VIRT_PTR && p<=VIRT_PTR+VIRT_SIZE) ? str(p-VIRT_PTR) : p) + +/* get the string ID from a virtual pointer, -1 if not virtual */ +#define P2ID(p) ((p>=VIRT_PTR && p<=VIRT_PTR+VIRT_SIZE) ? p-VIRT_PTR : -1) + +/* !defined(HAVE_LCD_COLOR) implies HAVE_LCD_CONTRAST with default 40. + Explicitly define HAVE_LCD_CONTRAST in config file for newer ports for + simplicity. */ + + + +/** function prototypes **/ + +/* argument bits for settings_load() */ +#define SETTINGS_RTC 1 /* only the settings from the RTC nonvolatile RAM */ +#define SETTINGS_HD 2 /* only the settings from the disk sector */ +#define SETTINGS_ALL 3 /* both */ +void settings_load(int which); +bool settings_load_config(const char* file, bool apply); + +void status_save( void ); +int settings_save(void); +/* defines for the options paramater */ +enum { + SETTINGS_SAVE_CHANGED = 0, + SETTINGS_SAVE_ALL, + SETTINGS_SAVE_THEME, +#ifdef HAVE_RECORDING + SETTINGS_SAVE_RECPRESETS, +#endif +}; +bool settings_save_config(int options); + +void settings_reset(void); +void sound_settings_apply(void); +void settings_apply(void); +void settings_apply_pm_range(void); +void settings_display(void); + +enum optiontype { INT, BOOL }; + +struct opt_items { + unsigned const char* string; + long voice_id; +}; +const struct settings_list* find_setting(void* variable, int *id); +bool cfg_int_to_string(int setting_id, int val, char* buf, int buf_len); +void talk_setting(void *global_settings_variable); +bool set_sound(const unsigned char * string, + int* variable, int setting); +bool set_bool_options(const char* string, bool* variable, + const char* yes_str, int yes_voice, + const char* no_str, int no_voice, + void (*function)(bool)); + +bool set_bool(const char* string, bool* variable ); +bool set_option(const char* string, void* variable, enum optiontype type, + const struct opt_items* options, int numoptions, void (*function)(int)); +bool set_int(const unsigned char* string, const char* unit, int voice_unit, + int* variable, + void (*function)(int), int step, int min, int max, + void (*formatter)(char*, int, int, const char*) ); +/* use this one if you need to create a lang from the value (i.e with TALK_ID()) */ +bool set_int_ex(const unsigned char* string, const char* unit, int voice_unit, + int* variable, + void (*function)(int), int step, int min, int max, + void (*formatter)(char*, int, int, const char*), + long (*get_talk_id)(int)); + +/* the following are either not in setting.c or shouldnt be */ +bool set_time_screen(const char* string, struct tm *tm); +int read_line(int fd, char* buffer, int buffer_size); +void set_file(char* filename, char* setting, int maxlen); + + +/** global_settings and global_status struct definitions **/ + +struct system_status +{ + int resume_index; /* index in playlist (-1 for no active resume) */ + int resume_first_index; /* index of first track in playlist */ + uint32_t resume_offset; /* byte offset in mp3 file */ + int resume_seed; /* shuffle seed (-1=no resume shuffle 0=sorted + >0=shuffled) */ + int runtime; /* current runtime since last charge */ + int topruntime; /* top known runtime */ +#ifdef HAVE_DIRCACHE + int dircache_size; /* directory cache structure last size, 22 bits */ +#endif +#if CONFIG_TUNER + int last_frequency; /* Last frequency for resuming, in FREQ_STEP units, + relative to MIN_FREQ */ +#endif + char last_screen; + int viewer_icon_count; +}; + +struct user_settings +{ + /* audio settings */ + + int volume; /* audio output volume: 0-100 0=off 100=max */ + int balance; /* stereo balance: 0-100 0=left 50=bal 100=right */ + int bass; /* bass eq: 0-100 0=off 100=max */ + int treble; /* treble eq: 0-100 0=low 100=high */ + int loudness; /* loudness eq: 0-100 0=off 100=max */ + int avc; /* auto volume correct: 0=off, 1=20ms, 2=2s 3=4s 4=8s */ + int channel_config; /* Stereo, Mono, Custom, Mono left, Mono right, Karaoke */ + int stereo_width; /* 0-255% */ + int mdb_strength; /* 0-127dB */ + int mdb_harmonics; /* 0-100% */ + int mdb_center; /* 20-300Hz */ + int mdb_shape; /* 50-300Hz */ + bool mdb_enable; /* true/false */ + bool superbass; /* true/false */ + +#if CONFIG_CODEC == SWCODEC + int crossfade; /* Enable crossfade (0=off,1=shuffle,2=trackskip,3=shuff&trackskip,4=always) */ + int crossfade_fade_in_delay; /* Fade in delay (0-15s) */ + int crossfade_fade_out_delay; /* Fade out delay (0-15s) */ + int crossfade_fade_in_duration; /* Fade in duration (0-15s) */ + int crossfade_fade_out_duration; /* Fade out duration (0-15s) */ + int crossfade_fade_out_mixmode; /* Fade out mode (0=crossfade,1=mix) */ +#endif +#ifdef HAVE_RECORDING +#if CONFIG_CODEC == SWCODEC + int rec_format; /* record format index */ +#else + int rec_quality; /* 0-7 */ +#endif /* CONFIG_CODEC == SWCODEC */ + int rec_source; /* 0=mic, 1=line, 2=S/PDIF, 2 or 3=FM Radio */ + int rec_frequency; /* 0 = 44.1kHz (depends on target) + 1 = 48kHz + 2 = 32kHz + 3 = 22.05kHz + 4 = 24kHz + 5 = 16kHz */ + int rec_channels; /* 0=Stereo, 1=Mono */ + int rec_mic_gain; /* depends on target */ + int rec_left_gain; /* depends on target */ + int rec_right_gain; /* depands on target */ + bool rec_editable; /* true means that the bit reservoir is off */ + + /* note: timesplit setting is not saved */ + int rec_timesplit; /* 0 = off, + 1 = 00:05, 2 = 00:10, 3 = 00:15, 4 = 00:30 + 5 = 01:00, 6 = 02:00, 7 = 04:00, 8 = 06:00 + 9 = 08:00, 10= 10:00, 11= 12:00, 12= 18:00, + 13= 24:00 */ + int rec_sizesplit; /* 0 = off, + 1 = 5MB, 2 = 10MB, 3 = 15MB, 4 = 32MB + 5 = 64MB, 6 = 75MB, 7 = 100MB, 8 = 128MB + 9 = 256MB, 10= 512MB, 11= 650MB, 12= 700MB, + 13= 1GB, 14 = 1.5GB 15 = 1.75MB*/ + int rec_split_type; /* split/stop */ + int rec_split_method; /* time/filesize */ + + int rec_prerecord_time; /* In seconds, 0-30, 0 means OFF */ + char rec_directory[MAX_FILENAME+1]; + int cliplight; /* 0 = off + 1 = main lcd + 2 = main and remote lcd + 3 = remote lcd */ + + int rec_start_thres; /* negative: db, positive: % range -87 .. 100 */ + int rec_start_duration; /* index of trig_durations */ + int rec_stop_thres; /* negative: db, positive: % */ + int rec_stop_postrec; /* negative: db, positive: % range -87 .. 100 */ + int rec_stop_gap; /* index of trig_durations */ + int rec_trigger_mode; /* see TRIG_MODE_XXX constants */ + int rec_trigger_type; /* what to do when trigger released */ + +#ifdef HAVE_AGC + int rec_agc_preset_mic; /* AGC mic preset modes: + 0 = Off + 1 = Safety (clip) + 2 = Live (slow) + 3 = DJ-Set (slow) + 4 = Medium + 5 = Voice (fast) */ + int rec_agc_preset_line; /* AGC line-in preset modes: + 0 = Off + 1 = Safety (clip) + 2 = Live (slow) + 3 = DJ-Set (slow) + 4 = Medium + 5 = Voice (fast) */ + int rec_agc_maxgain_mic; /* AGC maximum mic gain */ + int rec_agc_maxgain_line; /* AGC maximum line-in gain */ + int rec_agc_cliptime; /* 0.2, 0.4, 0.6, 0.8, 1s */ +#endif +#endif /* HAVE_RECORDING */ + /* device settings */ + +#ifdef HAVE_LCD_CONTRAST + int contrast; /* lcd contrast */ +#endif + bool invert; /* invert display */ + bool invert_cursor; /* invert the current file in dir browser and menu + instead of using the default cursor */ + bool flip_display; /* turn display (and button layout) by 180 degrees */ + int poweroff; /* power off timer */ + int backlight_timeout; /* backlight off timeout: 0-18 0=never, + 1=always, + then according to timeout_values[] */ + int backlight_timeout_plugged; +#ifdef HAVE_BACKLIGHT_PWM_FADING + int backlight_fade_in; /* backlight fade in timing: 0..3 */ + int backlight_fade_out; /* backlight fade in timing: 0..7 */ +#endif + int battery_capacity; /* in mAh */ + int battery_type; /* for units which can take multiple types (Ondio). */ + +#ifdef HAVE_SPDIF_POWER + bool spdif_enable; /* S/PDIF power on/off */ +#endif + +#if CONFIG_TUNER + unsigned char fmr_file[MAX_FILENAME+1]; /* last fmr preset */ +#endif + unsigned char font_file[MAX_FILENAME+1]; /* last font */ + unsigned char wps_file[MAX_FILENAME+1]; /* last wps */ + unsigned char lang_file[MAX_FILENAME+1]; /* last language */ + + /* misc options */ + + int repeat_mode; /* 0=off 1=repeat all 2=repeat one 3=shuffle 4=ab */ + int dirfilter; /* 0=display all, 1=only supported, 2=only music, + 3=dirs+playlists, 4=ID3 database */ + bool sort_case; /* dir sort order: 0=case insensitive, 1=sensitive */ + int volume_type; /* how volume is displayed: 0=graphic, 1=percent */ + int battery_display; /* how battery is displayed: 0=graphic, 1=percent */ + int timeformat; /* time format: 0=24 hour clock, 1=12 hour clock */ + bool playlist_shuffle; + bool play_selected; /* Plays selected file even in shuffle mode */ + int ff_rewind_min_step; /* FF/Rewind minimum step size */ + int ff_rewind_accel; /* FF/Rewind acceleration (in seconds per doubling) */ + int disk_spindown; /* time until disk spindown, in seconds (0=off) */ + int buffer_margin; /* MP3 buffer watermark margin, in seconds */ + + int peak_meter_release; /* units per read out */ + int peak_meter_hold; /* hold time for peak meter in 1/100 s */ + int peak_meter_clip_hold; /* hold time for clips */ + bool peak_meter_dbfs; /* show linear or dbfs values */ + int peak_meter_min; /* range minimum */ + int peak_meter_max; /* range maximum */ + bool car_adapter_mode; /* 0=off 1=on */ + + /* show status bar */ + bool statusbar; /* 0=hide, 1=show */ + + /* show button bar */ + bool buttonbar; /* 0=hide, 1=show */ + + /* show scroll bar */ + bool scrollbar; /* 0=hide, 1=show */ + + /* goto current song when exiting WPS */ + bool browse_current; /* 1=goto current song, + 0=goto previous location */ + + + int scroll_speed; /* long texts scrolling speed: 1-30 */ + int bidir_limit; /* bidir scroll length limit */ + int scroll_delay; /* delay (in 1/10s) before starting scroll */ + int scroll_step; /* pixels to advance per update */ +#ifdef HAVE_REMOTE_LCD + int remote_scroll_speed; /* long texts scrolling speed: 1-30 */ + int remote_scroll_delay; /* delay (in 1/10s) before starting scroll */ + int remote_scroll_step; /* pixels to advance per update */ + int remote_bidir_limit; /* bidir scroll length limit */ +#endif + +#ifdef HAVE_LCD_BITMAP + bool offset_out_of_view; + int screen_scroll_step; +#endif + + /* auto bookmark settings */ + int autoloadbookmark; /* auto load option: 0=off, 1=ask, 2=on */ + int autocreatebookmark; /* auto create option: 0=off, 1=ask, 2=on */ + int usemrb; /* use MRB list: 0=No, 1=Yes*/ +#ifdef HAVE_LCD_CHARCELLS + int jump_scroll; /* Fast jump when scrolling */ + int jump_scroll_delay; /* Delay between jump scroll screens */ +#endif + bool fade_on_stop; /* fade on pause/unpause/stop */ + bool caption_backlight; /* turn on backlight at end and start of track */ + +#if CONFIG_TUNER + int fm_freq_step; /* Frequency step for manual tuning, in kHz */ + bool fm_force_mono; /* Forces Mono mode if true */ + bool fm_full_range; /* Enables full 10MHz-160MHz range if true, else + only 88MHz-108MHz */ +#endif + + int max_files_in_dir; /* Max entries in directory (file browser) */ + int max_files_in_playlist; /* Max entries in playlist */ + bool show_icons; /* 0=hide 1=show */ + int recursive_dir_insert; /* should directories be inserted recursively */ + + bool line_in; /* false=off, true=active */ + + bool id3_v1_first; /* true = ID3V1 has prio over ID3V2 tag */ + + /* playlist viewer settings */ + bool playlist_viewer_icons; /* display icons on viewer */ + bool playlist_viewer_indices; /* display playlist indices on viewer */ + int playlist_viewer_track_display; /* how to display tracks in viewer */ + + /* voice UI settings */ + bool talk_menu; /* enable voice UI */ + int talk_dir; /* voiced directories mode: 0=off 1=number 2=spell */ + bool talk_dir_clip; /* use directory .talk clips */ + int talk_file; /* voice file mode: 0=off, 1=number, 2=spell */ + bool talk_file_clip; /* use file .talk clips */ + + /* file browser sorting */ + int sort_file; /* 0=alpha, 1=date, 2=date (new first), 3=type */ + int sort_dir; /* 0=alpha, 1=date (old first), 2=date (new first) */ + +#ifdef HAVE_REMOTE_LCD + /* remote lcd */ + int remote_contrast; /* lcd contrast: 0-63 0=low 63=high */ + bool remote_invert; /* invert display */ + bool remote_flip_display; /* turn display (and button layout) by 180 degrees */ + int remote_backlight_timeout; /* backlight off timeout: 0-18 0=never, + 1=always, + then according to timeout_values[] */ + int remote_backlight_timeout_plugged; + bool remote_caption_backlight; /* turn on backlight at end and start of track */ +#ifdef HAS_REMOTE_BUTTON_HOLD + int remote_backlight_on_button_hold; /* what to do with remote backlight when hold + switch is on */ +#endif +#ifdef HAVE_REMOTE_LCD_TICKING + bool remote_reduce_ticking; /* 0=normal operation, + 1=EMI reduce on with cost more CPU. */ +#endif +#endif /* HAVE_REMOTE_LCD */ + + int next_folder; /* move to next folder */ + bool runtimedb; /* runtime database active? */ + +#if CONFIG_CODEC == SWCODEC + bool replaygain; /* enable replaygain */ + bool replaygain_noclip; /* scale to prevent clips */ + int replaygain_type; /* 0=track gain, 1=album gain, 2=track gain if + shuffle is on, album gain otherwise */ + int replaygain_preamp; /* scale replaygained tracks by this */ + int beep; /* system beep volume when changing tracks etc. */ + + /* Crossfeed settings */ + bool crossfeed; /* enable crossfeed */ + unsigned int crossfeed_direct_gain; /* - dB x 10 */ + unsigned int crossfeed_cross_gain; /* - dB x 10 */ + unsigned int crossfeed_hf_attenuation; /* - dB x 10 */ + unsigned int crossfeed_hf_cutoff; /* Frequency in Hz */ +#endif +#ifdef HAVE_DIRCACHE + bool dircache; /* enable directory cache */ +#endif +#ifdef HAVE_TAGCACHE +#ifdef HAVE_TC_RAMCACHE + bool tagcache_ram; /* load tagcache to ram? */ +#endif + bool tagcache_autoupdate; /* automatically keep tagcache in sync? */ +#endif + int default_codepage; /* set default codepage for tag conversion */ +#ifdef HAVE_REMOTE_LCD + unsigned char rwps_file[MAX_FILENAME+1]; /* last remote-wps */ +#endif +#ifdef HAVE_BACKLIGHT_BRIGHTNESS + int brightness; /* iriver h300: backlight PWM value: 2..15 + (0 and 1 are black) */ +#endif + +#if CONFIG_CODEC == SWCODEC + bool eq_enabled; /* Enable equalizer */ + unsigned int eq_precut; /* dB */ + + /* Order is important here, must be cutoff, q, then gain for each band. + See dsp_eq_update_data in dsp.c for why. */ + + /* Band 0 settings */ + int eq_band0_cutoff; /* Hz */ + int eq_band0_q; + int eq_band0_gain; /* +/- dB */ + + /* Band 1 settings */ + int eq_band1_cutoff; /* Hz */ + int eq_band1_q; + int eq_band1_gain; /* +/- dB */ + + /* Band 2 settings */ + int eq_band2_cutoff; /* Hz */ + int eq_band2_q; + int eq_band2_gain; /* +/- dB */ + + /* Band 3 settings */ + int eq_band3_cutoff; /* Hz */ + int eq_band3_q; + int eq_band3_gain; /* +/- dB */ + + /* Band 4 settings */ + int eq_band4_cutoff; /* Hz */ + int eq_band4_q; + int eq_band4_gain; /* +/- dB */ + + bool dithering_enabled; +#endif + +#if LCD_DEPTH > 1 + unsigned char backdrop_file[MAX_FILENAME+1]; /* backdrop bitmap file */ +#endif + + bool warnon_erase_dynplaylist; /* warn when erasing dynamic playlist */ + bool scroll_paginated; /* 0=dont 1=do */ +#ifdef HAVE_LCD_COLOR + int bg_color; /* background color native format */ + int fg_color; /* foreground color native format */ +#endif + bool party_mode; /* party mode - unstoppable music */ + +#ifdef HAVE_BACKLIGHT + bool bl_filter_first_keypress; /* filter first keypress when dark? */ +#ifdef HAVE_REMOTE_LCD + bool remote_bl_filter_first_keypress; /* filter first remote keypress when remote dark? */ +#endif +#ifdef HAS_BUTTON_HOLD + int backlight_on_button_hold; /* what to do with backlight when hold + switch is on */ +#endif +#ifdef HAVE_LCD_SLEEP + int lcd_sleep_after_backlight_off; /* when to put lcd to sleep after backlight + has turned off */ +#endif +#endif /* HAVE_BACKLIGHT */ + +#ifdef HAVE_LCD_BITMAP + unsigned char kbd_file[MAX_FILENAME+1]; /* last keyboard */ +#endif + +#ifdef HAVE_USB_POWER +#if CONFIG_CHARGING + bool usb_charging; +#endif +#endif + +#ifdef HAVE_WM8758 + bool eq_hw_enabled; /* Enable hardware equalizer */ + + int eq_hw_band0_cutoff; + int eq_hw_band0_gain; + + int eq_hw_band1_center; + int eq_hw_band1_bandwidth; + int eq_hw_band1_gain; + + int eq_hw_band2_center; + int eq_hw_band2_bandwidth; + int eq_hw_band2_gain; + + int eq_hw_band3_center; + int eq_hw_band3_bandwidth; + int eq_hw_band3_gain; + + int eq_hw_band4_cutoff; + int eq_hw_band4_gain; +#endif + bool hold_lr_for_scroll_in_list; /* hold L/R scrolls the list left/right */ + int show_path_in_browser; /* 0=off, 1=current directory, 2=full path */ + +#ifdef HAVE_HEADPHONE_DETECTION + int unplug_mode; /* pause on headphone unplug */ + int unplug_rw; /* time in s to rewind when pausing */ + bool unplug_autoresume; /* disable auto-resume if no phones */ +#endif +#if CONFIG_TUNER + int fm_region; +#endif + bool audioscrobbler; /* Audioscrobbler logging */ + + /* If values are just added to the end, no need to bump plugin API + version. */ + /* new stuff to be added at the end */ + +#if defined(HAVE_RECORDING) && CONFIG_CODEC == SWCODEC + /* Encoder Settings Start - keep these together */ + struct mp3_enc_config mp3_enc_config; +#if 0 /* These currently contain no members but their places in line + should be held */ + struct aiff_enc_config aiff_enc_config; + struct wav_enc_config wav_enc_config; + struct wavpack_enc_config wavpack_enc_config; +#endif + /* Encoder Settings End */ +#endif /* CONFIG_CODEC == SWCODEC */ + bool cuesheet; + int start_in_screen; +#if defined(HAVE_RTC_ALARM) && \ + (defined(HAVE_RECORDING) || CONFIG_TUNER) + int alarm_wake_up_screen; +#endif + /* customizable icons */ +#ifdef HAVE_LCD_BITMAP + unsigned char icon_file[MAX_FILENAME+1]; + unsigned char viewers_icon_file[MAX_FILENAME+1]; +#endif +#ifdef HAVE_REMOTE_LCD + unsigned char remote_icon_file[MAX_FILENAME+1]; + unsigned char remote_viewers_icon_file[MAX_FILENAME+1]; +#endif +#ifdef HAVE_LCD_COLOR + unsigned char colors_file[MAX_FILENAME+1]; +#endif +#ifdef HAVE_BUTTON_LIGHT + int button_light_timeout; +#endif +#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS + int buttonlight_brightness; +#endif + int list_accel_start_delay; /* ms before we start increaseing step size */ + int list_accel_wait; /* ms between increases */ +}; + +/** global variables **/ +extern long lasttime; +/* global settings */ +extern struct user_settings global_settings; +/* global status */ +extern struct system_status global_status; + +#endif /* __SETTINGS_H__ */ diff -U 3 -H -d -r -N rockbox_svn.orig/apps/settings_list.c rockbox_svn/apps/settings_list.c --- rockbox_svn.orig/apps/settings_list.c 2007-07-15 15:54:57.594380100 -0500 +++ rockbox_svn/apps/settings_list.c 2007-07-15 16:11:13.694377100 -0500 @@ -737,6 +737,21 @@ "id3 tag priority", "v2-v1,v1-v2", LANG_ID3_V1_FIRST, LANG_ID3_V2_FIRST, mpeg_id3_options), +#if (CONFIG_KEYPAD == IPOD_4G_PAD) && !defined(IPOD_MINI) + INT_SETTING(0, ipod_scroll_wheel_acceleration_fast, LANG_IPOD_SCROLL_WHEEL_FAST, 135, + "ipod scroll wheel fast threshold in clicks/sec", UNIT_SEC, + 5, 500, 5, + NULL, NULL, NULL), + INT_SETTING(0, ipod_scroll_wheel_acceleration_faster, LANG_IPOD_SCROLL_WHEEL_FASTER, 235, + "ipod scroll wheel faster threshold in clicks/sec", UNIT_SEC, + 5, 500, 5, + NULL, NULL, NULL), + INT_SETTING(0, ipod_scroll_wheel_acceleration_fastest, LANG_IPOD_SCROLL_WHEEL_FASTEST, 400, + "ipod scroll wheel fastest threshold in clicks/sec", UNIT_SEC, + 5, 500, 5, + NULL, NULL, NULL), +#endif + #ifdef HAVE_RECORDING /* recording */ STRINGCHOICE_SETTING(F_RECSETTING, rec_timesplit, LANG_SPLIT_TIME, 0, diff -U 3 -H -d -r -N rockbox_svn.orig/apps/settings_list.c.orig rockbox_svn/apps/settings_list.c.orig --- rockbox_svn.orig/apps/settings_list.c.orig 1969-12-31 18:00:00.000000000 -0600 +++ rockbox_svn/apps/settings_list.c.orig 2007-07-15 15:54:57.594380100 -0500 @@ -0,0 +1,1246 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id: settings_list.c 13900 2007-07-15 03:56:04Z jdgordon $ + * + * Copyright (C) 2007 Jonathan Gordon + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "config.h" +#include +#include +#include "ata.h" +#include "lang.h" +#include "talk.h" +#include "lcd.h" +#include "button.h" +#include "backlight.h" +#include "settings.h" +#include "settings_list.h" +#include "sound.h" +#include "dsp.h" +#include "debug.h" +#include "mpeg.h" +#include "audio.h" +#include "power.h" +#include "powermgmt.h" +#include "kernel.h" +#include "lcd-remote.h" +#include "list.h" +#include "rbunicode.h" +#ifdef HAVE_LCD_BITMAP +#include "peakmeter.h" +#endif +#include "menus/eq_menu.h" +#if CONFIG_TUNER +#include "radio.h" +#endif + + +#define NVRAM(bytes) (bytes< 1 + 10000, +#else + 400, +#endif + "max files in playlist", UNIT_INT,1000,20000,1000,NULL,NULL,NULL), + INT_SETTING(0,max_files_in_dir,LANG_MAX_FILES_IN_DIR, +#if MEM > 1 + 1000, +#else + 200, +#endif + "max files in dir", UNIT_INT,50,10000,50,NULL,NULL,NULL), +#ifndef SIMULATOR +#if BATTERY_CAPACITY_INC > 0 + INT_SETTING(0, battery_capacity, LANG_BATTERY_CAPACITY, BATTERY_CAPACITY_DEFAULT, + "battery capacity", UNIT_MAH, + BATTERY_CAPACITY_MIN, BATTERY_CAPACITY_MAX, BATTERY_CAPACITY_INC, + NULL, NULL, NULL), +#endif +#endif +#if CONFIG_CHARGING + OFFON_SETTING(NVRAM(1), car_adapter_mode, + LANG_CAR_ADAPTER_MODE, false, "car adapter mode", NULL), +#endif + /* tuner */ +#if CONFIG_TUNER + OFFON_SETTING(0,fm_force_mono, LANG_FM_MONO_MODE, + false, "force fm mono", toggle_mono_mode), + SYSTEM_SETTING(NVRAM(4),last_frequency,0), +#endif + +#if BATTERY_TYPES_COUNT > 1 + CHOICE_SETTING(0, battery_type, LANG_BATTERY_TYPE, 0, + "battery type","alkaline,nimh", NULL, 2, + ID2P(LANG_BATTERY_TYPE_ALKALINE), ID2P(LANG_BATTERY_TYPE_NIMH)), +#endif +#ifdef HAVE_REMOTE_LCD + /* remote lcd */ + INT_SETTING(0, remote_contrast, LANG_CONTRAST, DEFAULT_REMOTE_CONTRAST_SETTING, + "remote contrast", UNIT_INT, MIN_REMOTE_CONTRAST_SETTING, + MAX_REMOTE_CONTRAST_SETTING, 1, NULL, NULL, lcd_remote_set_contrast), + BOOL_SETTING(0, remote_invert, LANG_INVERT, false ,"remote invert", off_on, + LANG_INVERT_LCD_INVERSE, LANG_INVERT_LCD_NORMAL, lcd_remote_set_invert_display), + OFFON_SETTING(0,remote_flip_display, LANG_FLIP_DISPLAY, + false,"remote flip display", NULL), + INT_SETTING_W_CFGVALS(F_FLIPLIST, remote_backlight_timeout, LANG_BACKLIGHT, 6, + "remote backlight timeout", backlight_times_conf, UNIT_SEC, + 0, 18, 1, backlight_formatter, backlight_getlang, + remote_backlight_set_timeout), +#if CONFIG_CHARGING + INT_SETTING_W_CFGVALS(F_FLIPLIST, remote_backlight_timeout_plugged, + LANG_BACKLIGHT_ON_WHEN_CHARGING, 11, + "remote backlight timeout plugged", backlight_times_conf, UNIT_SEC, + 0, 18, 1, backlight_formatter, backlight_getlang, + remote_backlight_set_timeout_plugged), +#endif +#ifdef HAVE_REMOTE_LCD_TICKING + OFFON_SETTING(0,remote_reduce_ticking, LANG_REDUCE_TICKING, + false,"remote reduce ticking", NULL), +#endif +#endif + +#ifdef HAVE_BACKLIGHT + OFFON_SETTING(0,bl_filter_first_keypress, + LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false, + "backlight filters first keypress", NULL), +#ifdef HAVE_REMOTE_LCD + OFFON_SETTING(0,remote_bl_filter_first_keypress, + LANG_BACKLIGHT_FILTER_FIRST_KEYPRESS, false, + "backlight filters first remote keypress", NULL), +#endif +#endif /* HAVE_BACKLIGHT */ + +/** End of old RTC config block **/ + +#ifdef HAVE_BACKLIGHT + OFFON_SETTING(0,caption_backlight, LANG_CAPTION_BACKLIGHT, + false,"caption backlight",NULL), +#ifdef HAVE_REMOTE_LCD + OFFON_SETTING(0,remote_caption_backlight, LANG_CAPTION_BACKLIGHT, + false,"remote caption backlight",NULL), +#endif +#endif /* HAVE_BACKLIGHT */ +#ifdef HAVE_BACKLIGHT_BRIGHTNESS + INT_SETTING(0, brightness, LANG_BRIGHTNESS, DEFAULT_BRIGHTNESS_SETTING, + "brightness",UNIT_INT, MIN_BRIGHTNESS_SETTING, MAX_BRIGHTNESS_SETTING, 1, + NULL, NULL, backlight_set_brightness), +#endif +#if defined(HAVE_BACKLIGHT_PWM_FADING) && !defined(SIMULATOR) + /* backlight fading */ + STRINGCHOICE_SETTING(0,backlight_fade_in, LANG_BACKLIGHT_FADE_IN, 1, + "backlight fade in","off,500ms,1s,2s", backlight_set_fade_in, 4, + LANG_OFF, TALK_ID(500, UNIT_MS), + TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC)), + STRINGCHOICE_SETTING(0,backlight_fade_out, LANG_BACKLIGHT_FADE_OUT, 1, + "backlight fade out","off,500ms,1s,2s,3s,5s,10s", backlight_set_fade_out, 7, + LANG_OFF, TALK_ID(500, UNIT_MS), + TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC), + TALK_ID(3, UNIT_SEC), TALK_ID(5, UNIT_SEC), TALK_ID(10, UNIT_SEC)), +#endif + INT_SETTING(0, scroll_speed, LANG_SCROLL_SPEED, 9,"scroll speed", + UNIT_INT, 0, 15, 1, NULL, NULL, lcd_scroll_speed), + INT_SETTING(0, scroll_delay, LANG_SCROLL_DELAY, 1000, "scroll delay", + UNIT_MS, 0, 2500, 100, NULL, + NULL, lcd_scroll_delay) , + INT_SETTING(0, bidir_limit, LANG_BIDIR_SCROLL, 50, "bidir limit", + UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_bidir_scroll), +#ifdef HAVE_REMOTE_LCD + INT_SETTING(0, remote_scroll_speed, LANG_SCROLL_SPEED, 9, "remote scroll speed", + UNIT_INT, 0,15, 1, NULL, NULL, lcd_remote_scroll_speed), + INT_SETTING(0, remote_scroll_step, LANG_SCROLL_STEP, 6, "remote scroll step", + UNIT_PIXEL, 1, LCD_REMOTE_WIDTH, 1, NULL, NULL, lcd_remote_scroll_step), + INT_SETTING(0, remote_scroll_delay, LANG_SCROLL_DELAY, 1000, "remote scroll delay", + UNIT_MS, 0, 2500, 100, NULL, NULL, lcd_remote_scroll_delay), + INT_SETTING(0, remote_bidir_limit, LANG_BIDIR_SCROLL, 50, "remote bidir limit", + UNIT_PERCENT, 0, 200, 25, NULL, NULL, lcd_remote_bidir_scroll), +#endif +#ifdef HAVE_LCD_BITMAP + OFFON_SETTING(0, offset_out_of_view, LANG_SCREEN_SCROLL_VIEW, + false, "Screen Scrolls Out Of View", NULL), + INT_SETTING(0, scroll_step, LANG_SCROLL_STEP, 6, "scroll step", + UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, lcd_scroll_step), + INT_SETTING(0, screen_scroll_step, LANG_SCREEN_SCROLL_STEP, + 16, "screen scroll step", + UNIT_PIXEL, 1, LCD_WIDTH, 1, NULL, NULL, NULL), +#endif /* HAVE_LCD_BITMAP */ +#ifdef HAVE_LCD_CHARCELLS + INT_SETTING(0, jump_scroll, LANG_JUMP_SCROLL, 0, "jump scroll", + UNIT_INT, 0, 5, 1, jumpscroll_format, jumpscroll_getlang, lcd_jump_scroll), + INT_SETTING(0, jump_scroll_delay, LANG_JUMP_SCROLL_DELAY, 500, "jump scroll delay", + UNIT_MS, 0, 2500, 100, NULL, NULL, lcd_jump_scroll_delay), +#endif + OFFON_SETTING(0,scroll_paginated,LANG_SCROLL_PAGINATED, + false,"scroll paginated",NULL), +#ifdef HAVE_LCD_COLOR + {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.fg_color,-1,INT(LCD_DEFAULT_FG), + "foreground color",NULL,UNUSED}, + {F_T_INT|F_RGB|F_THEMESETTING ,&global_settings.bg_color,-1,INT(LCD_DEFAULT_BG), + "background color",NULL,UNUSED}, +#endif + /* more playback */ + OFFON_SETTING(0,play_selected,LANG_PLAY_SELECTED,true,"play selected",NULL), + OFFON_SETTING(0,party_mode,LANG_PARTY_MODE,false,"party mode",NULL), + OFFON_SETTING(0,fade_on_stop,LANG_FADE_ON_STOP,true,"volume fade",NULL), + INT_SETTING_W_CFGVALS(F_FLIPLIST, ff_rewind_min_step, LANG_FFRW_STEP, FF_REWIND_1000, + "scan min step", "1,2,3,4,5,6,8,10,15,20,25,30,45,60", UNIT_SEC, + 13, 0, -1, ff_rewind_min_step_formatter, + ff_rewind_min_step_getlang, NULL), + INT_SETTING(0, ff_rewind_accel, LANG_FFRW_ACCEL, 3, "scan accel", + UNIT_SEC, 16, 0, -1, scanaccel_formatter, scanaccel_getlang, NULL), +#if CONFIG_CODEC == SWCODEC + STRINGCHOICE_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0,"antiskip", + "5s,15s,30s,1min,2min,3min,5min,10min",NULL, 8, + TALK_ID(5, UNIT_SEC), TALK_ID(15, UNIT_SEC), + TALK_ID(30, UNIT_SEC), TALK_ID(1, UNIT_MIN), TALK_ID(2, UNIT_MIN), + TALK_ID(3, UNIT_MIN), TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN)), +#else + INT_SETTING(0, buffer_margin, LANG_MP3BUFFER_MARGIN, 0, "antiskip", + UNIT_SEC, 0, 7, 1, NULL, NULL, audio_set_buffer_margin), +#endif + /* disk */ +#ifndef HAVE_MMC + INT_SETTING(0, disk_spindown, LANG_SPINDOWN, 5, "disk spindown", + UNIT_SEC, 3, 254, 1, NULL, NULL, ata_spindown), +#endif /* HAVE_MMC */ + /* browser */ + CHOICE_SETTING(0, dirfilter, LANG_FILTER, SHOW_SUPPORTED, "show files", + "all,supported,music,playlists", NULL, 4, ID2P(LANG_FILTER_ALL), + ID2P(LANG_FILTER_SUPPORTED), ID2P(LANG_FILTER_MUSIC), ID2P(LANG_FILTER_PLAYLIST)), + OFFON_SETTING(0,sort_case,LANG_SORT_CASE,false,"sort case",NULL), + OFFON_SETTING(0,browse_current,LANG_FOLLOW,false,"follow playlist",NULL), + OFFON_SETTING(0,playlist_viewer_icons,LANG_SHOW_ICONS,true, + "playlist viewer icons",NULL), + OFFON_SETTING(0,playlist_viewer_indices,LANG_SHOW_INDICES,true, + "playlist viewer indices",NULL), + CHOICE_SETTING(0, playlist_viewer_track_display, LANG_TRACK_DISPLAY, 0, + "playlist viewer track display","track name,full path", NULL, 2, + ID2P(LANG_DISPLAY_TRACK_NAME_ONLY), ID2P(LANG_DISPLAY_FULL_PATH)), + CHOICE_SETTING(0, recursive_dir_insert, LANG_RECURSE_DIRECTORY , RECURSE_OFF, + "recursive directory insert", off_on_ask, NULL , 3 , + ID2P(LANG_OFF), ID2P(LANG_ON), ID2P(LANG_RESUME_SETTING_ASK)), + /* bookmarks */ + CHOICE_SETTING(0, autocreatebookmark, LANG_BOOKMARK_SETTINGS_AUTOCREATE, + BOOKMARK_NO, "autocreate bookmarks", + "off,on,ask,recent only - on,recent only - ask", NULL, 5, + ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES), + ID2P(LANG_RESUME_SETTING_ASK), ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_YES), + ID2P(LANG_BOOKMARK_SETTINGS_RECENT_ONLY_ASK)), + CHOICE_SETTING(0, autoloadbookmark, LANG_BOOKMARK_SETTINGS_AUTOLOAD, + BOOKMARK_NO, "autoload bookmarks", off_on_ask, NULL, 3, + ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES), ID2P(LANG_RESUME_SETTING_ASK)), + CHOICE_SETTING(0, usemrb, LANG_BOOKMARK_SETTINGS_MAINTAIN_RECENT_BOOKMARKS, + BOOKMARK_NO, "use most-recent-bookmarks", "off,on,unique only", NULL, 3, + ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES), + ID2P(LANG_BOOKMARK_SETTINGS_UNIQUE_ONLY)), +#ifdef HAVE_LCD_BITMAP + /* peak meter */ + STRINGCHOICE_SETTING(0, peak_meter_clip_hold, LANG_PM_CLIP_HOLD, 16, + "peak meter clip hold", + "on,1,2,3,4,5,6,7,8,9,10,15,20,25,30,45,60,90,2min" + ",3min,5min,10min,20min,45min,90min", peak_meter_set_clip_hold, + 25, LANG_PM_ETERNAL, + TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC), TALK_ID(3, UNIT_SEC), + TALK_ID(4, UNIT_SEC), TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC), + TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC), TALK_ID(9, UNIT_SEC), + TALK_ID(10, UNIT_SEC), TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC), + TALK_ID(25, UNIT_SEC), TALK_ID(30, UNIT_SEC), TALK_ID(45, UNIT_SEC), + TALK_ID(60, UNIT_SEC), TALK_ID(90, UNIT_SEC), TALK_ID(2, UNIT_MIN), + TALK_ID(3, UNIT_MIN), TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN), + TALK_ID(20, UNIT_MIN), TALK_ID(45, UNIT_MIN), TALK_ID(90, UNIT_MIN)), + STRINGCHOICE_SETTING(0, peak_meter_hold, LANG_PM_PEAK_HOLD, 3, + "peak meter hold", + "off,200ms,300ms,500ms,1,2,3,4,5,6,7,8,9,10,15,20,30,1min", + NULL, 18, LANG_OFF, + TALK_ID(200, UNIT_MS), TALK_ID(300, UNIT_MS), TALK_ID(500, UNIT_MS), + TALK_ID(1, UNIT_SEC), TALK_ID(2, UNIT_SEC), TALK_ID(3, UNIT_SEC), + TALK_ID(4, UNIT_SEC), TALK_ID(5, UNIT_SEC), TALK_ID(6, UNIT_SEC), + TALK_ID(7, UNIT_SEC), TALK_ID(8, UNIT_SEC), TALK_ID(9, UNIT_SEC), + TALK_ID(10, UNIT_SEC), TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC), + TALK_ID(30, UNIT_SEC), TALK_ID(60, UNIT_SEC)), + INT_SETTING(0, peak_meter_release, LANG_PM_RELEASE, 8, "peak meter release", + LANG_PM_UNITS_PER_READ, 1, 0x7e1, 1, NULL, NULL,NULL), + OFFON_SETTING(0,peak_meter_dbfs,LANG_PM_DBFS,true,"peak meter dbfs",NULL), + {F_T_INT,&global_settings.peak_meter_min,LANG_PM_MIN,INT(60),"peak meter min",NULL,UNUSED}, + {F_T_INT,&global_settings.peak_meter_max,LANG_PM_MAX,INT(0),"peak meter max",NULL,UNUSED}, +#endif +#if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F) + SOUND_SETTING(0, mdb_strength, LANG_MDB_STRENGTH, + "mdb strength", SOUND_MDB_STRENGTH), + SOUND_SETTING(0, mdb_harmonics, LANG_MDB_HARMONICS, + "mdb harmonics", SOUND_MDB_HARMONICS), + SOUND_SETTING(0, mdb_center, LANG_MDB_CENTER, + "mdb center", SOUND_MDB_CENTER), + SOUND_SETTING(0, mdb_shape, LANG_MDB_SHAPE, + "mdb shape", SOUND_MDB_SHAPE), + OFFON_SETTING(0, mdb_enable, LANG_MDB_ENABLE, + false, "mdb enable", set_mdb_enable), +#endif +#if CONFIG_CODEC == MAS3507D + OFFON_SETTING(0,line_in,LANG_LINE_IN,false,"line in",NULL), +#endif + /* voice */ + OFFON_SETTING(F_TEMPVAR, talk_menu, LANG_VOICE_MENU, true, "talk menu", NULL), + CHOICE_SETTING(0, talk_dir, LANG_VOICE_DIR, 0, + "talk dir", off_number_spell, NULL, 3, + ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER), + ID2P(LANG_VOICE_SPELL)), + OFFON_SETTING(F_TEMPVAR, talk_dir_clip, LANG_VOICE_DIR_TALK, false, "talk dir clip", NULL), + CHOICE_SETTING(0, talk_file, LANG_VOICE_FILE, 0, + "talk file", off_number_spell, NULL, 3, + ID2P(LANG_OFF), ID2P(LANG_VOICE_NUMBER), + ID2P(LANG_VOICE_SPELL)), + OFFON_SETTING(F_TEMPVAR, talk_file_clip, LANG_VOICE_FILE_TALK, false, "talk file clip", NULL), + + /* file sorting */ + CHOICE_SETTING(0, sort_file, LANG_SORT_FILE, 0 , + "sort files", "alpha,oldest,newest,type", NULL, 4, + ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE), + ID2P(LANG_SORT_DATE_REVERSE) , ID2P(LANG_SORT_TYPE)), + CHOICE_SETTING(0, sort_dir, LANG_SORT_DIR, 0 , + "sort dirs", "alpha,oldest,newest", NULL, 3, + ID2P(LANG_SORT_ALPHA), ID2P(LANG_SORT_DATE), + ID2P(LANG_SORT_DATE_REVERSE)), + BOOL_SETTING(0, id3_v1_first, LANG_ID3_ORDER, false, + "id3 tag priority", "v2-v1,v1-v2", + LANG_ID3_V1_FIRST, LANG_ID3_V2_FIRST, mpeg_id3_options), + +#ifdef HAVE_RECORDING + /* recording */ + STRINGCHOICE_SETTING(F_RECSETTING, rec_timesplit, LANG_SPLIT_TIME, 0, + "rec timesplit", + "off,00:05,00:10,00:15,00:30,01:00,01:14,01:20,02:00," + "04:00,06:00,08:00,10:00,12:00,18:00,24:00", + NULL, 16, LANG_OFF, + TALK_ID(5, UNIT_MIN), TALK_ID(10, UNIT_MIN), TALK_ID(15, UNIT_MIN), + TALK_ID(30, UNIT_MIN), TALK_ID(60, UNIT_MIN), TALK_ID(74, UNIT_MIN), + TALK_ID(80, UNIT_MIN), TALK_ID(2, UNIT_HOUR), TALK_ID(4, UNIT_HOUR), + TALK_ID(6, UNIT_HOUR), TALK_ID(8, UNIT_HOUR), TALK_ID(10, UNIT_HOUR), + TALK_ID(12, UNIT_HOUR), TALK_ID(18, UNIT_HOUR), TALK_ID(20, UNIT_HOUR), + TALK_ID(24, UNIT_HOUR)), + STRINGCHOICE_SETTING(F_RECSETTING, rec_sizesplit, LANG_SPLIT_SIZE, 0, + "rec sizesplit", + "off,5MB,10MB,15MB,32MB,64MB,75MB,100MB,128MB," + "256MB,512MB,650MB,700MB,1GB,1.5GB,1.75GB", + NULL, 16, LANG_OFF, + TALK_ID(5, UNIT_MB), TALK_ID(10, UNIT_MB), TALK_ID(15, UNIT_MB), + TALK_ID(32, UNIT_MB), TALK_ID(64, UNIT_MB), TALK_ID(75, UNIT_MB), + TALK_ID(100, UNIT_MB), TALK_ID(128, UNIT_MB), TALK_ID(256, UNIT_MB), + TALK_ID(512, UNIT_MB), TALK_ID(650, UNIT_MB), TALK_ID(700, UNIT_MB), + TALK_ID(1024, UNIT_MB), TALK_ID(1536, UNIT_MB), TALK_ID(1792, UNIT_MB)), + {F_T_INT|F_RECSETTING, &global_settings.rec_channels, + LANG_RECORDING_CHANNELS, INT(0), + "rec channels","stereo,mono",UNUSED}, + CHOICE_SETTING(F_RECSETTING, rec_split_type, LANG_SPLIT_TYPE, 0 , + "rec split type", "Split, Stop", NULL, 2, + ID2P(LANG_START_NEW_FILE), ID2P(LANG_STOP_RECORDING)), + CHOICE_SETTING(F_RECSETTING, rec_split_method, LANG_SPLIT_MEASURE, 0 , + "rec split method", "Time,Filesize", NULL, 2, + ID2P(LANG_REC_TIME), ID2P(LANG_REC_SIZE)), + {F_T_INT|F_RECSETTING, &global_settings.rec_source, + LANG_RECORDING_SOURCE, INT(0), + "rec source", + &HAVE_MIC_REC_(",mic") + HAVE_LINE_REC_(",line") + HAVE_SPDIF_REC_(",spdif") + HAVE_FMRADIO_REC_(",fmradio")[1] + ,UNUSED}, + INT_SETTING(F_RECSETTING, rec_prerecord_time, LANG_RECORD_PRERECORD_TIME, + 0, "prerecording time", + UNIT_SEC, 0, 30, 1, rectime_formatter, rectime_getlang, NULL), + + FILENAME_SETTING(F_RECSETTING, rec_directory, "rec path", + REC_BASE_DIR, NULL, NULL, MAX_FILENAME+1), +#ifdef HAVE_BACKLIGHT + CHOICE_SETTING(F_RECSETTING, cliplight, LANG_CLIP_LIGHT, 0 , + "cliplight", "off,main,both,remote", NULL, +#ifdef HAVE_REMOTE_LCD + 4, +#else + 2, +#endif + ID2P(LANG_OFF), ID2P(LANG_MAIN_UNIT) +#ifdef HAVE_REMOTE_LCD + , ID2P(LANG_REMOTE_MAIN), ID2P(LANG_REMOTE_UNIT) +#endif + ), + {F_T_INT|F_RECSETTING,&global_settings.cliplight,LANG_CLIP_LIGHT,INT(0), + "cliplight","off,main,both,remote",UNUSED}, +#endif +#ifdef DEFAULT_REC_MIC_GAIN + {F_T_INT|F_RECSETTING,&global_settings.rec_mic_gain, + LANG_RECORDING_GAIN,INT(DEFAULT_REC_MIC_GAIN), + "rec mic gain",NULL,UNUSED}, +#endif /* DEFAULT_REC_MIC_GAIN */ +#ifdef DEFAULT_REC_LEFT_GAIN + {F_T_INT|F_RECSETTING,&global_settings.rec_left_gain, + LANG_RECORDING_LEFT,INT(DEFAULT_REC_LEFT_GAIN), + "rec left gain",NULL,UNUSED}, +#endif /* DEFAULT_REC_LEFT_GAIN */ +#ifdef DEFAULT_REC_RIGHT_GAIN + {F_T_INT|F_RECSETTING,&global_settings.rec_right_gain,LANG_RECORDING_RIGHT, + INT(DEFAULT_REC_RIGHT_GAIN), + "rec right gain",NULL,UNUSED}, +#endif /* DEFAULT_REC_RIGHT_GAIN */ +#if CONFIG_CODEC == MAS3587F + {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, + LANG_RECORDING_FREQUENCY, + INT(0),"rec frequency","44,48,32,22,24,16",UNUSED}, + INT_SETTING(F_RECSETTING, rec_quality, LANG_RECORDING_QUALITY, + 5, "rec quality", + UNIT_INT, 0, 7, 1, NULL, NULL, NULL), + OFFON_SETTING(F_RECSETTING,rec_editable,LANG_RECORDING_EDITABLE, + false,"editable recordings",NULL), +#endif /* CONFIG_CODEC == MAS3587F */ +#if CONFIG_CODEC == SWCODEC + {F_T_INT|F_RECSETTING,&global_settings.rec_frequency, + LANG_RECORDING_FREQUENCY,INT(REC_FREQ_DEFAULT), + "rec frequency",REC_FREQ_CFG_VAL_LIST,UNUSED}, + {F_T_INT|F_RECSETTING,&global_settings.rec_format, + LANG_RECORDING_FORMAT,INT(REC_FORMAT_DEFAULT), + "rec format",REC_FORMAT_CFG_VAL_LIST,UNUSED}, + /** Encoder settings start - keep these together **/ + /* aiff_enc */ + /* (no settings yet) */ + /* mp3_enc */ + {F_T_INT|F_RECSETTING, &global_settings.mp3_enc_config.bitrate,-1, + INT(MP3_ENC_BITRATE_CFG_DEFAULT), + "mp3_enc bitrate",MP3_ENC_BITRATE_CFG_VALUE_LIST,UNUSED}, + /* wav_enc */ + /* (no settings yet) */ + /* wavpack_enc */ + /* (no settings yet) */ + /** Encoder settings end **/ +#endif /* CONFIG_CODEC == SWCODEC */ + /* values for the trigger */ + {F_T_INT|F_RECSETTING,&global_settings.rec_start_thres, + LANG_RECORD_START_THRESHOLD, INT(-35), + "trigger start threshold",NULL,UNUSED}, + {F_T_INT|F_RECSETTING,&global_settings.rec_stop_thres, + LANG_RECORD_STOP_THRESHOLD,INT(-45), + "trigger stop threshold",NULL,UNUSED}, + {F_T_INT|F_RECSETTING,&global_settings.rec_start_duration, + LANG_RECORD_MIN_DURATION,INT(0), + "trigger start duration",trig_durations_conf,UNUSED}, + {F_T_INT|F_RECSETTING,&global_settings.rec_stop_postrec, + LANG_RECORD_STOP_POSTREC,INT(2), + "trigger stop postrec",trig_durations_conf,UNUSED}, + {F_T_INT|F_RECSETTING,&global_settings.rec_stop_gap, + LANG_RECORD_STOP_GAP,INT(1), + "trigger min gap",trig_durations_conf,UNUSED}, + {F_T_INT|F_RECSETTING,&global_settings.rec_trigger_mode, + LANG_RECORD_TRIGGER_MODE,INT(0), + "trigger mode","off,once,repeat",UNUSED}, +#endif /* HAVE_RECORDING */ + +#ifdef HAVE_SPDIF_POWER + OFFON_SETTING(0, spdif_enable, LANG_SPDIF_ENABLE, false, + "spdif enable", spdif_power_enable), +#endif + CHOICE_SETTING(0, next_folder, LANG_NEXT_FOLDER, FOLDER_ADVANCE_OFF, + "folder navigation", "off,on,random",NULL ,3, + ID2P(LANG_SET_BOOL_NO), ID2P(LANG_SET_BOOL_YES), ID2P(LANG_RANDOM)), + OFFON_SETTING(0,runtimedb,LANG_RUNTIMEDB_ACTIVE,false,"gather runtime data",NULL), + +#if CONFIG_CODEC == SWCODEC + /* replay gain */ + OFFON_SETTING(0, replaygain, LANG_REPLAYGAIN_ENABLE, false, "replaygain", NULL), + CHOICE_SETTING(0, replaygain_type, LANG_REPLAYGAIN_MODE, REPLAYGAIN_ALBUM, + "replaygain type", "track,album,track shuffle", NULL, 3, + ID2P(LANG_TRACK_GAIN), ID2P(LANG_ALBUM_GAIN), ID2P(LANG_SHUFFLE_GAIN)), + OFFON_SETTING(0, replaygain_noclip, LANG_REPLAYGAIN_NOCLIP, + false, "replaygain noclip", NULL), + INT_SETTING(0, replaygain_preamp, LANG_REPLAYGAIN_PREAMP, 0, "replaygain preamp", + UNIT_DB, -120, 120, 5, replaygain_preamp_format, NULL, NULL), + + CHOICE_SETTING(0, beep, LANG_BEEP, 0, + "beep", "off,weak,moderate,strong", NULL, 4, + ID2P(LANG_OFF), ID2P(LANG_WEAK), ID2P(LANG_MODERATE), ID2P(LANG_STRONG)), + + /* crossfade */ + CHOICE_SETTING(0, crossfade, LANG_CROSSFADE_ENABLE, 0, "crossfade", + "off,shuffle,track skip,shuffle and track skip,always",NULL, 5, + ID2P(LANG_OFF), ID2P(LANG_SHUFFLE), ID2P(LANG_TRACKSKIP), + ID2P(LANG_SHUFFLE_TRACKSKIP), ID2P(LANG_ALWAYS)), + INT_SETTING(0, crossfade_fade_in_delay, LANG_CROSSFADE_FADE_IN_DELAY, 0, + "crossfade fade in delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL), + INT_SETTING(0, crossfade_fade_out_delay, LANG_CROSSFADE_FADE_OUT_DELAY, 0, + "crossfade fade out delay", UNIT_SEC, 0, 7, 1, NULL, NULL, NULL), + INT_SETTING(0, crossfade_fade_in_duration, LANG_CROSSFADE_FADE_IN_DURATION, 2, + "crossfade fade in duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL), + INT_SETTING(0, crossfade_fade_out_duration, LANG_CROSSFADE_FADE_OUT_DURATION, 2, + "crossfade fade out duration", UNIT_SEC, 0, 15, 1, NULL, NULL, NULL), + CHOICE_SETTING(0, crossfade_fade_out_mixmode, LANG_CROSSFADE_FADE_OUT_MODE, + 0, "crossfade fade out mode", "crossfade,mix", NULL, 2, + ID2P(LANG_CROSSFADE), ID2P(LANG_MIX)), + + /* crossfeed */ + OFFON_SETTING(0,crossfeed, LANG_CROSSFEED, false, + "crossfeed", dsp_set_crossfeed), + INT_SETTING(0, crossfeed_direct_gain, LANG_CROSSFEED_DIRECT_GAIN, 15, + "crossfeed direct gain", UNIT_DB, 0, 60, 5, + crossfeed_format, NULL, dsp_set_crossfeed_direct_gain), + INT_SETTING(0, crossfeed_cross_gain, LANG_CROSSFEED_CROSS_GAIN, 60, + "crossfeed cross gain", UNIT_DB, 30, 120, 5, + crossfeed_format, NULL, crossfeed_cross_set), + INT_SETTING(0, crossfeed_hf_attenuation, LANG_CROSSFEED_HF_ATTENUATION, 160, + "crossfeed hf attenuation", UNIT_DB, 60, 240, 5, + crossfeed_format, NULL, crossfeed_cross_set), + INT_SETTING(0, crossfeed_hf_cutoff, LANG_CROSSFEED_HF_CUTOFF, 700, + "crossfeed hf cutoff", UNIT_HERTZ, 500, 2000, 100, + NULL, NULL, crossfeed_cross_set), + /* equalizer */ + OFFON_SETTING(0,eq_enabled,LANG_EQUALIZER_ENABLED,false,"eq enabled",NULL), + INT_SETTING(0, eq_precut, LANG_EQUALIZER_PRECUT, 0, "eq precut", + UNIT_DB, 0, 240, 5, eq_precut_format, NULL, dsp_set_eq_precut), + /* 0..32768 Hz */ + INT_SETTING(0, eq_band0_cutoff, LANG_EQUALIZER_BAND_CUTOFF, 60, "eq band 0 cutoff", + UNIT_HERTZ, EQ_CUTOFF_MIN, EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, + NULL, NULL, NULL), + INT_SETTING(0, eq_band1_cutoff, LANG_EQUALIZER_BAND_CENTER, 200, "eq band 1 cutoff", + UNIT_HERTZ, EQ_CUTOFF_MIN, EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, + NULL, NULL, NULL), + INT_SETTING(0, eq_band2_cutoff, LANG_EQUALIZER_BAND_CENTER, 800, "eq band 2 cutoff", + UNIT_HERTZ, EQ_CUTOFF_MIN, EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, + NULL, NULL, NULL), + INT_SETTING(0, eq_band3_cutoff, LANG_EQUALIZER_BAND_CENTER, 4000, "eq band 3 cutoff", + UNIT_HERTZ, EQ_CUTOFF_MIN, EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, + NULL, NULL, NULL), + INT_SETTING(0, eq_band4_cutoff, LANG_EQUALIZER_BAND_CUTOFF, 12000, "eq band 4 cutoff", + UNIT_HERTZ, EQ_CUTOFF_MIN, EQ_CUTOFF_MAX, EQ_CUTOFF_STEP, + NULL, NULL, NULL), + /* 0..64 (or 0.0 to 6.4) */ + INT_SETTING(0, eq_band0_q, LANG_EQUALIZER_BAND_Q, 7, "eq band 0 q", + UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP, + eq_q_format, NULL, NULL), + INT_SETTING(0, eq_band1_q, LANG_EQUALIZER_BAND_Q, 10, "eq band 1 q", + UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP, + eq_q_format, NULL, NULL), + INT_SETTING(0, eq_band2_q, LANG_EQUALIZER_BAND_Q, 10, "eq band 2 q", + UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP, + eq_q_format, NULL, NULL), + INT_SETTING(0, eq_band3_q, LANG_EQUALIZER_BAND_Q, 10, "eq band 3 q", + UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP, + eq_q_format, NULL, NULL), + INT_SETTING(0, eq_band4_q, LANG_EQUALIZER_BAND_Q, 7, "eq band 4 q", + UNIT_INT, EQ_Q_MIN, EQ_Q_MAX, EQ_Q_STEP, + eq_q_format, NULL, NULL), + /* -240..240 (or -24db to +24db) */ + INT_SETTING(0, eq_band0_gain, LANG_EQUALIZER_BAND_GAIN, 0, "eq band 0 gain", + UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX, EQ_GAIN_STEP, + eq_gain_format, NULL, NULL), + INT_SETTING(0, eq_band1_gain, LANG_EQUALIZER_BAND_GAIN, 0, "eq band 1 gain", + UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX, EQ_GAIN_STEP, + eq_gain_format, NULL, NULL), + INT_SETTING(0, eq_band2_gain, LANG_EQUALIZER_BAND_GAIN, 0, "eq band 2 gain", + UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX, EQ_GAIN_STEP, + eq_gain_format, NULL, NULL), + INT_SETTING(0, eq_band3_gain, LANG_EQUALIZER_BAND_GAIN, 0, "eq band 3 gain", + UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX, EQ_GAIN_STEP, + eq_gain_format, NULL, NULL), + INT_SETTING(0, eq_band4_gain, LANG_EQUALIZER_BAND_GAIN, 0, "eq band 4 gain", + UNIT_DB, EQ_GAIN_MIN, EQ_GAIN_MAX, EQ_GAIN_STEP, + eq_gain_format, NULL, NULL), + + /* dithering */ + OFFON_SETTING(0, dithering_enabled, LANG_DITHERING, + false, "dithering enabled", dsp_dither_enable), +#endif +#ifdef HAVE_DIRCACHE + OFFON_SETTING(0,dircache,LANG_DIRCACHE_ENABLE,false,"dircache",NULL), + SYSTEM_SETTING(NVRAM(4),dircache_size,0), +#endif + +#ifdef HAVE_TAGCACHE +#ifdef HAVE_TC_RAMCACHE + OFFON_SETTING(0,tagcache_ram,LANG_TAGCACHE_RAM,false,"tagcache_ram",NULL), +#endif + OFFON_SETTING(0,tagcache_autoupdate, + LANG_TAGCACHE_AUTOUPDATE,false,"tagcache_autoupdate",NULL), +#endif +#ifdef HAVE_LCD_BITMAP + CHOICE_SETTING(0, default_codepage, LANG_DEFAULT_CODEPAGE, 0, + "default codepage", /* The order must match with that in unicode.c */ + "iso8859-1,iso8859-7,iso8859-8,cp1251,iso8859-11,cp1256," + "iso8859-9,iso8859-2,sjis,gb2312,ksx1001,big5,utf-8", + set_codepage, 13, + ID2P(LANG_CODEPAGE_LATIN1), ID2P(LANG_CODEPAGE_GREEK), + ID2P(LANG_CODEPAGE_HEBREW), ID2P(LANG_CODEPAGE_CYRILLIC), + ID2P(LANG_CODEPAGE_THAI), ID2P(LANG_CODEPAGE_ARABIC), + ID2P(LANG_CODEPAGE_TURKISH), ID2P(LANG_CODEPAGE_LATIN_EXTENDED), + ID2P(LANG_CODEPAGE_JAPANESE), ID2P(LANG_CODEPAGE_SIMPLIFIED), + ID2P(LANG_CODEPAGE_KOREAN), ID2P(LANG_CODEPAGE_TRADITIONAL), + ID2P(LANG_CODEPAGE_UTF8)), +#else /* !HAVE_LCD_BITMAP */ + CHOICE_SETTING(0, default_codepage, LANG_DEFAULT_CODEPAGE, 0, + "default codepage", /* The order must match with that in unicode.c */ + "iso8859-1,iso8859-7,cp1251,iso8859-9,iso8859-2,utf-8", + set_codepage, 6, + ID2P(LANG_CODEPAGE_LATIN1), ID2P(LANG_CODEPAGE_GREEK), + ID2P(LANG_CODEPAGE_CYRILLIC), ID2P(LANG_CODEPAGE_TURKISH), + ID2P(LANG_CODEPAGE_LATIN_EXTENDED), ID2P(LANG_CODEPAGE_UTF8)), +#endif + + OFFON_SETTING(0,warnon_erase_dynplaylist, + LANG_WARN_ERASEDYNPLAYLIST_MENU,false, + "warn when erasing dynamic playlist",NULL), + +#ifdef HAVE_BACKLIGHT +#ifdef HAS_BUTTON_HOLD + CHOICE_SETTING(0, backlight_on_button_hold, + LANG_BACKLIGHT_ON_BUTTON_HOLD, 0, "backlight on button hold", + "normal,off,on", backlight_set_on_button_hold, 3, + ID2P(LANG_BACKLIGHT_ON_BUTTON_HOLD_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)), +#endif + +#ifdef HAVE_LCD_SLEEP + STRINGCHOICE_SETTING(0, lcd_sleep_after_backlight_off, + LANG_LCD_SLEEP_AFTER_BACKLIGHT_OFF, 3, + "lcd sleep after backlight off", + "always,never,5,10,15,20,30,45,60,90", lcd_set_sleep_after_backlight_off, + 10, LANG_ALWAYS, LANG_NEVER, TALK_ID(5, UNIT_SEC), TALK_ID(10, UNIT_SEC), + TALK_ID(15, UNIT_SEC), TALK_ID(20, UNIT_SEC), TALK_ID(30, UNIT_SEC), + TALK_ID(45, UNIT_SEC),TALK_ID(60, UNIT_SEC), TALK_ID(90, UNIT_SEC)), +#endif +#endif /* HAVE_BACKLIGHT */ + +#ifdef HAVE_WM8758 + OFFON_SETTING(0,eq_hw_enabled,LANG_EQUALIZER_HARDWARE_ENABLED,false, + "eq hardware enabled",NULL), + + STRINGCHOICE_SETTING(0, eq_hw_band0_cutoff, LANG_EQUALIZER_BAND_CUTOFF, 1, + "eq hardware band 0 cutoff", "80Hz,105Hz,135Hz,175Hz", NULL, 4, + TALK_ID(80, UNIT_HERTZ), TALK_ID(105, UNIT_HERTZ), + TALK_ID(135, UNIT_HERTZ), TALK_ID(175, UNIT_HERTZ)), + INT_SETTING(0, eq_hw_band0_gain, LANG_EQUALIZER_BAND_GAIN, 0, + "eq hardware band 0 gain", UNIT_DB, EQ_HW_GAIN_MIN, + EQ_HW_GAIN_MAX, EQ_HW_GAIN_STEP, eq_hw_gain_format, NULL, NULL), + + STRINGCHOICE_SETTING(0, eq_hw_band1_center, LANG_EQUALIZER_BAND_CENTER, 1, + "eq hardware band 1 center", "230Hz,300Hz,385Hz,500Hz", NULL, 4, + TALK_ID(230, UNIT_HERTZ), TALK_ID(300, UNIT_HERTZ), + TALK_ID(385, UNIT_HERTZ), TALK_ID(500, UNIT_HERTZ)), + CHOICE_SETTING(0, eq_hw_band1_bandwidth, LANG_EQUALIZER_BANDWIDTH, 0, + "eq hardware band 1 bandwidth", "narrow,wide", NULL, 2, + ID2P(LANG_EQUALIZER_HARDWARE_BANDWIDTH_NARROW), + ID2P(LANG_EQUALIZER_HARDWARE_BANDWIDTH_WIDE)), + INT_SETTING(0, eq_hw_band1_gain, LANG_EQUALIZER_BAND_GAIN, 0, + "eq hardware band 1 gain", UNIT_DB, EQ_HW_GAIN_MIN, + EQ_HW_GAIN_MAX, EQ_HW_GAIN_STEP, eq_hw_gain_format, NULL, NULL), + + STRINGCHOICE_SETTING(0, eq_hw_band2_center, LANG_EQUALIZER_BAND_CENTER, 1, + "eq hardware band 2 center", "650Hz,850Hz,1.1kHz,1.4kHz", NULL, 4, + TALK_ID(650, UNIT_HERTZ), TALK_ID(850, UNIT_HERTZ), + TALK_ID(1100, UNIT_HERTZ), TALK_ID(1400, UNIT_HERTZ)), + CHOICE_SETTING(0, eq_hw_band2_bandwidth, LANG_EQUALIZER_BANDWIDTH, 0, + "eq hardware band 2 bandwidth", "narrow,wide", NULL, 2, + ID2P(LANG_EQUALIZER_HARDWARE_BANDWIDTH_NARROW), + ID2P(LANG_EQUALIZER_HARDWARE_BANDWIDTH_WIDE)), + INT_SETTING(0, eq_hw_band2_gain, LANG_EQUALIZER_BAND_GAIN, 0, + "eq hardware band 2 gain", UNIT_DB, EQ_HW_GAIN_MIN, + EQ_HW_GAIN_MAX, EQ_HW_GAIN_STEP, eq_hw_gain_format, NULL, NULL), + + STRINGCHOICE_SETTING(0, eq_hw_band3_center, LANG_EQUALIZER_BAND_CENTER, 1, + "eq hardware band 3 center", "1.8kHz,2.4kHz,3.2kHz,4.1kHz", NULL, 4, + TALK_ID(1800, UNIT_HERTZ), TALK_ID(2400, UNIT_HERTZ), + TALK_ID(3200, UNIT_HERTZ), TALK_ID(4100, UNIT_HERTZ)), + CHOICE_SETTING(0, eq_hw_band3_bandwidth, LANG_EQUALIZER_BANDWIDTH, 0, + "eq hardware band 3 bandwidth", "narrow,wide", NULL, 2, + ID2P(LANG_EQUALIZER_HARDWARE_BANDWIDTH_NARROW), + ID2P(LANG_EQUALIZER_HARDWARE_BANDWIDTH_WIDE)), + INT_SETTING(0, eq_hw_band3_gain, LANG_EQUALIZER_BAND_GAIN, 0, + "eq hardware band 3 gain", UNIT_DB, EQ_HW_GAIN_MIN, + EQ_HW_GAIN_MAX, EQ_HW_GAIN_STEP, eq_hw_gain_format, NULL, NULL), + + STRINGCHOICE_SETTING(0, eq_hw_band4_cutoff, LANG_EQUALIZER_BAND_CUTOFF, 1, + "eq hardware band 4 cutoff", "5.3kHz,6.9kHz,9kHz,11.7kHz", NULL, 4, + TALK_ID(5300, UNIT_HERTZ), TALK_ID(6900, UNIT_HERTZ), + TALK_ID(9000, UNIT_HERTZ), TALK_ID(11700, UNIT_HERTZ)), + INT_SETTING(0, eq_hw_band4_gain, LANG_EQUALIZER_BAND_GAIN, 0, + "eq hardware band 4 gain", UNIT_DB, EQ_HW_GAIN_MIN, + EQ_HW_GAIN_MAX, EQ_HW_GAIN_STEP, eq_hw_gain_format, NULL, NULL), +#endif + + OFFON_SETTING(0,hold_lr_for_scroll_in_list,-1,true, + "hold_lr_for_scroll_in_list",NULL), + CHOICE_SETTING(0, show_path_in_browser, LANG_SHOW_PATH, SHOW_PATH_OFF, + "show path in browser", "off,current directory,full path", NULL, 3, + ID2P(LANG_OFF), ID2P(LANG_SHOW_PATH_CURRENT), ID2P(LANG_SHOW_PATH_FULL)), + +#ifdef HAVE_AGC + {F_T_INT,&global_settings.rec_agc_preset_mic,LANG_RECORD_AGC_PRESET,INT(1), + "agc mic preset",NULL,UNUSED}, + {F_T_INT,&global_settings.rec_agc_preset_line,LANG_RECORD_AGC_PRESET,INT(1), + "agc line preset",NULL,UNUSED}, + {F_T_INT,&global_settings.rec_agc_maxgain_mic,-1,INT(104), + "agc maximum mic gain",NULL,UNUSED}, + {F_T_INT,&global_settings.rec_agc_maxgain_line,-1,INT(96), + "agc maximum line gain",NULL,UNUSED}, + {F_T_INT,&global_settings.rec_agc_cliptime,LANG_RECORD_AGC_CLIPTIME,INT(1), + "agc cliptime","0.2s,0.4s,0.6s,0.8,1s",UNUSED}, +#endif + +#ifdef HAVE_REMOTE_LCD +#ifdef HAS_REMOTE_BUTTON_HOLD + CHOICE_SETTING(0, remote_backlight_on_button_hold, + LANG_BACKLIGHT_ON_BUTTON_HOLD, 0, "remote backlight on button hold", + "normal,off,on", remote_backlight_set_on_button_hold, 3, + ID2P(LANG_BACKLIGHT_ON_BUTTON_HOLD_NORMAL), ID2P(LANG_OFF), ID2P(LANG_ON)), +#endif +#endif +#ifdef HAVE_HEADPHONE_DETECTION + CHOICE_SETTING(0, unplug_mode, LANG_UNPLUG, 0, + "pause on headphone unplug", "off,pause,pause and resume", NULL, 3, + ID2P(LANG_OFF), ID2P(LANG_PAUSE), ID2P(LANG_UNPLUG_RESUME)), + INT_SETTING(0, unplug_rw, LANG_UNPLUG_RW, 0, "rewind duration on pause", + UNIT_SEC, 0, 15, 1, NULL, NULL,NULL) , + OFFON_SETTING(0,unplug_autoresume,LANG_UNPLUG_DISABLE_AUTORESUME,false, + "disable autoresume if phones not present",NULL), +#endif +#if CONFIG_TUNER + CHOICE_SETTING(0, fm_region, LANG_FM_REGION, 0, + "fm_region", "eu,us,jp,kr", set_radio_region, 4, ID2P(LANG_FM_EUROPE), + ID2P(LANG_FM_US), ID2P(LANG_FM_JAPAN), ID2P(LANG_FM_KOREA)), +#endif + + OFFON_SETTING(0,audioscrobbler,LANG_AUDIOSCROBBLER, + false,"Last.fm Logging",NULL), + +#ifdef HAVE_RECORDING + {F_T_INT|F_RECSETTING,&global_settings.rec_trigger_type, + LANG_RECORD_TRIGGER_TYPE, + INT(0),"trigger type","stop,pause,nf stp",UNUSED}, +#endif + + /** settings not in the old config blocks **/ +#if CONFIG_TUNER + FILENAME_SETTING(0, fmr_file, "fmr", + "", FMPRESET_PATH "/", ".fmr", MAX_FILENAME+1), +#endif + FILENAME_SETTING(F_THEMESETTING, font_file, "font", + "", FONT_DIR "/", ".fnt", MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING,wps_file, "wps", + "", WPS_DIR "/", ".wps", MAX_FILENAME+1), + FILENAME_SETTING(0,lang_file,"lang","",LANG_DIR "/",".lng",MAX_FILENAME+1), +#ifdef HAVE_REMOTE_LCD + FILENAME_SETTING(F_THEMESETTING,rwps_file,"rwps", + "", WPS_DIR "/", ".rwps", MAX_FILENAME+1), +#endif +#if LCD_DEPTH > 1 + FILENAME_SETTING(F_THEMESETTING,backdrop_file,"backdrop", + "", BACKDROP_DIR "/", ".bmp", MAX_FILENAME+1), +#endif +#ifdef HAVE_LCD_BITMAP + FILENAME_SETTING(0,kbd_file,"kbd","",ROCKBOX_DIR "/",".kbd",MAX_FILENAME+1), +#endif +#ifdef HAVE_USB_POWER +#if CONFIG_CHARGING + OFFON_SETTING(0,usb_charging,LANG_USB_CHARGING,false,"usb charging",NULL), +#endif +#endif + OFFON_SETTING(0,cuesheet,LANG_CUESHEET_ENABLE,false,"cuesheet support", NULL), + CHOICE_SETTING(0, start_in_screen, LANG_START_SCREEN, 1, + "start in screen", "previous,root,files,db,wps,menu," +#ifdef HAVE_RECORDING + "recording," +#endif +#if CONFIG_TUNER + "radio," +#endif + "bookmarks" ,NULL, +#if defined(HAVE_RECORDING) && CONFIG_TUNER + 9, +#elif defined(HAVE_RECORDING) || CONFIG_TUNER /* only one of them */ + 8, +#else + 7, +#endif + ID2P(LANG_PREVIOUS_SCREEN), ID2P(LANG_MAIN_MENU), + ID2P(LANG_DIR_BROWSER), ID2P(LANG_TAGCACHE), + ID2P(LANG_RESUME_PLAYBACK), ID2P(LANG_SETTINGS_MENU), +#ifdef HAVE_RECORDING + ID2P(LANG_RECORDING), +#endif +#if CONFIG_TUNER + ID2P(LANG_FM_RADIO), +#endif + ID2P(LANG_BOOKMARK_MENU_RECENT_BOOKMARKS) + ), + SYSTEM_SETTING(NVRAM(1),last_screen,-1), +#if defined(HAVE_RTC_ALARM) && \ + (defined(HAVE_RECORDING) || CONFIG_TUNER) + {F_T_INT, &global_settings.alarm_wake_up_screen, LANG_ALARM_WAKEUP_SCREEN, + INT(ALARM_START_WPS), "alarm wakeup screen", ALARM_SETTING_TEXT, UNUSED}, +#endif /* HAVE_RTC_ALARM */ + + /* Customizable icons */ +#ifdef HAVE_LCD_BITMAP + FILENAME_SETTING(F_THEMESETTING, icon_file, "iconset", "", + ICON_DIR "/", ".bmp", MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING, viewers_icon_file, "viewers iconset", "", + ICON_DIR "/", ".bmp", MAX_FILENAME+1), +#endif +#ifdef HAVE_REMOTE_LCD + FILENAME_SETTING(F_THEMESETTING, remote_icon_file, "remote iconset", "", + ICON_DIR "/", ".bmp", MAX_FILENAME+1), + FILENAME_SETTING(F_THEMESETTING, remote_viewers_icon_file, + "remote viewers iconset", "", + ICON_DIR "/", ".bmp", MAX_FILENAME+1), +#endif /* HAVE_REMOTE_LCD */ +#ifdef HAVE_LCD_COLOR + FILENAME_SETTING(F_THEMESETTING, colors_file, "filetype colours", "", + THEME_DIR "/", ".colours", MAX_FILENAME+1), +#endif +#ifdef HAVE_BUTTON_LIGHT + INT_SETTING_W_CFGVALS(F_FLIPLIST, button_light_timeout, + LANG_BUTTONLIGHT_TIMEOUT, 6, + "button light timeout", backlight_times_conf, UNIT_SEC, + 0, 18, 1, backlight_formatter, backlight_getlang, + button_backlight_set_timeout), +#endif +#ifdef HAVE_BUTTONLIGHT_BRIGHTNESS + INT_SETTING(0, buttonlight_brightness, LANG_BUTTONLIGHT_BRIGHTNESS, DEFAULT_BRIGHTNESS_SETTING, + "button light brightness",UNIT_INT, MIN_BRIGHTNESS_SETTING, MAX_BRIGHTNESS_SETTING, 1, + NULL, NULL, buttonlight_set_brightness), +#endif + INT_SETTING(0, list_accel_start_delay, LANG_LISTACCEL_START_DELAY, + 2, "list_accel_start_delay", UNIT_MS, 0, 10, 1, + listaccel_formatter, listaccel_getlang, NULL), + INT_SETTING(0, list_accel_wait, LANG_LISTACCEL_ACCEL_SPEED, + 3, "list_accel_wait", UNIT_SEC, 1, 10, 1, + scanaccel_formatter, scanaccel_getlang, NULL), +}; + +const int nb_settings = sizeof(settings)/sizeof(*settings); diff -U 3 -H -d -r -N rockbox_svn.orig/firmware/target/arm/ipod/button-clickwheel.c rockbox_svn/firmware/target/arm/ipod/button-clickwheel.c --- rockbox_svn.orig/firmware/target/arm/ipod/button-clickwheel.c 2007-07-03 12:01:37.156250000 -0500 +++ rockbox_svn/firmware/target/arm/ipod/button-clickwheel.c 2007-07-15 16:11:13.725627300 -0500 @@ -40,6 +40,10 @@ #include "system.h" #include "powermgmt.h" +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +#include "logf.h" +#endif + /* Variable to use for setting button status in interrupt handler */ int int_btn = BUTTON_NONE; #ifdef HAVE_WHEEL_POSITION @@ -47,6 +51,35 @@ static bool send_events = true; #endif +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +void ipod_4g_button_int( void ); + +static int accumulated_wheel_scroll_delta = 0; +unsigned long wheel_scroll_down_microsecond_tick = 0; +unsigned long wheel_scroll_key_microsecond_tick = 0; +unsigned long wheel_scroll_key_microsecond_tick_elapsed = 0; +const unsigned long ONE_MILLION = 1000000; + +int get_accumulated_wheel_scroll_delta( void ) { + return accumulated_wheel_scroll_delta; +} + +int get_ipod_scroll_wheel_clicks_per_second( void ) { + unsigned long wst = wheel_scroll_key_microsecond_tick; + int accum = accumulated_wheel_scroll_delta; + unsigned int abs_accum = accum < 0 ? -accum : accum; + unsigned long wste = wheel_scroll_key_microsecond_tick_elapsed; + if( wste == wst ) wst = wheel_scroll_down_microsecond_tick; + unsigned long diff = wste - wst; + unsigned int r = diff ? ( ( abs_accum * ONE_MILLION ) / diff ) : 0; +#ifdef ROCKBOX_HAS_LOGF + logf( "d1,%d,%d", wst, wste ); + logf( "d2,%d,%d,%d", diff, accum, r ); +#endif + return accum < 0 ? -r : r; +} +#endif + static void opto_i2c_init(void) { int i, curr_value; @@ -115,6 +148,21 @@ whl = new_wheel_value; backlight_on(); reset_poweroff_timer(); +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + if( old_wheel_value == -1 ) { + /* -1 is a sentinal value, meaning there is no old value + * because the finger was lifted and thus, no key to emit + */ + old_wheel_value = new_wheel_value; + accumulated_wheel_scroll_delta = 0; + wheel_scroll_down_microsecond_tick = USEC_TIMER; + } else { + /* calculate the delta regardless of whether we'll add a key + * for the use of the acceleration fucntion + */ + /* This is for later = BUTTON_SCROLL_TOUCH;*/ + int wheel_delta = new_wheel_value - old_wheel_value; +#else /* The queue should have no other events when scrolling */ if (queue_empty(&button_queue) && old_wheel_value >= 0) { @@ -122,31 +170,55 @@ int wheel_delta = new_wheel_value - old_wheel_value; unsigned long data; int wheel_keycode; +#endif if (wheel_delta < -48) wheel_delta += 96; /* Forward wrapping case */ else if (wheel_delta > 48) wheel_delta -= 96; /* Backward wrapping case */ +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + if( wheel_delta > 4 || wheel_delta < -4 ) { + /* ignore anything less than a jiggle factor */ +#else if (wheel_delta > 4) { wheel_keycode = BUTTON_SCROLL_FWD; } else if (wheel_delta < -4) { wheel_keycode = BUTTON_SCROLL_BACK; } else goto wheel_end; +#endif #ifdef HAVE_WHEEL_POSITION if (send_events) #endif { +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + if ( queue_empty(&button_queue) ) { + /* only post a scroll button if the queue is empty */ + int wheel_keycode = wheel_delta > 0 ? BUTTON_SCROLL_FWD : BUTTON_SCROLL_BACK; + unsigned long data = (wheel_delta << 16) | new_wheel_value; + wheel_scroll_key_microsecond_tick = wheel_scroll_key_microsecond_tick_elapsed; + accumulated_wheel_scroll_delta = 0; + queue_post(&button_queue, wheel_keycode | wheel_repeat, (void *)data); +#else data = (wheel_delta << 16) | new_wheel_value; queue_post(&button_queue, wheel_keycode | wheel_repeat, data); +#endif } if (!wheel_repeat) wheel_repeat = BUTTON_REPEAT; } +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) + accumulated_wheel_scroll_delta += wheel_delta ; + old_wheel_value = new_wheel_value ; + wheel_scroll_key_microsecond_tick_elapsed = USEC_TIMER ; + } else goto wheel_end ; /* not clear this is still needed, basically skips call to opto_i2c_init() */ + } +#else old_wheel_value = new_wheel_value; +#endif } else if (old_wheel_value >= 0) { /* scroll wheel up */ old_wheel_value = -1; diff -U 3 -H -d -r -N rockbox_svn.orig/firmware/target/arm/ipod/button-target.h rockbox_svn/firmware/target/arm/ipod/button-target.h --- rockbox_svn.orig/firmware/target/arm/ipod/button-target.h 2007-07-03 12:01:37.171875000 -0500 +++ rockbox_svn/firmware/target/arm/ipod/button-target.h 2007-07-15 16:11:13.756877500 -0500 @@ -32,6 +32,21 @@ void ipod_mini_button_int(void); void ipod_4g_button_int(void); +#if CONFIG_KEYPAD == IPOD_4G_PAD && !defined(IPOD_MINI) +extern unsigned long wheel_scroll_tick ; +extern int get_accumulated_wheel_scroll_delta( void ) ; +extern int get_ipod_scroll_wheel_clicks_per_second( void ) ; +#endif + +/* warning to clients calling get_ipod_scroll_wheel_acceration: + * Calling this function may have side-effects; + * this function should be called once per call to button_get + * or button_get_w_tmo, and results locally cached as needed. + * In particular, some acceleration implementations + * may need to reset a calculated delta when + * get_ipod_scroll_wheel_acceration is called. + */ + /* iPod specific button codes */ #define BUTTON_SELECT 0x00000001 Files rockbox_svn.orig/tools/bmp2rb.exe and rockbox_svn/tools/bmp2rb.exe differ Files rockbox_svn.orig/tools/codepages.exe and rockbox_svn/tools/codepages.exe differ Files rockbox_svn.orig/tools/convbdf.exe and rockbox_svn/tools/convbdf.exe differ Files rockbox_svn.orig/tools/gigabeat.o and rockbox_svn/tools/gigabeat.o differ Files rockbox_svn.orig/tools/ipod_fw.exe and rockbox_svn/tools/ipod_fw.exe differ Files rockbox_svn.orig/tools/iriver.o and rockbox_svn/tools/iriver.o differ Files rockbox_svn.orig/tools/mi4.o and rockbox_svn/tools/mi4.o differ Files rockbox_svn.orig/tools/rdf2binary.exe and rockbox_svn/tools/rdf2binary.exe differ Files rockbox_svn.orig/tools/scramble.exe and rockbox_svn/tools/scramble.exe differ Files rockbox_svn.orig/tools/scramble.o and rockbox_svn/tools/scramble.o differ