Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUi_UiKeyEvent.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://floralicense.org/license/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 /**
18  * @file        FUi_UiKeyEvent.h
19  * @brief       This is the header file for the _UiKeyEvent class.
20  *
21  * This header file contains the declarations of the %_UiKeyEvent class.
22  */
23
24 #ifndef _FUI_INTERNAL_UI_KEY_EVENT_H_
25 #define _FUI_INTERNAL_UI_KEY_EVENT_H_
26
27 #include <FUiIKeyEventListener.h>
28 #include "FUi_UiEvent.h"
29
30 namespace Tizen {namespace Ui
31 {
32
33 enum _KeyCode
34 {
35         /**
36          *      Invalid key
37          */
38         _KEY_INVALID = KEY_INVALID,
39
40         /**
41          *      Up side key
42          */
43         _KEY_SIDE_UP = KEY_SIDE_UP,
44
45         /**
46          *      Down side key
47          */
48         _KEY_SIDE_DOWN = KEY_SIDE_DOWN,
49
50         /**
51          *      Ok key
52          */
53         _KEY_OK = KEY_OK,
54
55         /**
56          *      Clear key
57          */
58         _KEY_CLEAR = KEY_CLEAR,
59
60         /**
61          *      Camera key
62          */
63         _KEY_CAMERA = KEY_CAMERA,
64
65         /**
66         *       Task switcher key
67         */
68         _KEY_SWITCH = KEY_SWITCH,
69
70         /**
71         *       0 key
72         */
73         _KEY_0 = KEY_0,
74
75         /**
76         *       1 key
77         */
78         _KEY_1 = KEY_1,
79
80         /**
81         *       2 key
82         */
83         _KEY_2 = KEY_2,
84
85         /**
86         *       3 key
87         */
88         _KEY_3 = KEY_3,
89
90         /**
91         *       4 key
92         */
93         _KEY_4 = KEY_4,
94
95         /**
96         *       5 key
97         */
98         _KEY_5 = KEY_5,
99
100         /**
101         *       6 key
102         */
103         _KEY_6 = KEY_6,
104
105         /**
106         *       7 key
107         */
108         _KEY_7 = KEY_7,
109
110         /**
111         *       8 key
112         */
113         _KEY_8 = KEY_8,
114
115         /**
116         *       9 key
117         */
118         _KEY_9 = KEY_9,
119
120         /**
121         *       Asterisk key
122         */
123         _KEY_ASTERISK = KEY_ASTERISK,
124
125         /**
126         *       Sharp key
127         */
128         _KEY_SHARP = KEY_SHARP,
129
130         /**
131         *       Left directional key
132         */
133         _KEY_LEFT = KEY_LEFT,
134
135         /**
136         *       Up directional key
137         */
138         _KEY_UP = KEY_UP,
139
140         /**
141         *       Down directional key
142         */
143         _KEY_DOWN = KEY_DOWN,
144
145         /**
146         *       Right directional key
147         */
148         _KEY_RIGHT = KEY_RIGHT,
149
150         /*
151         *       Placeholder
152         */
153         _KEY_MAX = KEY_MAX,
154
155         /**
156          *      A key
157          */
158         _KEY_A = KEY_A,
159
160         /**
161          *      B key
162          */
163         _KEY_B = KEY_B,
164
165         /**
166          *      C key
167          */
168         _KEY_C = KEY_C,
169
170         /**
171          *      D key
172          */
173         _KEY_D = KEY_D,
174
175         /**
176          *      E key
177          */
178         _KEY_E = KEY_E,
179
180         /**
181          *      F key
182          */
183         _KEY_F = KEY_F,
184
185         /**
186          *      G key
187          */
188         _KEY_G = KEY_G,
189
190         /**
191          *      H key
192          */
193         _KEY_H = KEY_H,
194
195         /**
196          *      I key
197          */
198         _KEY_I = KEY_I,
199
200         /**
201          *      J key
202          */
203         _KEY_J = KEY_J,
204
205         /**
206          *      K key
207          */
208         _KEY_K = KEY_K,
209
210         /**
211          *      L key
212          */
213         _KEY_L = KEY_L,
214
215         /**
216          *      M key
217          */
218         _KEY_M = KEY_M,
219
220         /**
221          *      N key
222          */
223         _KEY_N = KEY_N,
224
225         /**
226          *      O key
227          */
228         _KEY_O = KEY_O,
229
230         /**
231          *      P key
232          */
233         _KEY_P = KEY_P,
234
235         /**
236          *      Q key
237          */
238         _KEY_Q = KEY_Q,
239
240         /**
241          *      R key
242          */
243         _KEY_R = KEY_R,
244
245         /**
246          *      S key
247          */
248         _KEY_S = KEY_S,
249
250         /**
251          *      T key
252          */
253         _KEY_T = KEY_T,
254
255         /**
256          *      U key
257          */
258         _KEY_U = KEY_U,
259
260         /**
261          *      V key
262          */
263         _KEY_V = KEY_V,
264
265         /**
266          *      W key
267          */
268         _KEY_W = KEY_W,
269
270         /**
271          *      Y key
272          */
273         _KEY_Y = KEY_Y,
274
275         /**
276          *      X key
277          */
278         _KEY_X = KEY_X,
279
280         /**
281          *      Z key
282          */
283         _KEY_Z = KEY_Z,
284
285         /**
286          *      Backspace key
287          */
288         _KEY_BACKSPACE = KEY_BACKSPACE,
289
290         /**
291          *      Comma key
292          */
293         _KEY_COMMA = KEY_COMMA,
294
295         /**
296          *      Enter key
297          */
298         _KEY_ENTER = KEY_ENTER,
299
300         /**
301          *      Caps Lock key
302          */
303         _KEY_CAPSLOCK = KEY_CAPSLOCK,
304
305         /**
306          *      Question key
307          */
308         _KEY_QUESTION = KEY_QUESTION,
309
310         /**
311          *      Alt key
312          */
313         _KEY_ALT = KEY_ALT,
314
315         /**
316          *      Language Symbol key
317          */
318         _KEY_SYM = KEY_SYM,
319
320         /**
321          *      Language Setting key
322          */
323         _KEY_SETTING = KEY_SETTING,
324
325         /**
326          *      Space key
327          */
328         _KEY_SPACE = KEY_SPACE,
329
330         /**
331          *      Dot key
332          */
333         _KEY_DOT = KEY_DOT,
334
335         /**
336          *      Function key
337          */
338         _KEY_FN = KEY_FN,
339
340         /**
341          *      Camera half shutter key
342          */
343         _KEY_CAMERA_HALF_SHUTTER = KEY_CAMERA_HALF_SHUTTER,
344
345         /**
346          *      Character symbol 1 key
347          */
348         _KEY_CHAR_SYM_1 = KEY_CHAR_SYM_1,
349
350         /**
351          *      Character symbol 2 key
352          */
353         _KEY_CHAR_SYM_2 = KEY_CHAR_SYM_2,
354
355         /**
356          *      Character symbol 3 key
357          */
358         _KEY_CHAR_SYM_3 = KEY_CHAR_SYM_3,
359
360         /**
361          *      Character symbol 4 key
362          */
363         _KEY_CHAR_SYM_4 = KEY_CHAR_SYM_4,
364
365         /**
366          *      Character symbol 5 key
367          */
368         _KEY_CHAR_SYM_5 = KEY_CHAR_SYM_5,
369
370         /**
371          *      Character symbol 6 key
372          */
373         _KEY_CHAR_SYM_6 = KEY_CHAR_SYM_6,
374
375         /**
376          *      Character symbol 7 key
377          */
378         _KEY_CHAR_SYM_7 = KEY_CHAR_SYM_7,
379
380         /**
381          *      Character symbol 8 key
382          */
383         _KEY_CHAR_SYM_8 = KEY_CHAR_SYM_8,
384
385         /**
386          *      Character symbol 9 key
387          */
388         _KEY_CHAR_SYM_9 = KEY_CHAR_SYM_9,
389
390         /**
391          *      Character symbol A key
392          */
393         _KEY_CHAR_SYM_A = KEY_CHAR_SYM_A,
394
395         /**
396          *      Character symbol B key
397          */
398         _KEY_CHAR_SYM_B = KEY_CHAR_SYM_B,
399
400         /**
401          *      Character symbol C key
402          */
403         _KEY_CHAR_SYM_C = KEY_CHAR_SYM_C,
404
405         /**
406          *      Character symbol D key
407          */
408         _KEY_CHAR_SYM_D = KEY_CHAR_SYM_D,
409
410         /**
411          *      Character symbol E key.
412          */
413         _KEY_CHAR_SYM_E = KEY_CHAR_SYM_E,
414
415         /**
416          *      Character symbol F key.
417          */
418         _KEY_CHAR_SYM_F = KEY_CHAR_SYM_F,
419
420         /**
421          *      Special function 1 key
422          */
423         _KEY_FN_1 = KEY_FN_1,
424
425         /**
426          *      Special function 2 key
427          */
428         _KEY_FN_2 = KEY_FN_2,
429
430         /**
431          *      Special function 3 key
432          */
433         _KEY_FN_3 = KEY_FN_3,
434
435         /**
436          *      Special function 4 key
437          */
438         _KEY_FN_4 = KEY_FN_4,
439
440         /**
441          *      Special function 5 key
442          */
443         _KEY_FN_5 = KEY_FN_5,
444
445         /**
446         *        The power key
447         */
448         _KEY_POWER_HOLD = KEY_POWER_HOLD,
449
450         /**
451         *        The delete key
452         */
453         _KEY_DELETE = KEY_DELETE,
454
455         _KEY_CTRL_L = KEY_HARDWARE_MAX,
456
457         _KEY_CTRL_R,
458
459         _KEY_SHIFT_L,
460
461         _KEY_SHIFT_R,
462
463         _KEY_NUM_LEFT,
464
465         _KEY_NUM_RIGHT,
466
467         _KEY_NUM_UP,
468
469         _KEY_NUM_DOWN,
470
471         _KEY_HARDWARE_MAX,
472         /**
473          *      internal Key  - end
474          */
475         _KEY_END,
476
477         /**
478          *      internal Key  - send
479          */
480         _KEY_SEND
481 };
482
483 enum _KeyModifier
484 {
485         _KEY_MODIFIER_NONE = 0,      /**< No active modifiers */
486         _KEY_MODIFIER_SHIFT = 1 << 0, /**< "Control" is pressed */
487         _KEY_MODIFIER_CTRL = 1 << 1, /**< "Alt" is pressed */
488         _KEY_MODIFIER_ALT = 1 << 2, /**< "Shift" is pressed */
489         _KEY_MODIFIER_WIN = 1 << 3, /**< "Win" (between "Ctrl" and "Alt") is pressed */
490         _KEY_MODIFIER_SCROLL = 1 << 4,  /**< "AltGr" is pressed */
491         _KEY_MODIFIER_NUM = 1 << 5,
492         _KEY_MODIFIER_CAPS = 1 << 6,
493         _KEY_LOCK_SCROLL = 1 << 7,
494         _KEY_LOCK_NUM = 1 << 8,
495         _KEY_LOCK_CAPS = 1 << 9,
496         _KEY_LOCK_SHIFT = 1 << 10,
497         _KEY_MODIFIER_ALTGR = 1 << 11,
498         _KEY_MODIFIER_LAST
499 };
500
501 class _OSP_EXPORT_ _KeyInfo
502 {
503 public:
504         _KeyInfo(KeyState keyState, _KeyCode keyCode, int keyModifier, void* pUserData);
505         ~_KeyInfo(void);
506         _KeyInfo(const _KeyInfo& rhs);
507         _KeyInfo& operator =(const _KeyInfo& rhs);
508
509 public:
510         void SetKeyState(KeyState keyState);
511         KeyState GetKeyState(void) const;
512
513         void SetKeyCode(_KeyCode keyCode);
514         _KeyCode GetKeyCode(void) const;
515
516         void SetKeyModifier(int keyModifier);
517         int GetKeyModifier(void) const;
518
519         void SetUserData(void* pUserData);
520         void* GetUserData(void) const;
521
522 private:
523         KeyState __keyState;
524         _KeyCode __keyCode;
525         int __keyModifier;
526         void* __pUserData;
527 };
528
529 class _IKeyEventListener;
530
531 /**
532 * This is internal. If used in an application, the application can get rejected during the certification process.
533 * @class        _UiKeyEvent
534 * @brief        This class impliments _UiKeyEvent and
535 * fire the Window Event object of a Ui Control.
536 */
537 class _UiKeyEvent
538         : public _UiEvent
539 {
540 // Lifecycle
541 public:
542         /**
543         * This is the default class constructor.
544         *
545         */
546         _UiKeyEvent(const _UiObjectHandle& destination, const _KeyInfo& keyInfo, _UiEventRouteType routeType = _UI_EVENT_ROUTE_TUNNEL_BUBBLE, const _UiObjectHandle& source = _UiObjectHandle());
547         _UiKeyEvent(const _UiKeyEvent& rhs);
548
549         /**
550          * This is the default class destructor.
551          *
552          */
553         virtual ~_UiKeyEvent(void);
554
555 public:
556         _UiKeyEvent& operator =(const _UiKeyEvent& rhs);
557
558 public:
559         const _KeyInfo* GetKeyInfo(void) const;
560
561 private:
562         void SetKeyState(KeyState keyState);
563         KeyState GetKeyState(void) const;
564
565         void SetKeyCode(_KeyCode keyCode);
566         _KeyCode GetKeyCode(void) const;
567
568         void SetKeyModifier(int keyModifier);
569         int GetKeyModifier(void) const;
570
571 private:
572         virtual _UiKeyEvent* CloneN(void) const;
573         virtual _UiEventType GetEventType(void) const;
574         virtual result OnPreviewEventProcessing(const _Control& control, bool& isFiltered);
575         virtual result OnEventProcessing(const _Control& control, bool& isFiltered);
576         virtual result OnListenerProcessing(const _IUiEventListener& listener, bool& isFiltered);
577
578 private:
579         result FireListener(const _IKeyEventListener* pListener, bool& isFiltered);
580
581 private:
582         _KeyInfo __keyInfo;
583 };
584
585 }} // Tizen::Ui
586
587 #endif //_FUI_INTERNAL_UI_KEY_EVENT_H_