2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
27 #include <dali/integration-api/debug.h>
32 const KEY DALI_KEY_INVALID = -1;
33 const KEY DALI_KEY_ESCAPE = 9;
34 const KEY DALI_KEY_BACKSPACE = 22;
35 const KEY DALI_KEY_CURSOR_UP = 111;
36 const KEY DALI_KEY_CURSOR_LEFT = 113;
37 const KEY DALI_KEY_CURSOR_RIGHT = 114;
38 const KEY DALI_KEY_CURSOR_DOWN = 116;
39 const KEY DALI_KEY_BACK = 166;
40 const KEY DALI_KEY_CAMERA = 167;
41 const KEY DALI_KEY_CONFIG = 168;
42 const KEY DALI_KEY_POWER = 169;
43 const KEY DALI_KEY_PAUSE = 170;
44 const KEY DALI_KEY_CANCEL = 171;
45 const KEY DALI_KEY_PLAY_CD = 172;
46 const KEY DALI_KEY_STOP_CD = 173;
47 const KEY DALI_KEY_PAUSE_CD = 174;
48 const KEY DALI_KEY_NEXT_SONG = 175;
49 const KEY DALI_KEY_PREVIOUS_SONG = 176;
50 const KEY DALI_KEY_REWIND = 177;
51 const KEY DALI_KEY_FASTFORWARD = 178;
52 const KEY DALI_KEY_MEDIA = 179;
53 const KEY DALI_KEY_PLAY_PAUSE = 180;
54 const KEY DALI_KEY_MUTE = 181;
55 const KEY DALI_KEY_SEND = 182;
56 const KEY DALI_KEY_SELECT = 183;
57 const KEY DALI_KEY_END = DALI_KEY_BACK;
58 const KEY DALI_KEY_MENU = DALI_KEY_SEND;
59 const KEY DALI_KEY_HOME = DALI_KEY_SELECT;
60 const KEY DALI_KEY_HOMEPAGE = 187;
61 const KEY DALI_KEY_WEBPAGE = 188;
62 const KEY DALI_KEY_MAIL = 189;
63 const KEY DALI_KEY_SCREENSAVER = 190;
64 const KEY DALI_KEY_BRIGHTNESS_UP = 191;
65 const KEY DALI_KEY_BRIGHTNESS_DOWN = 192;
66 const KEY DALI_KEY_SOFT_KBD = 193;
67 const KEY DALI_KEY_QUICK_PANEL = 194;
68 const KEY DALI_KEY_TASK_SWITCH = 195;
69 const KEY DALI_KEY_APPS = 196;
70 const KEY DALI_KEY_SEARCH = 197;
71 const KEY DALI_KEY_VOICE = 198;
72 const KEY DALI_KEY_LANGUAGE = 199;
73 const KEY DALI_KEY_VOLUME_UP = 200;
74 const KEY DALI_KEY_VOLUME_DOWN = 201;
90 const char* keyName; ///< X string representation
91 const int daliKeyCode; ///< Dali Enum Representation
92 const bool deviceButton; ///< Whether the key is from a button on the device
95 // matches a DALI_KEY enum, to a X key name
96 KeyLookup KeyLookupTable[]=
98 // more than one key name can be assigned to a single dali-key code
99 // e.g. Menu and KEY_MENU("FS86KeyMenu") are both assigned to DALI_KEY_MENU
101 { "Escape", DALI_KEY_ESCAPE, false }, // item not defined in utilX
102 { "Menu", DALI_KEY_MENU, false }, // item not defined in utilX
104 // Now the key names are used as literal string not defined symbols,
105 // since these definition in utilX.h is deprecated and we're guided not to use them
106 //{ "XF86Camera", DALI_KEY_CAMERA, false },
107 //{ "XF86Camera_Full", DALI_KEY_CONFIG, false },
108 { "XF86PowerOff", DALI_KEY_POWER, true },
109 { "XF86Standby", DALI_KEY_PAUSE, false },
110 { "Cancel", DALI_KEY_CANCEL, false },
111 //{ "XF86AudioPlay", DALI_KEY_PLAY_CD, false },
112 //{ "XF86AudioStop", DALI_KEY_STOP_CD, false },
113 //{ "XF86AudioPause", DALI_KEY_PAUSE_CD, false },
114 //{ "XF86AudioNext", DALI_KEY_NEXT_SONG, false },
115 //{ "XF86AudioPrev", DALI_KEY_PREVIOUS_SONG, false },
116 //{ "XF86AudioRewind", DALI_KEY_REWIND, false },
117 //{ "XF86AudioForward", DALI_KEY_FASTFORWARD, false },
118 //{ "XF86AudioMedia", DALI_KEY_MEDIA, false },
119 //{ "XF86AudioPlayPause", DALI_KEY_PLAY_PAUSE, false },
120 { "XF86AudioMute", DALI_KEY_MUTE, false },
121 //{ "XF86Send", DALI_KEY_SEND, true },
122 //{ "XF86Phone", DALI_KEY_SELECT, true },
123 //{ "XF86Stop", DALI_KEY_END, true },
124 { "XF86Menu", DALI_KEY_MENU, true },
125 { "XF86Home", DALI_KEY_HOME, true },
126 { "XF86Back", DALI_KEY_BACK, true },
127 //{ "XF86HomePage", DALI_KEY_HOMEPAGE, false },
128 //{ "XF86WWW", DALI_KEY_WEBPAGE, false },
129 //{ "XF86Mail", DALI_KEY_MAIL, false },
130 //{ "XF86ScreenSaver", DALI_KEY_SCREENSAVER, false },
131 //{ "XF86MonBrightnessUp", DALI_KEY_BRIGHTNESS_UP, false },
132 //{ "XF86MonBrightnessDown", DALI_KEY_BRIGHTNESS_DOWN, false },
133 //{ "XF86SoftKBD", DALI_KEY_SOFT_KBD, false },
134 //{ "XF86QuickPanel", DALI_KEY_QUICK_PANEL, false },
135 //{ "XF86TaskPane", DALI_KEY_TASK_SWITCH, false },
136 //{ "XF86Apps", DALI_KEY_APPS, false },
137 { "XF86Search", DALI_KEY_SEARCH, false },
138 //{ "XF86Voice", DALI_KEY_VOICE, false },
139 //{ "Hangul", DALI_KEY_LANGUAGE, false },
140 { "XF86AudioRaiseVolume", DALI_KEY_VOLUME_UP, true },
141 { "XF86AudioLowerVolume", DALI_KEY_VOLUME_DOWN, true },
144 const std::size_t KEY_LOOKUP_COUNT = (sizeof( KeyLookupTable))/ (sizeof(KeyLookup));
154 for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
156 const KeyLookup& keyLookup( KeyLookupTable[i] );
157 mLookup[ keyLookup.keyName ] = DaliKeyType( keyLookup.daliKeyCode, keyLookup.deviceButton );
161 int GetDaliKeyEnum( const char* keyName ) const
163 Lookup::const_iterator i = mLookup.find( keyName );
164 if( i == mLookup.end() )
170 return (*i).second.first;
174 const char* GetKeyName( int daliKeyCode ) const
176 for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
178 const KeyLookup& keyLookup( KeyLookupTable[i] );
179 if( keyLookup.daliKeyCode == daliKeyCode )
181 return keyLookup.keyName;
187 bool IsDeviceButton( const char* keyName ) const
189 Lookup::const_iterator i = mLookup.find( keyName );
190 if ( i != mLookup.end() )
192 return (*i).second.second;
200 * compare function, to compare string by pointer
202 static bool cmpString( const char* a, const char* b)
204 return strcmp(a, b) < 0;
207 typedef std::pair< int, bool > DaliKeyType;
208 typedef std::map<const char* /* key name */, DaliKeyType /* key code */, bool(*) ( char const* a, char const* b) > Lookup;
212 const KeyMap globalKeyLookup;
214 } // un-named name space
216 bool IsKey( const Dali::KeyEvent& keyEvent, Dali::KEY daliKey)
218 int key = globalKeyLookup.GetDaliKeyEnum( keyEvent.keyPressedName.c_str() );
219 return daliKey == key;
222 bool IsDeviceButton( const char* keyName )
224 return globalKeyLookup.IsDeviceButton( keyName );
227 const char* GetKeyName( Dali::KEY daliKey )
229 return globalKeyLookup.GetKeyName( daliKey );
232 } // namespace KeyLookup
234 } // namespace Adaptor
236 } // namespace Internal