From fdba8404503af0448586615330a7b27f2ced531c Mon Sep 17 00:00:00 2001 From: Yoshihisa Uchida Date: Sat, 5 Jun 2010 10:30:08 +0000 Subject: reworks text viewer plugin. (FS#11209) new text viewer plugin: text_viewer.rock. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26571 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/text_viewer/text_viewer.c | 210 +++++++++++++++++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 apps/plugins/text_viewer/text_viewer.c (limited to 'apps/plugins/text_viewer/text_viewer.c') diff --git a/apps/plugins/text_viewer/text_viewer.c b/apps/plugins/text_viewer/text_viewer.c new file mode 100644 index 0000000000..7150498b56 --- /dev/null +++ b/apps/plugins/text_viewer/text_viewer.c @@ -0,0 +1,210 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2002 Gilles Roux + * 2003 Garrett Derner + * 2010 Yoshihisa Uchida + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ +#include "plugin.h" +#include "tv_action.h" +#include "tv_button.h" +#include "tv_preferences.h" + +PLUGIN_HEADER + +enum plugin_status plugin_start(const void* file) +{ + int button; + int lastbutton = BUTTON_NONE; + bool autoscroll = false; + long old_tick; + bool done = false; + bool display_update = true; + const struct tv_preferences *prefs = tv_get_preferences(); + + old_tick = *rb->current_tick; + + if (!file) + return PLUGIN_ERROR; + + if (!tv_init(file)) { + rb->splash(HZ, "Error opening file"); + return PLUGIN_ERROR; + } + +#if LCD_DEPTH > 1 + rb->lcd_set_backdrop(NULL); +#endif + + while (!done) { + + if (display_update) + tv_draw(); + + display_update = true; + + button = rb->button_get_w_tmo(HZ/10); + + switch (button) { + case TV_MENU: +#ifdef TV_MENU2 + case TV_MENU2: +#endif + { + enum tv_menu_result res = tv_menu(); + + if (res != TV_MENU_RESULT_EXIT_MENU) + { + tv_exit(NULL); + done = true; + if (res == TV_MENU_RESULT_ATTACHED_USB) + return PLUGIN_USB_CONNECTED; + } + } + break; + + case TV_AUTOSCROLL: +#ifdef TV_AUTOSCROLL_PRE + if (lastbutton != TV_AUTOSCROLL_PRE) + break; +#endif + autoscroll = !autoscroll; + break; + + case TV_SCROLL_UP: + case TV_SCROLL_UP | BUTTON_REPEAT: +#ifdef TV_SCROLL_UP2 + case TV_SCROLL_UP2: + case TV_SCROLL_UP2 | BUTTON_REPEAT: +#endif + tv_scroll_up(TV_VERTICAL_SCROLL_PREFS); + old_tick = *rb->current_tick; + break; + + case TV_SCROLL_DOWN: + case TV_SCROLL_DOWN | BUTTON_REPEAT: +#ifdef TV_PAGE_DOWN2 + case TV_SCROLL_DOWN2: + case TV_SCROLL_DOWN2 | BUTTON_REPEAT: +#endif + tv_scroll_down(TV_VERTICAL_SCROLL_PREFS); + old_tick = *rb->current_tick; + break; + + case TV_SCREEN_LEFT: + case TV_SCREEN_LEFT | BUTTON_REPEAT: + if (prefs->view_mode == WIDE) + { + /* Screen left */ + tv_scroll_left(TV_HORIZONTAL_SCROLL_WINDOW); + } + else { /* prefs->view_mode == NARROW */ + /* scroll to previous page */ + tv_scroll_up(TV_VERTICAL_SCROLL_PAGE); +#if 0 + /* Top of file */ + tv_top(); +#endif + } + break; + + case TV_SCREEN_RIGHT: + case TV_SCREEN_RIGHT | BUTTON_REPEAT: + if (prefs->view_mode == WIDE) + { + /* Screen right */ + tv_scroll_right(TV_HORIZONTAL_SCROLL_WINDOW); + } + else { /* prefs->view_mode == NARROW */ + /* scroll to next page */ + tv_scroll_down(TV_VERTICAL_SCROLL_PAGE); +#if 0 + /* Bottom of file */ + tv_bottom(); +#endif + } + break; + +#ifdef TV_LINE_UP + case TV_LINE_UP: + case TV_LINE_UP | BUTTON_REPEAT: + /* Scroll up one line */ + tv_scroll_up(TV_VERTICAL_SCROLL_LINE); + old_tick = *rb->current_tick; + break; + + case TV_LINE_DOWN: + case TV_LINE_DOWN | BUTTON_REPEAT: + /* Scroll down one line */ + tv_scroll_down(TV_VERTICAL_SCROLL_LINE); + old_tick = *rb->current_tick; + break; +#endif +#ifdef TV_COLUMN_LEFT + case TV_COLUMN_LEFT: + case TV_COLUMN_LEFT | BUTTON_REPEAT: + /* Scroll left one column */ + tv_scroll_left(TV_HORIZONTAL_SCROLL_COLUMN); + break; + + case TV_COLUMN_RIGHT: + case TV_COLUMN_RIGHT | BUTTON_REPEAT: + /* Scroll right one column */ + tv_scroll_right(TV_HORIZONTAL_SCROLL_COLUMN); + break; +#endif + +#ifdef TV_RC_QUIT + case TV_RC_QUIT: +#endif + case TV_QUIT: +#ifdef TV_QUIT2 + case TV_QUIT2: +#endif + tv_exit(NULL); + done = true; + break; + + case TV_BOOKMARK: + tv_add_or_remove_bookmark(); + break; + + default: + if (rb->default_event_handler_ex(button, tv_exit, NULL) + == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + display_update = false; + break; + } + if (button != BUTTON_NONE) + { + lastbutton = button; + rb->yield(); + } + if (autoscroll) + { + if(old_tick <= *rb->current_tick - (110 - prefs->autoscroll_speed * 10)) + { + tv_scroll_down(TV_VERTICAL_SCROLL_PREFS); + old_tick = *rb->current_tick; + display_update = true; + } + } + } + return PLUGIN_OK; +} -- cgit v1.2.3