From 2c82494e66a59f5bea0e31eaf66800ca9db6f8c8 Mon Sep 17 00:00:00 2001 From: Jonathan Gordon Date: Tue, 5 Feb 2008 05:50:20 +0000 Subject: updated the quickscreen's: - use viewports - dont change to system font, fiddle with item positions to make them fit small screens - user customizable options (use the .cfg settings "quickscreen_left, quickscreen_right, quickscreen_top, quickscreen_bottom" for the name and the .cfg name for the setting you want to use. it can be any except the string settings... (e.g. quickscreen_left:talk menu) - a top item! if there is none set the up button will exit the screen git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16220 a1c6a512-1295-4272-9138-f99709370657 --- apps/gui/gwps.c | 1 + apps/gui/option_select.c | 63 ++------- apps/gui/option_select.h | 5 + apps/gui/quickscreen.c | 334 +++++++++++++++++++++++++++++++++-------------- apps/gui/quickscreen.h | 49 +++---- apps/lang/english.lang | 120 ++++++++--------- apps/screens.c | 152 --------------------- apps/screens.h | 5 - apps/settings.c | 15 ++- apps/settings.h | 6 + apps/settings_list.c | 10 +- apps/tree.c | 1 + 12 files changed, 366 insertions(+), 395 deletions(-) (limited to 'apps') diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c index ad9fce7a8f..e75c16aa07 100644 --- a/apps/gui/gwps.c +++ b/apps/gui/gwps.c @@ -56,6 +56,7 @@ #include "cuesheet.h" #include "ata_idle_notify.h" #include "root_menu.h" +#include "quickscreen.h" #if (LCD_DEPTH > 1) || (defined(HAVE_LCD_REMOTE) && (LCD_REMOTE_DEPTH > 1)) #include "backdrop.h" diff --git a/apps/gui/option_select.c b/apps/gui/option_select.c index cb5b6eee36..b4b1b716bb 100644 --- a/apps/gui/option_select.c +++ b/apps/gui/option_select.c @@ -60,7 +60,7 @@ static const char *unit_strings[] = /* these two vars are needed so arbitrary values can be added to the TABLE_SETTING settings if the F_ALLOW_ARBITRARY_VALS flag is set */ static int table_setting_oldval = 0, table_setting_array_position = 0; -static char *option_get_valuestring(struct settings_list *setting, +char *option_get_valuestring(struct settings_list *setting, char *buffer, int buf_len, intptr_t temp_var) { @@ -210,19 +210,20 @@ static int option_talk(int selected_item, void * data) } return 0; } -#if 0 -int option_select_next_val(struct settings_list *setting, - intptr_t temp_var) + +void option_select_next_val(struct settings_list *setting) { int val = 0; + int *value = setting->setting; if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING) { - val = (bool)temp_var ? 0 : 1; + *(bool*)value = !*(bool*)value; + return; } else if ((setting->flags & F_INT_SETTING) == F_INT_SETTING) { - struct int_setting *info = setting->int_setting; - val = (int)temp_var + info->step; + struct int_setting *info = (struct int_setting *)setting->int_setting; + val = *value + info->step; if (val > info->max) val = info->min; } @@ -232,55 +233,19 @@ int option_select_next_val(struct settings_list *setting, int steps = sound_steps(setting_id); int min = sound_min(setting_id); int max = sound_max(setting_id); - val = (int)temp_var + steps; - if (val > max) + val = *value + steps; + if (val >= max) val = min; } else if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING) { - struct choice_setting *info = setting->choice_setting; - val = (int)temp_var; - if (val > info->count) + struct choice_setting *info = (struct choice_setting *)setting->choice_setting; + val = *value + 1; + if (val >= info->count) val = 0; } - return val; -} - -int option_select_prev_val(struct settings_list *setting, - intptr_t temp_var) -{ - int val = 0; - if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING) - { - val = (bool)temp_var ? 0 : 1; - } - else if ((setting->flags & F_INT_SETTING) == F_INT_SETTING) - { - struct int_setting *info = setting->int_setting; - val = (int)temp_var - info->step; - if (val < info->min) - val = info->max; - } - else if ((setting->flags & F_T_SOUND) == F_T_SOUND) - { - int setting_id = setting->sound_setting->setting; - int steps = sound_steps(setting_id); - int min = sound_min(setting_id); - int max = sound_max(setting_id); - val = (int)temp_var -+ steps; - if (val < min) - val = max; - } - else if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING) - { - struct choice_setting *info = setting->choice_setting; - val = (int)temp_var; - if (val < 0) - val = info->count - 1; - } - return val; + *value = val; } -#endif static int selection_to_val(struct settings_list *setting, int selection) { diff --git a/apps/gui/option_select.h b/apps/gui/option_select.h index e46570f303..63299bc599 100644 --- a/apps/gui/option_select.h +++ b/apps/gui/option_select.h @@ -65,4 +65,9 @@ extern void option_select_next(struct option_select * opt); */ extern void option_select_prev(struct option_select * opt); + +void option_select_next_val(struct settings_list *setting); +char *option_get_valuestring(struct settings_list *setting, + char *buffer, int buf_len, + intptr_t temp_var); #endif /* _GUI_OPTION_SELECT_H_ */ diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c index c2da5879fe..f0eafb7299 100644 --- a/apps/gui/quickscreen.c +++ b/apps/gui/quickscreen.c @@ -7,7 +7,7 @@ * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2005 by Kevin Ferrare + * Copyright (C) 2008 by 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. @@ -30,109 +30,198 @@ #include "misc.h" #include "statusbar.h" #include "action.h" +#include "settings_list.h" +#include "lang.h" +#include "option_select.h" -void gui_quickscreen_init(struct gui_quickscreen * qs, - struct option_select *left_option, - struct option_select *bottom_option, - struct option_select *right_option, - quickscreen_callback callback) -{ - qs->left_option=left_option; - qs->bottom_option=bottom_option; - qs->right_option=right_option; - qs->callback=callback; -} +static struct viewport vps[NB_SCREENS][QUICKSCREEN_ITEM_COUNT]; -/* - * Draws the quickscreen on a given screen - * - qs : the quickscreen - * - display : the screen to draw on - */ -static void gui_quickscreen_draw(struct gui_quickscreen * qs, struct screen * display) +static void quickscreen_fix_viewports(struct gui_quickscreen *qs, + struct screen *display, + struct viewport *parent) { - const unsigned char *option; - const unsigned char *title; - int w, font_h; - bool statusbar = global_settings.statusbar; -#ifdef HAS_BUTTONBAR - display->has_buttonbar=false; -#endif - gui_textarea_clear(display); - if (display->height / display->char_height < 7) /* we need at leats 7 lines */ + int height, i, count=0, top; + int nb_lines = parent->height/display->char_height; + bool single_line_bottom = false; + + for(i=0; isetfont(FONT_SYSFIXED); + if (qs->items[i]) + count++; + vps[display->screen_type][i] = *parent; } - display->getstringsize("A", NULL, &font_h); - - /* do these calculations once */ - const unsigned int puts_center = display->height/2/font_h; - const unsigned int puts_bottom = display->height/font_h; - const unsigned int putsxy_center = display->height/2; - const unsigned int putsxy_bottom = display->height; - - /* Displays the first line of text */ - option=(unsigned char *)option_select_get_text(qs->left_option); - title=(unsigned char *)qs->left_option->title; - display->puts_scroll(2, puts_center-4+!statusbar, title); - display->puts_scroll(2, puts_center-3+!statusbar, option); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 1, - putsxy_center-(font_h*3), 7, 8); - - /* Displays the second line of text */ - option=(unsigned char *)option_select_get_text(qs->right_option); - title=(unsigned char *)qs->right_option->title; - display->getstringsize(title, &w, NULL); - if(w > display->width - 8) + + /* special handling when there is only enough room for 2 items. + discard the top and bottom items, so only show the 2 side ones */ + if (nb_lines < 4) { - display->puts_scroll(2, puts_center-2+!statusbar, title); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], 1, - putsxy_center-font_h, 7, 8); + qs->items[QUICKSCREEN_TOP] = NULL; + qs->items[QUICKSCREEN_BOTTOM] = NULL; + vps[display->screen_type][QUICKSCREEN_RIGHT].y = parent->y; + vps[display->screen_type][QUICKSCREEN_LEFT].height = parent->height/2; + vps[display->screen_type][QUICKSCREEN_RIGHT].y = parent->y+parent->height/2; + vps[display->screen_type][QUICKSCREEN_RIGHT].height = parent->height/2; + return; } - else + else if (nb_lines < 5 && count == 4) /* drop the top item */ { - display->putsxy(display->width - w - 12, putsxy_center-font_h, title); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], - display->width - 8, putsxy_center-font_h, 7, 8); + qs->items[QUICKSCREEN_TOP] = NULL; + single_line_bottom = true; + } + + height = display->char_height*2; + if (nb_lines > 8 || + (nb_lines > 5 && qs->items[QUICKSCREEN_TOP] == NULL)) + height += display->char_height; + /* Top item */ + if (qs->items[QUICKSCREEN_TOP]) + { + vps[display->screen_type][QUICKSCREEN_TOP].y = parent->y; + vps[display->screen_type][QUICKSCREEN_TOP].height = height; } - display->getstringsize(option, &w, NULL); - if(w > display->width) - display->puts_scroll(0, puts_center-1+!statusbar, option); else - display->putsxy(display->width -w-12, putsxy_center, option); - - /* Displays the third line of text */ - option=(unsigned char *)option_select_get_text(qs->bottom_option); - title=(unsigned char *)qs->bottom_option->title; - - display->getstringsize(title, &w, NULL); - if(w > display->width) - display->puts_scroll(0, puts_bottom-4+!statusbar, title); + { + vps[display->screen_type][QUICKSCREEN_TOP].height = 0; + } + /* bottom item */ + if (qs->items[QUICKSCREEN_BOTTOM]) + { + if (single_line_bottom) + height = display->char_height; + vps[display->screen_type][QUICKSCREEN_BOTTOM].y = parent->y+parent->height - height; + vps[display->screen_type][QUICKSCREEN_BOTTOM].height = height; + } else - display->putsxy(display->width/2-w/2, putsxy_bottom-(font_h*3), title); + { + vps[display->screen_type][QUICKSCREEN_BOTTOM].height = 0; + } + + /* side items */ + height = parent->height - + vps[display->screen_type][QUICKSCREEN_BOTTOM].height - + vps[display->screen_type][QUICKSCREEN_TOP].height ; + top = parent->y+vps[display->screen_type][QUICKSCREEN_TOP].height; + vps[display->screen_type][QUICKSCREEN_LEFT].y = top; + vps[display->screen_type][QUICKSCREEN_RIGHT].y = top; + vps[display->screen_type][QUICKSCREEN_LEFT].height = height; + vps[display->screen_type][QUICKSCREEN_RIGHT].height = height; + + vps[display->screen_type][QUICKSCREEN_RIGHT].x = parent->x+parent->width/2; + + vps[display->screen_type][QUICKSCREEN_LEFT].width = parent->width/2; + vps[display->screen_type][QUICKSCREEN_RIGHT].width = parent->width/2; +} - display->getstringsize(option, &w, NULL); - if(w > display->width) - display->puts_scroll(0, puts_bottom-3+!statusbar, option); +static void quickscreen_draw_text(char *s, int item, bool title, + struct screen *display, struct viewport *vp) +{ + int nb_lines = vp->height/display->char_height; + int w, line = 0, x=0; + display->getstringsize(s, &w, NULL); + switch (item) + { + case QUICKSCREEN_TOP: + if (nb_lines > 2) + { + if (title) + { + display->mono_bitmap(bitmap_icons_7x8[Icon_UpArrow], + (vp->width/2)-4, 0, 7, 8); + line = 1; + } + else + line = 2; + } + else + line = title?0:1; + x = (vp->width - w)/2; + break; + case QUICKSCREEN_BOTTOM: + if (title && nb_lines > 2 && item == QUICKSCREEN_BOTTOM) + { + display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], + (vp->width/2)-4, vp->height-8, 7, 8); + } + line = title?0:1; + x = (vp->width - w)/2; + break; + case QUICKSCREEN_LEFT: + if (nb_lines > 1) + { + line = nb_lines/2; + if (title) + line--; + } + else + line = 0; + if (title) + display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 1, + line*display->char_height+display->char_height/2, 7, 8); + x = 12; + break; + case QUICKSCREEN_RIGHT: + line = nb_lines/2; + if (title == false) + line++; + if (title) + display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], + vp->width - 8, + line*display->char_height+display->char_height/2, 7, 8); + x = vp->width - w - 12; + break; + } + if (w>vp->width) + display->puts_scroll(0,line,s); else - display->putsxy(display->width/2-w/2, putsxy_bottom-(font_h*2), option); - display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], display->width/2-4, - putsxy_bottom-font_h, 7, 8); - - gui_textarea_update(display); - display->setfont(FONT_UI); + display->putsxy(x, line*display->char_height, s); } -/* - * Draws the quickscreen on all available screens - * - qs : the quickscreen - */ -static void gui_syncquickscreen_draw(struct gui_quickscreen * qs) +static void gui_quickscreen_draw(struct gui_quickscreen *qs, + struct screen *display, + struct viewport *parent) { int i; - FOR_NB_SCREENS(i) - gui_quickscreen_draw(qs, &screens[i]); + char buf[MAX_PATH]; + unsigned char *title, *value; + void *setting; + int temp; + display->set_viewport(parent); + display->clear_viewport(); + for (i=0; iitems[i]) + continue; + display->set_viewport(&vps[display->screen_type][i]); + display->scroll_stop(&vps[display->screen_type][i]); + + title = P2STR(ID2P(qs->items[i]->lang_id)); + setting = qs->items[i]->setting; + if (qs->items[i]->flags&F_T_BOOL) + temp = *(bool*)setting?1:0; + else + temp = *(int*)setting; + value = option_get_valuestring((struct settings_list*)qs->items[i], buf, MAX_PATH, temp); + + if (vps[display->screen_type][i].height < display->char_height*2) + { + char text[MAX_PATH]; + snprintf(text, MAX_PATH, "%s: %s", title, value); + quickscreen_draw_text(text, i, true, display, &vps[display->screen_type][i]); + } + else + { + quickscreen_draw_text(title, i, true, display, &vps[display->screen_type][i]); + quickscreen_draw_text(value, i, false, display, &vps[display->screen_type][i]); + } + display->update_viewport(); + } + display->set_viewport(parent); + display->update_viewport(); + display->set_viewport(NULL); } + /* * Does the actions associated to the given button if any * - qs : the quickscreen @@ -141,23 +230,26 @@ static void gui_syncquickscreen_draw(struct gui_quickscreen * qs) */ static bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button) { - switch(button) { case ACTION_QS_LEFT: - option_select_next(qs->left_option); + if (qs->items[QUICKSCREEN_LEFT]) + option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_LEFT]); return(true); case ACTION_QS_DOWN: - option_select_next(qs->bottom_option); + if (qs->items[QUICKSCREEN_BOTTOM]) + option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_BOTTOM]); return(true); case ACTION_QS_RIGHT: - option_select_next(qs->right_option); + if (qs->items[QUICKSCREEN_RIGHT]) + option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_RIGHT]); return(true); case ACTION_QS_DOWNINV: - option_select_prev(qs->bottom_option); + if (qs->items[QUICKSCREEN_TOP]) + option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_TOP]); return(true); } return(false); @@ -165,24 +257,48 @@ static bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button) bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter) { - int button; + int button, i; + bool changed = false; + struct viewport vp[NB_SCREENS]; /* To quit we need either : * - a second press on the button that made us enter * - an action taken while pressing the enter button, * then release the enter button*/ bool can_quit=false; - gui_syncquickscreen_draw(qs); gui_syncstatusbar_draw(&statusbars, true); + FOR_NB_SCREENS(i) + { + vp[i].x = 0; + vp[i].width = screens[i].width; + vp[i].y = STATUSBAR_HEIGHT; + vp[i].height = screens[i].height - STATUSBAR_HEIGHT; +#ifdef HAVE_LCD_COLOR + if (screens[i].is_color) + { + vp[i].fg_pattern = screens[i].get_foreground(); + vp[i].bg_pattern = screens[i].get_background(); + } +#endif + vp[i].xmargin = 0; + vp[i].ymargin = 0; + vp[i].font = FONT_UI; + vp[i].drawmode = STYLE_DEFAULT; + quickscreen_fix_viewports(qs, &screens[i], &vp[i]); + gui_quickscreen_draw(qs, &screens[i], &vp[i]); + } while (true) { button = get_action(CONTEXT_QUICKSCREEN,TIMEOUT_BLOCK); if(default_event_handler(button) == SYS_USB_CONNECTED) return(true); if(gui_quickscreen_do_button(qs, button)) { + changed = true; can_quit=true; - if(qs->callback) - qs->callback(qs); - gui_syncquickscreen_draw(qs); + if (button == ACTION_QS_DOWNINV && + !qs->items[QUICKSCREEN_TOP]) + break; + FOR_NB_SCREENS(i) + gui_quickscreen_draw(qs, &screens[i], &vp[i]); } else if(button==button_enter) can_quit=true; @@ -195,8 +311,36 @@ bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter) gui_syncstatusbar_draw(&statusbars, false); } + if (changed) + settings_apply(); return false; } +bool quick_screen_quick(int button_enter) +{ + struct gui_quickscreen qs; + qs.items[QUICKSCREEN_LEFT] = find_setting_from_string(global_settings.quickscreen_left, NULL); + qs.items[QUICKSCREEN_RIGHT] = find_setting_from_string(global_settings.quickscreen_right,NULL); + qs.items[QUICKSCREEN_BOTTOM] = find_setting_from_string(global_settings.quickscreen_bottom, NULL); + qs.items[QUICKSCREEN_TOP] = find_setting_from_string(global_settings.quickscreen_top,NULL); + qs.callback = NULL; + gui_syncquickscreen_run(&qs, button_enter); + return(0); +} + +#ifdef BUTTON_F3 +bool quick_screen_f3(int button_enter) +{ + struct gui_quickscreen qs; + qs.items[QUICKSCREEN_LEFT] = find_setting(&global_settings.scrollbar, NULL); + qs.items[QUICKSCREEN_RIGHT] = find_setting(&global_settings.statusbar, NULL); + qs.items[QUICKSCREEN_BOTTOM] = find_setting(&global_settings.flip_display, NULL); + qs.items[QUICKSCREEN_TOP] = NULL; + qs.callback = NULL; + gui_syncquickscreen_run(&qs, button_enter); + return(0); +} +#endif /* BUTTON_F3 */ + #endif /* HAVE_QUICKSCREEN */ diff --git a/apps/gui/quickscreen.h b/apps/gui/quickscreen.h index 179d619883..a264a9383d 100644 --- a/apps/gui/quickscreen.h +++ b/apps/gui/quickscreen.h @@ -27,45 +27,30 @@ #include "option_select.h" #include "screen_access.h" -struct gui_quickscreen; -/* - * Callback function called each time the quickscreen gets modified - * - qs : the quickscreen that did the modification - */ -typedef void (quickscreen_callback)(struct gui_quickscreen * qs); +enum QUICKSCREEN_ITEM { + QUICKSCREEN_LEFT = 0, + QUICKSCREEN_RIGHT, + QUICKSCREEN_TOP, + QUICKSCREEN_BOTTOM, + QUICKSCREEN_ITEM_COUNT, +}; struct gui_quickscreen { - struct option_select *left_option; - struct option_select *bottom_option; - struct option_select *right_option; - quickscreen_callback *callback; + const struct settings_list *items[QUICKSCREEN_ITEM_COUNT]; + void (*callback)(struct gui_quickscreen * qs); }; -/* - * Initializes a quickscreen - * - qs : the quickscreen - * - left_option, bottom_option, right_option : a list of choices - * for each option - * - left_right_title : the 2nd line of the title - * on the left and on the right - * - callback : a callback function called each time the quickscreen - * gets modified - */ -void gui_quickscreen_init(struct gui_quickscreen * qs, - struct option_select *left_option, - struct option_select *bottom_option, - struct option_select *right_option, - quickscreen_callback *callback); - -/* - * Runs the quickscreen on all available screens, if button_enter is released, quits - * - qs : the quickscreen - * - button_enter : button pressed at the same time the quickscreen is displayed - * returns : true if usb was connected, false otherwise - */ +struct gui_quickscreen; bool gui_syncquickscreen_run(struct gui_quickscreen * qs, int button_enter); + +#ifdef BUTTON_F3 +extern bool quick_screen_f3(int button_enter); +#endif +extern bool quick_screen_quick(int button_enter); + + #endif /*_GUI_QUICK_SCREEN_H_*/ #endif /* HAVE_QUICKSCREEN */ diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 96c076a8be..0e84b088fd 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -10087,53 +10087,53 @@ id: LANG_SYSFONT_SET_BOOL_YES - desc: bool true representation + desc: deprecated user: *: none - lcd_bitmap: "Yes" + lcd_bitmap: "" *: none - lcd_bitmap: "Yes" + lcd_bitmap: "" *: none - lcd_bitmap: "Yes" + lcd_bitmap: "" id: LANG_SYSFONT_SET_BOOL_NO - desc: bool false representation + desc: deprecated user: *: none - lcd_bitmap: "No" + lcd_bitmap: "" *: none - lcd_bitmap: "No" + lcd_bitmap: "" *: none - lcd_bitmap: "No" + lcd_bitmap: "" id: LANG_SYSFONT_ON - desc: Used in a lot of places + desc: deprecated user: *: none - lcd_bitmap: "On" + lcd_bitmap: "" *: none - lcd_bitmap: "On" + lcd_bitmap: "" *: none - lcd_bitmap: "On" + lcd_bitmap: "" @@ -10206,206 +10206,206 @@ id: LANG_SYSFONT_SHUFFLE - desc: in settings_menu + desc: deprecated user: *: none - lcd_bitmap: "Shuffle" + lcd_bitmap: "" *: none - lcd_bitmap: "Shuffle" + lcd_bitmap: "" *: none - lcd_bitmap: "Shuffle" + lcd_bitmap: "" id: LANG_SYSFONT_REPEAT - desc: in settings_menu + desc: deprecated user: *: none - lcd_bitmap: "Repeat" + lcd_bitmap: "" *: none - lcd_bitmap: "Repeat" + lcd_bitmap: "" *: none - lcd_bitmap: "Repeat" + lcd_bitmap: "" id: LANG_SYSFONT_ALL - desc: repeat playlist once all songs have completed + desc: deprecated user: *: none - lcd_bitmap: "All" + lcd_bitmap: "" *: none - lcd_bitmap: "All" + lcd_bitmap: "" *: none - lcd_bitmap: "All" + lcd_bitmap: "" id: LANG_SYSFONT_REPEAT_ONE - desc: repeat one song + desc: deprecated user: *: none - lcd_bitmap: "One" + lcd_bitmap: "" *: none - lcd_bitmap: "One" + lcd_bitmap: "" *: none - lcd_bitmap: "One" + lcd_bitmap: "" id: LANG_SYSFONT_REPEAT_AB - desc: repeat range from point A to B + desc: deprecated user: *: none - lcd_bitmap: "A-B" + lcd_bitmap: "" *: none - lcd_bitmap: "A-B" + lcd_bitmap: "" *: none - lcd_bitmap: "A-B" + lcd_bitmap: "" id: LANG_SYSFONT_FILTER - desc: setting name for dir filter + desc: deprecated user: *: none - lcd_bitmap: "Show Files" + lcd_bitmap: "" *: none - lcd_bitmap: "Show Files" + lcd_bitmap: "" *: none - lcd_bitmap: "Show Files" + lcd_bitmap: "" id: LANG_SYSFONT_FILTER_SUPPORTED - desc: show all file types supported by Rockbox + desc: deprecated user: *: none - lcd_bitmap: "Supported" + lcd_bitmap: "" *: none - lcd_bitmap: "Supported" + lcd_bitmap: "" *: none - lcd_bitmap: "Supported" + lcd_bitmap: "" id: LANG_SYSFONT_FILTER_MUSIC - desc: show only music-related files + desc: deprecated user: *: none - lcd_bitmap: "Music" + lcd_bitmap: "" *: none - lcd_bitmap: "Music" + lcd_bitmap: "" *: none - lcd_bitmap: "Music" + lcd_bitmap: "" id: LANG_SYSFONT_FILTER_PLAYLIST - desc: show only playlist + desc: deprecated user: *: none - lcd_bitmap: "Playlists" + lcd_bitmap: "" *: none - lcd_bitmap: "Playlists" + lcd_bitmap: "" *: none - lcd_bitmap: "Playlists" + lcd_bitmap: "" id: LANG_SYSFONT_FLIP_DISPLAY - desc: in settings_menu, option to turn display+buttos by 180 degreed + desc: deprecated user: *: none - lcd_bitmap: "Upside Down" + lcd_bitmap: "" *: none - lcd_bitmap: "Upside Down" + lcd_bitmap: "" *: none - lcd_bitmap: "Upside Down" + lcd_bitmap: "" id: LANG_SYSFONT_SCROLL_BAR - desc: display menu, F3 substitute + desc: deprecated user: *: none - lcd_bitmap: "Scroll Bar" + lcd_bitmap: "" *: none - lcd_bitmap: "Scroll Bar" + lcd_bitmap: "" *: none - lcd_bitmap: "Scroll Bar" + lcd_bitmap: "" id: LANG_SYSFONT_STATUS_BAR - desc: display menu, F3 substitute + desc: deprecated user: *: none - lcd_bitmap: "Status Bar" + lcd_bitmap: "" *: none - lcd_bitmap: "Status Bar" + lcd_bitmap: "" *: none - lcd_bitmap: "Status Bar" + lcd_bitmap: "" diff --git a/apps/screens.c b/apps/screens.c index 6654be4961..60b61f779f 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -636,158 +636,6 @@ bool pitch_screen(void) } #endif /* HAVE_PITCHSCREEN */ -#ifdef HAVE_QUICKSCREEN - -#define bool_to_int(b)\ - b?1:0 -#define int_to_bool(i)\ - i==0?false:true - -static void quick_screen_quick_apply(struct gui_quickscreen *qs) -{ - global_settings.playlist_shuffle=int_to_bool(qs->left_option->option); - global_settings.dirfilter=qs->bottom_option->option; - global_settings.repeat_mode=qs->right_option->option; -} - -bool quick_screen_quick(int button_enter) -{ - bool res, oldshuffle; - struct option_select left_option; - struct option_select bottom_option; - struct option_select right_option; - int oldrepeat, old_x_margin, old_y_margin; - - static const struct opt_items left_items[] = { - [0]={ STR(LANG_SYSFONT_OFF) }, - [1]={ STR(LANG_SYSFONT_ON) } - }; - static const struct opt_items bottom_items[] = { - [SHOW_ALL]={ STR(LANG_SYSFONT_ALL) }, - [SHOW_SUPPORTED]={ STR(LANG_SYSFONT_FILTER_SUPPORTED) }, - [SHOW_MUSIC]={ STR(LANG_SYSFONT_FILTER_MUSIC) }, - [SHOW_PLAYLIST]={ STR(LANG_SYSFONT_FILTER_PLAYLIST) }, - }; - static const struct opt_items right_items[] = { - [REPEAT_OFF]={ STR(LANG_SYSFONT_OFF) }, - [REPEAT_ALL]={ STR(LANG_SYSFONT_ALL) }, - [REPEAT_ONE]={ STR(LANG_SYSFONT_REPEAT_ONE) }, - [REPEAT_SHUFFLE]={ STR(LANG_SYSFONT_SHUFFLE) }, -#ifdef AB_REPEAT_ENABLE - [REPEAT_AB]={ STR(LANG_SYSFONT_REPEAT_AB) } -#endif - }; - struct gui_quickscreen qs; - - old_x_margin = lcd_getxmargin(); - old_y_margin = lcd_getymargin(); - lcd_setmargins(0, 0); - - option_select_init_items(&left_option, - (char *)str(LANG_SYSFONT_SHUFFLE), - bool_to_int(global_settings.playlist_shuffle), - left_items, - 2); - option_select_init_items(&bottom_option, - (char *)str(LANG_SYSFONT_FILTER), - global_settings.dirfilter, - bottom_items, - sizeof(bottom_items)/sizeof(struct opt_items)); - option_select_init_items(&right_option, - (char *)str(LANG_SYSFONT_REPEAT), - global_settings.repeat_mode, - right_items, - sizeof(right_items)/sizeof(struct opt_items)); - - gui_quickscreen_init(&qs, &left_option, &bottom_option, &right_option, - &quick_screen_quick_apply); - oldrepeat=global_settings.repeat_mode; - oldshuffle=global_settings.playlist_shuffle; - res=gui_syncquickscreen_run(&qs, button_enter); - if(!res) - { - if ( oldrepeat != global_settings.repeat_mode && - (audio_status() & AUDIO_STATUS_PLAY) ) - audio_flush_and_reload_tracks(); - if(oldshuffle != global_settings.playlist_shuffle - && audio_status() & AUDIO_STATUS_PLAY) - { -#if CONFIG_CODEC == SWCODEC - dsp_set_replaygain(); -#endif - if (global_settings.playlist_shuffle) - playlist_randomise(NULL, current_tick, true); - else - playlist_sort(NULL, true); - } - settings_save(); - } - lcd_setmargins(old_x_margin, old_y_margin); - return(res); -} - -#ifdef BUTTON_F3 -static void quick_screen_f3_apply(struct gui_quickscreen *qs) -{ - global_settings.scrollbar=int_to_bool(qs->left_option->option); - - global_settings.flip_display=int_to_bool(qs->bottom_option->option); - button_set_flip(global_settings.flip_display); - lcd_set_flip(global_settings.flip_display); - - global_settings.statusbar=int_to_bool(qs->right_option->option); - gui_syncstatusbar_draw(&statusbars, true); -} - -bool quick_screen_f3(int button_enter) -{ - bool res; - struct option_select left_option; - struct option_select bottom_option; - struct option_select right_option; - int old_x_margin, old_y_margin; - - static const struct opt_items onoff_items[] = { - [0]={ STR(LANG_SYSFONT_OFF) }, - [1]={ STR(LANG_SYSFONT_ON) } - }; - static const struct opt_items yesno_items[] = { - [0]={ STR(LANG_SYSFONT_SET_BOOL_NO) }, - [1]={ STR(LANG_SYSFONT_SET_BOOL_YES) } - }; - - struct gui_quickscreen qs; - - old_x_margin = lcd_getxmargin(); - old_y_margin = lcd_getymargin(); - lcd_setmargins(0, 0); - - option_select_init_items(&left_option, - str(LANG_SYSFONT_SCROLL_BAR), - bool_to_int(global_settings.scrollbar), - onoff_items, - 2); - option_select_init_items(&bottom_option, - str(LANG_SYSFONT_FLIP_DISPLAY), - bool_to_int(global_settings.flip_display), - yesno_items, - 2); - option_select_init_items(&right_option, - str(LANG_SYSFONT_STATUS_BAR), - bool_to_int(global_settings.statusbar), - onoff_items, - 2); - gui_quickscreen_init(&qs, &left_option, &bottom_option, &right_option, - &quick_screen_f3_apply); - res=gui_syncquickscreen_run(&qs, button_enter); - if(!res) - settings_save(); - lcd_setmargins(old_x_margin, old_y_margin); - return(res); -} -#endif /* BUTTON_F3 */ -#endif /* CONFIG_KEYPAD in (RECORDER_PAD |IRIVER_H100_PAD | IRIVER_H300_PAD) */ - #if CONFIG_CHARGING void charging_splash(void) { diff --git a/apps/screens.h b/apps/screens.h index 4d7704f7d5..8037900846 100644 --- a/apps/screens.h +++ b/apps/screens.h @@ -40,11 +40,6 @@ int mmc_remove_request(void); bool pitch_screen(void); #endif -#ifdef BUTTON_F3 -extern bool quick_screen_f3(int button_enter); -#endif -extern bool quick_screen_quick(int button_enter); - #if CONFIG_RTC bool set_time_screen(const char* title, struct tm *tm); #endif diff --git a/apps/settings.c b/apps/settings.c index 26b9434ba4..5d148effe8 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -1000,7 +1000,20 @@ const struct settings_list* find_setting(void* variable, int *id) } return NULL; } - +const struct settings_list* find_setting_from_string(char* setting, int *id) +{ + int i; + for(i=0;i