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