(Hopefully) Revert the quickscreen changes. Many fixes need to be made,
and the exact implementation needs discussion. We apologize for the
inconvenience and hope to bring an improved quickscreen to you soon.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16224 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/gui/gwps.c b/apps/gui/gwps.c
index e75c16a..ad9fce7 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 5dec9f7..cb5b6ee 100644
--- a/apps/gui/option_select.c
+++ b/apps/gui/option_select.c
@@ -60,7 +60,7 @@
/* 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 @@
}
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 @@
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 63299bc..e46570f 100644
--- a/apps/gui/option_select.h
+++ b/apps/gui/option_select.h
@@ -65,9 +65,4 @@
*/
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 f98c926..c2da587 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; i<QUICKSCREEN_ITEM_COUNT; i++)
- {
- if (qs->items[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);
}
- if (w>vp->width)
- display->puts_scroll(0,line,s);
+ 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);
+ }
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; i<QUICKSCREEN_ITEM_COUNT; i++)
- {
-
- if (!qs->items[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 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 @@
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 @@
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 a264a93..179d619 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 0e84b08..96c076a 100644
--- a/apps/lang/english.lang
+++ b/apps/lang/english.lang
@@ -10087,53 +10087,53 @@
</phrase>
<phrase>
id: LANG_SYSFONT_SET_BOOL_YES
- desc: deprecated
+ desc: bool true representation
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Yes"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Yes"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Yes"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_SET_BOOL_NO
- desc: deprecated
+ desc: bool false representation
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "No"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "No"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "No"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_ON
- desc: deprecated
+ desc: Used in a lot of places
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "On"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "On"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "On"
</voice>
</phrase>
<phrase>
@@ -10206,206 +10206,206 @@
</phrase>
<phrase>
id: LANG_SYSFONT_SHUFFLE
- desc: deprecated
+ desc: in settings_menu
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Shuffle"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Shuffle"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Shuffle"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_REPEAT
- desc: deprecated
+ desc: in settings_menu
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Repeat"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Repeat"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Repeat"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_ALL
- desc: deprecated
+ desc: repeat playlist once all songs have completed
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "All"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "All"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "All"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_REPEAT_ONE
- desc: deprecated
+ desc: repeat one song
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "One"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "One"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "One"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_REPEAT_AB
- desc: deprecated
+ desc: repeat range from point A to B
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "A-B"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "A-B"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "A-B"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_FILTER
- desc: deprecated
+ desc: setting name for dir filter
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Show Files"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Show Files"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Show Files"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_FILTER_SUPPORTED
- desc: deprecated
+ desc: show all file types supported by Rockbox
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Supported"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Supported"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Supported"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_FILTER_MUSIC
- desc: deprecated
+ desc: show only music-related files
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Music"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Music"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Music"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_FILTER_PLAYLIST
- desc: deprecated
+ desc: show only playlist
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Playlists"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Playlists"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Playlists"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_FLIP_DISPLAY
- desc: deprecated
+ desc: in settings_menu, option to turn display+buttos by 180 degreed
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Upside Down"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Upside Down"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Upside Down"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_SCROLL_BAR
- desc: deprecated
+ desc: display menu, F3 substitute
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Scroll Bar"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Scroll Bar"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Scroll Bar"
</voice>
</phrase>
<phrase>
id: LANG_SYSFONT_STATUS_BAR
- desc: deprecated
+ desc: display menu, F3 substitute
user:
<source>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Status Bar"
</source>
<dest>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Status Bar"
</dest>
<voice>
*: none
- lcd_bitmap: ""
+ lcd_bitmap: "Status Bar"
</voice>
</phrase>
<phrase>
diff --git a/apps/screens.c b/apps/screens.c
index 60b61f7..6654be4 100644
--- a/apps/screens.c
+++ b/apps/screens.c
@@ -636,6 +636,158 @@
}
#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 8037900..4d7704f 100644
--- a/apps/screens.h
+++ b/apps/screens.h
@@ -40,6 +40,11 @@
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 5d148ef..26b9434 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -1000,20 +1000,7 @@
}
return NULL;
}
-const struct settings_list* find_setting_from_string(char* setting, int *id)
-{
- int i;
- for(i=0;i<nb_settings;i++)
- {
- if (settings[i].cfg_name && !strcmp(setting, settings[i].cfg_name))
- {
- if (id)
- *id = i;
- return &settings[i];
- }
- }
- return NULL;
-}
+
void talk_setting(void *global_settings_variable)
{
const struct settings_list *setting;
diff --git a/apps/settings.h b/apps/settings.h
index 6487d98..bdbe8d9 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -224,7 +224,6 @@
enum optiontype { INT, BOOL };
const struct settings_list* find_setting(void* variable, int *id);
-const struct settings_list* find_setting_from_string(char* setting, 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,
@@ -726,13 +725,6 @@
int keyclick_repeats; /* keyclick on repeats */
#endif
unsigned char playlist_catalog_dir[MAX_FILENAME+1];
-
-#ifdef HAVE_QUICKSCREEN
- unsigned char quickscreen_left[MAX_FILENAME+1];
- unsigned char quickscreen_right[MAX_FILENAME+1];
- unsigned char quickscreen_top[MAX_FILENAME+1];
- unsigned char quickscreen_bottom[MAX_FILENAME+1];
-#endif
};
/** global variables **/
diff --git a/apps/settings_list.c b/apps/settings_list.c
index 57261d5..5dc3b9e 100644
--- a/apps/settings_list.c
+++ b/apps/settings_list.c
@@ -1188,17 +1188,7 @@
OFFON_SETTING(0, keyclick_repeats, LANG_KEYCLICK_REPEATS, false, "keyclick repeats", NULL),
#endif /* CONFIG_CODEC == SWCODEC */
FILENAME_SETTING(0, playlist_catalog_dir, "playlist catalog directory",
- PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL, MAX_FILENAME+1),
-#ifdef HAVE_QUICKSCREEN
- FILENAME_SETTING(0, quickscreen_left, "quickscreen left",
- "shuffle", NULL, NULL, MAX_FILENAME+1),
- FILENAME_SETTING(0, quickscreen_right, "quickscreen right",
- "repeat", NULL, NULL, MAX_FILENAME+1),
- FILENAME_SETTING(0, quickscreen_top, "quickscreen top",
- "", NULL, NULL, MAX_FILENAME+1),
- FILENAME_SETTING(0, quickscreen_bottom, "quickscreen bottom",
- "show files", NULL, NULL, MAX_FILENAME+1),
-#endif
+ PLAYLIST_CATALOG_DEFAULT_DIR, NULL, NULL, MAX_FILENAME+1),
};
const int nb_settings = sizeof(settings)/sizeof(*settings);
diff --git a/apps/tree.c b/apps/tree.c
index f70c07c..5c4b752 100644
--- a/apps/tree.c
+++ b/apps/tree.c
@@ -77,7 +77,6 @@
#include "buttonbar.h"
#include "textarea.h"
#include "action.h"
-#include "quickscreen.h"
#include "root_menu.h"