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 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;