summaryrefslogtreecommitdiff
path: root/apps/plugins/viewer.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/plugins/viewer.c')
-rw-r--r--apps/plugins/viewer.c273
1 files changed, 132 insertions, 141 deletions
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c
index eb15127..4628f8e 100644
--- a/apps/plugins/viewer.c
+++ b/apps/plugins/viewer.c
@@ -56,6 +56,50 @@
#define NEED_SCROLLBAR() ((!(ONE_SCREEN_FITS_ALL())) && \
(view_mode==WIDE? scrollbar_mode[WIDE]==SB_ON: scrollbar_mode[NARROW]==SB_ON))
+/* variable button definitions */
+#if CONFIG_KEYPAD == RECORDER_PAD
+#define VIEWER_QUIT BUTTON_OFF
+#define VIEWER_PAGE_UP BUTTON_UP
+#define VIEWER_PAGE_DOWN BUTTON_DOWN
+#define VIEWER_SCREEN_LEFT BUTTON_LEFT
+#define VIEWER_SCREEN_RIGHT BUTTON_RIGHT
+#define VIEWER_MODE_WRAP BUTTON_F1
+#define VIEWER_MODE_LINE BUTTON_F2
+#define VIEWER_MODE_WIDTH BUTTON_F3
+/* Recorder/ Ondio only */
+#define VIEWER_MODE_PAGE (BUTTON_ON | BUTTON_F1)
+#define VIEWER_MODE_SCROLLBAR (BUTTON_ON | BUTTON_F3)
+/* Recorder only */
+#define VIEWER_LINE_UP (BUTTON_ON | BUTTON_UP)
+#define VIEWER_LINE_DOWN (BUTTON_ON | BUTTON_DOWN)
+#define VIEWER_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT)
+#define VIEWER_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT)
+
+#elif CONFIG_KEYPAD == ONDIO_PAD
+#define VIEWER_QUIT BUTTON_OFF
+#define VIEWER_PAGE_UP BUTTON_UP
+#define VIEWER_PAGE_DOWN BUTTON_DOWN
+#define VIEWER_SCREEN_LEFT BUTTON_LEFT
+#define VIEWER_SCREEN_RIGHT BUTTON_RIGHT
+#define VIEWER_MODE_WRAP (BUTTON_MENU | BUTTON_LEFT)
+#define VIEWER_MODE_LINE (BUTTON_MENU | BUTTON_UP)
+#define VIEWER_MODE_WIDTH (BUTTON_MENU | BUTTON_RIGHT)
+/* Recorder/ Ondio only */
+#define VIEWER_MODE_PAGE (BUTTON_MENU | BUTTON_DOWN)
+#define VIEWER_MODE_SCROLLBAR (BUTTON_MENU | BUTTON_OFF)
+
+#elif CONFIG_KEYPAD == PLAYER_PAD
+#define VIEWER_QUIT BUTTON_STOP
+#define VIEWER_PAGE_UP BUTTON_LEFT
+#define VIEWER_PAGE_DOWN BUTTON_RIGHT
+#define VIEWER_SCREEN_LEFT (BUTTON_MENU | BUTTON_LEFT)
+#define VIEWER_SCREEN_RIGHT (BUTTON_MENU | BUTTON_RIGHT)
+#define VIEWER_MODE_WRAP (BUTTON_ON | BUTTON_LEFT)
+#define VIEWER_MODE_LINE (BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT)
+#define VIEWER_MODE_WIDTH (BUTTON_ON | BUTTON_RIGHT)
+
+#endif
+
enum {
WRAP=0,
CHOP,
@@ -625,8 +669,10 @@ static bool viewer_init(char* file)
return true;
}
-static void viewer_exit(void)
+static void viewer_exit(void *parameter)
{
+ (void)parameter;
+
rb->close(fd);
}
@@ -641,90 +687,10 @@ static int col_limit(int col)
return col;
}
-#ifdef HAVE_LCD_BITMAP
-static int viewer_recorder_on_button(int col)
-{
- bool exit = false;
-
- while (!exit) {
- switch (rb->button_get(true)) {
- case BUTTON_ON | BUTTON_F1:
- /* Page-overlap mode */
- if (++page_mode == PAGE_MODES)
- page_mode = 0;
-
- rb->splash(HZ, true, "%s %s",
- page_mode_str[page_mode],
- page_mode_str[PAGE_MODES]);
-
- viewer_draw(col);
- break;
-
- case BUTTON_ON | BUTTON_F3:
- /* Show-scrollbar mode for current view-width mode */
- if (!(ONE_SCREEN_FITS_ALL())) {
- if (++scrollbar_mode[view_mode] == SCROLLBAR_MODES)
- scrollbar_mode[view_mode] = 0;
-
- init_need_scrollbar();
- viewer_draw(col);
-
- rb->splash(HZ, true, "%s %s (%s %s)",
- scrollbar_mode_str[SCROLLBAR_MODES],
- scrollbar_mode_str[scrollbar_mode[view_mode]],
- view_mode_str[view_mode],
- view_mode_str[VIEW_MODES]);
- }
- viewer_draw(col);
- break;
-
- case BUTTON_ON | BUTTON_UP:
- case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT:
- /* Scroll up one line */
- viewer_scroll_up();
- viewer_draw(col);
- break;
-
- case BUTTON_ON | BUTTON_DOWN:
- case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT:
- /* Scroll down one line */
- if (next_screen_ptr != NULL)
- screen_top_ptr = next_line_ptr;
-
- viewer_draw(col);
- break;
-
- case BUTTON_ON | BUTTON_LEFT:
- case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT:
- /* Scroll left one column */
- col--;
- col = col_limit(col);
- viewer_draw(col);
- break;
-
- case BUTTON_ON | BUTTON_RIGHT:
- case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT:
- /* Scroll right one column */
- col++;
- col = col_limit(col);
- viewer_draw(col);
- break;
-
- case BUTTON_ON | BUTTON_REL:
- case BUTTON_ON | BUTTON_DOWN | BUTTON_REL:
- case BUTTON_ON | BUTTON_UP | BUTTON_REL:
- /* Drop out of this loop (when ON btn released) */
- exit = true;
- break;
- }
- }
- return col;
-}
-#endif
-
enum plugin_status plugin_start(struct plugin_api* api, void* file)
{
bool exit=false;
+ int button;
int col = 0;
int i;
int ok;
@@ -738,28 +704,22 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
ok = viewer_init(file);
if (!ok) {
rb->splash(HZ, false, "Error");
- viewer_exit();
+ viewer_exit(NULL);
return PLUGIN_OK;
}
viewer_draw(col);
while (!exit) {
- switch (rb->button_get(true)) {
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_OFF:
-#else
- case BUTTON_STOP:
-#endif
- viewer_exit();
+ button = rb->button_get(true);
+ switch (button) {
+
+ case VIEWER_QUIT:
+ viewer_exit(NULL);
exit = true;
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_F1:
-#else
- case BUTTON_ON | BUTTON_LEFT:
-#endif
+ case VIEWER_MODE_WRAP:
/* Word-wrap mode: WRAP or CHOP */
if (++word_mode == WORD_MODES)
word_mode = 0;
@@ -776,11 +736,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_F2:
-#else
- case BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT:
-#endif
+ case VIEWER_MODE_LINE:
/* Line-paragraph mode: NORMAL, JOIN or EXPAND */
if (++line_mode == LINE_MODES)
line_mode = 0;
@@ -802,11 +758,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_F3:
-#else
- case BUTTON_ON | BUTTON_RIGHT:
-#endif
+ case VIEWER_MODE_WIDTH:
/* View-width mode: NARROW or WIDE */
if (line_mode == JOIN)
rb->splash(HZ, true, "(no %s %s)",
@@ -843,13 +795,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_UP:
- case BUTTON_UP | BUTTON_REPEAT:
-#else
- case BUTTON_LEFT:
- case BUTTON_LEFT | BUTTON_REPEAT:
-#endif
+ case VIEWER_PAGE_UP:
+ case VIEWER_PAGE_UP | BUTTON_REPEAT:
/* Page up */
#ifdef HAVE_LCD_BITMAP
for (i = page_mode==OVERLAP? 1:0; i < display_lines; i++)
@@ -861,13 +808,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_DOWN:
- case BUTTON_DOWN | BUTTON_REPEAT:
-#else
- case BUTTON_RIGHT:
- case BUTTON_RIGHT | BUTTON_REPEAT:
-#endif
+ case VIEWER_PAGE_DOWN:
+ case VIEWER_PAGE_DOWN | BUTTON_REPEAT:
/* Page down */
if (next_screen_ptr != NULL)
screen_top_ptr = next_screen_to_draw_ptr;
@@ -875,13 +817,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_LEFT:
- case BUTTON_LEFT | BUTTON_REPEAT:
-#else
- case BUTTON_MENU | BUTTON_LEFT:
- case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT:
-#endif
+ case VIEWER_SCREEN_LEFT:
+ case VIEWER_SCREEN_LEFT | BUTTON_REPEAT:
if (view_mode == WIDE) {
/* Screen left */
col -= display_columns;
@@ -895,13 +832,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
-#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_RIGHT:
- case BUTTON_RIGHT | BUTTON_REPEAT:
-#else
- case BUTTON_MENU | BUTTON_RIGHT:
- case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT:
-#endif
+ case VIEWER_SCREEN_RIGHT:
+ case VIEWER_SCREEN_RIGHT | BUTTON_REPEAT:
if (view_mode == WIDE) {
/* Screen right */
col += display_columns;
@@ -915,18 +847,77 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
viewer_draw(col);
break;
+#if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD)
+ case VIEWER_MODE_PAGE:
+ /* Page-overlap mode */
+ if (++page_mode == PAGE_MODES)
+ page_mode = 0;
+
+ rb->splash(HZ, true, "%s %s",
+ page_mode_str[page_mode],
+ page_mode_str[PAGE_MODES]);
+
+ viewer_draw(col);
+ break;
+
+ case VIEWER_MODE_SCROLLBAR:
+ /* Show-scrollbar mode for current view-width mode */
+ if (!(ONE_SCREEN_FITS_ALL())) {
+ if (++scrollbar_mode[view_mode] == SCROLLBAR_MODES)
+ scrollbar_mode[view_mode] = 0;
+
+ init_need_scrollbar();
+ viewer_draw(col);
+
+ rb->splash(HZ, true, "%s %s (%s %s)",
+ scrollbar_mode_str[SCROLLBAR_MODES],
+ scrollbar_mode_str[scrollbar_mode[view_mode]],
+ view_mode_str[view_mode],
+ view_mode_str[VIEW_MODES]);
+ }
+ viewer_draw(col);
+ break;
+#endif
+
#if CONFIG_KEYPAD == RECORDER_PAD
- case BUTTON_ON:
- /*Go to On-btn combinations */
- col = viewer_recorder_on_button(col);
+ case VIEWER_LINE_UP:
+ case VIEWER_LINE_UP | BUTTON_REPEAT:
+ /* Scroll up one line */
+ viewer_scroll_up();
+ viewer_draw(col);
+ break;
+
+ case VIEWER_LINE_DOWN:
+ case VIEWER_LINE_DOWN | BUTTON_REPEAT:
+ /* Scroll down one line */
+ if (next_screen_ptr != NULL)
+ screen_top_ptr = next_line_ptr;
+
+ viewer_draw(col);
+ break;
+
+ case VIEWER_COLUMN_LEFT:
+ case VIEWER_COLUMN_LEFT | BUTTON_REPEAT:
+ /* Scroll left one column */
+ col--;
+ col = col_limit(col);
+ viewer_draw(col);
+ break;
+
+ case VIEWER_COLUMN_RIGHT:
+ case VIEWER_COLUMN_RIGHT | BUTTON_REPEAT:
+ /* Scroll right one column */
+ col++;
+ col = col_limit(col);
+ viewer_draw(col);
break;
#endif
- case SYS_USB_CONNECTED:
- /* Release control to USB functions */
- rb->usb_screen();
- viewer_exit();
- return PLUGIN_USB_CONNECTED;
+ default:
+ if (rb->default_event_handler_ex(button, viewer_exit, NULL)
+ == SYS_USB_CONNECTED)
+ return PLUGIN_USB_CONNECTED;
+ break;
}
}
return PLUGIN_OK;