1 /* Copyright (C) 2007-2008 The Android Open Source Project 2 ** 3 ** This software is licensed under the terms of the GNU General Public 4 ** License version 2, as published by the Free Software Foundation, and 5 ** may be copied, distributed, and modified under those terms. 6 ** 7 ** This program is distributed in the hope that it will be useful, 8 ** but WITHOUT ANY WARRANTY; without even the implied warranty of 9 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 ** GNU General Public License for more details. 11 */ 12 #ifndef _ANDROID_SKIN_KEYSET_H_ 13 #define _ANDROID_SKIN_KEYSET_H_ 14 15 #include "android/config.h" 16 17 /* A SkinKeySet maps keystrokes to specific commands. we have a few hard-coded 18 * keysets in the emulator binary, and the user can define its own if he wants 19 * to... 20 */ 21 typedef struct SkinKeyset SkinKeyset; 22 23 #define SKIN_KEY_COMMAND_LIST \ 24 _SKIN_KEY_COMMAND(NONE,"no key") \ 25 _SKIN_KEY_COMMAND(BUTTON_HOME,"Home button") \ 26 _SKIN_KEY_COMMAND(BUTTON_MENU,"Menu (Soft-Left) button") \ 27 _SKIN_KEY_COMMAND(BUTTON_STAR,"Star (Soft-Right) button") \ 28 _SKIN_KEY_COMMAND(BUTTON_BACK,"Back button") \ 29 _SKIN_KEY_COMMAND(BUTTON_CALL,"Call/Dial button") \ 30 _SKIN_KEY_COMMAND(BUTTON_HANGUP,"Hangup/EndCall button") \ 31 _SKIN_KEY_COMMAND(BUTTON_POWER,"Power button") \ 32 _SKIN_KEY_COMMAND(BUTTON_SEARCH,"Search button") \ 33 _SKIN_KEY_COMMAND(BUTTON_VOLUME_UP,"Volume up button") \ 34 _SKIN_KEY_COMMAND(BUTTON_VOLUME_DOWN,"Volume down button") \ 35 _SKIN_KEY_COMMAND(BUTTON_CAMERA,"Camera button") \ 36 _SKIN_KEY_COMMAND(CHANGE_LAYOUT_PREV,"Switch to previous layout") \ 37 _SKIN_KEY_COMMAND(CHANGE_LAYOUT_NEXT,"Switch to next layout") \ 38 _SKIN_KEY_COMMAND(TOGGLE_NETWORK,"Toggle cell network on/off") \ 39 _SKIN_KEY_COMMAND(TOGGLE_TRACING,"Toggle code profiling") \ 40 _SKIN_KEY_COMMAND(TOGGLE_FULLSCREEN,"Toggle fullscreen mode") \ 41 _SKIN_KEY_COMMAND(TOGGLE_TRACKBALL,"Toggle trackball mode") \ 42 _SKIN_KEY_COMMAND(SHOW_TRACKBALL,"Show trackball") \ 43 _SKIN_KEY_COMMAND(BUTTON_DPAD_CENTER,"DPad center") \ 44 _SKIN_KEY_COMMAND(BUTTON_DPAD_LEFT,"DPad left") \ 45 _SKIN_KEY_COMMAND(BUTTON_DPAD_RIGHT,"DPad right") \ 46 _SKIN_KEY_COMMAND(BUTTON_DPAD_UP,"DPad up") \ 47 _SKIN_KEY_COMMAND(BUTTON_DPAD_DOWN,"DPad down") \ 48 _SKIN_KEY_COMMAND(ONION_ALPHA_UP,"Increase onion alpha") \ 49 _SKIN_KEY_COMMAND(ONION_ALPHA_DOWN,"Decrease onion alpha") \ 50 _SKIN_KEY_COMMAND(BUTTON_TV,"TV button") \ 51 _SKIN_KEY_COMMAND(BUTTON_EPG,"EPG button") \ 52 _SKIN_KEY_COMMAND(BUTTON_DVR,"DVR button") \ 53 _SKIN_KEY_COMMAND(BUTTON_PREV,"Previous button") \ 54 _SKIN_KEY_COMMAND(BUTTON_NEXT,"Next button") \ 55 _SKIN_KEY_COMMAND(BUTTON_PLAY,"Play button") \ 56 _SKIN_KEY_COMMAND(BUTTON_PAUSE,"Pause button") \ 57 _SKIN_KEY_COMMAND(BUTTON_STOP,"Stop button") \ 58 _SKIN_KEY_COMMAND(BUTTON_REWIND,"Rewind button") \ 59 _SKIN_KEY_COMMAND(BUTTON_FFWD,"Fast forward button") \ 60 _SKIN_KEY_COMMAND(BUTTON_BOOKMARKS,"Bookmarks button") \ 61 _SKIN_KEY_COMMAND(BUTTON_WINDOW,"Window button") \ 62 _SKIN_KEY_COMMAND(BUTTON_CHANNELUP,"Channel up button") \ 63 _SKIN_KEY_COMMAND(BUTTON_CHANNELDOWN,"Channel down button") \ 64 65 66 /* the list of commands in the emulator */ 67 #define _SKIN_KEY_COMMAND(x,y) SKIN_KEY_COMMAND_##x, 68 typedef enum { 69 SKIN_KEY_COMMAND_LIST 70 SKIN_KEY_COMMAND_MAX // do not remove 71 } SkinKeyCommand; 72 #undef _SKIN_KEY_COMMAND 73 74 /* retrieve the textual name of a given command, this is the command name without 75 * the "SKIN_KEY_COMMAND_" prefix. returns NULL if command is NONE or invalid 76 * the result is a static constant string that must not be freed 77 */ 78 extern const char* skin_key_command_to_str ( SkinKeyCommand command ); 79 80 /* convert a string into a SkinKeyCommand. returns SKIN_COMMAND_NONE if the string 81 * is unknown 82 */ 83 extern SkinKeyCommand skin_key_command_from_str( const char* str, int len ); 84 85 /* returns a short human-friendly description of the command */ 86 extern const char* skin_key_command_description( SkinKeyCommand cmd ); 87 88 /* returns the number of keysym string descriptors */ 89 extern int skin_keysym_str_count( void ); 90 91 /* return the n-th keysym string descriptor */ 92 extern const char* skin_keysym_str( int index ); 93 94 /* convert a (sym,mod) pair into a descriptive string. e.g. "Ctrl-K" or "Alt-A", etc.. 95 * result is a static string that is overwritten on each call 96 */ 97 extern const char* skin_key_symmod_to_str ( int sym, int mod ); 98 99 /* convert a key binding description into a (sym,mod) pair. returns 0 on success, -1 100 * if the string cannot be parsed. 101 */ 102 extern int skin_key_symmod_from_str ( const char* str, int *psym, int *pmod ); 103 104 /* create a new keyset from a configuration tree node */ 105 extern SkinKeyset* skin_keyset_new ( AConfig* root ); 106 extern SkinKeyset* skin_keyset_new_from_text( const char* text ); 107 108 /* destroy a given keyset */ 109 extern void skin_keyset_free( SkinKeyset* kset ); 110 111 /* maximum number of key bindings per command. one command can be bound to several 112 * key bindings for convenience 113 */ 114 #define SKIN_KEY_COMMAND_MAX_BINDINGS 3 115 116 /* a structure that describe a key binding */ 117 typedef struct { 118 int sym; // really a SDL key symbol 119 int mod; // really a SDL key modifier 120 } SkinKeyBinding; 121 122 /* return the number of keyboard bindings for a given command. results are placed in the 'bindings' array 123 * which must have at least SKIN_KEY_MAX_BINDINGS items */ 124 extern int skin_keyset_get_bindings( SkinKeyset* kset, 125 SkinKeyCommand command, 126 SkinKeyBinding* bindings ); 127 128 /* return the command for a given keypress - SKIN_KEY_COMMAND_NONE is returned if unknown */ 129 extern SkinKeyCommand skin_keyset_get_command( SkinKeyset* kset, int sym, int mod ); 130 131 extern const char* skin_keyset_get_default( void ); 132 133 /* in android_main.c */ 134 extern SkinKeyset* android_keyset; 135 136 #endif /* _ANDROID_SKIN_KEYSET_H_ */ 137