diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 494a4a631a..80a6fde2e0 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -1,4 +1,5 @@ /* plugins common to both Player+Recorder model */ +battery_test.c favorites.c firmware_flash.c helloworld.c @@ -6,20 +7,16 @@ metronome.c rockbox_flash.c search.c sort.c -vbrfix.c -#if CONFIG_KEYPAD != ONDIO_PAD -/* gradually bring in the ones not working yet */ -battery_test.c stopwatch.c +vbrfix.c viewer.c -#endif /* #if CONFIG_KEYPAD != ONDIO_PAD */ #ifdef HAVE_LCD_BITMAP /* recorder model only */ grayscale.c jpeg.c rockblox.c snow.c -video.c +video.c #if CONFIG_KEYPAD != ONDIO_PAD /* gradually bring in the ones not working yet */ bounce.c diff --git a/apps/plugins/battery_test.c b/apps/plugins/battery_test.c index 04be9b0070..bc6e580dcc 100644 --- a/apps/plugins/battery_test.c +++ b/apps/plugins/battery_test.c @@ -29,6 +29,16 @@ to watch. */ +/* variable button definitions */ +#if CONFIG_KEYPAD == RECORDER_PAD +#define BATTERY_TEST_QUIT BUTTON_ON +#define BATTERY_TEST_QUIT2 BUTTON_OFF +#elif CONFIG_KEYPAD == ONDIO_PAD +#define BATTERY_TEST_QUIT BUTTON_OFF +#elif CONFIG_KEYPAD == PLAYER_PAD +#define BATTERY_TEST_QUIT BUTTON_STOP +#endif + static struct plugin_api* rb; void* buffer; @@ -94,19 +104,19 @@ enum plugin_status loop(void) /* simulate 128kbit/s (16kbyte/s) playback duration */ do { button = rb->button_get_w_tmo(HZ * (buffersize / 16384) - HZ*10); - - /* Check if we shall exit the plugin */ - if (button==BUTTON_ON || -#if CONFIG_KEYPAD == RECORDER_PAD - button==BUTTON_OFF -#else - button==BUTTON_STOP -#endif - ) - return PLUGIN_OK; - if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { - return PLUGIN_USB_CONNECTED; + switch (button) { + /* Check if we shall exit the plugin */ + case BATTERY_TEST_QUIT: +#ifdef BATTERY_TEST_QUIT2 + case BATTERY_TEST_QUIT2: +#endif + return PLUGIN_OK; + + default: + if (rb->default_event_handler(button) == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + break; } } while (!(button&(BUTTON_REL|BUTTON_REPEAT))); diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c index 7d8fab7456..c601712b11 100644 --- a/apps/plugins/jpeg.c +++ b/apps/plugins/jpeg.c @@ -33,10 +33,12 @@ #if CONFIG_KEYPAD == RECORDER_PAD #define JPEG_ZOOM_IN BUTTON_PLAY #define JPEG_ZOOM_OUT BUTTON_ON + #elif CONFIG_KEYPAD == ONDIO_PAD #define JPEG_ZOOM_PRE BUTTON_MENU #define JPEG_ZOOM_IN (BUTTON_MENU | BUTTON_REL) #define JPEG_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT) + #endif /******************************* Globals ***********************************/ @@ -1527,10 +1529,6 @@ int scroll_bmp(struct t_disp* pdisp) button = rb->button_get(true); - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; - switch(button) { case BUTTON_LEFT: @@ -1617,6 +1615,13 @@ int scroll_bmp(struct t_disp* pdisp) case BUTTON_OFF: return PLUGIN_OK; + + default: + if (rb->default_event_handler_ex(button, cleanup, NULL) + == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + break; + } /* switch */ if (button != BUTTON_NONE) diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c index 2dd7c8950c..cf5113cadf 100644 --- a/apps/plugins/metronome.c +++ b/apps/plugins/metronome.c @@ -235,10 +235,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ button = rb->button_get(true); - if (rb->default_event_handler_ex(button, cleanup, NULL) - == SYS_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; - switch (button) { case METRONOME_QUIT: @@ -294,6 +290,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ calc_period(); draw_display(); break; + + default: + if (rb->default_event_handler_ex(button, cleanup, NULL) + == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + break; + } } } diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c index f90ced2450..eac6563601 100644 --- a/apps/plugins/rockblox.c +++ b/apps/plugins/rockblox.c @@ -318,12 +318,15 @@ static void move_down(void) static int game_loop(void) { + int button; + while(1) { int count = 0; while(count * 300 < level_speeds[level]) { - switch(rb->button_get_w_tmo(HZ/10)) + button = rb->button_get_w_tmo(HZ/10); + switch(button) { case BUTTON_OFF: return PLUGIN_OK; @@ -348,9 +351,10 @@ static int game_loop(void) move_down(); break; - case SYS_USB_CONNECTED: - rb->usb_screen(); - return PLUGIN_USB_CONNECTED; + default: + if (rb->default_event_handler(button) == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + break; } count++; diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c index df9966eb38..77ec350654 100644 --- a/apps/plugins/snow.c +++ b/apps/plugins/snow.c @@ -93,6 +93,7 @@ static void snow_init(void) enum plugin_status plugin_start(struct plugin_api* api, void* parameter) { + int button; TEST_PLUGIN_API(api); (void)(parameter); rb = api; @@ -103,8 +104,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) rb->lcd_update(); rb->sleep(HZ/20); - if (rb->button_get(false) == BUTTON_OFF) + button = rb->button_get(false); + + if (button == BUTTON_OFF) return false; + else + if (rb->default_event_handler(button) == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; } } diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c index 370a1b51a6..6157dda038 100644 --- a/apps/plugins/stopwatch.c +++ b/apps/plugins/stopwatch.c @@ -31,6 +31,30 @@ #define MAX_LAPS 10 #define MAX_SCROLL (MAX_LAPS - LAP_LINES) +/* variable button definitions */ +#if CONFIG_KEYPAD == RECORDER_PAD +#define STOPWATCH_QUIT BUTTON_OFF +#define STOPWATCH_START_STOP BUTTON_PLAY +#define STOPWATCH_RESET_TIMER BUTTON_LEFT +#define STOPWATCH_LAP_TIMER BUTTON_ON +#define STOPWATCH_SCROLL_UP BUTTON_UP +#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN +#elif CONFIG_KEYPAD == ONDIO_PAD +#define STOPWATCH_QUIT BUTTON_OFF +#define STOPWATCH_START_STOP BUTTON_RIGHT +#define STOPWATCH_RESET_TIMER BUTTON_LEFT +#define STOPWATCH_LAP_TIMER BUTTON_MENU +#define STOPWATCH_SCROLL_UP BUTTON_UP +#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN +#elif CONFIG_KEYPAD == PLAYER_PAD +#define STOPWATCH_QUIT BUTTON_MENU +#define STOPWATCH_START_STOP BUTTON_PLAY +#define STOPWATCH_RESET_TIMER BUTTON_STOP +#define STOPWATCH_LAP_TIMER BUTTON_ON +#define STOPWATCH_SCROLL_UP BUTTON_RIGHT +#define STOPWATCH_SCROLL_DOWN BUTTON_LEFT +#endif + static struct plugin_api* rb; static int stopwatch = 0; @@ -102,17 +126,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) switch (button) { - /* OFF/MENU key to exit */ -#if CONFIG_KEYPAD == RECORDER_PAD - case BUTTON_OFF: -#else - case BUTTON_MENU: -#endif + /* exit */ + case STOPWATCH_QUIT: done = true; break; - /* PLAY = Stop/Start toggle */ - case BUTTON_PLAY: + /* Stop/Start toggle */ + case STOPWATCH_START_STOP: counting = ! counting; if (counting) { @@ -126,12 +146,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) } break; - /* LEFT = Reset timer */ -#if CONFIG_KEYPAD == RECORDER_PAD - case BUTTON_LEFT: -#else - case BUTTON_STOP: -#endif + /* Reset timer */ + case STOPWATCH_RESET_TIMER: if (!counting) { prev_total = 0; @@ -140,19 +156,15 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) } break; - /* ON = Lap timer */ - case BUTTON_ON: + /* Lap timer */ + case STOPWATCH_LAP_TIMER: lap_times[curr_lap%MAX_LAPS] = stopwatch; curr_lap++; update_lap = true; break; - /* UP (RIGHT/+) = Scroll Lap timer up */ -#if CONFIG_KEYPAD == RECORDER_PAD - case BUTTON_UP: -#else - case BUTTON_RIGHT: -#endif + /* Scroll Lap timer up */ + case STOPWATCH_SCROLL_UP: if (lap_scroll > 0) { lap_scroll --; @@ -160,12 +172,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) } break; - /* DOWN (LEFT/-) = Scroll Lap timer down */ -#if CONFIG_KEYPAD == RECORDER_PAD - case BUTTON_DOWN: -#else - case BUTTON_LEFT: -#endif + /* Scroll Lap timer down */ + case STOPWATCH_SCROLL_DOWN: if ((lap_scroll < curr_lap - LAP_LINES) && (lap_scroll < MAX_SCROLL) ) { @@ -174,9 +182,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) } break; - case SYS_USB_CONNECTED: - rb->usb_screen(); - return PLUGIN_USB_CONNECTED; + default: + if (rb->default_event_handler(button) == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + break; } if (counting) diff --git a/apps/plugins/video.c b/apps/plugins/video.c index e63ef1c373..de05ba4af4 100644 --- a/apps/plugins/video.c +++ b/apps/plugins/video.c @@ -36,9 +36,17 @@ #if CONFIG_KEYPAD == RECORDER_PAD #define VIDEO_STOP_SEEK BUTTON_PLAY #define VIDEO_RESUME BUTTON_PLAY +#define VIDEO_DEBUG BUTTON_F1 +#define VIDEO_CONTRAST_DOWN BUTTON_F2 +#define VIDEO_CONTRAST_UP BUTTON_F3 + #elif CONFIG_KEYPAD == ONDIO_PAD -#define VIDEO_STOP_SEEK BUTTON_MENU +#define VIDEO_STOP_SEEK_PRE BUTTON_MENU +#define VIDEO_STOP_SEEK (BUTTON_MENU | BUTTON_REL) #define VIDEO_RESUME BUTTON_RIGHT +#define VIDEO_CONTRAST_DOWN (BUTTON_MENU | BUTTON_DOWN) +#define VIDEO_CONTRAST_UP (BUTTON_MENU | BUTTON_UP) + #endif /****************** constants ******************/ @@ -285,7 +293,6 @@ void ChangeVolume(int delta) } -#if CONFIG_KEYPAD == RECORDER_PAD // helper function to change the LCD contrast by a certain amount, +/- void ChangeContrast(int delta) { @@ -313,7 +320,6 @@ void ChangeContrast(int delta) } } } -#endif // sync the video to the current audio @@ -563,6 +569,7 @@ void Cleanup(void *fd) int PlayTick(int fd) { int button; + static int lastbutton = 0; int avail_audio = -1, avail_video = -1; int retval = 1; int filepos; @@ -667,11 +674,6 @@ int PlayTick(int fd) else filepos -= Available(gBuf.pReadAudio); // else audio - if (rb->default_event_handler_ex(button, Cleanup, &fd) - == SYS_USB_CONNECTED) - retval = -1; // signal "aborted" to caller - // SYS_USB_CONNECTED won't be catched again by the switch() - switch (button) { // set exit conditions case BUTTON_OFF: @@ -686,6 +688,10 @@ int PlayTick(int fd) retval = 0; // signal "stopped" to caller break; case VIDEO_STOP_SEEK: +#ifdef VIDEO_STOP_SEEK_PRE + if (lastbutton != VIDEO_STOP_SEEK_PRE) + break; +#endif if (gPlay.bSeeking) { gPlay.bSeeking = false; @@ -757,25 +763,32 @@ int PlayTick(int fd) else gPlay.nSeekAcc++; break; -#if CONFIG_KEYPAD == RECORDER_PAD - case BUTTON_F1: // debug key - case BUTTON_F1 | BUTTON_REPEAT: +#ifdef VIDEO_DEBUG + case VIDEO_DEBUG: // debug key + case VIDEO_DEBUG | BUTTON_REPEAT: DrawBuf(); // show buffer status gPlay.nTimeOSD = 30; gPlay.bDirtyOSD = true; break; - case BUTTON_F2: // contrast down - case BUTTON_F2 | BUTTON_REPEAT: +#endif + case VIDEO_CONTRAST_DOWN: // contrast down + case VIDEO_CONTRAST_DOWN | BUTTON_REPEAT: if (gPlay.bHasVideo) ChangeContrast(-1); break; - case BUTTON_F3: // contrast up - case BUTTON_F3 | BUTTON_REPEAT: + case VIDEO_CONTRAST_UP: // contrast up + case VIDEO_CONTRAST_UP | BUTTON_REPEAT: if (gPlay.bHasVideo) ChangeContrast(1); break; -#endif + default: + if (rb->default_event_handler_ex(button, Cleanup, &fd) + == SYS_USB_CONNECTED) + retval = -1; // signal "aborted" to caller + break; } + + lastbutton = button; } /* if (button != BUTTON_NONE) */ diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c index eb15127704..4628f8e7b3 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 - case BUTTON_ON: - /*Go to On-btn combinations */ - col = viewer_recorder_on_button(col); +#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 - case SYS_USB_CONNECTED: - /* Release control to USB functions */ - rb->usb_screen(); - viewer_exit(); - return PLUGIN_USB_CONNECTED; +#if CONFIG_KEYPAD == RECORDER_PAD + 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 + + default: + if (rb->default_event_handler_ex(button, viewer_exit, NULL) + == SYS_USB_CONNECTED) + return PLUGIN_USB_CONNECTED; + break; } } return PLUGIN_OK;