1
0
Fork 0
forked from len0rd/rockbox

text viewer: some modify text viewer's layout and preferences.

- layout: hader, footer and horizontal_scrollbar add padding.
- add member 'statusbar' in tv_preferences.
- delete HD_SBAR/HD_BOTH/FT_SBAR/FT_BOTH.
- deletes the function to check header_mode/footer_mode.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27142 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Yoshihisa Uchida 2010-06-26 12:17:01 +00:00
parent e0bb92f00f
commit 17383c2691
6 changed files with 82 additions and 89 deletions

View file

@ -48,14 +48,12 @@
* |statusbar (6) | * |statusbar (6) |
* +-------------------------+ * +-------------------------+
* *
* (1) displays when rb->global_settings->statusbar == STATUSBAR_TOP * (1) displays when rb->global_settings->statusbar == STATUSBAR_TOP.
* and preferences->header_mode is HD_SBAR or HD_BOTH. * (2) displays when preferences->header_mode is HD_PATH.
* (2) displays when preferences->header_mode is HD_PATH or HD_BOTH.
* (3) displays when preferences->vertical_scrollbar is SB_ON. * (3) displays when preferences->vertical_scrollbar is SB_ON.
* (4) displays when preferences->horizontal_scrollbar is SB_ON. * (4) displays when preferences->horizontal_scrollbar is SB_ON.
* (5) displays when preferences->footer_mode is FT_PAGE or FT_BOTH. * (5) displays when preferences->footer_mode is FT_PAGE.
* (6) displays when rb->global_settings->statusbar == STATUSBAR_BOTTOM * (6) displays when rb->global_settings->statusbar == STATUSBAR_BOTTOM.
* and preferences->footer_mode is FT_SBAR or FT_BOTH.
* *
* *
* when isn't defined HAVE_LCD_BITMAP * when isn't defined HAVE_LCD_BITMAP
@ -115,7 +113,7 @@ void tv_show_header(void)
{ {
unsigned header_mode = header_mode; unsigned header_mode = header_mode;
if (preferences->header_mode == HD_PATH || preferences->header_mode == HD_BOTH) if (preferences->header_mode == HD_PATH)
display->putsxy(header.x, header.y, preferences->file_name); display->putsxy(header.x, header.y, preferences->file_name);
} }
@ -124,13 +122,13 @@ void tv_show_footer(const struct tv_screen_pos *pos)
unsigned char buf[12]; unsigned char buf[12];
unsigned footer_mode = preferences->footer_mode; unsigned footer_mode = preferences->footer_mode;
if (footer_mode == FT_PAGE || footer_mode == FT_BOTH) if (footer_mode == FT_PAGE)
{ {
if (pos->line == 0) if (pos->line == 0)
rb->snprintf(buf, sizeof(buf), "%d", pos->page + 1); rb->snprintf(buf, sizeof(buf), "%d", pos->page + 1);
else else
rb->snprintf(buf, sizeof(buf), "%d - %d", pos->page + 1, pos->page + 2); rb->snprintf(buf, sizeof(buf), "%d - %d", pos->page + 1, pos->page + 2);
display->putsxy(footer.x, footer.y, buf); display->putsxy(footer.x, footer.y + 1, buf);
} }
} }
@ -153,7 +151,7 @@ void tv_show_scrollbar(int window, int col, off_t cur_pos, int size)
max_shown = min_shown + display_columns; max_shown = min_shown + display_columns;
rb->gui_scrollbar_draw(display, rb->gui_scrollbar_draw(display,
horizontal_scrollbar.x, horizontal_scrollbar.y, horizontal_scrollbar.x, horizontal_scrollbar.y + 1,
horizontal_scrollbar.w, TV_SCROLLBAR_HEIGHT, horizontal_scrollbar.w, TV_SCROLLBAR_HEIGHT,
items, min_shown, max_shown, HORIZONTAL); items, min_shown, max_shown, HORIZONTAL);
} }
@ -166,7 +164,7 @@ void tv_show_scrollbar(int window, int col, off_t cur_pos, int size)
rb->gui_scrollbar_draw(display, rb->gui_scrollbar_draw(display,
vertical_scrollbar.x, vertical_scrollbar.y, vertical_scrollbar.x, vertical_scrollbar.y,
TV_SCROLLBAR_WIDTH-1, vertical_scrollbar.h, TV_SCROLLBAR_WIDTH, vertical_scrollbar.h,
items, min_shown, max_shown, VERTICAL); items, min_shown, max_shown, VERTICAL);
} }
} }
@ -236,6 +234,7 @@ void tv_end_display(void)
void tv_clear_display(void) void tv_clear_display(void)
{ {
rb->lcd_set_backdrop(NULL);
display->clear_viewport(); display->clear_viewport();
} }
@ -251,22 +250,20 @@ void tv_set_layout(int col_w)
#endif #endif
{ {
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
int scrollbar_width = (show_scrollbar)? TV_SCROLLBAR_WIDTH : 0; int scrollbar_width = (show_scrollbar)? TV_SCROLLBAR_WIDTH + 1 : 0;
int scrollbar_height = (preferences->horizontal_scrollbar)? TV_SCROLLBAR_HEIGHT : 0; int scrollbar_height = (preferences->horizontal_scrollbar)? TV_SCROLLBAR_HEIGHT + 1 : 0;
unsigned header_mode = preferences->header_mode;
unsigned footer_mode = preferences->footer_mode;
row_height = preferences->font->height; row_height = preferences->font->height;
header.x = 0; header.x = 0;
header.y = 0; header.y = 1;
header.w = vp_info.width; header.w = vp_info.width;
header.h = (header_mode == HD_PATH || header_mode == HD_BOTH)? row_height : 0; header.h = (preferences->header_mode == HD_PATH)? row_height + 1 : 0;
footer.x = 0; footer.x = 0;
footer.w = vp_info.width; footer.w = vp_info.width;
footer.h = (footer_mode == FT_PAGE || footer_mode == FT_BOTH)? row_height : 0; footer.h = (preferences->footer_mode == FT_PAGE)? row_height + 1 : 0;
footer.y = vp_info.height - footer.h; footer.y = vp_info.height - 1 - footer.h;
drawarea.x = scrollbar_width; drawarea.x = scrollbar_width;
drawarea.y = header.y + header.h; drawarea.y = header.y + header.h;
@ -312,17 +309,13 @@ void tv_change_viewport(void)
{ {
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
struct viewport vp; struct viewport vp;
bool show_statusbar = (preferences->header_mode == HD_SBAR ||
preferences->header_mode == HD_BOTH ||
preferences->footer_mode == FT_SBAR ||
preferences->footer_mode == FT_BOTH);
if (is_initialized_vp) if (is_initialized_vp)
tv_undo_viewport(); tv_undo_viewport();
else else
is_initialized_vp = true; is_initialized_vp = true;
rb->viewportmanager_theme_enable(SCREEN_MAIN, show_statusbar, &vp); rb->viewportmanager_theme_enable(SCREEN_MAIN, preferences->statusbar, &vp);
vp_info = vp; vp_info = vp;
vp_info.flags &= ~VP_FLAG_ALIGNMENT_MASK; vp_info.flags &= ~VP_FLAG_ALIGNMENT_MASK;

View file

@ -223,13 +223,10 @@ static bool tv_header_setting(void)
{ {
{"None", -1}, {"None", -1},
{"File path", -1}, {"File path", -1},
{"Status bar", -1},
{"Both", -1},
}; };
int len = (rb->global_settings->statusbar == STATUSBAR_TOP)? 4 : 2;
return rb->set_option("Show Header", &new_prefs.header_mode, INT, return rb->set_option("Show Header", &new_prefs.header_mode, INT,
names, len, NULL); names, 2, NULL);
} }
static bool tv_footer_setting(void) static bool tv_footer_setting(void)
@ -238,13 +235,21 @@ static bool tv_footer_setting(void)
{ {
{"None", -1}, {"None", -1},
{"Page Num", -1}, {"Page Num", -1},
{"Status bar", -1},
{"Both", -1},
}; };
int len = (rb->global_settings->statusbar == STATUSBAR_BOTTOM)? 4 : 2;
return rb->set_option("Show Footer", &new_prefs.footer_mode, INT, return rb->set_option("Show Footer", &new_prefs.footer_mode, INT,
names, len, NULL); names, 2, NULL);
}
static bool tv_statusbar_setting(void)
{
static const struct opt_items names[] = {
{"No", -1},
{"Yes", -1},
};
return rb->set_option("Show Statusbar", &new_prefs.statusbar, BOOL,
names, 2, NULL);
} }
static bool tv_font_setting(void) static bool tv_font_setting(void)
@ -319,6 +324,8 @@ MENUITEM_FUNCTION(header_item, 0, "Show Header", tv_header_setting,
NULL, NULL, Icon_NOICON); NULL, NULL, Icon_NOICON);
MENUITEM_FUNCTION(footer_item, 0, "Show Footer", tv_footer_setting, MENUITEM_FUNCTION(footer_item, 0, "Show Footer", tv_footer_setting,
NULL, NULL, Icon_NOICON); NULL, NULL, Icon_NOICON);
MENUITEM_FUNCTION(statusbar_item, 0, "Show Statusbar", tv_statusbar_setting,
NULL, NULL, Icon_NOICON);
MENUITEM_FUNCTION(font_item, 0, "Font", tv_font_setting, MENUITEM_FUNCTION(font_item, 0, "Font", tv_font_setting,
NULL, NULL, Icon_NOICON); NULL, NULL, Icon_NOICON);
#endif #endif
@ -329,7 +336,7 @@ MAKE_MENU(option_menu, "Viewer Options", NULL, Icon_NOICON,
&encoding_item, &word_wrap_item, &line_mode_item, &windows_item, &encoding_item, &word_wrap_item, &line_mode_item, &windows_item,
&alignment_item, &alignment_item,
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
&header_item, &footer_item, &font_item, &header_item, &footer_item, &font_item, &statusbar_item,
#endif #endif
&scroll_menu, &indent_spaces_item); &scroll_menu, &indent_spaces_item);

View file

@ -58,6 +58,7 @@ static void tv_notify_change_preferences(const struct tv_preferences *oldp)
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
(oldp->header_mode != preferences->header_mode) || (oldp->header_mode != preferences->header_mode) ||
(oldp->footer_mode != preferences->footer_mode) || (oldp->footer_mode != preferences->footer_mode) ||
(oldp->statusbar != preferences->statusbar) ||
(rb->strcmp(oldp->font_name, preferences->font_name)) || (rb->strcmp(oldp->font_name, preferences->font_name)) ||
#endif #endif
(rb->strcmp(oldp->file_name, preferences->file_name))) (rb->strcmp(oldp->file_name, preferences->file_name)))
@ -99,13 +100,15 @@ void tv_set_default_preferences(struct tv_preferences *p)
p->horizontal_scrollbar = SB_OFF; p->horizontal_scrollbar = SB_OFF;
p->vertical_scrollbar = SB_OFF; p->vertical_scrollbar = SB_OFF;
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
p->header_mode = HD_BOTH; p->header_mode = HD_PATH;
p->footer_mode = FT_BOTH; p->footer_mode = FT_PAGE;
p->statusbar = true;
rb->strlcpy(p->font_name, rb->global_settings->font_file, MAX_PATH); rb->strlcpy(p->font_name, rb->global_settings->font_file, MAX_PATH);
p->font = rb->font_get(FONT_UI); p->font = rb->font_get(FONT_UI);
#else #else
p->header_mode = HD_NONE; p->header_mode = HD_NONE;
p->footer_mode = FT_NONE; p->footer_mode = FT_NONE;
p->statusbar = false;
#endif #endif
p->autoscroll_speed = 1; p->autoscroll_speed = 1;
p->narrow_mode = NM_PAGE; p->narrow_mode = NM_PAGE;

View file

@ -59,8 +59,6 @@ enum {
enum { enum {
HD_NONE = 0, HD_NONE = 0,
HD_PATH, HD_PATH,
HD_SBAR,
HD_BOTH,
}; };
/* footer_mode */ /* footer_mode */
@ -68,8 +66,6 @@ enum {
FT_NONE = 0, FT_NONE = 0,
FT_PAGE, FT_PAGE,
FT_SBAR,
FT_BOTH,
}; };
/* horizontal_scroll_mode */ /* horizontal_scroll_mode */
@ -114,6 +110,8 @@ struct tv_preferences {
unsigned indent_spaces; unsigned indent_spaces;
bool statusbar;
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
unsigned char font_name[MAX_PATH]; unsigned char font_name[MAX_PATH];
struct font *font; struct font *font;

View file

@ -42,15 +42,16 @@
* vertical_scrollbar 1 * vertical_scrollbar 1
* (unused) 1 (for compatibility) * (unused) 1 (for compatibility)
* page_mode 1 * page_mode 1
* page_number_mode 1 * header_mode 1
* title_mode 1 * footer_mode 1
* scroll_mode 1 * scroll_mode 1
* autoscroll_speed 1 * autoscroll_speed 1
* horizontal_scrollbar 1 * horizontal_scrollbar 1
* horizontal_scroll_mode 1 * horizontal_scroll_mode 1
* narrow_mode 1 * narrow_mode 1
* indent_spaces 1 * indent_spaces 1
* (reserved) 12 * statusbar 1
* (reserved) 11
* font name MAX_PATH * font name MAX_PATH
*/ */
@ -58,7 +59,7 @@
#define TV_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/tv_global.dat" #define TV_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/tv_global.dat"
#define TV_GLOBAL_SETTINGS_HEADER "\x54\x56\x47\x53" /* "TVGS" */ #define TV_GLOBAL_SETTINGS_HEADER "\x54\x56\x47\x53" /* "TVGS" */
#define TV_GLOBAL_SETTINGS_VERSION 0x37 #define TV_GLOBAL_SETTINGS_VERSION 0x38
#define TV_GLOBAL_SETTINGS_HEADER_SIZE 5 #define TV_GLOBAL_SETTINGS_HEADER_SIZE 5
#define TV_GLOBAL_SETTINGS_FIRST_VERSION 0x31 #define TV_GLOBAL_SETTINGS_FIRST_VERSION 0x31
@ -92,7 +93,8 @@
* horizontal_scroll_mode 1 * horizontal_scroll_mode 1
* narrow_mode 1 * narrow_mode 1
* indent_spaces 1 * indent_spaces 1
* (reserved) 12 * statusbar 1
* (reserved) 11
* font name MAX_PATH * font name MAX_PATH
* bookmark count 1 * bookmark count 1
* [1st bookmark] * [1st bookmark]
@ -114,7 +116,7 @@
#define TV_SETTINGS_TMP_FILE VIEWERS_DIR "/tv_file.tmp" #define TV_SETTINGS_TMP_FILE VIEWERS_DIR "/tv_file.tmp"
#define TV_SETTINGS_HEADER "\x54\x56\x53" /* "TVS" */ #define TV_SETTINGS_HEADER "\x54\x56\x53" /* "TVS" */
#define TV_SETTINGS_VERSION 0x38 #define TV_SETTINGS_VERSION 0x39
#define TV_SETTINGS_HEADER_SIZE 4 #define TV_SETTINGS_HEADER_SIZE 4
#define TV_SETTINGS_FIRST_VERSION 0x32 #define TV_SETTINGS_FIRST_VERSION 0x32
@ -156,8 +158,34 @@ static bool tv_read_preferences(int pfd, int version, struct tv_preferences *pre
/* skip need_scrollbar */ /* skip need_scrollbar */
p++; p++;
prefs->page_mode = *p++; prefs->page_mode = *p++;
prefs->header_mode = *p++;
prefs->footer_mode = *p++; if (version < 7)
{
prefs->statusbar = false;
if (*p > 1)
{
prefs->header_mode = (*p & 1);
prefs->statusbar = true;
}
else
prefs->header_mode = *p;
if (*(++p) > 1)
{
prefs->footer_mode = (*p & 1);
prefs->statusbar = true;
}
else
prefs->footer_mode = *p;
p++;
}
else
{
prefs->header_mode = *p++;
prefs->footer_mode = *p++;
}
prefs->vertical_scroll_mode = *p++; prefs->vertical_scroll_mode = *p++;
prefs->autoscroll_speed = *p++; prefs->autoscroll_speed = *p++;
@ -181,6 +209,9 @@ static bool tv_read_preferences(int pfd, int version, struct tv_preferences *pre
else else
prefs->indent_spaces = 2; prefs->indent_spaces = 2;
if (version > 6)
prefs->statusbar = (*p++ != 0);
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
rb->memcpy(prefs->font_name, buf + read_size - MAX_PATH, MAX_PATH); rb->memcpy(prefs->font_name, buf + read_size - MAX_PATH, MAX_PATH);
@ -212,6 +243,7 @@ static bool tv_write_preferences(int pfd, const struct tv_preferences *prefs)
*p++ = prefs->horizontal_scroll_mode; *p++ = prefs->horizontal_scroll_mode;
*p++ = prefs->narrow_mode; *p++ = prefs->narrow_mode;
*p++ = prefs->indent_spaces; *p++ = prefs->indent_spaces;
*p++ = prefs->statusbar;
#ifdef HAVE_LCD_BITMAP #ifdef HAVE_LCD_BITMAP
rb->memcpy(buf + 28, prefs->font_name, MAX_PATH); rb->memcpy(buf + 28, prefs->font_name, MAX_PATH);

View file

@ -52,40 +52,6 @@ static bool tv_set_font(const unsigned char *font)
} }
return true; return true;
} }
static bool tv_check_header_and_footer(struct tv_preferences *new_prefs)
{
bool change_prefs = false;
if (rb->global_settings->statusbar != STATUSBAR_TOP)
{
if (new_prefs->header_mode == HD_SBAR)
{
new_prefs->header_mode = HD_NONE;
change_prefs = true;
}
else if (new_prefs->header_mode == HD_BOTH)
{
new_prefs->header_mode = HD_PATH;
change_prefs = true;
}
}
if (rb->global_settings->statusbar != STATUSBAR_BOTTOM)
{
if (new_prefs->footer_mode == FT_SBAR)
{
new_prefs->footer_mode = FT_NONE;
change_prefs = true;
}
else if (new_prefs->footer_mode == FT_BOTH)
{
new_prefs->footer_mode = FT_PAGE;
change_prefs = true;
}
}
return change_prefs;
}
#endif #endif
static void tv_show_bookmarks(const struct tv_screen_pos *top_pos) static void tv_show_bookmarks(const struct tv_screen_pos *top_pos)
@ -177,7 +143,6 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
#else #else
static bool font_changing = false; static bool font_changing = false;
const unsigned char *font_str; const unsigned char *font_str;
bool change_prefs = false;
bool need_vertical_scrollbar; bool need_vertical_scrollbar;
struct tv_preferences new_prefs; struct tv_preferences new_prefs;
tv_copy_preferences(&new_prefs); tv_copy_preferences(&new_prefs);
@ -191,16 +156,11 @@ static void tv_change_preferences(const struct tv_preferences *oldp)
if (!tv_set_font(preferences->font_name)) if (!tv_set_font(preferences->font_name))
{ {
rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH); rb->strlcpy(new_prefs.font_name, font_str, MAX_PATH);
change_prefs = true; tv_set_preferences(&new_prefs);
return;
} }
} }
if (tv_check_header_and_footer(&new_prefs) || change_prefs)
{
tv_set_preferences(&new_prefs);
return;
}
font_changing = false; font_changing = false;
#endif #endif