summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/SOURCES9
-rw-r--r--apps/plugins/battery_test.c34
-rw-r--r--apps/plugins/jpeg.c13
-rw-r--r--apps/plugins/metronome.c11
-rw-r--r--apps/plugins/rockblox.c12
-rw-r--r--apps/plugins/snow.c8
-rw-r--r--apps/plugins/stopwatch.c71
-rw-r--r--apps/plugins/video.c45
-rw-r--r--apps/plugins/viewer.c273
9 files changed, 257 insertions, 219 deletions
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 @@
1/* plugins common to both Player+Recorder model */ 1/* plugins common to both Player+Recorder model */
2battery_test.c
2favorites.c 3favorites.c
3firmware_flash.c 4firmware_flash.c
4helloworld.c 5helloworld.c
@@ -6,20 +7,16 @@ metronome.c
6rockbox_flash.c 7rockbox_flash.c
7search.c 8search.c
8sort.c 9sort.c
9vbrfix.c
10#if CONFIG_KEYPAD != ONDIO_PAD
11/* gradually bring in the ones not working yet */
12battery_test.c
13stopwatch.c 10stopwatch.c
11vbrfix.c
14viewer.c 12viewer.c
15#endif /* #if CONFIG_KEYPAD != ONDIO_PAD */
16 13
17#ifdef HAVE_LCD_BITMAP /* recorder model only */ 14#ifdef HAVE_LCD_BITMAP /* recorder model only */
18grayscale.c 15grayscale.c
19jpeg.c 16jpeg.c
20rockblox.c 17rockblox.c
21snow.c 18snow.c
22video.c 19video.c
23#if CONFIG_KEYPAD != ONDIO_PAD 20#if CONFIG_KEYPAD != ONDIO_PAD
24/* gradually bring in the ones not working yet */ 21/* gradually bring in the ones not working yet */
25bounce.c 22bounce.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 @@
29 to watch. 29 to watch.
30*/ 30*/
31 31
32/* variable button definitions */
33#if CONFIG_KEYPAD == RECORDER_PAD
34#define BATTERY_TEST_QUIT BUTTON_ON
35#define BATTERY_TEST_QUIT2 BUTTON_OFF
36#elif CONFIG_KEYPAD == ONDIO_PAD
37#define BATTERY_TEST_QUIT BUTTON_OFF
38#elif CONFIG_KEYPAD == PLAYER_PAD
39#define BATTERY_TEST_QUIT BUTTON_STOP
40#endif
41
32static struct plugin_api* rb; 42static struct plugin_api* rb;
33 43
34void* buffer; 44void* buffer;
@@ -94,19 +104,19 @@ enum plugin_status loop(void)
94 /* simulate 128kbit/s (16kbyte/s) playback duration */ 104 /* simulate 128kbit/s (16kbyte/s) playback duration */
95 do { 105 do {
96 button = rb->button_get_w_tmo(HZ * (buffersize / 16384) - HZ*10); 106 button = rb->button_get_w_tmo(HZ * (buffersize / 16384) - HZ*10);
97
98 /* Check if we shall exit the plugin */
99 if (button==BUTTON_ON ||
100#if CONFIG_KEYPAD == RECORDER_PAD
101 button==BUTTON_OFF
102#else
103 button==BUTTON_STOP
104#endif
105 )
106 return PLUGIN_OK;
107 107
108 if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { 108 switch (button) {
109 return PLUGIN_USB_CONNECTED; 109 /* Check if we shall exit the plugin */
110 case BATTERY_TEST_QUIT:
111#ifdef BATTERY_TEST_QUIT2
112 case BATTERY_TEST_QUIT2:
113#endif
114 return PLUGIN_OK;
115
116 default:
117 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
118 return PLUGIN_USB_CONNECTED;
119 break;
110 } 120 }
111 } while (!(button&(BUTTON_REL|BUTTON_REPEAT))); 121 } while (!(button&(BUTTON_REL|BUTTON_REPEAT)));
112 122
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 @@
33#if CONFIG_KEYPAD == RECORDER_PAD 33#if CONFIG_KEYPAD == RECORDER_PAD
34#define JPEG_ZOOM_IN BUTTON_PLAY 34#define JPEG_ZOOM_IN BUTTON_PLAY
35#define JPEG_ZOOM_OUT BUTTON_ON 35#define JPEG_ZOOM_OUT BUTTON_ON
36
36#elif CONFIG_KEYPAD == ONDIO_PAD 37#elif CONFIG_KEYPAD == ONDIO_PAD
37#define JPEG_ZOOM_PRE BUTTON_MENU 38#define JPEG_ZOOM_PRE BUTTON_MENU
38#define JPEG_ZOOM_IN (BUTTON_MENU | BUTTON_REL) 39#define JPEG_ZOOM_IN (BUTTON_MENU | BUTTON_REL)
39#define JPEG_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT) 40#define JPEG_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT)
41
40#endif 42#endif
41 43
42/******************************* Globals ***********************************/ 44/******************************* Globals ***********************************/
@@ -1527,10 +1529,6 @@ int scroll_bmp(struct t_disp* pdisp)
1527 1529
1528 button = rb->button_get(true); 1530 button = rb->button_get(true);
1529 1531
1530 if (rb->default_event_handler_ex(button, cleanup, NULL)
1531 == SYS_USB_CONNECTED)
1532 return PLUGIN_USB_CONNECTED;
1533
1534 switch(button) 1532 switch(button)
1535 { 1533 {
1536 case BUTTON_LEFT: 1534 case BUTTON_LEFT:
@@ -1617,6 +1615,13 @@ int scroll_bmp(struct t_disp* pdisp)
1617 1615
1618 case BUTTON_OFF: 1616 case BUTTON_OFF:
1619 return PLUGIN_OK; 1617 return PLUGIN_OK;
1618
1619 default:
1620 if (rb->default_event_handler_ex(button, cleanup, NULL)
1621 == SYS_USB_CONNECTED)
1622 return PLUGIN_USB_CONNECTED;
1623 break;
1624
1620 } /* switch */ 1625 } /* switch */
1621 1626
1622 if (button != BUTTON_NONE) 1627 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){
235 235
236 button = rb->button_get(true); 236 button = rb->button_get(true);
237 237
238 if (rb->default_event_handler_ex(button, cleanup, NULL)
239 == SYS_USB_CONNECTED)
240 return PLUGIN_USB_CONNECTED;
241
242 switch (button) { 238 switch (button) {
243 239
244 case METRONOME_QUIT: 240 case METRONOME_QUIT:
@@ -294,6 +290,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){
294 calc_period(); 290 calc_period();
295 draw_display(); 291 draw_display();
296 break; 292 break;
293
294 default:
295 if (rb->default_event_handler_ex(button, cleanup, NULL)
296 == SYS_USB_CONNECTED)
297 return PLUGIN_USB_CONNECTED;
298 break;
299
297 } 300 }
298 } 301 }
299} 302}
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)
318 318
319static int game_loop(void) 319static int game_loop(void)
320{ 320{
321 int button;
322
321 while(1) 323 while(1)
322 { 324 {
323 int count = 0; 325 int count = 0;
324 while(count * 300 < level_speeds[level]) 326 while(count * 300 < level_speeds[level])
325 { 327 {
326 switch(rb->button_get_w_tmo(HZ/10)) 328 button = rb->button_get_w_tmo(HZ/10);
329 switch(button)
327 { 330 {
328 case BUTTON_OFF: 331 case BUTTON_OFF:
329 return PLUGIN_OK; 332 return PLUGIN_OK;
@@ -348,9 +351,10 @@ static int game_loop(void)
348 move_down(); 351 move_down();
349 break; 352 break;
350 353
351 case SYS_USB_CONNECTED: 354 default:
352 rb->usb_screen(); 355 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
353 return PLUGIN_USB_CONNECTED; 356 return PLUGIN_USB_CONNECTED;
357 break;
354 } 358 }
355 359
356 count++; 360 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)
93 93
94enum plugin_status plugin_start(struct plugin_api* api, void* parameter) 94enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
95{ 95{
96 int button;
96 TEST_PLUGIN_API(api); 97 TEST_PLUGIN_API(api);
97 (void)(parameter); 98 (void)(parameter);
98 rb = api; 99 rb = api;
@@ -103,8 +104,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
103 rb->lcd_update(); 104 rb->lcd_update();
104 rb->sleep(HZ/20); 105 rb->sleep(HZ/20);
105 106
106 if (rb->button_get(false) == BUTTON_OFF) 107 button = rb->button_get(false);
108
109 if (button == BUTTON_OFF)
107 return false; 110 return false;
111 else
112 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
113 return PLUGIN_USB_CONNECTED;
108 } 114 }
109} 115}
110 116
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 @@
31#define MAX_LAPS 10 31#define MAX_LAPS 10
32#define MAX_SCROLL (MAX_LAPS - LAP_LINES) 32#define MAX_SCROLL (MAX_LAPS - LAP_LINES)
33 33
34/* variable button definitions */
35#if CONFIG_KEYPAD == RECORDER_PAD
36#define STOPWATCH_QUIT BUTTON_OFF
37#define STOPWATCH_START_STOP BUTTON_PLAY
38#define STOPWATCH_RESET_TIMER BUTTON_LEFT
39#define STOPWATCH_LAP_TIMER BUTTON_ON
40#define STOPWATCH_SCROLL_UP BUTTON_UP
41#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
42#elif CONFIG_KEYPAD == ONDIO_PAD
43#define STOPWATCH_QUIT BUTTON_OFF
44#define STOPWATCH_START_STOP BUTTON_RIGHT
45#define STOPWATCH_RESET_TIMER BUTTON_LEFT
46#define STOPWATCH_LAP_TIMER BUTTON_MENU
47#define STOPWATCH_SCROLL_UP BUTTON_UP
48#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
49#elif CONFIG_KEYPAD == PLAYER_PAD
50#define STOPWATCH_QUIT BUTTON_MENU
51#define STOPWATCH_START_STOP BUTTON_PLAY
52#define STOPWATCH_RESET_TIMER BUTTON_STOP
53#define STOPWATCH_LAP_TIMER BUTTON_ON
54#define STOPWATCH_SCROLL_UP BUTTON_RIGHT
55#define STOPWATCH_SCROLL_DOWN BUTTON_LEFT
56#endif
57
34static struct plugin_api* rb; 58static struct plugin_api* rb;
35 59
36static int stopwatch = 0; 60static int stopwatch = 0;
@@ -102,17 +126,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
102 switch (button) 126 switch (button)
103 { 127 {
104 128
105 /* OFF/MENU key to exit */ 129 /* exit */
106#if CONFIG_KEYPAD == RECORDER_PAD 130 case STOPWATCH_QUIT:
107 case BUTTON_OFF:
108#else
109 case BUTTON_MENU:
110#endif
111 done = true; 131 done = true;
112 break; 132 break;
113 133
114 /* PLAY = Stop/Start toggle */ 134 /* Stop/Start toggle */
115 case BUTTON_PLAY: 135 case STOPWATCH_START_STOP:
116 counting = ! counting; 136 counting = ! counting;
117 if (counting) 137 if (counting)
118 { 138 {
@@ -126,12 +146,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
126 } 146 }
127 break; 147 break;
128 148
129 /* LEFT = Reset timer */ 149 /* Reset timer */
130#if CONFIG_KEYPAD == RECORDER_PAD 150 case STOPWATCH_RESET_TIMER:
131 case BUTTON_LEFT:
132#else
133 case BUTTON_STOP:
134#endif
135 if (!counting) 151 if (!counting)
136 { 152 {
137 prev_total = 0; 153 prev_total = 0;
@@ -140,19 +156,15 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
140 } 156 }
141 break; 157 break;
142 158
143 /* ON = Lap timer */ 159 /* Lap timer */
144 case BUTTON_ON: 160 case STOPWATCH_LAP_TIMER:
145 lap_times[curr_lap%MAX_LAPS] = stopwatch; 161 lap_times[curr_lap%MAX_LAPS] = stopwatch;
146 curr_lap++; 162 curr_lap++;
147 update_lap = true; 163 update_lap = true;
148 break; 164 break;
149 165
150 /* UP (RIGHT/+) = Scroll Lap timer up */ 166 /* Scroll Lap timer up */
151#if CONFIG_KEYPAD == RECORDER_PAD 167 case STOPWATCH_SCROLL_UP:
152 case BUTTON_UP:
153#else
154 case BUTTON_RIGHT:
155#endif
156 if (lap_scroll > 0) 168 if (lap_scroll > 0)
157 { 169 {
158 lap_scroll --; 170 lap_scroll --;
@@ -160,12 +172,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
160 } 172 }
161 break; 173 break;
162 174
163 /* DOWN (LEFT/-) = Scroll Lap timer down */ 175 /* Scroll Lap timer down */
164#if CONFIG_KEYPAD == RECORDER_PAD 176 case STOPWATCH_SCROLL_DOWN:
165 case BUTTON_DOWN:
166#else
167 case BUTTON_LEFT:
168#endif
169 if ((lap_scroll < curr_lap - LAP_LINES) && 177 if ((lap_scroll < curr_lap - LAP_LINES) &&
170 (lap_scroll < MAX_SCROLL) ) 178 (lap_scroll < MAX_SCROLL) )
171 { 179 {
@@ -174,9 +182,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
174 } 182 }
175 break; 183 break;
176 184
177 case SYS_USB_CONNECTED: 185 default:
178 rb->usb_screen(); 186 if (rb->default_event_handler(button) == SYS_USB_CONNECTED)
179 return PLUGIN_USB_CONNECTED; 187 return PLUGIN_USB_CONNECTED;
188 break;
180 } 189 }
181 190
182 if (counting) 191 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 @@
36#if CONFIG_KEYPAD == RECORDER_PAD 36#if CONFIG_KEYPAD == RECORDER_PAD
37#define VIDEO_STOP_SEEK BUTTON_PLAY 37#define VIDEO_STOP_SEEK BUTTON_PLAY
38#define VIDEO_RESUME BUTTON_PLAY 38#define VIDEO_RESUME BUTTON_PLAY
39#define VIDEO_DEBUG BUTTON_F1
40#define VIDEO_CONTRAST_DOWN BUTTON_F2
41#define VIDEO_CONTRAST_UP BUTTON_F3
42
39#elif CONFIG_KEYPAD == ONDIO_PAD 43#elif CONFIG_KEYPAD == ONDIO_PAD
40#define VIDEO_STOP_SEEK BUTTON_MENU 44#define VIDEO_STOP_SEEK_PRE BUTTON_MENU
45#define VIDEO_STOP_SEEK (BUTTON_MENU | BUTTON_REL)
41#define VIDEO_RESUME BUTTON_RIGHT 46#define VIDEO_RESUME BUTTON_RIGHT
47#define VIDEO_CONTRAST_DOWN (BUTTON_MENU | BUTTON_DOWN)
48#define VIDEO_CONTRAST_UP (BUTTON_MENU | BUTTON_UP)
49
42#endif 50#endif
43/****************** constants ******************/ 51/****************** constants ******************/
44 52
@@ -285,7 +293,6 @@ void ChangeVolume(int delta)
285} 293}
286 294
287 295
288#if CONFIG_KEYPAD == RECORDER_PAD
289// helper function to change the LCD contrast by a certain amount, +/- 296// helper function to change the LCD contrast by a certain amount, +/-
290void ChangeContrast(int delta) 297void ChangeContrast(int delta)
291{ 298{
@@ -313,7 +320,6 @@ void ChangeContrast(int delta)
313 } 320 }
314 } 321 }
315} 322}
316#endif
317 323
318 324
319// sync the video to the current audio 325// sync the video to the current audio
@@ -563,6 +569,7 @@ void Cleanup(void *fd)
563int PlayTick(int fd) 569int PlayTick(int fd)
564{ 570{
565 int button; 571 int button;
572 static int lastbutton = 0;
566 int avail_audio = -1, avail_video = -1; 573 int avail_audio = -1, avail_video = -1;
567 int retval = 1; 574 int retval = 1;
568 int filepos; 575 int filepos;
@@ -667,11 +674,6 @@ int PlayTick(int fd)
667 else 674 else
668 filepos -= Available(gBuf.pReadAudio); // else audio 675 filepos -= Available(gBuf.pReadAudio); // else audio
669 676
670 if (rb->default_event_handler_ex(button, Cleanup, &fd)
671 == SYS_USB_CONNECTED)
672 retval = -1; // signal "aborted" to caller
673 // SYS_USB_CONNECTED won't be catched again by the switch()
674
675 switch (button) 677 switch (button)
676 { // set exit conditions 678 { // set exit conditions
677 case BUTTON_OFF: 679 case BUTTON_OFF:
@@ -686,6 +688,10 @@ int PlayTick(int fd)
686 retval = 0; // signal "stopped" to caller 688 retval = 0; // signal "stopped" to caller
687 break; 689 break;
688 case VIDEO_STOP_SEEK: 690 case VIDEO_STOP_SEEK:
691#ifdef VIDEO_STOP_SEEK_PRE
692 if (lastbutton != VIDEO_STOP_SEEK_PRE)
693 break;
694#endif
689 if (gPlay.bSeeking) 695 if (gPlay.bSeeking)
690 { 696 {
691 gPlay.bSeeking = false; 697 gPlay.bSeeking = false;
@@ -757,25 +763,32 @@ int PlayTick(int fd)
757 else 763 else
758 gPlay.nSeekAcc++; 764 gPlay.nSeekAcc++;
759 break; 765 break;
760#if CONFIG_KEYPAD == RECORDER_PAD 766#ifdef VIDEO_DEBUG
761 case BUTTON_F1: // debug key 767 case VIDEO_DEBUG: // debug key
762 case BUTTON_F1 | BUTTON_REPEAT: 768 case VIDEO_DEBUG | BUTTON_REPEAT:
763 DrawBuf(); // show buffer status 769 DrawBuf(); // show buffer status
764 gPlay.nTimeOSD = 30; 770 gPlay.nTimeOSD = 30;
765 gPlay.bDirtyOSD = true; 771 gPlay.bDirtyOSD = true;
766 break; 772 break;
767 case BUTTON_F2: // contrast down 773#endif
768 case BUTTON_F2 | BUTTON_REPEAT: 774 case VIDEO_CONTRAST_DOWN: // contrast down
775 case VIDEO_CONTRAST_DOWN | BUTTON_REPEAT:
769 if (gPlay.bHasVideo) 776 if (gPlay.bHasVideo)
770 ChangeContrast(-1); 777 ChangeContrast(-1);
771 break; 778 break;
772 case BUTTON_F3: // contrast up 779 case VIDEO_CONTRAST_UP: // contrast up
773 case BUTTON_F3 | BUTTON_REPEAT: 780 case VIDEO_CONTRAST_UP | BUTTON_REPEAT:
774 if (gPlay.bHasVideo) 781 if (gPlay.bHasVideo)
775 ChangeContrast(1); 782 ChangeContrast(1);
776 break; 783 break;
777#endif 784 default:
785 if (rb->default_event_handler_ex(button, Cleanup, &fd)
786 == SYS_USB_CONNECTED)
787 retval = -1; // signal "aborted" to caller
788 break;
778 } 789 }
790
791 lastbutton = button;
779 } /* if (button != BUTTON_NONE) */ 792 } /* if (button != BUTTON_NONE) */
780 793
781 794
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 @@
56#define NEED_SCROLLBAR() ((!(ONE_SCREEN_FITS_ALL())) && \ 56#define NEED_SCROLLBAR() ((!(ONE_SCREEN_FITS_ALL())) && \
57 (view_mode==WIDE? scrollbar_mode[WIDE]==SB_ON: scrollbar_mode[NARROW]==SB_ON)) 57 (view_mode==WIDE? scrollbar_mode[WIDE]==SB_ON: scrollbar_mode[NARROW]==SB_ON))
58 58
59/* variable button definitions */
60#if CONFIG_KEYPAD == RECORDER_PAD
61#define VIEWER_QUIT BUTTON_OFF
62#define VIEWER_PAGE_UP BUTTON_UP
63#define VIEWER_PAGE_DOWN BUTTON_DOWN
64#define VIEWER_SCREEN_LEFT BUTTON_LEFT
65#define VIEWER_SCREEN_RIGHT BUTTON_RIGHT
66#define VIEWER_MODE_WRAP BUTTON_F1
67#define VIEWER_MODE_LINE BUTTON_F2
68#define VIEWER_MODE_WIDTH BUTTON_F3
69/* Recorder/ Ondio only */
70#define VIEWER_MODE_PAGE (BUTTON_ON | BUTTON_F1)
71#define VIEWER_MODE_SCROLLBAR (BUTTON_ON | BUTTON_F3)
72/* Recorder only */
73#define VIEWER_LINE_UP (BUTTON_ON | BUTTON_UP)
74#define VIEWER_LINE_DOWN (BUTTON_ON | BUTTON_DOWN)
75#define VIEWER_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT)
76#define VIEWER_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT)
77
78#elif CONFIG_KEYPAD == ONDIO_PAD
79#define VIEWER_QUIT BUTTON_OFF
80#define VIEWER_PAGE_UP BUTTON_UP
81#define VIEWER_PAGE_DOWN BUTTON_DOWN
82#define VIEWER_SCREEN_LEFT BUTTON_LEFT
83#define VIEWER_SCREEN_RIGHT BUTTON_RIGHT
84#define VIEWER_MODE_WRAP (BUTTON_MENU | BUTTON_LEFT)
85#define VIEWER_MODE_LINE (BUTTON_MENU | BUTTON_UP)
86#define VIEWER_MODE_WIDTH (BUTTON_MENU | BUTTON_RIGHT)
87/* Recorder/ Ondio only */
88#define VIEWER_MODE_PAGE (BUTTON_MENU | BUTTON_DOWN)
89#define VIEWER_MODE_SCROLLBAR (BUTTON_MENU | BUTTON_OFF)
90
91#elif CONFIG_KEYPAD == PLAYER_PAD
92#define VIEWER_QUIT BUTTON_STOP
93#define VIEWER_PAGE_UP BUTTON_LEFT
94#define VIEWER_PAGE_DOWN BUTTON_RIGHT
95#define VIEWER_SCREEN_LEFT (BUTTON_MENU | BUTTON_LEFT)
96#define VIEWER_SCREEN_RIGHT (BUTTON_MENU | BUTTON_RIGHT)
97#define VIEWER_MODE_WRAP (BUTTON_ON | BUTTON_LEFT)
98#define VIEWER_MODE_LINE (BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT)
99#define VIEWER_MODE_WIDTH (BUTTON_ON | BUTTON_RIGHT)
100
101#endif
102
59enum { 103enum {
60 WRAP=0, 104 WRAP=0,
61 CHOP, 105 CHOP,
@@ -625,8 +669,10 @@ static bool viewer_init(char* file)
625 return true; 669 return true;
626} 670}
627 671
628static void viewer_exit(void) 672static void viewer_exit(void *parameter)
629{ 673{
674 (void)parameter;
675
630 rb->close(fd); 676 rb->close(fd);
631} 677}
632 678
@@ -641,90 +687,10 @@ static int col_limit(int col)
641 return col; 687 return col;
642} 688}
643 689
644#ifdef HAVE_LCD_BITMAP
645static int viewer_recorder_on_button(int col)
646{
647 bool exit = false;
648
649 while (!exit) {
650 switch (rb->button_get(true)) {
651 case BUTTON_ON | BUTTON_F1:
652 /* Page-overlap mode */
653 if (++page_mode == PAGE_MODES)
654 page_mode = 0;
655
656 rb->splash(HZ, true, "%s %s",
657 page_mode_str[page_mode],
658 page_mode_str[PAGE_MODES]);
659
660 viewer_draw(col);
661 break;
662
663 case BUTTON_ON | BUTTON_F3:
664 /* Show-scrollbar mode for current view-width mode */
665 if (!(ONE_SCREEN_FITS_ALL())) {
666 if (++scrollbar_mode[view_mode] == SCROLLBAR_MODES)
667 scrollbar_mode[view_mode] = 0;
668
669 init_need_scrollbar();
670 viewer_draw(col);
671
672 rb->splash(HZ, true, "%s %s (%s %s)",
673 scrollbar_mode_str[SCROLLBAR_MODES],
674 scrollbar_mode_str[scrollbar_mode[view_mode]],
675 view_mode_str[view_mode],
676 view_mode_str[VIEW_MODES]);
677 }
678 viewer_draw(col);
679 break;
680
681 case BUTTON_ON | BUTTON_UP:
682 case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT:
683 /* Scroll up one line */
684 viewer_scroll_up();
685 viewer_draw(col);
686 break;
687
688 case BUTTON_ON | BUTTON_DOWN:
689 case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT:
690 /* Scroll down one line */
691 if (next_screen_ptr != NULL)
692 screen_top_ptr = next_line_ptr;
693
694 viewer_draw(col);
695 break;
696
697 case BUTTON_ON | BUTTON_LEFT:
698 case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT:
699 /* Scroll left one column */
700 col--;
701 col = col_limit(col);
702 viewer_draw(col);
703 break;
704
705 case BUTTON_ON | BUTTON_RIGHT:
706 case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT:
707 /* Scroll right one column */
708 col++;
709 col = col_limit(col);
710 viewer_draw(col);
711 break;
712
713 case BUTTON_ON | BUTTON_REL:
714 case BUTTON_ON | BUTTON_DOWN | BUTTON_REL:
715 case BUTTON_ON | BUTTON_UP | BUTTON_REL:
716 /* Drop out of this loop (when ON btn released) */
717 exit = true;
718 break;
719 }
720 }
721 return col;
722}
723#endif
724
725enum plugin_status plugin_start(struct plugin_api* api, void* file) 690enum plugin_status plugin_start(struct plugin_api* api, void* file)
726{ 691{
727 bool exit=false; 692 bool exit=false;
693 int button;
728 int col = 0; 694 int col = 0;
729 int i; 695 int i;
730 int ok; 696 int ok;
@@ -738,28 +704,22 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
738 ok = viewer_init(file); 704 ok = viewer_init(file);
739 if (!ok) { 705 if (!ok) {
740 rb->splash(HZ, false, "Error"); 706 rb->splash(HZ, false, "Error");
741 viewer_exit(); 707 viewer_exit(NULL);
742 return PLUGIN_OK; 708 return PLUGIN_OK;
743 } 709 }
744 710
745 viewer_draw(col); 711 viewer_draw(col);
746 712
747 while (!exit) { 713 while (!exit) {
748 switch (rb->button_get(true)) { 714 button = rb->button_get(true);
749#if CONFIG_KEYPAD == RECORDER_PAD 715 switch (button) {
750 case BUTTON_OFF: 716
751#else 717 case VIEWER_QUIT:
752 case BUTTON_STOP: 718 viewer_exit(NULL);
753#endif
754 viewer_exit();
755 exit = true; 719 exit = true;
756 break; 720 break;
757 721
758#if CONFIG_KEYPAD == RECORDER_PAD 722 case VIEWER_MODE_WRAP:
759 case BUTTON_F1:
760#else
761 case BUTTON_ON | BUTTON_LEFT:
762#endif
763 /* Word-wrap mode: WRAP or CHOP */ 723 /* Word-wrap mode: WRAP or CHOP */
764 if (++word_mode == WORD_MODES) 724 if (++word_mode == WORD_MODES)
765 word_mode = 0; 725 word_mode = 0;
@@ -776,11 +736,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
776 viewer_draw(col); 736 viewer_draw(col);
777 break; 737 break;
778 738
779#if CONFIG_KEYPAD == RECORDER_PAD 739 case VIEWER_MODE_LINE:
780 case BUTTON_F2:
781#else
782 case BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT:
783#endif
784 /* Line-paragraph mode: NORMAL, JOIN or EXPAND */ 740 /* Line-paragraph mode: NORMAL, JOIN or EXPAND */
785 if (++line_mode == LINE_MODES) 741 if (++line_mode == LINE_MODES)
786 line_mode = 0; 742 line_mode = 0;
@@ -802,11 +758,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
802 viewer_draw(col); 758 viewer_draw(col);
803 break; 759 break;
804 760
805#if CONFIG_KEYPAD == RECORDER_PAD 761 case VIEWER_MODE_WIDTH:
806 case BUTTON_F3:
807#else
808 case BUTTON_ON | BUTTON_RIGHT:
809#endif
810 /* View-width mode: NARROW or WIDE */ 762 /* View-width mode: NARROW or WIDE */
811 if (line_mode == JOIN) 763 if (line_mode == JOIN)
812 rb->splash(HZ, true, "(no %s %s)", 764 rb->splash(HZ, true, "(no %s %s)",
@@ -843,13 +795,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
843 viewer_draw(col); 795 viewer_draw(col);
844 break; 796 break;
845 797
846#if CONFIG_KEYPAD == RECORDER_PAD 798 case VIEWER_PAGE_UP:
847 case BUTTON_UP: 799 case VIEWER_PAGE_UP | BUTTON_REPEAT:
848 case BUTTON_UP | BUTTON_REPEAT:
849#else
850 case BUTTON_LEFT:
851 case BUTTON_LEFT | BUTTON_REPEAT:
852#endif
853 /* Page up */ 800 /* Page up */
854#ifdef HAVE_LCD_BITMAP 801#ifdef HAVE_LCD_BITMAP
855 for (i = page_mode==OVERLAP? 1:0; i < display_lines; i++) 802 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)
861 viewer_draw(col); 808 viewer_draw(col);
862 break; 809 break;
863 810
864#if CONFIG_KEYPAD == RECORDER_PAD 811 case VIEWER_PAGE_DOWN:
865 case BUTTON_DOWN: 812 case VIEWER_PAGE_DOWN | BUTTON_REPEAT:
866 case BUTTON_DOWN | BUTTON_REPEAT:
867#else
868 case BUTTON_RIGHT:
869 case BUTTON_RIGHT | BUTTON_REPEAT:
870#endif
871 /* Page down */ 813 /* Page down */
872 if (next_screen_ptr != NULL) 814 if (next_screen_ptr != NULL)
873 screen_top_ptr = next_screen_to_draw_ptr; 815 screen_top_ptr = next_screen_to_draw_ptr;
@@ -875,13 +817,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
875 viewer_draw(col); 817 viewer_draw(col);
876 break; 818 break;
877 819
878#if CONFIG_KEYPAD == RECORDER_PAD 820 case VIEWER_SCREEN_LEFT:
879 case BUTTON_LEFT: 821 case VIEWER_SCREEN_LEFT | BUTTON_REPEAT:
880 case BUTTON_LEFT | BUTTON_REPEAT:
881#else
882 case BUTTON_MENU | BUTTON_LEFT:
883 case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT:
884#endif
885 if (view_mode == WIDE) { 822 if (view_mode == WIDE) {
886 /* Screen left */ 823 /* Screen left */
887 col -= display_columns; 824 col -= display_columns;
@@ -895,13 +832,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
895 viewer_draw(col); 832 viewer_draw(col);
896 break; 833 break;
897 834
898#if CONFIG_KEYPAD == RECORDER_PAD 835 case VIEWER_SCREEN_RIGHT:
899 case BUTTON_RIGHT: 836 case VIEWER_SCREEN_RIGHT | BUTTON_REPEAT:
900 case BUTTON_RIGHT | BUTTON_REPEAT:
901#else
902 case BUTTON_MENU | BUTTON_RIGHT:
903 case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT:
904#endif
905 if (view_mode == WIDE) { 837 if (view_mode == WIDE) {
906 /* Screen right */ 838 /* Screen right */
907 col += display_columns; 839 col += display_columns;
@@ -915,18 +847,77 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file)
915 viewer_draw(col); 847 viewer_draw(col);
916 break; 848 break;
917 849
850#if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD)
851 case VIEWER_MODE_PAGE:
852 /* Page-overlap mode */
853 if (++page_mode == PAGE_MODES)
854 page_mode = 0;
855
856 rb->splash(HZ, true, "%s %s",
857 page_mode_str[page_mode],
858 page_mode_str[PAGE_MODES]);
859
860 viewer_draw(col);
861 break;
862
863 case VIEWER_MODE_SCROLLBAR:
864 /* Show-scrollbar mode for current view-width mode */
865 if (!(ONE_SCREEN_FITS_ALL())) {
866 if (++scrollbar_mode[view_mode] == SCROLLBAR_MODES)
867 scrollbar_mode[view_mode] = 0;
868
869 init_need_scrollbar();
870 viewer_draw(col);
871
872 rb->splash(HZ, true, "%s %s (%s %s)",
873 scrollbar_mode_str[SCROLLBAR_MODES],
874 scrollbar_mode_str[scrollbar_mode[view_mode]],
875 view_mode_str[view_mode],
876 view_mode_str[VIEW_MODES]);
877 }
878 viewer_draw(col);
879 break;
880#endif
881
918#if CONFIG_KEYPAD == RECORDER_PAD 882#if CONFIG_KEYPAD == RECORDER_PAD
919 case BUTTON_ON: 883 case VIEWER_LINE_UP:
920 /*Go to On-btn combinations */ 884 case VIEWER_LINE_UP | BUTTON_REPEAT:
921 col = viewer_recorder_on_button(col); 885 /* Scroll up one line */
886 viewer_scroll_up();
887 viewer_draw(col);
888 break;
889
890 case VIEWER_LINE_DOWN:
891 case VIEWER_LINE_DOWN | BUTTON_REPEAT:
892 /* Scroll down one line */
893 if (next_screen_ptr != NULL)
894 screen_top_ptr = next_line_ptr;
895
896 viewer_draw(col);
897 break;
898
899 case VIEWER_COLUMN_LEFT:
900 case VIEWER_COLUMN_LEFT | BUTTON_REPEAT:
901 /* Scroll left one column */
902 col--;
903 col = col_limit(col);
904 viewer_draw(col);
905 break;
906
907 case VIEWER_COLUMN_RIGHT:
908 case VIEWER_COLUMN_RIGHT | BUTTON_REPEAT:
909 /* Scroll right one column */
910 col++;
911 col = col_limit(col);
912 viewer_draw(col);
922 break; 913 break;
923#endif 914#endif
924 915
925 case SYS_USB_CONNECTED: 916 default:
926 /* Release control to USB functions */ 917 if (rb->default_event_handler_ex(button, viewer_exit, NULL)
927 rb->usb_screen(); 918 == SYS_USB_CONNECTED)
928 viewer_exit(); 919 return PLUGIN_USB_CONNECTED;
929 return PLUGIN_USB_CONNECTED; 920 break;
930 } 921 }
931 } 922 }
932 return PLUGIN_OK; 923 return PLUGIN_OK;