summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2004-10-16 00:07:43 +0000
committerJens Arnold <amiconn@rockbox.org>2004-10-16 00:07:43 +0000
commitcc8cff2ec02caf29b7d0cf565e1f9e2ebd9b0e99 (patch)
treea5427744a2aa55546f3d5982e15bed2a8d5e5f49
parent4a5df8e8d178702d603bd7cd185525c7ff6a3064 (diff)
downloadrockbox-cc8cff2ec02caf29b7d0cf565e1f9e2ebd9b0e99.tar.gz
rockbox-cc8cff2ec02caf29b7d0cf565e1f9e2ebd9b0e99.zip
Plugin rework 1: (most) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (snow) Made USB aware. (video) Added contrast setting to Ondio version.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5291 a1c6a512-1295-4272-9138-f99709370657
-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;