From 8bdb1c04d3ea9fd6460506ca05de506416e1d750 Mon Sep 17 00:00:00 2001 From: Yoshihisa Uchida Date: Wed, 9 Jun 2010 11:28:43 +0000 Subject: text viewer: can select "move to prev/next page" or "move to top page/bottom page" when LEFT/RIGHT key is pressed (narrow mode). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26719 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/text_viewer/readme.txt | 2 -- apps/plugins/text_viewer/text_viewer.c | 32 +++++++++++++++++++------------ apps/plugins/text_viewer/tv_menu.c | 16 +++++++++++++++- apps/plugins/text_viewer/tv_preferences.c | 2 ++ apps/plugins/text_viewer/tv_preferences.h | 5 +++++ apps/plugins/text_viewer/tv_settings.c | 16 ++++++++++++---- 6 files changed, 54 insertions(+), 19 deletions(-) diff --git a/apps/plugins/text_viewer/readme.txt b/apps/plugins/text_viewer/readme.txt index 1180965fe4..ebde6d7f75 100644 --- a/apps/plugins/text_viewer/readme.txt +++ b/apps/plugins/text_viewer/readme.txt @@ -52,5 +52,3 @@ TODO list - more treatments of line breaking, word wrappings. (for example, period does not appear the top of line.) - - - whether scroll to prev/next page or scroll to top page/bottom page can be select the settings menu. diff --git a/apps/plugins/text_viewer/text_viewer.c b/apps/plugins/text_viewer/text_viewer.c index ea8972491b..fae2f071aa 100644 --- a/apps/plugins/text_viewer/text_viewer.c +++ b/apps/plugins/text_viewer/text_viewer.c @@ -114,12 +114,16 @@ enum plugin_status plugin_start(const void* file) tv_scroll_left(TV_HORIZONTAL_SCROLL_PREFS); } else { /* prefs->windows == 1 */ - /* scroll to previous page */ - tv_scroll_up(TV_VERTICAL_SCROLL_PAGE); -#if 0 - /* Top of file */ - tv_top(); -#endif + if (prefs->narrow_mode == NM_PAGE) + { + /* scroll to previous page */ + tv_scroll_up(TV_VERTICAL_SCROLL_PAGE); + } + else + { + /* Top of file */ + tv_top(); + } } break; @@ -131,12 +135,16 @@ enum plugin_status plugin_start(const void* file) tv_scroll_right(TV_HORIZONTAL_SCROLL_PREFS); } else { /* prefs->windows == 1 */ - /* scroll to next page */ - tv_scroll_down(TV_VERTICAL_SCROLL_PAGE); -#if 0 - /* Bottom of file */ - tv_bottom(); -#endif + if (prefs->narrow_mode == NM_PAGE) + { + /* scroll to next page */ + tv_scroll_down(TV_VERTICAL_SCROLL_PAGE); + } + else + { + /* Bottom of file */ + tv_bottom(); + } } break; diff --git a/apps/plugins/text_viewer/tv_menu.c b/apps/plugins/text_viewer/tv_menu.c index eb92782385..c40d6e67a6 100644 --- a/apps/plugins/text_viewer/tv_menu.c +++ b/apps/plugins/text_viewer/tv_menu.c @@ -117,6 +117,17 @@ static bool tv_autoscroll_speed_setting(void) &new_prefs.autoscroll_speed, NULL, 1, 1, 10, NULL); } +static bool tv_narrow_mode_setting(void) +{ + static const struct opt_items names[] = { + {"Previous/Next Page", -1}, + {"Top/Bottom Page", -1}, + }; + + return rb->set_option("Left/Right Key", &new_prefs.narrow_mode, INT, + names, 2, NULL); +} + #ifdef HAVE_LCD_BITMAP MENUITEM_FUNCTION(vertical_scrollbar_item, 0, "Scrollbar", tv_vertical_scrollbar_setting, @@ -128,12 +139,15 @@ MENUITEM_FUNCTION(page_mode_item, 0, "Overlap Pages", tv_page_mode_setting, NULL, NULL, Icon_NOICON); MENUITEM_FUNCTION(autoscroll_speed_item, 0, "Auto-Scroll Speed", tv_autoscroll_speed_setting, NULL, NULL, Icon_NOICON); +MENUITEM_FUNCTION(narrow_mode_item, 0, "Left/Right Key (Narrow mode)", + tv_narrow_mode_setting, NULL, NULL, Icon_NOICON); MAKE_MENU(vertical_scroll_menu, "Vertical", NULL, Icon_NOICON, #ifdef HAVE_LCD_BITMAP &vertical_scrollbar_item, #endif - &vertical_scroll_mode_item, &page_mode_item, &autoscroll_speed_item); + &vertical_scroll_mode_item, &page_mode_item, &autoscroll_speed_item, + &narrow_mode_item); /* */ /* scroll settings menu */ diff --git a/apps/plugins/text_viewer/tv_preferences.c b/apps/plugins/text_viewer/tv_preferences.c index 62a700b85d..8b4c91a1cb 100644 --- a/apps/plugins/text_viewer/tv_preferences.c +++ b/apps/plugins/text_viewer/tv_preferences.c @@ -43,6 +43,7 @@ static void tv_notify_change_preferences(const struct tv_preferences *oldp, * - page_mode * - font * - autoscroll_speed + * - narrow_mode */ if ((oldp == NULL) || (oldp->word_mode != newp->word_mode) || @@ -111,6 +112,7 @@ void tv_set_default_preferences(struct tv_preferences *p) p->footer_mode = FT_NONE; #endif p->autoscroll_speed = 1; + p->narrow_mode = NM_PAGE; /* Set codepage to system default */ p->encoding = rb->global_settings->default_codepage; p->file_name[0] = '\0'; diff --git a/apps/plugins/text_viewer/tv_preferences.h b/apps/plugins/text_viewer/tv_preferences.h index dc29dcae26..645258c8a6 100644 --- a/apps/plugins/text_viewer/tv_preferences.h +++ b/apps/plugins/text_viewer/tv_preferences.h @@ -84,6 +84,11 @@ struct tv_preferences { int windows; + enum { + NM_PAGE = 0, + NM_TOP_BOTTOM, + } narrow_mode; + unsigned char font_name[MAX_PATH]; #ifdef HAVE_LCD_BITMAP struct font *font; diff --git a/apps/plugins/text_viewer/tv_settings.c b/apps/plugins/text_viewer/tv_settings.c index b537b3fb40..db27e8928a 100644 --- a/apps/plugins/text_viewer/tv_settings.c +++ b/apps/plugins/text_viewer/tv_settings.c @@ -48,7 +48,8 @@ * autoscroll_speed 1 * horizontal_scrollbar 1 * horizontal_scroll_mode 1 - * (reserved) 14 + * narrow_mode 1 + * (reserved) 13 * font name MAX_PATH */ @@ -56,7 +57,7 @@ #define TV_GLOBAL_SETTINGS_FILE VIEWERS_DIR "/tv_global.dat" #define TV_GLOBAL_SETTINGS_HEADER "\x54\x56\x47\x53" /* "TVGS" */ -#define TV_GLOBAL_SETTINGS_VERSION 0x35 +#define TV_GLOBAL_SETTINGS_VERSION 0x36 #define TV_GLOBAL_SETTINGS_HEADER_SIZE 5 #define TV_GLOBAL_SETTINGS_FIRST_VERSION 0x31 @@ -88,7 +89,8 @@ * autoscroll_speed 1 * horizontal_scrollbar 1 * horizontal_scroll_mode 1 - * (reserved) 14 + * narrow_mode 1 + * (reserved) 13 * font name MAX_PATH * bookmark count 1 * [1st bookmark] @@ -110,7 +112,7 @@ #define TV_SETTINGS_TMP_FILE VIEWERS_DIR "/tv_file.tmp" #define TV_SETTINGS_HEADER "\x54\x56\x53" /* "TVS" */ -#define TV_SETTINGS_VERSION 0x36 +#define TV_SETTINGS_VERSION 0x37 #define TV_SETTINGS_HEADER_SIZE 4 #define TV_SETTINGS_FIRST_VERSION 0x32 @@ -167,6 +169,11 @@ static bool tv_read_preferences(int pfd, int version, struct tv_preferences *pre else prefs->horizontal_scroll_mode = SCREEN; + if (version > 4) + prefs->narrow_mode = *p++; + else + prefs->narrow_mode = NM_PAGE; + rb->memcpy(prefs->font_name, buf + read_size - MAX_PATH, MAX_PATH); #ifdef HAVE_LCD_BITMAP @@ -196,6 +203,7 @@ static bool tv_write_preferences(int pfd, const struct tv_preferences *prefs) *p++ = prefs->autoscroll_speed; *p++ = prefs->horizontal_scrollbar; *p++ = prefs->horizontal_scroll_mode; + *p++ = prefs->narrow_mode; rb->memcpy(buf + 28, prefs->font_name, MAX_PATH); -- cgit v1.2.3