diff options
Diffstat (limited to 'apps/recorder/keyboard.c')
-rw-r--r-- | apps/recorder/keyboard.c | 138 |
1 files changed, 74 insertions, 64 deletions
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c index e6a3c927e3..1e9e8f32ab 100644 --- a/apps/recorder/keyboard.c +++ b/apps/recorder/keyboard.c | |||
@@ -49,45 +49,47 @@ | |||
49 | #define DEFAULT_MARGIN 6 | 49 | #define DEFAULT_MARGIN 6 |
50 | #define KBD_BUF_SIZE 500 | 50 | #define KBD_BUF_SIZE 500 |
51 | 51 | ||
52 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ | 52 | #if (CONFIG_KEYPAD == ONDIO_PAD) \ |
53 | (CONFIG_KEYPAD == IRIVER_H300_PAD) | 53 | || (CONFIG_KEYPAD == IPOD_1G2G_PAD) \ |
54 | #define KBD_CURSOR_KEYS /* certain key combos move the cursor even if not | 54 | || (CONFIG_KEYPAD == IPOD_3G_PAD) \ |
55 | in line edit mode */ | 55 | || (CONFIG_KEYPAD == IPOD_4G_PAD) \ |
56 | #define KBD_MODES /* I-Rivers can use picker, line edit and cursor keys */ | 56 | || (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \ |
57 | #define KBD_MORSE_INPUT /* I-Rivers have a Morse input mode */ | 57 | || (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \ |
58 | 58 | || (CONFIG_KEYPAD == IAUDIO_M3_PAD) \ | |
59 | #elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */ | 59 | || (CONFIG_KEYPAD == IRIVER_H10_PAD) |
60 | #define KBD_MODES /* Ondio uses 2 modes, picker and line edit */ | 60 | /* no key combos to move the cursor if not in line edit mode */ |
61 | 61 | #define KBD_MODES /* uses 2 modes, picker and line edit */ | |
62 | #elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) \ | 62 | |
63 | || (CONFIG_KEYPAD == IPOD_4G_PAD) | 63 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) \ |
64 | #define KBD_MODES /* iPod uses 2 modes, picker and line edit */ | 64 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ |
65 | #define KBD_MORSE_INPUT | 65 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ |
66 | 66 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ | |
67 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | 67 | || (CONFIG_KEYPAD == SANSA_E200_PAD) \ |
68 | #define KBD_MODES /* iFP7xx uses 2 modes, picker and line edit */ | 68 | || (CONFIG_KEYPAD == SANSA_FUZE_PAD) \ |
69 | 69 | || (CONFIG_KEYPAD == SANSA_C200_PAD) \ | |
70 | #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) || (CONFIG_KEYPAD == IAUDIO_M3_PAD) | 70 | || (CONFIG_KEYPAD == SAMSUNG_YH_PAD) |
71 | #define KBD_MODES /* iAudios use 2 modes, picker and line edit */ | 71 | /* certain key combos move the cursor even if not in line edit mode */ |
72 | |||
73 | #elif CONFIG_KEYPAD == IRIVER_H10_PAD | ||
74 | #define KBD_MODES /* iriver H10 uses 2 modes, picker and line edit */ | ||
75 | #define KBD_MORSE_INPUT | ||
76 | |||
77 | #elif CONFIG_KEYPAD == GIGABEAT_PAD | ||
78 | #define KBD_CURSOR_KEYS | 72 | #define KBD_CURSOR_KEYS |
79 | #define KBD_MODES | 73 | #define KBD_MODES /* uses 2 modes, picker and line edit */ |
80 | #define KBD_MORSE_INPUT | ||
81 | 74 | ||
82 | #elif CONFIG_KEYPAD == SANSA_E200_PAD \ | 75 | #else |
83 | || CONFIG_KEYPAD == SANSA_FUZE_PAD \ | 76 | #define KBD_CURSOR_KEYS /* certain keys move the cursor, no line edit mode */ |
84 | || CONFIG_KEYPAD == SANSA_C200_PAD \ | 77 | #endif |
85 | || CONFIG_KEYPAD == SAMSUNG_YH_PAD | ||
86 | #define KBD_CURSOR_KEYS | ||
87 | #define KBD_MODES | ||
88 | 78 | ||
89 | #elif CONFIG_KEYPAD == MROBE100_PAD | 79 | #if (CONFIG_KEYPAD == IRIVER_H100_PAD) \ |
90 | #define KBD_MORSE_INPUT | 80 | || (CONFIG_KEYPAD == IRIVER_H300_PAD) \ |
81 | || (CONFIG_KEYPAD == IPOD_1G2G_PAD) \ | ||
82 | || (CONFIG_KEYPAD == IPOD_3G_PAD) \ | ||
83 | || (CONFIG_KEYPAD == IPOD_4G_PAD) \ | ||
84 | || (CONFIG_KEYPAD == IRIVER_H10_PAD) \ | ||
85 | || (CONFIG_KEYPAD == GIGABEAT_PAD) \ | ||
86 | || (CONFIG_KEYPAD == GIGABEAT_S_PAD) \ | ||
87 | || (CONFIG_KEYPAD == MROBE100_PAD) \ | ||
88 | || (CONFIG_KEYPAD == SANSA_E200_PAD) \ | ||
89 | || (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD) \ | ||
90 | || (CONFIG_KEYPAD == PHILIPS_SA9200_PAD) | ||
91 | /* certain key combos toggle input mode between keyboard input and Morse input */ | ||
92 | #define KBD_TOGGLE_INPUT | ||
91 | #endif | 93 | #endif |
92 | 94 | ||
93 | struct keyboard_parameters | 95 | struct keyboard_parameters |
@@ -124,7 +126,7 @@ struct keyboard_parameters | |||
124 | static struct keyboard_parameters kbd_param[NB_SCREENS]; | 126 | static struct keyboard_parameters kbd_param[NB_SCREENS]; |
125 | static bool kbd_loaded = false; | 127 | static bool kbd_loaded = false; |
126 | 128 | ||
127 | #ifdef KBD_MORSE_INPUT | 129 | #ifdef HAVE_MORSE_INPUT |
128 | /* FIXME: We should put this to a configuration file. */ | 130 | /* FIXME: We should put this to a configuration file. */ |
129 | static const char *morse_alphabets = | 131 | static const char *morse_alphabets = |
130 | "abcdefghijklmnopqrstuvwxyz1234567890,.?-@ "; | 132 | "abcdefghijklmnopqrstuvwxyz1234567890,.?-@ "; |
@@ -134,7 +136,6 @@ static const unsigned char morse_codes[] = { | |||
134 | 0x2f,0x27,0x23,0x21,0x20,0x30,0x38,0x3c,0x3e,0x3f, | 136 | 0x2f,0x27,0x23,0x21,0x20,0x30,0x38,0x3c,0x3e,0x3f, |
135 | 0x73,0x55,0x4c,0x61,0x5a,0x80 }; | 137 | 0x73,0x55,0x4c,0x61,0x5a,0x80 }; |
136 | 138 | ||
137 | static bool morse_mode = false; | ||
138 | #endif | 139 | #endif |
139 | 140 | ||
140 | /* Loads a custom keyboard into memory | 141 | /* Loads a custom keyboard into memory |
@@ -306,7 +307,8 @@ int kbd_input(char* text, int buflen) | |||
306 | unsigned char *utf8; | 307 | unsigned char *utf8; |
307 | bool cur_blink = true; /* Cursor on/off flag */ | 308 | bool cur_blink = true; /* Cursor on/off flag */ |
308 | int ret = 0; /* assume success */ | 309 | int ret = 0; /* assume success */ |
309 | #ifdef KBD_MORSE_INPUT | 310 | #ifdef HAVE_MORSE_INPUT |
311 | bool morse_mode = global_settings.morse_input; | ||
310 | bool morse_reading = false; | 312 | bool morse_reading = false; |
311 | unsigned char morse_code = 0; | 313 | unsigned char morse_code = 0; |
312 | int morse_tick = 0; | 314 | int morse_tick = 0; |
@@ -534,10 +536,10 @@ int kbd_input(char* text, int buflen) | |||
534 | pm->main_x = 0; | 536 | pm->main_x = 0; |
535 | pm->keyboard_margin -= pm->keyboard_margin/2; | 537 | pm->keyboard_margin -= pm->keyboard_margin/2; |
536 | 538 | ||
537 | #ifdef KBD_MORSE_INPUT | 539 | #ifdef HAVE_MORSE_INPUT |
538 | pm->old_main_y = pm->main_y; | 540 | pm->old_main_y = pm->main_y; |
539 | if (morse_mode) | 541 | if (morse_mode) |
540 | pm->main_y = sc_h - pm->font_h; | 542 | pm->main_y = sc_h - pm->font_h - BUTTONBAR_HEIGHT; |
541 | #endif | 543 | #endif |
542 | } | 544 | } |
543 | 545 | ||
@@ -567,7 +569,7 @@ int kbd_input(char* text, int buflen) | |||
567 | FOR_NB_SCREENS(l) | 569 | FOR_NB_SCREENS(l) |
568 | screens[l].clear_display(); | 570 | screens[l].clear_display(); |
569 | 571 | ||
570 | #ifdef KBD_MORSE_INPUT | 572 | #ifdef HAVE_MORSE_INPUT |
571 | if (morse_mode) | 573 | if (morse_mode) |
572 | { | 574 | { |
573 | FOR_NB_SCREENS(l) | 575 | FOR_NB_SCREENS(l) |
@@ -615,7 +617,7 @@ int kbd_input(char* text, int buflen) | |||
615 | } | 617 | } |
616 | } | 618 | } |
617 | else | 619 | else |
618 | #endif /* KBD_MORSE_INPUT */ | 620 | #endif /* HAVE_MORSE_INPUT */ |
619 | { | 621 | { |
620 | /* draw page */ | 622 | /* draw page */ |
621 | FOR_NB_SCREENS(l) | 623 | FOR_NB_SCREENS(l) |
@@ -752,7 +754,7 @@ int kbd_input(char* text, int buflen) | |||
752 | sc->getwidth(), pm->font_h + 2); | 754 | sc->getwidth(), pm->font_h + 2); |
753 | else /* highlight the key that has focus */ | 755 | else /* highlight the key that has focus */ |
754 | #endif | 756 | #endif |
755 | #ifdef KBD_MORSE_INPUT | 757 | #ifdef HAVE_MORSE_INPUT |
756 | if(!morse_mode) | 758 | if(!morse_mode) |
757 | #endif | 759 | #endif |
758 | sc->fillrect(pm->font_w*pm->x, | 760 | sc->fillrect(pm->font_w*pm->x, |
@@ -771,14 +773,14 @@ int kbd_input(char* text, int buflen) | |||
771 | pm = ¶m[button_screen]; | 773 | pm = ¶m[button_screen]; |
772 | sc = &screens[button_screen]; | 774 | sc = &screens[button_screen]; |
773 | 775 | ||
774 | #if defined(KBD_MODES) || defined(KBD_MORSE_INPUT) | 776 | #if defined(KBD_MODES) || defined(HAVE_MORSE_INPUT) |
775 | /* Remap some buttons to allow to move | 777 | /* Remap some buttons to allow to move |
776 | * cursor in line edit mode and morse mode. */ | 778 | * cursor in line edit mode and morse mode. */ |
777 | #if defined(KBD_MODES) && defined(KBD_MORSE_INPUT) | 779 | #if defined(KBD_MODES) && defined(HAVE_MORSE_INPUT) |
778 | if (pm->line_edit || morse_mode) | 780 | if (pm->line_edit || morse_mode) |
779 | #elif defined(KBD_MODES) | 781 | #elif defined(KBD_MODES) |
780 | if (pm->line_edit) | 782 | if (pm->line_edit) |
781 | #else /* defined(KBD_MORSE_INPUT) */ | 783 | #else /* defined(HAVE_MORSE_INPUT) */ |
782 | if (morse_mode) | 784 | if (morse_mode) |
783 | #endif | 785 | #endif |
784 | { | 786 | { |
@@ -787,7 +789,7 @@ int kbd_input(char* text, int buflen) | |||
787 | if (button == ACTION_KBD_RIGHT) | 789 | if (button == ACTION_KBD_RIGHT) |
788 | button = ACTION_KBD_CURSOR_RIGHT; | 790 | button = ACTION_KBD_CURSOR_RIGHT; |
789 | } | 791 | } |
790 | #endif /* defined(KBD_MODES) || defined(KBD_MORSE_INPUT) */ | 792 | #endif /* defined(KBD_MODES) || defined(HAVE_MORSE_INPUT) */ |
791 | 793 | ||
792 | switch ( button ) | 794 | switch ( button ) |
793 | { | 795 | { |
@@ -798,7 +800,7 @@ int kbd_input(char* text, int buflen) | |||
798 | 800 | ||
799 | case ACTION_KBD_PAGE_FLIP: | 801 | case ACTION_KBD_PAGE_FLIP: |
800 | { | 802 | { |
801 | #ifdef KBD_MORSE_INPUT | 803 | #ifdef HAVE_MORSE_INPUT |
802 | if (morse_mode) | 804 | if (morse_mode) |
803 | break; | 805 | break; |
804 | #endif | 806 | #endif |
@@ -810,7 +812,7 @@ int kbd_input(char* text, int buflen) | |||
810 | break; | 812 | break; |
811 | } | 813 | } |
812 | 814 | ||
813 | #ifdef KBD_MORSE_INPUT | 815 | #if defined(HAVE_MORSE_INPUT) && defined(KBD_TOGGLE_INPUT) |
814 | case ACTION_KBD_MORSE_INPUT: | 816 | case ACTION_KBD_MORSE_INPUT: |
815 | morse_mode = !morse_mode; | 817 | morse_mode = !morse_mode; |
816 | 818 | ||
@@ -822,7 +824,7 @@ int kbd_input(char* text, int buflen) | |||
822 | if (morse_mode) | 824 | if (morse_mode) |
823 | { | 825 | { |
824 | pm->old_main_y = pm->main_y; | 826 | pm->old_main_y = pm->main_y; |
825 | pm->main_y = sc->getheight() - pm->font_h; | 827 | pm->main_y = sc->getheight() - pm->font_h - BUTTONBAR_HEIGHT; |
826 | } | 828 | } |
827 | else | 829 | else |
828 | { | 830 | { |
@@ -831,7 +833,7 @@ int kbd_input(char* text, int buflen) | |||
831 | } | 833 | } |
832 | /* FIXME: We should talk something like Morse mode.. */ | 834 | /* FIXME: We should talk something like Morse mode.. */ |
833 | break; | 835 | break; |
834 | #endif /* KBD_MORSE_INPUT */ | 836 | #endif /* KBD_TOGGLE_INPUT */ |
835 | 837 | ||
836 | case ACTION_KBD_RIGHT: | 838 | case ACTION_KBD_RIGHT: |
837 | if (++pm->x >= pm->max_chars) | 839 | if (++pm->x >= pm->max_chars) |
@@ -864,7 +866,7 @@ int kbd_input(char* text, int buflen) | |||
864 | break; | 866 | break; |
865 | 867 | ||
866 | case ACTION_KBD_DOWN: | 868 | case ACTION_KBD_DOWN: |
867 | #ifdef KBD_MORSE_INPUT | 869 | #ifdef HAVE_MORSE_INPUT |
868 | #ifdef KBD_MODES | 870 | #ifdef KBD_MODES |
869 | if (morse_mode) | 871 | if (morse_mode) |
870 | { | 872 | { |
@@ -877,7 +879,7 @@ int kbd_input(char* text, int buflen) | |||
877 | if (morse_mode) | 879 | if (morse_mode) |
878 | break; | 880 | break; |
879 | #endif | 881 | #endif |
880 | #endif /* KBD_MORSE_INPUT */ | 882 | #endif /* HAVE_MORSE_INPUT */ |
881 | { | 883 | { |
882 | #ifdef KBD_MODES | 884 | #ifdef KBD_MODES |
883 | if (pm->line_edit) | 885 | if (pm->line_edit) |
@@ -907,7 +909,7 @@ int kbd_input(char* text, int buflen) | |||
907 | break; | 909 | break; |
908 | 910 | ||
909 | case ACTION_KBD_UP: | 911 | case ACTION_KBD_UP: |
910 | #ifdef KBD_MORSE_INPUT | 912 | #ifdef HAVE_MORSE_INPUT |
911 | #ifdef KBD_MODES | 913 | #ifdef KBD_MODES |
912 | if (morse_mode) | 914 | if (morse_mode) |
913 | { | 915 | { |
@@ -920,7 +922,7 @@ int kbd_input(char* text, int buflen) | |||
920 | if (morse_mode) | 922 | if (morse_mode) |
921 | break; | 923 | break; |
922 | #endif | 924 | #endif |
923 | #endif /* KBD_MORSE_INPUT */ | 925 | #endif /* HAVE_MORSE_INPUT */ |
924 | { | 926 | { |
925 | #ifdef KBD_MODES | 927 | #ifdef KBD_MODES |
926 | if (pm->line_edit) | 928 | if (pm->line_edit) |
@@ -955,7 +957,7 @@ int kbd_input(char* text, int buflen) | |||
955 | done = true; | 957 | done = true; |
956 | break; | 958 | break; |
957 | 959 | ||
958 | #ifdef KBD_MORSE_INPUT | 960 | #ifdef HAVE_MORSE_INPUT |
959 | case ACTION_KBD_MORSE_SELECT: | 961 | case ACTION_KBD_MORSE_SELECT: |
960 | if (morse_mode && morse_reading) | 962 | if (morse_mode && morse_reading) |
961 | { | 963 | { |
@@ -965,10 +967,10 @@ int kbd_input(char* text, int buflen) | |||
965 | } | 967 | } |
966 | 968 | ||
967 | break; | 969 | break; |
968 | #endif /* KBD_MORSE_INPUT */ | 970 | #endif /* HAVE_MORSE_INPUT */ |
969 | 971 | ||
970 | case ACTION_KBD_SELECT: | 972 | case ACTION_KBD_SELECT: |
971 | #ifdef KBD_MORSE_INPUT | 973 | #ifdef HAVE_MORSE_INPUT |
972 | #ifdef KBD_MODES | 974 | #ifdef KBD_MODES |
973 | if (morse_mode && !pm->line_edit) | 975 | if (morse_mode && !pm->line_edit) |
974 | #else | 976 | #else |
@@ -984,7 +986,7 @@ int kbd_input(char* text, int buflen) | |||
984 | } | 986 | } |
985 | break; | 987 | break; |
986 | } | 988 | } |
987 | #endif /* KBD_MORSE_INPUT */ | 989 | #endif /* HAVE_MORSE_INPUT */ |
988 | 990 | ||
989 | /* inserts the selected char */ | 991 | /* inserts the selected char */ |
990 | #ifdef KBD_MODES | 992 | #ifdef KBD_MODES |
@@ -1088,7 +1090,7 @@ int kbd_input(char* text, int buflen) | |||
1088 | /* speak revised text */ | 1090 | /* speak revised text */ |
1089 | break; | 1091 | break; |
1090 | 1092 | ||
1091 | #if !defined (KBD_MODES) || defined (KBD_CURSOR_KEYS) | 1093 | #ifdef KBD_CURSOR_KEYS |
1092 | case ACTION_KBD_BACKSPACE: | 1094 | case ACTION_KBD_BACKSPACE: |
1093 | if (pm->hangul) | 1095 | if (pm->hangul) |
1094 | { | 1096 | { |
@@ -1114,7 +1116,7 @@ int kbd_input(char* text, int buflen) | |||
1114 | if (global_settings.talk_menu) /* voice UI? */ | 1116 | if (global_settings.talk_menu) /* voice UI? */ |
1115 | talk_spell(text, false); /* speak revised text */ | 1117 | talk_spell(text, false); /* speak revised text */ |
1116 | break; | 1118 | break; |
1117 | #endif /* !defined (KBD_MODES) || defined (KBD_CURSOR_KEYS) */ | 1119 | #endif /* KBD_CURSOR_KEYS */ |
1118 | 1120 | ||
1119 | case ACTION_KBD_CURSOR_RIGHT: | 1121 | case ACTION_KBD_CURSOR_RIGHT: |
1120 | pm->hangul = false; | 1122 | pm->hangul = false; |
@@ -1145,7 +1147,7 @@ int kbd_input(char* text, int buflen) | |||
1145 | break; | 1147 | break; |
1146 | 1148 | ||
1147 | case BUTTON_NONE: | 1149 | case BUTTON_NONE: |
1148 | #ifdef KBD_MORSE_INPUT | 1150 | #ifdef HAVE_MORSE_INPUT |
1149 | if (morse_reading) | 1151 | if (morse_reading) |
1150 | { | 1152 | { |
1151 | int j; | 1153 | int j; |
@@ -1172,7 +1174,7 @@ int kbd_input(char* text, int buflen) | |||
1172 | if (global_settings.talk_menu) /* voice UI? */ | 1174 | if (global_settings.talk_menu) /* voice UI? */ |
1173 | talk_spell(text, false); /* speak revised text */ | 1175 | talk_spell(text, false); /* speak revised text */ |
1174 | } | 1176 | } |
1175 | #endif /* KBD_MORSE_INPUT */ | 1177 | #endif /* HAVE_MORSE_INPUT */ |
1176 | break; | 1178 | break; |
1177 | 1179 | ||
1178 | default: | 1180 | default: |
@@ -1198,6 +1200,14 @@ int kbd_input(char* text, int buflen) | |||
1198 | if (ret < 0) | 1200 | if (ret < 0) |
1199 | splash(HZ/2, ID2P(LANG_CANCEL)); | 1201 | splash(HZ/2, ID2P(LANG_CANCEL)); |
1200 | 1202 | ||
1203 | #ifdef HAVE_MORSE_INPUT | ||
1204 | if(global_settings.morse_input != morse_mode) | ||
1205 | { | ||
1206 | global_settings.morse_input = morse_mode; | ||
1207 | settings_save(); | ||
1208 | } | ||
1209 | #endif /* HAVE_MORSE_INPUT */ | ||
1210 | |||
1201 | FOR_NB_SCREENS(l) | 1211 | FOR_NB_SCREENS(l) |
1202 | screens[l].setfont(FONT_UI); | 1212 | screens[l].setfont(FONT_UI); |
1203 | viewportmanager_set_statusbar(oldbars); | 1213 | viewportmanager_set_statusbar(oldbars); |