summaryrefslogtreecommitdiff
path: root/apps
diff options
context:
space:
mode:
Diffstat (limited to 'apps')
-rw-r--r--apps/settings.c1
-rw-r--r--apps/settings.h4
-rw-r--r--apps/settings_menu.c7
-rw-r--r--apps/wps.c184
4 files changed, 148 insertions, 48 deletions
diff --git a/apps/settings.c b/apps/settings.c
index 6abdd822b5..ef51727105 100644
--- a/apps/settings.c
+++ b/apps/settings.c
@@ -357,6 +357,7 @@ void settings_reset(void) {
357 global_settings.discharge = 0; 357 global_settings.discharge = 0;
358 global_settings.total_uptime = 0; 358 global_settings.total_uptime = 0;
359 global_settings.scroll_speed = 8; 359 global_settings.scroll_speed = 8;
360 global_settings.ff_rewind = DEFAULT_FF_REWIND_SETTING;
360} 361}
361 362
362 363
diff --git a/apps/settings.h b/apps/settings.h
index 6175ef942d..115aab0f74 100644
--- a/apps/settings.h
+++ b/apps/settings.h
@@ -69,6 +69,9 @@ struct user_settings
69 69
70 /* geeky persistent statistics */ 70 /* geeky persistent statistics */
71 unsigned int total_uptime; /* total uptime since rockbox was first booted */ 71 unsigned int total_uptime; /* total uptime since rockbox was first booted */
72
73 /* FF/Rewind step size (in seconds) */
74 int ff_rewind;
72}; 75};
73 76
74/* prototypes */ 77/* prototypes */
@@ -112,5 +115,6 @@ extern struct user_settings global_settings;
112#define DEFAULT_POWEROFF_SETTING 0 115#define DEFAULT_POWEROFF_SETTING 0
113#define DEFAULT_BACKLIGHT_SETTING 5 116#define DEFAULT_BACKLIGHT_SETTING 5
114#define DEFAULT_WPS_DISPLAY 0 117#define DEFAULT_WPS_DISPLAY 0
118#define DEFAULT_FF_REWIND_SETTING 2
115 119
116#endif /* __SETTINGS_H__ */ 120#endif /* __SETTINGS_H__ */
diff --git a/apps/settings_menu.c b/apps/settings_menu.c
index 0dbe50d9cb..3def0574a1 100644
--- a/apps/settings_menu.c
+++ b/apps/settings_menu.c
@@ -132,6 +132,12 @@ static void timedate_set(void)
132} 132}
133#endif 133#endif
134 134
135static void ff_rewind(void)
136{
137 set_int("[FF/Rewind Step Size]", "s", &global_settings.ff_rewind,
138 NULL, 1, 1, 999 );
139}
140
135void settings_menu(void) 141void settings_menu(void)
136{ 142{
137 int m; 143 int m;
@@ -152,6 +158,7 @@ void settings_menu(void)
152#ifdef HAVE_RTC 158#ifdef HAVE_RTC
153 { "Time/Date", timedate_set }, 159 { "Time/Date", timedate_set },
154#endif 160#endif
161 { "FF/Rewind", ff_rewind },
155 }; 162 };
156 bool old_shuffle = global_settings.playlist_shuffle; 163 bool old_shuffle = global_settings.playlist_shuffle;
157 164
diff --git a/apps/wps.c b/apps/wps.c
index acb6d90a13..f80cec95a4 100644
--- a/apps/wps.c
+++ b/apps/wps.c
@@ -54,12 +54,13 @@
54#define PLAY_DISPLAY_TRACK_TITLE 2 54#define PLAY_DISPLAY_TRACK_TITLE 2
55 55
56#ifdef HAVE_RECORDER_KEYPAD 56#ifdef HAVE_RECORDER_KEYPAD
57#define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN) 57#define RELEASE_MASK (BUTTON_F1 | BUTTON_DOWN | BUTTON_LEFT | BUTTON_RIGHT)
58#else 58#else
59#define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP) 59#define RELEASE_MASK (BUTTON_MENU | BUTTON_STOP | BUTTON_LEFT | BUTTON_RIGHT)
60#endif 60#endif
61 61
62bool keys_locked = false; 62bool keys_locked = false;
63static bool ff_rewind = false;
63 64
64static void draw_screen(struct mp3entry* id3) 65static void draw_screen(struct mp3entry* id3)
65{ 66{
@@ -291,6 +292,39 @@ int player_id3_show(void)
291 return(0); 292 return(0);
292} 293}
293 294
295static void display_file_time(unsigned int elapsed, unsigned int length)
296{
297 char buffer[32];
298
299#ifdef HAVE_LCD_BITMAP
300 snprintf(buffer,sizeof(buffer),
301 "Time:%3d:%02d/%d:%02d",
302 elapsed / 60000,
303 elapsed % 60000 / 1000,
304 length / 60000,
305 length % 60000 / 1000 );
306
307 lcd_puts(0, 6, buffer);
308 slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6, elapsed*100/length, Grow_Right);
309 lcd_update();
310#else
311 /* Display time with the filename scroll only because
312 the screen has room. */
313 if ((global_settings.wps_display == PLAY_DISPLAY_FILENAME_SCROLL) ||
314 ff_rewind )
315 {
316 snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ",
317 elapsed / 60000,
318 elapsed % 60000 / 1000,
319 length / 60000,
320 length % 60000 / 1000 );
321
322 lcd_puts(0, 1, buffer);
323 lcd_update();
324 }
325#endif
326}
327
294void display_keylock_text(bool locked) 328void display_keylock_text(bool locked)
295{ 329{
296 lcd_stop_scroll(); 330 lcd_stop_scroll();
@@ -354,7 +388,7 @@ int wps_show(void)
354 bool pending_keylock = true; /* Keylock will go ON next time */ 388 bool pending_keylock = true; /* Keylock will go ON next time */
355 int old_release_mask; 389 int old_release_mask;
356 int button; 390 int button;
357 char buffer[32]; 391 int ff_rewind_count = 0;
358 392
359 old_release_mask = button_set_release(RELEASE_MASK); 393 old_release_mask = button_set_release(RELEASE_MASK);
360 394
@@ -461,26 +495,112 @@ int wps_show(void)
461 status_draw(); 495 status_draw();
462 break; 496 break;
463 497
464 case BUTTON_LEFT: 498 case BUTTON_LEFT | BUTTON_REPEAT:
465 if (keys_locked) 499 if (!keys_locked)
466 { 500 {
467 display_keylock_text(keys_locked); 501 if (ff_rewind)
502 {
503 ff_rewind_count -= global_settings.ff_rewind*1000;
504 }
505 else
506 {
507 if ( mpeg_is_playing() && id3 && id3->length )
508 {
509 mpeg_pause();
510 status_set_playmode(STATUS_FASTBACKWARD);
511 status_draw();
512 ff_rewind = true;
513 ff_rewind_count = -global_settings.ff_rewind*1000;
514 }
515 else
516 break;
517 }
518
519 if ((int)(id3->elapsed + ff_rewind_count) < 0)
520 ff_rewind_count = -id3->elapsed;
521
522 display_file_time(id3->elapsed + ff_rewind_count,
523 id3->length);
524 }
525 break;
526
527 case BUTTON_RIGHT | BUTTON_REPEAT:
528 if (!keys_locked)
529 {
530 if (ff_rewind)
531 {
532 ff_rewind_count += global_settings.ff_rewind*1000;
533 }
534 else
535 {
536 if ( mpeg_is_playing() && id3 && id3->length )
537 {
538 mpeg_pause();
539 status_set_playmode(STATUS_FASTFORWARD);
540 status_draw();
541 ff_rewind = true;
542 ff_rewind_count = global_settings.ff_rewind*1000;
543 }
544 else
545 break;
546 }
547
548 if ((id3->elapsed + ff_rewind_count) > id3->length)
549 ff_rewind_count = id3->length - id3->elapsed;
550
551 display_file_time(id3->elapsed + ff_rewind_count,
552 id3->length);
553 }
554 break;
555
556 case BUTTON_LEFT | BUTTON_REL:
557 if (ff_rewind)
558 {
559 /* rewind */
560 mpeg_ff_rewind(ff_rewind_count);
561 ff_rewind_count = 0;
562 ff_rewind = false;
563 status_set_playmode(STATUS_PLAY);
564#ifdef HAVE_LCD_CHARCELLS
468 draw_screen(id3); 565 draw_screen(id3);
469 break; 566#endif
567 }
568 else
569 {
570 if (keys_locked)
571 {
572 display_keylock_text(keys_locked);
573 draw_screen(id3);
574 break;
575 }
576 mpeg_prev();
577 status_set_playmode(STATUS_PLAY);
470 } 578 }
471 mpeg_prev();
472 status_set_playmode(STATUS_PLAY);
473 break; 579 break;
474 580
475 case BUTTON_RIGHT: 581 case BUTTON_RIGHT | BUTTON_REL:
476 if (keys_locked) 582 if (ff_rewind)
477 { 583 {
478 display_keylock_text(keys_locked); 584 /* fast forward */
585 mpeg_ff_rewind(ff_rewind_count);
586 ff_rewind_count = 0;
587 ff_rewind = false;
588 status_set_playmode(STATUS_PLAY);
589#ifdef HAVE_LCD_CHARCELLS
479 draw_screen(id3); 590 draw_screen(id3);
480 break; 591#endif
592 }
593 else
594 {
595 if (keys_locked)
596 {
597 display_keylock_text(keys_locked);
598 draw_screen(id3);
599 break;
600 }
601 mpeg_next();
602 status_set_playmode(STATUS_PLAY);
481 } 603 }
482 mpeg_next();
483 status_set_playmode(STATUS_PLAY);
484 break; 604 break;
485 605
486#ifdef HAVE_PLAYER_KEYPAD 606#ifdef HAVE_PLAYER_KEYPAD
@@ -683,39 +803,7 @@ int wps_show(void)
683#endif 803#endif
684 case BUTTON_NONE: /* Timeout */ 804 case BUTTON_NONE: /* Timeout */
685 if (mpeg_is_playing() && id3) 805 if (mpeg_is_playing() && id3)
686 { 806 display_file_time(id3->elapsed, id3->length);
687#ifdef HAVE_LCD_BITMAP
688 snprintf(buffer,sizeof(buffer),
689 "Time:%3d:%02d/%d:%02d",
690 id3->elapsed / 60000,
691 id3->elapsed % 60000 / 1000,
692 id3->length / 60000,
693 id3->length % 60000 / 1000 );
694
695 lcd_puts(0, 6, buffer);
696
697 slidebar(0, LCD_HEIGHT-6, LCD_WIDTH, 6,
698 id3->elapsed*100/id3->length,
699 Grow_Right);
700
701 lcd_update();
702#else
703 /* Display time with the filename scroll only because
704 the screen has room. */
705 if (global_settings.wps_display ==
706 PLAY_DISPLAY_FILENAME_SCROLL)
707 {
708 snprintf(buffer,sizeof(buffer), "%d:%02d/%d:%02d ",
709 id3->elapsed / 60000,
710 id3->elapsed % 60000 / 1000,
711 id3->length / 60000,
712 id3->length % 60000 / 1000 );
713
714 lcd_puts(0, 1, buffer);
715 lcd_update();
716 }
717#endif
718 }
719 807
720 status_draw(); 808 status_draw();
721 break; 809 break;