Explicitly set the dialog's result code for TTS / Encoder windows. Fixes an issue...
[Rockbox.git] / apps / action.h
blobdeb3681dd24e7e6e017679c0d0a0762ad450a6c0
1 /***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
9 * Copyright (C) 2004 Brent Coutts
11 * All files in this archive are subject to the GNU General Public License.
12 * See the file COPYING in the source tree root for full license agreement.
14 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
15 * KIND, either express or implied.
17 ****************************************************************************/
18 #ifndef __ACTION_H__
19 #define __ACTION_H__
21 #include "stdbool.h"
22 #include "button.h"
24 #define TIMEOUT_BLOCK -1
25 #define TIMEOUT_NOBLOCK 0
27 #define CONTEXT_STOPSEARCHING 0xFFFFFFFF
28 #define CONTEXT_REMOTE 0x80000000 /* | this against another context to get remote buttons for that context */
29 #define CONTEXT_CUSTOM 0x40000000 /* | this against anything to get your context number */
30 #define CONTEXT_CUSTOM2 0x20000000 /* as above */
32 #define LAST_ITEM_IN_LIST { CONTEXT_STOPSEARCHING, BUTTON_NONE, BUTTON_NONE }
33 #define LAST_ITEM_IN_LIST__NEXTLIST(a) { a, BUTTON_NONE, BUTTON_NONE }
35 #ifndef HAS_BUTTON_HOLD
36 #define ALLOW_SOFTLOCK 0x10000000 /* will be stripped.. never needed except in calls to get_action() */
37 #else
38 #define ALLOW_SOFTLOCK 0
39 #endif
41 enum {
42 CONTEXT_STD = 0,
43 /* These CONTEXT_ values were here before me,
44 there values may have significance, so dont touch! */
45 CONTEXT_WPS = 1,
46 CONTEXT_TREE = 2,
47 CONTEXT_RECORD = 3,
48 CONTEXT_MAINMENU = 4, /* uses CONTEXT_TREE and ACTION_TREE_* */
49 CONTEXT_ID3DB = 5,
50 /* Add new contexts here, no need to explicitly define a value for them */
51 CONTEXT_LIST,
52 CONTEXT_SETTINGS, /* regular setting screens (and debug screens) */
53 /* bellow are setting screens which may need to redefine the standard
54 setting screen keys, targets should return the CONTEXT_SETTINGS
55 keymap unless they are not adequate for the screen
56 NOTE: uses ACTION_STD_[NEXT|PREV] so make sure they are there also
57 and (possibly) ACTION_SETTINGS_[INC|DEC] */
58 CONTEXT_SETTINGS_EQ,
59 CONTEXT_SETTINGS_COLOURCHOOSER,
60 CONTEXT_SETTINGS_TIME,
61 CONTEXT_SETTINGS_RECTRIGGER,
63 /* The following contexts should use ACTION_STD_[NEXT|PREV]
64 and (possibly) ACTION_SETTINGS_[INC|DEC]
65 Also add any extra actions they need */
66 CONTEXT_BOOKMARKSCREEN, /* uses ACTION_BMS_ defines */
67 CONTEXT_ALARMSCREEN, /* uses ACTION_AS_ defines */
68 CONTEXT_QUICKSCREEN, /* uses ACTION_QS_ defines below */
69 CONTEXT_PITCHSCREEN, /* uses ACTION_PS_ defines below */
71 CONTEXT_YESNOSCREEN, /*NOTE: make sure your target has this and ACTION_YESNO_ACCEPT */
72 CONTEXT_RECSCREEN,
73 CONTEXT_KEYBOARD,
74 CONTEXT_FM,
78 enum {
80 ACTION_NONE = BUTTON_NONE,
81 ACTION_UNKNOWN,
82 ACTION_REDRAW, /* returned if keys are locked and we splash()'ed */
83 ACTION_TOUCHPAD,
84 ACTION_TOUCHPAD_MODE, /* toggle the touchpad mode */
86 /* standard actions, use these first */
87 ACTION_STD_PREV,
88 ACTION_STD_PREVREPEAT,
89 ACTION_STD_NEXT,
90 ACTION_STD_NEXTREPEAT,
92 ACTION_STD_OK,
93 ACTION_STD_CANCEL,
94 ACTION_STD_CONTEXT,
95 ACTION_STD_MENU,
96 ACTION_STD_QUICKSCREEN,
97 ACTION_STD_KEYLOCK,
98 ACTION_STD_REC,
100 ACTION_F3, /* just so everything works again, possibly change me */
101 /* code context actions */
103 /* WPS codes */
104 ACTION_WPS_BROWSE,
105 ACTION_WPS_PLAY,
106 ACTION_WPS_SEEKBACK,
107 ACTION_WPS_SEEKFWD,
108 ACTION_WPS_STOPSEEK,
109 ACTION_WPS_SKIPNEXT,
110 ACTION_WPS_SKIPPREV,
111 ACTION_WPS_STOP,
112 ACTION_WPS_VOLDOWN,
113 ACTION_WPS_VOLUP,
114 ACTION_WPS_PITCHSCREEN,/* optional */
115 ACTION_WPS_ID3SCREEN,/* optional */
116 ACTION_WPS_CONTEXT,
117 ACTION_WPS_QUICKSCREEN,/* optional */
118 ACTION_WPS_MENU, /*this should be the same as ACTION_STD_MENU */
119 ACTION_WPS_REC,
120 #if 0
121 ACTION_WPSAB_SINGLE, /* This needs to be #defined in
122 the config-<target>.h to one of the ACTION_WPS_ actions
123 so it can be used */
124 #endif
125 ACTION_WPS_ABSETA_PREVDIR, /* these should be safe to put together seen as */
126 ACTION_WPS_ABSETB_NEXTDIR, /* you shouldnt want to change dir in ab-mode */
127 ACTION_WPS_ABRESET,
129 /* list and tree page up/down */
130 ACTION_LISTTREE_PGUP,/* optional */
131 ACTION_LISTTREE_PGDOWN,/* optional */
132 #ifdef HAVE_VOLUME_IN_LIST
133 ACTION_LIST_VOLUP,
134 ACTION_LIST_VOLDOWN,
135 #endif
137 /* tree */
138 ACTION_TREE_ROOT_INIT,
139 ACTION_TREE_PGLEFT,/* optional */
140 ACTION_TREE_PGRIGHT,/* optional */
141 ACTION_TREE_STOP,
142 ACTION_TREE_WPS,
144 /* radio */
145 ACTION_FM_MENU,
146 ACTION_FM_PRESET,
147 ACTION_FM_RECORD,
148 ACTION_FM_FREEZE,
149 ACTION_FM_STOP,
150 ACTION_FM_MODE,
151 ACTION_FM_EXIT,
152 ACTION_FM_PLAY,
153 ACTION_FM_RECORD_DBLPRE,
154 ACTION_FM_NEXT_PRESET,
155 ACTION_FM_PREV_PRESET,
157 /* recording screen */
158 ACTION_REC_LCD,
159 ACTION_REC_PAUSE,
160 ACTION_REC_NEWFILE,
161 ACTION_REC_F2,
162 ACTION_REC_F3,
164 /* main menu */
165 /* These are not strictly actions, but must be here
166 so they dont conflict with real actions in the menu code */
167 ACTION_REQUEST_MENUITEM,
168 ACTION_EXIT_MENUITEM,
169 ACTION_EXIT_AFTER_THIS_MENUITEM, /* if a menu returns this the menu will exit
170 once the subitem returns */
171 ACTION_ENTER_MENUITEM,
173 /* id3db */
175 /* list */
177 /* settings */
178 ACTION_SETTINGS_INC,
179 ACTION_SETTINGS_INCREPEAT,
180 ACTION_SETTINGS_INCBIGSTEP,
181 ACTION_SETTINGS_DEC,
182 ACTION_SETTINGS_DECREPEAT,
183 ACTION_SETTINGS_DECBIGSTEP,
184 ACTION_SETTINGS_RESET,
186 /* bookmark screen */
187 ACTION_BMS_DELETE,
189 /* alarm menu screen */
191 /* quickscreen */
192 ACTION_QS_LEFT,
193 ACTION_QS_RIGHT,
194 ACTION_QS_DOWN,
195 ACTION_QS_DOWNINV, /* why is this not called up?? :p */
197 /* pitchscreen */
198 /* obviously ignore if you dont have thise screen */
199 ACTION_PS_INC_SMALL,
200 ACTION_PS_INC_BIG,
201 ACTION_PS_DEC_SMALL,
202 ACTION_PS_DEC_BIG,
203 ACTION_PS_NUDGE_LEFT,
204 ACTION_PS_NUDGE_RIGHT,
205 ACTION_PS_NUDGE_LEFTOFF,
206 ACTION_PS_NUDGE_RIGHTOFF,
207 ACTION_PS_TOGGLE_MODE,
208 ACTION_PS_RESET,
209 ACTION_PS_EXIT, /* _STD_* isnt going to work here */
211 /* yesno screen */
212 ACTION_YESNO_ACCEPT,
214 /* keyboard screen */
215 ACTION_KBD_LEFT,
216 ACTION_KBD_RIGHT,
217 ACTION_KBD_CURSOR_LEFT,
218 ACTION_KBD_CURSOR_RIGHT,
219 ACTION_KBD_SELECT,
220 ACTION_KBD_SELECT_REM,
221 ACTION_KBD_PAGE_FLIP,
222 ACTION_KBD_DONE,
223 ACTION_KBD_ABORT,
224 ACTION_KBD_BACKSPACE,
225 ACTION_KBD_UP,
226 ACTION_KBD_DOWN,
227 ACTION_KBD_MORSE_INPUT,
228 ACTION_KBD_MORSE_SELECT,
231 LAST_ACTION_PLACEHOLDER, /* custom actions should be this + something */
234 struct button_mapping {
235 int action_code;
236 int button_code;
237 int pre_button_code;
239 /* use if you want to supply your own button mappings, PLUGINS ONLY */
240 /* get_context_map is a function which returns a button_mapping* depedning on the given context */
241 /* custom button_mappings may "chain" to inbuilt CONTEXT's */
242 int get_custom_action(int context,int timeout,
243 const struct button_mapping* (*get_context_map)(int));
244 /* use if one of the standard CONTEXT_ mappings will work (ALL the core should be using this! */
245 int get_action(int context, int timeout);
247 /* call this if you need to check for ACTION_STD_CANCEL only (i.e user abort! */
248 bool action_userabort(int timeout);
250 /* no other code should need this apart from action.c */
251 const struct button_mapping* get_context_mapping(int context);
252 #ifndef HAS_BUTTON_HOLD
253 bool is_keys_locked(void);
254 #endif
256 /* returns the status code variable from action.c for the button just pressed
257 If button != NULL it will be set to the actual button code */
258 #define ACTION_REMOTE 0x1 /* remote was pressed */
259 #define ACTION_REPEAT 0x2 /* action was repeated (NOT button) */
260 int get_action_statuscode(int *button);
262 /* returns the data value associated with the last action that is not
263 BUTTON_NONE or flagged with SYS_EVENT */
264 intptr_t get_action_data(void);
266 #ifdef HAVE_TOUCHPAD
267 /* return BUTTON_NONE on error
268 BUTTON_REPEAT if repeated press
269 BUTTON_REL if its a short press
270 BUTTON_TOUCHPAD otherwise
272 int action_get_touchpad_press(short *x, short *y);
273 #endif
275 #endif /* __ACTION_H__ */