From 03888890c73d0471a691e0ede0bf9f0a11e742a6 Mon Sep 17 00:00:00 2001 From: Thomas Martitz Date: Thu, 13 Aug 2009 15:30:00 +0200 Subject: [PATCH] FS#9706 - Quickscreen: 4th item + some optimisations for remotes. This adds a top quickscreen item, configurable as the existing ones. A technique is used to detect ACTION_QS_DOWN_INV in keymaps so that the top in favor of inverting the bottom one (needed for archos recorder and some remotes). --- apps/action.h | 5 +- apps/gui/quickscreen.c | 183 ++++++++++++++++++++++++++----------- apps/gui/quickscreen.h | 3 +- apps/keymaps/keymap-av300.c | 4 +- apps/keymaps/keymap-c100.c | 4 +- apps/keymaps/keymap-c200.c | 4 +- apps/keymaps/keymap-clip.c | 4 +- apps/keymaps/keymap-creativezv.c | 4 +- apps/keymaps/keymap-creativezvm.c | 4 +- apps/keymaps/keymap-e200.c | 4 +- apps/keymaps/keymap-fuze.c | 4 +- apps/keymaps/keymap-gigabeat-s.c | 4 +- apps/keymaps/keymap-gigabeat.c | 4 +- apps/keymaps/keymap-h10.c | 4 +- apps/keymaps/keymap-h1x0_h3x0.c | 4 +- apps/keymaps/keymap-hdd1630.c | 4 +- apps/keymaps/keymap-iaudio67.c | 4 +- apps/keymaps/keymap-ifp7xx.c | 4 +- apps/keymaps/keymap-logikdax.c | 4 +- apps/keymaps/keymap-m200.c | 4 +- apps/keymaps/keymap-m3.c | 4 +- apps/keymaps/keymap-meizu-m6sl.c | 4 +- apps/keymaps/keymap-mr100.c | 4 +- apps/keymaps/keymap-sa9200.c | 4 +- apps/keymaps/keymap-touchscreen.c | 4 +- apps/keymaps/keymap-x5.c | 4 +- apps/lang/deutsch.lang | 17 ++++ apps/lang/english.lang | 17 ++++ apps/main.c | 2 + apps/menu.c | 10 ++- apps/settings.h | 1 + apps/settings_list.c | 8 ++ 32 files changed, 233 insertions(+), 105 deletions(-) diff --git a/apps/action.h b/apps/action.h index eae5f12..1469f41 100644 --- a/apps/action.h +++ b/apps/action.h @@ -191,13 +191,12 @@ enum { /* bookmark screen */ ACTION_BMS_DELETE, - /* alarm menu screen */ - /* quickscreen */ ACTION_QS_LEFT, ACTION_QS_RIGHT, ACTION_QS_DOWN, - ACTION_QS_DOWNINV, /* why is this not called up?? :p */ + ACTION_QS_DOWNINV, /* for flipped display on recorder and remotes */ + ACTION_QS_TOP, /* other targets can use a 4th item */ /* pitchscreen */ /* obviously ignore if you dont have thise screen */ diff --git a/apps/gui/quickscreen.c b/apps/gui/quickscreen.c index 20d2738..673f9ed 100644 --- a/apps/gui/quickscreen.c +++ b/apps/gui/quickscreen.c @@ -38,17 +38,21 @@ #include "talk.h" #include "list.h" #include "option_select.h" +#include "debug.h" static struct viewport vps[NB_SCREENS][QUICKSCREEN_ITEM_COUNT]; static struct viewport vp_icons[NB_SCREENS]; -/* vp_icons will be used like this: - the side icons will be aligned to the top of this vp and to their sides - the bottom icon will be aligned center and at the bottom of this vp */ +static bool have_invert[NB_SCREENS] = { 0 }; +/* vp_icons will contain 4 icons for normal screens, and 3 for remotes + * this is because remotes only show 3 items due to limited space + * and a rather odd button situation */ -#define MIN_LINES 4 -#define MAX_NEEDED_LINES 8 -#define CENTER_MARGIN 10 /* pixels between the 2 center items minimum */ -#define CENTER_ICONAREA_WIDTH (CENTER_MARGIN+8*2) +#define MIN_LINES 6 /* 2 top, 2 bottom, 2 on either side */ +#define MAX_NEEDED_LINES 10 + /* pixels between the 2 center items minimum or between text and icons, + * and between text and parent boundaries */ +#define MARGIN 10 +#define CENTER_ICONAREA_SIZE (MARGIN+8*2) static void quickscreen_fix_viewports(struct gui_quickscreen *qs, struct screen *display, @@ -59,9 +63,10 @@ static void quickscreen_fix_viewports(struct gui_quickscreen *qs, #else const int screen = 0; #endif - - int char_height, i, width, pad = 0; - int left_width, right_width, bottom_lines = 2; + /* remotes do not show the top item so MIN_LINES is only 4 */ + const int min_lines = (screen == SCREEN_MAIN ? MIN_LINES : MIN_LINES - 2); + int char_height, width, pad = 0; + int left_width, right_width, vert_lines; unsigned char *s; int nb_lines = viewport_get_nb_lines(parent); @@ -75,43 +80,57 @@ static void quickscreen_fix_viewports(struct gui_quickscreen *qs, /* center the icons VP first */ vp_icons[screen] = *parent; - vp_icons[screen].width = CENTER_ICONAREA_WIDTH; /* absolute smallest allowed */ - vp_icons[screen].x = parent->x + (parent->width / 2 - CENTER_ICONAREA_WIDTH / 2); + vp_icons[screen].width = CENTER_ICONAREA_SIZE; /* abosulte smallest allowed */ + vp_icons[screen].x = parent->x; + vp_icons[screen].x += (parent->width-CENTER_ICONAREA_SIZE)/2; + vps[screen][QUICKSCREEN_BOTTOM] = *parent; - if (nb_lines <= MIN_LINES) /* make the bottom item use 1 line */ - bottom_lines = 1; + vps[screen][QUICKSCREEN_TOP] = *parent; + /* depending on the space the top/buttom items use 1 or 2 lines */ + if (nb_lines < min_lines) + vert_lines = 1; else - bottom_lines = 2; - vps[screen][QUICKSCREEN_BOTTOM].height = bottom_lines*char_height; - vps[screen][QUICKSCREEN_BOTTOM].y = - parent->y + parent->height - bottom_lines*char_height; + vert_lines = 2; + vps[screen][QUICKSCREEN_TOP].y = parent->y; + vps[screen][QUICKSCREEN_TOP].height = vps[screen][QUICKSCREEN_BOTTOM].height + = vert_lines*char_height; + vps[screen][QUICKSCREEN_BOTTOM].y + = parent->y + parent->height - vps[screen][QUICKSCREEN_BOTTOM].height; + + /* enough space vertically, so put a nice margin */ if (nb_lines >= MAX_NEEDED_LINES) { - vps[screen][QUICKSCREEN_BOTTOM].y -= char_height; + vps[screen][QUICKSCREEN_TOP].y += MARGIN; + vps[screen][QUICKSCREEN_BOTTOM].y -= MARGIN; } + vp_icons[screen].y = vps[screen][QUICKSCREEN_TOP].y + + vps[screen][QUICKSCREEN_TOP].height; + vp_icons[screen].height = parent->height - vp_icons[screen].y; + vp_icons[screen].height -= parent->height - vps[screen][QUICKSCREEN_BOTTOM].y; + /* adjust the left/right items widths to fit the screen nicely */ s = P2STR(ID2P(qs->items[QUICKSCREEN_LEFT]->lang_id)); left_width = display->getstringsize(s, NULL, NULL); s = P2STR(ID2P(qs->items[QUICKSCREEN_RIGHT]->lang_id)); right_width = display->getstringsize(s, NULL, NULL); - nb_lines -= bottom_lines; - + width = MAX(left_width, right_width); if (width*2 + vp_icons[screen].width > display->lcdwidth) width = (display->lcdwidth - vp_icons[screen].width)/2; else /* add more gap in icons vp */ { int excess = display->lcdwidth - vp_icons[screen].width - width*2; - if (excess > CENTER_MARGIN*4) + if (excess > MARGIN*4) { - pad = CENTER_MARGIN; - excess -= CENTER_MARGIN*2; + pad = MARGIN; + excess -= MARGIN*2; } vp_icons[screen].x -= excess/2; vp_icons[screen].width += excess; } + vps[screen][QUICKSCREEN_LEFT] = *parent; vps[screen][QUICKSCREEN_LEFT].x = parent->x + pad; vps[screen][QUICKSCREEN_LEFT].width = width; @@ -119,32 +138,37 @@ static void quickscreen_fix_viewports(struct gui_quickscreen *qs, vps[screen][QUICKSCREEN_RIGHT] = *parent; vps[screen][QUICKSCREEN_RIGHT].x = parent->x + parent->width - width - pad; vps[screen][QUICKSCREEN_RIGHT].width = width; - + + vps[screen][QUICKSCREEN_LEFT].height = vps[screen][QUICKSCREEN_RIGHT].height + = 2*char_height; + + if (screen == SCREEN_MAIN) + { + vps[screen][QUICKSCREEN_LEFT].y = vps[screen][QUICKSCREEN_RIGHT].y + = parent->y + (parent->height/2) - char_height; + } + else + { + /* remotes only show 3 items so fix the viewport here to match with + * left/right items */ + vps[screen][QUICKSCREEN_LEFT].y = vps[screen][QUICKSCREEN_RIGHT].y + = parent->y; + vp_icons[screen].y = vps[screen][QUICKSCREEN_LEFT].y + char_height/2; + vp_icons[screen].height = parent->height + - vps[screen][QUICKSCREEN_BOTTOM].height - char_height/2; + } /* shrink the icons vp by a few pixels if there is room so the arrows aren't drawn right next to the text */ - if (vp_icons[screen].width > CENTER_ICONAREA_WIDTH+8) + if (vp_icons[screen].width > CENTER_ICONAREA_SIZE+MARGIN*2) { - vp_icons[screen].width -= 8; - vp_icons[screen].x += 4; + vp_icons[screen].width -= MARGIN*2; + vp_icons[screen].x += MARGIN; + } + if (vp_icons[screen].height > CENTER_ICONAREA_SIZE+MARGIN*2) + { + vp_icons[screen].height -= MARGIN*2; + vp_icons[screen].y += MARGIN; } - - - if (nb_lines <= MIN_LINES) - i = 0; - else - i = nb_lines/2; - vps[screen][QUICKSCREEN_LEFT].y = parent->y + (i*char_height); - vps[screen][QUICKSCREEN_RIGHT].y = parent->y + (i*char_height); - if (nb_lines >= 3) - i = 3*char_height; - else - i = nb_lines*char_height; - - vps[screen][QUICKSCREEN_LEFT].height = i; - vps[screen][QUICKSCREEN_RIGHT].height = i; - vp_icons[screen].y = vps[screen][QUICKSCREEN_LEFT].y + (char_height/2); - vp_icons[screen].height = - vps[screen][QUICKSCREEN_BOTTOM].y - vp_icons[screen].y; } static void quickscreen_draw_text(char *s, int item, bool title, @@ -158,6 +182,7 @@ static void quickscreen_draw_text(char *s, int item, bool title, line = 1; switch (item) { + case QUICKSCREEN_TOP: case QUICKSCREEN_BOTTOM: x = (vp->width - w)/2; break; @@ -193,6 +218,10 @@ static void gui_quickscreen_draw(struct gui_quickscreen *qs, display->clear_viewport(); for (i=0; iitems[i]) continue; display->set_viewport(&vps[screen][i]); @@ -219,13 +248,25 @@ static void gui_quickscreen_draw(struct gui_quickscreen *qs, } /* draw the icons */ display->set_viewport(&vp_icons[screen]); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], - vp_icons[screen].width - 8, 0, 7, 8); - display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 0, 0, 7, 8); + if (screen == SCREEN_MAIN) + { + display->mono_bitmap(bitmap_icons_7x8[Icon_UpArrow], + (vp_icons[screen].width/2) - 4, 0, 7, 8); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], + vp_icons[screen].width - 8, + (vp_icons[screen].height/2) - 4, 7, 8); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 0, + (vp_icons[screen].height/2) - 4, 7, 8); + } + else + { + display->mono_bitmap(bitmap_icons_7x8[Icon_FastForward], + vp_icons[screen].width - 8, 0, 7, 8); + display->mono_bitmap(bitmap_icons_7x8[Icon_FastBackward], 0, 0, 7, 8); + } display->mono_bitmap(bitmap_icons_7x8[Icon_DownArrow], (vp_icons[screen].width/2) - 4, - vp_icons[screen].height - 7, 7, 8); - display->update_viewport(); + vp_icons[screen].height - 7, 7, 8); display->set_viewport(parent); display->update_viewport(); @@ -242,6 +283,30 @@ static void talk_qs_option(struct settings_list *opt, bool enqueue) } } +static bool quickscreen_detect_have_invert(enum screen_type screen) +{ + const struct button_mapping* map; + const int context = CONTEXT_QUICKSCREEN | (screen == SCREEN_MAIN ? 0 : CONTEXT_REMOTE); + map = get_context_mapping(context); + + int i = 0; + while(true) + { + if (map[i].action_code == ACTION_QS_DOWNINV) + return true; + if (map[i].button_code == BUTTON_NONE) /* context ends */ + return false; + ++i; + } + (void)screen; +} + +void quickscreen_init(void) +{ + int i; + FOR_NB_SCREENS(i) + have_invert[i] = quickscreen_detect_have_invert(i); +} /* * Does the actions associated to the given button if any * - qs : the quickscreen @@ -254,6 +319,9 @@ static bool gui_quickscreen_do_button(struct gui_quickscreen * qs, int button) bool invert = false; switch(button) { + case ACTION_QS_TOP: + item = QUICKSCREEN_TOP; + break; case ACTION_QS_LEFT: item = QUICKSCREEN_LEFT; break; @@ -367,6 +435,15 @@ bool quick_screen_quick(int button_enter) bool oldshuffle = global_settings.playlist_shuffle; int oldrepeat = global_settings.repeat_mode; + qs.items[QUICKSCREEN_TOP] = + get_setting(global_settings.qs_item_top, + find_setting( +#if CONFIG_CODEC == SW_CODEC + &global_settings.crossfeed +#else + &global_settings.volume +#endif + , NULL)); qs.items[QUICKSCREEN_LEFT] = get_setting(global_settings.qs_item_left, find_setting(&global_settings.playlist_shuffle, NULL)); @@ -452,6 +529,8 @@ void set_as_qs_item(const struct settings_list *setting, } switch (item) { + case QUICKSCREEN_TOP: + global_settings.qs_item_top = i; case QUICKSCREEN_LEFT: global_settings.qs_item_left = i; break; @@ -461,7 +540,7 @@ void set_as_qs_item(const struct settings_list *setting, case QUICKSCREEN_BOTTOM: global_settings.qs_item_bottom = i; break; - default: /* shut the copiler up */ + default: /* shut the compiler up */ break; } } diff --git a/apps/gui/quickscreen.h b/apps/gui/quickscreen.h index 2a67916..c725eae 100644 --- a/apps/gui/quickscreen.h +++ b/apps/gui/quickscreen.h @@ -29,7 +29,8 @@ #include "screen_access.h" enum quickscreen_item { - QUICKSCREEN_LEFT = 0, + QUICKSCREEN_TOP = 0, + QUICKSCREEN_LEFT, QUICKSCREEN_RIGHT, QUICKSCREEN_BOTTOM, QUICKSCREEN_ITEM_COUNT, diff --git a/apps/keymaps/keymap-av300.c b/apps/keymaps/keymap-av300.c index 15fc561..7bf5fe1 100644 --- a/apps/keymaps/keymap-av300.c +++ b/apps/keymaps/keymap-av300.c @@ -135,8 +135,8 @@ static const struct button_mapping button_context_yesno[] = { LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) }; static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-c100.c b/apps/keymaps/keymap-c100.c index e40a2df..a19549d 100644 --- a/apps/keymaps/keymap-c100.c +++ b/apps/keymaps/keymap-c100.c @@ -142,8 +142,8 @@ static const struct button_mapping button_context_yesno[] = { static const struct button_mapping button_context_quickscreen[] = { { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-c200.c b/apps/keymaps/keymap-c200.c index 36345ee..32e5ce5 100644 --- a/apps/keymaps/keymap-c200.c +++ b/apps/keymaps/keymap-c200.c @@ -147,8 +147,8 @@ static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-clip.c b/apps/keymaps/keymap-clip.c index 7956bbd..5b45f4f 100644 --- a/apps/keymaps/keymap-clip.c +++ b/apps/keymaps/keymap-clip.c @@ -164,8 +164,8 @@ static const struct button_mapping button_context_yesno[] = { static const struct button_mapping button_context_quickscreen[] = { { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_HOME, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-creativezv.c b/apps/keymaps/keymap-creativezv.c index 6004eb2..c75a5b2 100644 --- a/apps/keymaps/keymap-creativezv.c +++ b/apps/keymaps/keymap-creativezv.c @@ -177,8 +177,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-creativezvm.c b/apps/keymaps/keymap-creativezvm.c index 8d190f4..12694bc 100644 --- a/apps/keymaps/keymap-creativezvm.c +++ b/apps/keymaps/keymap-creativezvm.c @@ -176,8 +176,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-e200.c b/apps/keymaps/keymap-e200.c index 4d5ac65..86d54b2 100644 --- a/apps/keymaps/keymap-e200.c +++ b/apps/keymaps/keymap-e200.c @@ -152,8 +152,8 @@ static const struct button_mapping button_context_yesno[] = { static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-fuze.c b/apps/keymaps/keymap-fuze.c index b64549b..e44ee51 100644 --- a/apps/keymaps/keymap-fuze.c +++ b/apps/keymaps/keymap-fuze.c @@ -152,8 +152,8 @@ static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_HOME|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-gigabeat-s.c b/apps/keymaps/keymap-gigabeat-s.c index 5c13bc0..e29ce4a 100644 --- a/apps/keymaps/keymap-gigabeat-s.c +++ b/apps/keymaps/keymap-gigabeat-s.c @@ -227,8 +227,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-gigabeat.c b/apps/keymaps/keymap-gigabeat.c index dbaac6f..a1a38a9 100644 --- a/apps/keymaps/keymap-gigabeat.c +++ b/apps/keymaps/keymap-gigabeat.c @@ -215,8 +215,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-h10.c b/apps/keymaps/keymap-h10.c index 7fef53d..0d044be 100644 --- a/apps/keymaps/keymap-h10.c +++ b/apps/keymaps/keymap-h10.c @@ -207,8 +207,8 @@ static const struct button_mapping button_context_yesno[] = { }; /* button_context_settings_yesno */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_SCROLL_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_SCROLL_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_SCROLL_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_REW, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-h1x0_h3x0.c b/apps/keymaps/keymap-h1x0_h3x0.c index 10139d6..d71044f 100644 --- a/apps/keymaps/keymap-h1x0_h3x0.c +++ b/apps/keymaps/keymap-h1x0_h3x0.c @@ -205,8 +205,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_settings_bmark */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-hdd1630.c b/apps/keymaps/keymap-hdd1630.c index 1d1866b..4565c28 100644 --- a/apps/keymaps/keymap-hdd1630.c +++ b/apps/keymaps/keymap-hdd1630.c @@ -215,8 +215,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-iaudio67.c b/apps/keymaps/keymap-iaudio67.c index 6679ede..14bb945 100644 --- a/apps/keymaps/keymap-iaudio67.c +++ b/apps/keymaps/keymap-iaudio67.c @@ -154,8 +154,8 @@ static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_VOLUP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_VOLUP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_VOLDOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-ifp7xx.c b/apps/keymaps/keymap-ifp7xx.c index 3b09df4..23e56e8 100644 --- a/apps/keymaps/keymap-ifp7xx.c +++ b/apps/keymaps/keymap-ifp7xx.c @@ -109,8 +109,8 @@ static const struct button_mapping button_context_bmark[] = { }; /* button_context_settings_bmark */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-logikdax.c b/apps/keymaps/keymap-logikdax.c index cda6107..9591367 100644 --- a/apps/keymaps/keymap-logikdax.c +++ b/apps/keymaps/keymap-logikdax.c @@ -147,8 +147,8 @@ static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_MODE|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-m200.c b/apps/keymaps/keymap-m200.c index 8a16936..78a4947 100644 --- a/apps/keymaps/keymap-m200.c +++ b/apps/keymaps/keymap-m200.c @@ -165,8 +165,8 @@ static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-m3.c b/apps/keymaps/keymap-m3.c index 5bd0f9d..047fe78 100644 --- a/apps/keymaps/keymap-m3.c +++ b/apps/keymaps/keymap-m3.c @@ -188,8 +188,8 @@ static const struct button_mapping remote_button_context_pitchscreen[] = { /** Quickscreen **/ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_VOL_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_VOL_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-meizu-m6sl.c b/apps/keymaps/keymap-meizu-m6sl.c index 1d7ca42..988f8a2 100644 --- a/apps/keymaps/keymap-meizu-m6sl.c +++ b/apps/keymaps/keymap-meizu-m6sl.c @@ -202,8 +202,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-mr100.c b/apps/keymaps/keymap-mr100.c index efbbca4..bf9da0d 100644 --- a/apps/keymaps/keymap-mr100.c +++ b/apps/keymaps/keymap-mr100.c @@ -212,8 +212,8 @@ static const struct button_mapping button_context_time[] = { }; /* button_context_time */ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-sa9200.c b/apps/keymaps/keymap-sa9200.c index 06e93b0..3e83932 100644 --- a/apps/keymaps/keymap-sa9200.c +++ b/apps/keymaps/keymap-sa9200.c @@ -203,8 +203,8 @@ static const struct button_mapping button_context_quickscreen[] = { { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-touchscreen.c b/apps/keymaps/keymap-touchscreen.c index 0d9595c..dfa4fde 100644 --- a/apps/keymaps/keymap-touchscreen.c +++ b/apps/keymaps/keymap-touchscreen.c @@ -183,8 +183,8 @@ static const struct button_mapping button_context_time[] = { static const struct button_mapping button_context_quickscreen[] = { { ACTION_STD_CANCEL, BUTTON_CENTER|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_TOPMIDDLE|BUTTON_REL, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_TOPMIDDLE|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_TOPMIDDLE|BUTTON_REL, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_TOPMIDDLE|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_BOTTOMMIDDLE|BUTTON_REL, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_BOTTOMMIDDLE|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_MIDLEFT|BUTTON_REL, BUTTON_NONE }, diff --git a/apps/keymaps/keymap-x5.c b/apps/keymaps/keymap-x5.c index 7a7dd9a..fe1777f 100644 --- a/apps/keymaps/keymap-x5.c +++ b/apps/keymaps/keymap-x5.c @@ -195,8 +195,8 @@ static const struct button_mapping remote_button_context_pitchscreen[] = { /** Quickscreen **/ static const struct button_mapping button_context_quickscreen[] = { - { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE }, - { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, diff --git a/apps/lang/deutsch.lang b/apps/lang/deutsch.lang index b6034d1..9087e40 100644 --- a/apps/lang/deutsch.lang +++ b/apps/lang/deutsch.lang @@ -12499,3 +12499,20 @@ swcodec: "Geschwindigkeit" + + id: LANG_TOP_QS_ITEM + desc: used for the submenu name for the quickscreen items + user: core + + *: none + quickscreen: "Set as Top Quickscreen Item" + + + *: none + quickscreen: "Als obere Schnelleinstellung verwenden" + + + *: none + quickscreen: "Als obere Schnelleinstellung verwenden" + + diff --git a/apps/lang/english.lang b/apps/lang/english.lang index 2e4cb2d..80b81cc 100644 --- a/apps/lang/english.lang +++ b/apps/lang/english.lang @@ -12660,3 +12660,20 @@ pitchscreen: "Rate" + + id: LANG_TOP_QS_ITEM + desc: used for the submenu name for the quickscreen items + user: core + + *: none + quickscreen: "Set as Top Quickscreen Item" + + + *: none + quickscreen: "Set as Top Quickscreen Item" + + + *: none + quickscreen: "Set as Top Quickscreen Item" + + diff --git a/apps/main.c b/apps/main.c index d0fba3f..f257169 100644 --- a/apps/main.c +++ b/apps/main.c @@ -120,6 +120,7 @@ const char appsversion[]=APPSVERSION; static void init(void); +void quickscreen_init(void); #ifdef SIMULATOR void app_main(void) @@ -136,6 +137,7 @@ static void app_main(void) } tree_gui_init(); viewportmanager_set_statusbar(VP_SB_ALLSCREENS); + quickscreen_init(); add_event(GUI_EVENT_STATUSBAR_TOGGLE, false, viewportmanager_statusbar_changed); #ifdef HAVE_USBSTACK diff --git a/apps/menu.c b/apps/menu.c index 96140cf..54417cd 100644 --- a/apps/menu.c +++ b/apps/menu.c @@ -454,6 +454,7 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, MENUITEM_STRINGLIST(quickscreen_able_option, ID2P(LANG_ONPLAY_MENU_TITLE), NULL, ID2P(LANG_RESET_SETTING), + ID2P(LANG_TOP_QS_ITEM), ID2P(LANG_LEFT_QS_ITEM), ID2P(LANG_BOTTOM_QS_ITEM), ID2P(LANG_RIGHT_QS_ITEM)); @@ -480,13 +481,16 @@ int do_menu(const struct menu_item_ex *start_menu, int *start_selected, break; #ifdef HAVE_QUICKSCREEN break; - case 1: /* set as left QS item */ + case 1: /* set as top QS item */ + set_as_qs_item(setting, QUICKSCREEN_TOP); + break; + case 2: /* set as left QS item */ set_as_qs_item(setting, QUICKSCREEN_LEFT); break; - case 2: /* set as bottom QS item */ + case 3: /* set as bottom QS item */ set_as_qs_item(setting, QUICKSCREEN_BOTTOM); break; - case 3: /* set as right QS item */ + case 4: /* set as right QS item */ set_as_qs_item(setting, QUICKSCREEN_RIGHT); break; #endif diff --git a/apps/settings.h b/apps/settings.h index 29883b6..cc683e4 100644 --- a/apps/settings.h +++ b/apps/settings.h @@ -495,6 +495,7 @@ struct user_settings #ifdef HAVE_QUICKSCREEN /* these are split because settings_list cant handle arrays */ + int qs_item_top; int qs_item_left; int qs_item_right; int qs_item_bottom; diff --git a/apps/settings_list.c b/apps/settings_list.c index c03731f..b0fe6e3 100644 --- a/apps/settings_list.c +++ b/apps/settings_list.c @@ -1502,6 +1502,14 @@ const struct settings_list settings[] = { ID2P(LANG_NORMAL), ID2P(LANG_HIGH)), #endif #ifdef HAVE_QUICKSCREEN + CUSTOM_SETTING(0, qs_item_top, LANG_TOP_QS_ITEM, +#if CONFIG_CODEC == SW_CODEC + &global_settings.crossfeed +#else + &global_settings.volume +#endif + , "qs top", qs_load_from_cfg, qs_write_to_cfg, + qs_is_changed, qs_set_default), CUSTOM_SETTING(0, qs_item_left, LANG_LEFT_QS_ITEM, &global_settings.playlist_shuffle, "qs left", qs_load_from_cfg, qs_write_to_cfg, -- 1.6.3.3