diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c index e75c16aa07..ad9fce7a8f 100644 --- a/apps/gui/gwps.c +++ b/apps/gui/gwps.c @@ -56,7 +56,6 @@ #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 5dec9f7216..cb5b6eee36 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; -char *option_get_valuestring(struct settings_list *setting, +static char *option_get_valuestring(struct settings_list *setting, char *buffer, int buf_len, intptr_t temp_var) { @@ -210,21 +210,19 @@ static int option_talk(int selected_item, void * data) } return 0; } - -#ifdef HAVE_QUICKSCREEN /* only the quickscreen uses this so far */ -void option_select_next_val(struct settings_list *setting) +#if 0 +int option_select_next_val(struct settings_list *setting, + intptr_t temp_var) { int val = 0; - int *value = setting->setting; if ((setting->flags & F_BOOL_SETTING) == F_BOOL_SETTING) { - *(bool*)value = !*(bool*)value; - return; + val = (bool)temp_var ? 0 : 1; } else if ((setting->flags & F_INT_SETTING) == F_INT_SETTING) { - struct int_setting *info = (struct int_setting *)setting->int_setting; - val = *value + info->step; + struct int_setting *info = setting->int_setting; + val = (int)temp_var + info->step; if (val > info->max) val = info->min; } @@ -234,18 +232,53 @@ void 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 = *value + steps; - if (val >= max) + val = (int)temp_var + steps; + if (val > max) val = min; } else if ((setting->flags & F_CHOICE_SETTING) == F_CHOICE_SETTING) { - struct choice_setting *info = (struct choice_setting *)setting->choice_setting; - val = *value + 1; - if (val >= info->count) + struct choice_setting *info = setting->choice_setting; + val = (int)temp_var; + if (val > info->count) val = 0; } - *value = val; + 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; } #endif diff --git a/apps/gui/option_select.h b/apps/gui/option_select.h index 63299bc599..e46570f303 100644 --- a/apps/gui/option_select.h +++ b/apps/gui/option_select.h @@ -65,9 +65,4 @@ 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 f98c926e91..c2da5879fe 100644 --- a/apps/gui/quickscreen.c +++ b/apps/gui/quickscreen.c @@ -7,7 +7,7 @@ * \/ \/ \/ \/ \/ * $Id$ * - * Copyright (C) 2008 by Jonathan Gordon + * 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. @@ -30,198 +30,109 @@ #include "misc.h" #include "statusbar.h" #include "action.h" -#include "settings_list.h" -#include "lang.h" -#include "option_select.h" -static struct viewport vps[NB_SCREENS][QUICKSCREEN_ITEM_COUNT]; - -static void quickscreen_fix_viewports(struct gui_quickscreen *qs, - struct screen *display, - struct viewport *parent) +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) { - int height, i, count=0, top; - int nb_lines = parent->height/display->char_height; - bool single_line_bottom = false; - - for(i=0; iitems[i]) - count++; - vps[display->screen_type][i] = *parent; - } - - /* 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) - { - 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 if (nb_lines < 5 && count == 4) /* drop the top item */ - { - 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; - } - else - { - 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 - { - 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; + qs->left_option=left_option; + qs->bottom_option=bottom_option; + qs->right_option=right_option; + qs->callback=callback; } -static void quickscreen_draw_text(char *s, int item, bool title, - struct screen *display, struct viewport *vp) +/* + * 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) { - int nb_lines = vp->height/display->char_height; - int w, line = 0, x=0; - display->getstringsize(s, &w, NULL); - switch (item) + 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 */ { - 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; + display->setfont(FONT_SYSFIXED); + } + 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) + { + display->puts_scroll(2, puts_center-2+!statusbar, title); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], 1, + putsxy_center-font_h, 7, 8); } - if (w>vp->width) - display->puts_scroll(0,line,s); else - display->putsxy(x, line*display->char_height, s); + { + 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); + } + 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); + else + display->putsxy(display->width/2-w/2, putsxy_bottom-(font_h*3), title); + + display->getstringsize(option, &w, NULL); + if(w > display->width) + display->puts_scroll(0, puts_bottom-3+!statusbar, option); + 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); } -static void gui_quickscreen_draw(struct gui_quickscreen *qs, - struct screen *display, - struct viewport *parent) +/* + * Draws the quickscreen on all available screens + * - qs : the quickscreen + */ +static void gui_syncquickscreen_draw(struct gui_quickscreen * qs) { int 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); + FOR_NB_SCREENS(i) + gui_quickscreen_draw(qs, &screens[i]); } - /* * Does the actions associated to the given button if any * - qs : the quickscreen @@ -230,26 +141,23 @@ static void gui_quickscreen_draw(struct gui_quickscreen *qs, */ static bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button) { + switch(button) { case ACTION_QS_LEFT: - if (qs->items[QUICKSCREEN_LEFT]) - option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_LEFT]); + option_select_next(qs->left_option); return(true); case ACTION_QS_DOWN: - if (qs->items[QUICKSCREEN_BOTTOM]) - option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_BOTTOM]); + option_select_next(qs->bottom_option); return(true); case ACTION_QS_RIGHT: - if (qs->items[QUICKSCREEN_RIGHT]) - option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_RIGHT]); + option_select_next(qs->right_option); return(true); case ACTION_QS_DOWNINV: - if (qs->items[QUICKSCREEN_TOP]) - option_select_next_val((struct settings_list *)qs->items[QUICKSCREEN_TOP]); + option_select_prev(qs->bottom_option); return(true); } return(false); @@ -257,50 +165,24 @@ 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, i; - bool changed = false; - struct viewport vp[NB_SCREENS]; + int button; /* 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) - { - screens[i].set_viewport(NULL); - screens[i].scroll_stop(NULL); - 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 = global_settings.fg_color; - vp[i].bg_pattern = global_settings.bg_color; - } -#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 (button == ACTION_QS_DOWNINV && - !qs->items[QUICKSCREEN_TOP]) - break; - FOR_NB_SCREENS(i) - gui_quickscreen_draw(qs, &screens[i], &vp[i]); + if(qs->callback) + qs->callback(qs); + gui_syncquickscreen_draw(qs); } else if(button==button_enter) can_quit=true; @@ -313,36 +195,8 @@ 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 a264a9383d..179d619883 100644 --- a/apps/gui/quickscreen.h +++ b/apps/gui/quickscreen.h @@ -27,30 +27,45 @@ #include "option_select.h" #include "screen_access.h" -enum QUICKSCREEN_ITEM { - QUICKSCREEN_LEFT = 0, - QUICKSCREEN_RIGHT, - QUICKSCREEN_TOP, - QUICKSCREEN_BOTTOM, - QUICKSCREEN_ITEM_COUNT, -}; +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); struct gui_quickscreen { - const struct settings_list *items[QUICKSCREEN_ITEM_COUNT]; - void (*callback)(struct gui_quickscreen * qs); + struct option_select *left_option; + struct option_select *bottom_option; + struct option_select *right_option; + quickscreen_callback *callback; }; +/* + * 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); -struct gui_quickscreen; + +/* + * 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 + */ 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 0e84b088fd..96c076a8be 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -10087,53 +10087,53 @@ id: LANG_SYSFONT_SET_BOOL_YES - desc: deprecated + desc: bool true representation user: *: none - lcd_bitmap: "" + lcd_bitmap: "Yes" *: none - lcd_bitmap: "" + lcd_bitmap: "Yes" *: none - lcd_bitmap: "" + lcd_bitmap: "Yes" id: LANG_SYSFONT_SET_BOOL_NO - desc: deprecated + desc: bool false representation user: *: none - lcd_bitmap: "" + lcd_bitmap: "No" *: none - lcd_bitmap: "" + lcd_bitmap: "No" *: none - lcd_bitmap: "" + lcd_bitmap: "No" id: LANG_SYSFONT_ON - desc: deprecated + desc: Used in a lot of places user: *: none - lcd_bitmap: "" + lcd_bitmap: "On" *: none - lcd_bitmap: "" + lcd_bitmap: "On" *: none - lcd_bitmap: "" + lcd_bitmap: "On" @@ -10206,206 +10206,206 @@ id: LANG_SYSFONT_SHUFFLE - desc: deprecated + desc: in settings_menu user: *: none - lcd_bitmap: "" + lcd_bitmap: "Shuffle" *: none - lcd_bitmap: "" + lcd_bitmap: "Shuffle" *: none - lcd_bitmap: "" + lcd_bitmap: "Shuffle" id: LANG_SYSFONT_REPEAT - desc: deprecated + desc: in settings_menu user: *: none - lcd_bitmap: "" + lcd_bitmap: "Repeat" *: none - lcd_bitmap: "" + lcd_bitmap: "Repeat" *: none - lcd_bitmap: "" + lcd_bitmap: "Repeat" id: LANG_SYSFONT_ALL - desc: deprecated + desc: repeat playlist once all songs have completed user: *: none - lcd_bitmap: "" + lcd_bitmap: "All" *: none - lcd_bitmap: "" + lcd_bitmap: "All" *: none - lcd_bitmap: "" + lcd_bitmap: "All" id: LANG_SYSFONT_REPEAT_ONE - desc: deprecated + desc: repeat one song user: *: none - lcd_bitmap: "" + lcd_bitmap: "One" *: none - lcd_bitmap: "" + lcd_bitmap: "One" *: none - lcd_bitmap: "" + lcd_bitmap: "One" id: LANG_SYSFONT_REPEAT_AB - desc: deprecated + desc: repeat range from point A to B user: *: none - lcd_bitmap: "" + lcd_bitmap: "A-B" *: none - lcd_bitmap: "" + lcd_bitmap: "A-B" *: none - lcd_bitmap: "" + lcd_bitmap: "A-B" id: LANG_SYSFONT_FILTER - desc: deprecated + desc: setting name for dir filter user: *: none - lcd_bitmap: "" + lcd_bitmap: "Show Files" *: none - lcd_bitmap: "" + lcd_bitmap: "Show Files" *: none - lcd_bitmap: "" + lcd_bitmap: "Show Files" id: LANG_SYSFONT_FILTER_SUPPORTED - desc: deprecated + desc: show all file types supported by Rockbox user: *: none - lcd_bitmap: "" + lcd_bitmap: "Supported" *: none - lcd_bitmap: "" + lcd_bitmap: "Supported" *: none - lcd_bitmap: "" + lcd_bitmap: "Supported" id: LANG_SYSFONT_FILTER_MUSIC - desc: deprecated + desc: show only music-related files user: *: none - lcd_bitmap: "" + lcd_bitmap: "Music" *: none - lcd_bitmap: "" + lcd_bitmap: "Music" *: none - lcd_bitmap: "" + lcd_bitmap: "Music" id: LANG_SYSFONT_FILTER_PLAYLIST - desc: deprecated + desc: show only playlist user: *: none - lcd_bitmap: "" + lcd_bitmap: "Playlists" *: none - lcd_bitmap: "" + lcd_bitmap: "Playlists" *: none - lcd_bitmap: "" + lcd_bitmap: "Playlists" id: LANG_SYSFONT_FLIP_DISPLAY - desc: deprecated + desc: in settings_menu, option to turn display+buttos by 180 degreed user: *: none - lcd_bitmap: "" + lcd_bitmap: "Upside Down" *: none - lcd_bitmap: "" + lcd_bitmap: "Upside Down" *: none - lcd_bitmap: "" + lcd_bitmap: "Upside Down" id: LANG_SYSFONT_SCROLL_BAR - desc: deprecated + desc: display menu, F3 substitute user: *: none - lcd_bitmap: "" + lcd_bitmap: "Scroll Bar" *: none - lcd_bitmap: "" + lcd_bitmap: "Scroll Bar" *: none - lcd_bitmap: "" + lcd_bitmap: "Scroll Bar" id: LANG_SYSFONT_STATUS_BAR - desc: deprecated + desc: display menu, F3 substitute user: *: none - lcd_bitmap: "" + lcd_bitmap: "Status Bar" *: none - lcd_bitmap: "" + lcd_bitmap: "Status Bar" *: none - lcd_bitmap: "" + lcd_bitmap: "Status Bar" diff --git a/apps/screens.c b/apps/screens.c index 60b61f779f..6654be4961 100644 --- a/apps/screens.c +++ b/apps/screens.c @@ -636,6 +636,158 @@ 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 8037900846..4d7704f7d5 100644 --- a/apps/screens.h +++ b/apps/screens.h @@ -40,6 +40,11 @@ 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 5d148effe8..26b9434ba4 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -1000,20 +1000,7 @@ 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