summaryrefslogtreecommitdiff
path: root/apps/plugins/textviewer/textviewer.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/textviewer/textviewer.c')
-rw-r--r--apps/plugins/textviewer/textviewer.c232
1 files changed, 232 insertions, 0 deletions
diff --git a/apps/plugins/textviewer/textviewer.c b/apps/plugins/textviewer/textviewer.c
new file mode 100644
index 0000000..289c741
--- /dev/null
+++ b/apps/plugins/textviewer/textviewer.c
@@ -0,0 +1,232 @@
+/***************************************************************************
+ * __________ __ ___.
+ * 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 "textviewer.h"
+#include "tv_bookmark.h"
+#include "tv_button.h"
+#include "tv_menu.h"
+#include "tv_readtext.h"
+#include "tv_screen.h"
+#include "tv_settings.h"
+
+PLUGIN_HEADER
+
+static bool viewer_init(const unsigned char *file)
+{
+ viewer_init_screen();
+ viewer_init_buffer();
+
+ if (!viewer_open(file))
+ return false;
+
+ /* Init mac_text value used in processing buffer */
+ mac_text = false;
+
+ return true;
+}
+
+static void viewer_exit(void *parameter)
+{
+ (void)parameter;
+
+ /* save preference and bookmarks */
+ if (!viewer_save_settings())
+ rb->splash(HZ, "Can't save preference and bookmarks.");
+
+ viewer_close();
+ viewer_finalize_screen();
+}
+
+enum plugin_status plugin_start(const void* file)
+{
+ int button, i, ok;
+ int lastbutton = BUTTON_NONE;
+ bool autoscroll = false;
+ long old_tick;
+
+ old_tick = *rb->current_tick;
+
+ if (!file)
+ return PLUGIN_ERROR;
+
+ ok = viewer_init(file);
+ if (!ok) {
+ rb->splash(HZ, "Error opening file.");
+ return PLUGIN_ERROR;
+ }
+
+ viewer_load_settings(); /* load the preferences and bookmark */
+
+#if LCD_DEPTH > 1
+ rb->lcd_set_backdrop(NULL);
+#endif
+
+ viewer_draw();
+
+ while (!done) {
+
+ if (autoscroll)
+ {
+ if(old_tick <= *rb->current_tick - (110-prefs.autoscroll_speed*10))
+ {
+ viewer_scroll_down(VIEWER_SCROLL_LINE);
+ viewer_draw();
+ old_tick = *rb->current_tick;
+ }
+ }
+
+ button = rb->button_get_w_tmo(HZ/10);
+
+ switch (button) {
+ case VIEWER_MENU:
+#ifdef VIEWER_MENU2
+ case VIEWER_MENU2:
+#endif
+ viewer_menu();
+ break;
+
+ case VIEWER_AUTOSCROLL:
+#ifdef VIEWER_AUTOSCROLL_PRE
+ if (lastbutton != VIEWER_AUTOSCROLL_PRE)
+ break;
+#endif
+ autoscroll = !autoscroll;
+ break;
+
+ case VIEWER_SCROLL_UP:
+ case VIEWER_SCROLL_UP | BUTTON_REPEAT:
+#ifdef VIEWER_SCROLL_UP2
+ case VIEWER_SCROLL_UP2:
+ case VIEWER_SCROLL_UP2 | BUTTON_REPEAT:
+#endif
+ viewer_scroll_up(VIEWER_SCROLL_PREFS);
+ viewer_draw();
+ old_tick = *rb->current_tick;
+ break;
+
+ case VIEWER_SCROLL_DOWN:
+ case VIEWER_SCROLL_DOWN | BUTTON_REPEAT:
+#ifdef VIEWER_PAGE_DOWN2
+ case VIEWER_SCROLL_DOWN2:
+ case VIEWER_SCROLL_DOWN2 | BUTTON_REPEAT:
+#endif
+ viewer_scroll_down(VIEWER_SCROLL_PREFS);
+ viewer_draw();
+ old_tick = *rb->current_tick;
+ break;
+
+ case VIEWER_SCREEN_LEFT:
+ case VIEWER_SCREEN_LEFT | BUTTON_REPEAT:
+ if (prefs.view_mode == WIDE)
+ {
+ /* Screen left */
+ viewer_scroll_left(VIEWER_SCROLL_SCREEN);
+ }
+ else { /* prefs.view_mode == NARROW */
+ /* Top of file */
+ viewer_top();
+ }
+ viewer_draw();
+ break;
+
+ case VIEWER_SCREEN_RIGHT:
+ case VIEWER_SCREEN_RIGHT | BUTTON_REPEAT:
+ if (prefs.view_mode == WIDE)
+ {
+ /* Screen right */
+ viewer_scrol_right(VIEWER_SCROLL_SCREEN);
+ }
+ else { /* prefs.view_mode == NARROW */
+ /* Bottom of file */
+ viewer_bottom();
+ }
+ viewer_draw();
+ break;
+
+#ifdef VIEWER_LINE_UP
+ case VIEWER_LINE_UP:
+ case VIEWER_LINE_UP | BUTTON_REPEAT:
+ /* Scroll up one line */
+ viewer_scroll_up(VIEWER_SCROLL_LINE);
+ viewer_draw();
+ old_tick = *rb->current_tick;
+ break;
+
+ case VIEWER_LINE_DOWN:
+ case VIEWER_LINE_DOWN | BUTTON_REPEAT:
+ /* Scroll down one line */
+ viewer_scroll_down(VIEWER_SCROLL_LINE);
+ viewer_draw();
+ old_tick = *rb->current_tick;
+ break;
+#endif
+#ifdef VIEWER_COLUMN_LEFT
+ case VIEWER_COLUMN_LEFT:
+ case VIEWER_COLUMN_LEFT | BUTTON_REPEAT:
+ if (prefs.view_mode == WIDE)
+ {
+ viewer_scroll_left(VIEWER_SCROLL_COLUMN);
+ viewer_draw();
+ }
+ break;
+
+ case VIEWER_COLUMN_RIGHT:
+ case VIEWER_COLUMN_RIGHT | BUTTON_REPEAT:
+ if (prefs.view_mode == WIDE)
+ {
+ viewer_scroll_right(VIEWER_SCROLL_COLUMN);
+ viewer_draw();
+ }
+ break;
+#endif
+
+#ifdef VIEWER_RC_QUIT
+ case VIEWER_RC_QUIT:
+#endif
+ case VIEWER_QUIT:
+#ifdef VIEWER_QUIT2
+ case VIEWER_QUIT2:
+#endif
+ viewer_exit(NULL);
+ done = true;
+ break;
+
+ case VIEWER_BOOKMARK:
+ viewer_add_remove_bookmark(cpage, cline);
+ viewer_draw();
+ break;
+
+ default:
+ if (rb->default_event_handler_ex(button, viewer_exit, NULL)
+ == SYS_USB_CONNECTED)
+ return PLUGIN_USB_CONNECTED;
+ break;
+ }
+ if (button != BUTTON_NONE)
+ {
+ lastbutton = button;
+ rb->yield();
+ }
+ }
+ return PLUGIN_OK;
+}