Revert "[3.0] Change key names according to changes of utilX"
[platform/core/uifw/dali-adaptor.git] / adaptors / tv / tv-key-impl.cpp
1 /*
2  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  *
16  */
17
18 // CLASS HEADER
19 #include <key-impl.h>
20
21 // EXTERNAL INCLUDES
22 #include <utilX.h>
23 #include <map>
24 #include <string.h>
25 #include <iostream>
26
27 #include <dali/integration-api/debug.h>
28
29
30 namespace Dali
31 {
32
33 const KEY DALI_KEY_INVALID          = -1;
34 const KEY DALI_KEY_ESCAPE           = 9;
35 const KEY DALI_KEY_BACKSPACE        = 22;
36 const KEY DALI_KEY_CURSOR_UP        = 111;
37 const KEY DALI_KEY_CURSOR_LEFT      = 113;
38 const KEY DALI_KEY_CURSOR_RIGHT     = 114;
39 const KEY DALI_KEY_CURSOR_DOWN      = 116;
40 const KEY DALI_KEY_BACK             = 166;
41 const KEY DALI_KEY_CAMERA           = 167;
42 const KEY DALI_KEY_CONFIG           = 168;
43 const KEY DALI_KEY_POWER            = 169;
44 const KEY DALI_KEY_PAUSE            = 170;
45 const KEY DALI_KEY_CANCEL           = 171;
46 const KEY DALI_KEY_PLAY_CD          = 172;
47 const KEY DALI_KEY_STOP_CD          = 173;
48 const KEY DALI_KEY_PAUSE_CD         = 174;
49 const KEY DALI_KEY_NEXT_SONG        = 175;
50 const KEY DALI_KEY_PREVIOUS_SONG    = 176;
51 const KEY DALI_KEY_REWIND           = 177;
52 const KEY DALI_KEY_FASTFORWARD      = 178;
53 const KEY DALI_KEY_MEDIA            = 179;
54 const KEY DALI_KEY_PLAY_PAUSE       = 180;
55 const KEY DALI_KEY_MUTE             = 181;
56 const KEY DALI_KEY_SEND             = 182;
57 const KEY DALI_KEY_SELECT           = 183;
58 const KEY DALI_KEY_END              = DALI_KEY_BACK;
59 const KEY DALI_KEY_MENU             = DALI_KEY_SEND;
60 const KEY DALI_KEY_HOME             = DALI_KEY_SELECT;
61 const KEY DALI_KEY_HOMEPAGE         = 187;
62 const KEY DALI_KEY_WEBPAGE          = 188;
63 const KEY DALI_KEY_MAIL             = 189;
64 const KEY DALI_KEY_SCREENSAVER      = 190;
65 const KEY DALI_KEY_BRIGHTNESS_UP    = 191;
66 const KEY DALI_KEY_BRIGHTNESS_DOWN  = 192;
67 const KEY DALI_KEY_SOFT_KBD         = 193;
68 const KEY DALI_KEY_QUICK_PANEL      = 194;
69 const KEY DALI_KEY_TASK_SWITCH      = 195;
70 const KEY DALI_KEY_APPS             = 196;
71 const KEY DALI_KEY_SEARCH           = 197;
72 const KEY DALI_KEY_VOICE            = 198;
73 const KEY DALI_KEY_LANGUAGE         = 199;
74 const KEY DALI_KEY_VOLUME_UP        = 200;
75 const KEY DALI_KEY_VOLUME_DOWN      = 201;
76
77 namespace Internal
78 {
79
80 namespace Adaptor
81 {
82
83 namespace KeyLookup
84 {
85
86 namespace
87 {
88
89 struct KeyLookup
90 {
91   const char* keyName;      ///< X string representation
92   const int   daliKeyCode;  ///< Dali Enum Representation
93   const bool  deviceButton; ///< Whether the key is from a button on the device
94 };
95
96 // matches a DALI_KEY enum, to a X key name
97 KeyLookup KeyLookupTable[]=
98 {
99   // more than one key name can be assigned to a single dali-key code
100   // e.g. Menu and KEY_MENU("FS86KeyMenu") are both assigned to  DALI_KEY_MENU
101
102   { "Escape",               DALI_KEY_ESCAPE,          false },  // item not defined in utilX
103   { "Menu",                 DALI_KEY_MENU,            false },  // item not defined in utilX
104 //  { KEY_CAMERA,             DALI_KEY_CAMERA,          false },
105 //  { KEY_CONFIG,             DALI_KEY_CONFIG,          false },
106   { KEY_POWER,              DALI_KEY_POWER,           true  },
107   { KEY_PAUSE,              DALI_KEY_PAUSE,           false },
108   { KEY_CANCEL,             DALI_KEY_CANCEL,          false },
109 //  { KEY_PLAYCD,             DALI_KEY_PLAY_CD,         false },
110 //  { KEY_STOPCD,             DALI_KEY_STOP_CD,         false },
111 //  { KEY_PAUSECD,            DALI_KEY_PAUSE_CD,        false },
112 //  { KEY_NEXTSONG,           DALI_KEY_NEXT_SONG,       false },
113 //  { KEY_PREVIOUSSONG,       DALI_KEY_PREVIOUS_SONG,   false },
114 //  { KEY_REWIND,             DALI_KEY_REWIND,          false },
115 //  { KEY_FASTFORWARD,        DALI_KEY_FASTFORWARD,     false },
116 //  { KEY_MEDIA,              DALI_KEY_MEDIA,           false },
117 //  { KEY_PLAYPAUSE,          DALI_KEY_PLAY_PAUSE,      false },
118   { KEY_MUTE,               DALI_KEY_MUTE,            false },
119 //  { KEY_SEND,               DALI_KEY_SEND,            true  },
120 //  { KEY_SELECT,             DALI_KEY_SELECT,          true  },
121 //  { KEY_END,                DALI_KEY_END,             true  },
122   { KEY_MENU,               DALI_KEY_MENU,            true  },
123   { KEY_HOME,               DALI_KEY_HOME,            true  },
124   { KEY_BACK,               DALI_KEY_BACK,            true  },
125 //  { KEY_HOMEPAGE,           DALI_KEY_HOMEPAGE,        false },
126 //  { KEY_WEBPAGE,            DALI_KEY_WEBPAGE,         false },
127 //  { KEY_MAIL,               DALI_KEY_MAIL,            false },
128 //  { KEY_SCREENSAVER,        DALI_KEY_SCREENSAVER,     false },
129 //  { KEY_BRIGHTNESSUP,       DALI_KEY_BRIGHTNESS_UP,   false },
130 //  { KEY_BRIGHTNESSDOWN,     DALI_KEY_BRIGHTNESS_DOWN, false },
131 //  { KEY_SOFTKBD,            DALI_KEY_SOFT_KBD,        false },
132 //  { KEY_QUICKPANEL,         DALI_KEY_QUICK_PANEL,     false },
133 //  { KEY_TASKSWITCH,         DALI_KEY_TASK_SWITCH,     false },
134 //  { KEY_APPS,               DALI_KEY_APPS,            false },
135   { KEY_SEARCH,             DALI_KEY_SEARCH,          false },
136 //  { KEY_VOICE,              DALI_KEY_VOICE,           false },
137 //  { KEY_LANGUAGE,           DALI_KEY_LANGUAGE,        false },
138   { KEY_VOLUMEUP,           DALI_KEY_VOLUME_UP,       true  },
139   { KEY_VOLUMEDOWN,         DALI_KEY_VOLUME_DOWN,     true  },
140 };
141
142 const std::size_t KEY_LOOKUP_COUNT = (sizeof( KeyLookupTable))/ (sizeof(KeyLookup));
143
144 class KeyMap
145 {
146   public:
147
148   KeyMap():
149   mLookup( cmpString )
150   {
151     // create the lookup
152     for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
153     {
154       const KeyLookup&  keyLookup( KeyLookupTable[i] );
155       mLookup[ keyLookup.keyName  ] = DaliKeyType( keyLookup.daliKeyCode, keyLookup.deviceButton );
156     }
157   }
158
159   int GetDaliKeyEnum( const char* keyName ) const
160   {
161     Lookup::const_iterator i = mLookup.find( keyName );
162     if( i == mLookup.end() )
163     {
164       return -1;
165     }
166     else
167     {
168       return (*i).second.first;
169     }
170   }
171
172   const char* GetKeyName( int daliKeyCode ) const
173   {
174     for( size_t i = 0; i < KEY_LOOKUP_COUNT ; ++i )
175     {
176       const KeyLookup& keyLookup( KeyLookupTable[i] );
177       if( keyLookup.daliKeyCode == daliKeyCode )
178       {
179         return keyLookup.keyName;
180       }
181     }
182     return "";
183   }
184
185   bool IsDeviceButton( const char* keyName ) const
186   {
187     Lookup::const_iterator i = mLookup.find( keyName );
188     if ( i != mLookup.end() )
189     {
190       return (*i).second.second;
191     }
192     return false;
193   }
194
195   private:
196
197   /**
198    * compare function, to compare string by pointer
199    */
200   static bool cmpString( const char* a, const char* b)
201   {
202     return strcmp(a, b) < 0;
203   }
204
205   typedef std::pair< int, bool > DaliKeyType;
206   typedef std::map<const char* /* key name */, DaliKeyType /* key code */, bool(*) ( char const* a, char const* b) > Lookup;
207   Lookup mLookup;
208
209 };
210 const KeyMap globalKeyLookup;
211
212 } // un-named name space
213
214 bool IsKey( const Dali::KeyEvent& keyEvent, Dali::KEY daliKey)
215 {
216   int key = globalKeyLookup.GetDaliKeyEnum( keyEvent.keyPressedName.c_str() );
217   return daliKey == key;
218 }
219
220 bool IsDeviceButton( const char* keyName )
221 {
222   return globalKeyLookup.IsDeviceButton( keyName );
223 }
224
225 const char* GetKeyName( Dali::KEY daliKey )
226 {
227   return globalKeyLookup.GetKeyName( daliKey );
228 }
229
230 } // namespace KeyLookup
231
232 } // namespace Adaptor
233
234 } // namespace Internal
235
236 } // namespace Dali