diff options
Diffstat (limited to 'apps/plugins/viewer.c')
-rw-r--r-- | apps/plugins/viewer.c | 273 |
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 | |||
59 | enum { | 103 | enum { |
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 | ||
628 | static void viewer_exit(void) | 672 | static 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 | ||
645 | static 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 | |||
725 | enum plugin_status plugin_start(struct plugin_api* api, void* file) | 690 | enum 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; |