e518873faf37157272aca9940684b5b1199b05cd
[platform/framework/native/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 Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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         /**
456         *       The apostrophe key
457         */
458         _KEY_APOSTROPHE = KEY_APOSTROPHE,
459
460         /**
461         *       The backslash key
462         */
463         _KEY_BACKSLASH = KEY_BACKSLASH,
464
465         /**
466         *       The end key
467         */
468         _KEY_END_BUTTON = KEY_MOVE_END,
469
470         /**
471         *       The equal key
472         */
473         _KEY_EQUAL = KEY_EQUAL,
474
475         /**
476         *       The esc key
477         */
478         _KEY_ESC = KEY_ESC,
479
480         /**
481         *       The function 10 key
482         */
483         _KEY_FN_10 = KEY_FN_10,
484
485         /**
486         *       The function 11 key
487         */
488         _KEY_FN_11 = KEY_FN_11,
489
490         /**
491         *       The function 12 key
492         */
493         _KEY_FN_12 = KEY_FN_12,
494
495         /**
496         *       The function 6 key
497         */
498         _KEY_FN_6 = KEY_FN_6,
499
500         /**
501         *       The function 7 key
502         */
503         _KEY_FN_7 = KEY_FN_7,
504
505         /**
506         *       The function 8 key
507         */
508         _KEY_FN_8 = KEY_FN_8,
509
510         /**
511         *       The function 9 key
512         */
513         _KEY_FN_9 = KEY_FN_9,
514
515         /**
516         *       The grave key
517         */
518         _KEY_GRAVE = KEY_GRAVE,
519
520         /**
521         *       The home key
522         */
523         _KEY_HOME_BUTTON = KEY_MOVE_HOME,
524
525         /**
526         *       The insert key
527         */
528         _KEY_INSERT = KEY_INSERT,
529
530         /**
531         *       The left alt key
532         */
533         _KEY_LALT = KEY_LEFT_ALT,
534
535         /**
536         *       The left bracket key
537         */
538         _KEY_LBRACKET = KEY_LEFT_BRACKET,
539
540         /**
541         *       The left control key
542         */
543         _KEY_LCTRL = KEY_LEFT_CTRL,
544
545         /**
546         *       The left shift key
547         */
548         _KEY_LSHIFT = KEY_LEFT_SHIFT,
549
550         /**
551         *       The left window key
552         */
553         _KEY_LWIN = KEY_LEFT_WIN,
554
555         /**
556         *       The menu key
557         */
558         _KEY_CONTEXT_MENU = KEY_CONTEXT_MENU,
559
560         /**
561         *       The minus key
562         */
563         _KEY_MINUS = KEY_MINUS,
564
565         /**
566         *       The number lock key
567         */
568         _KEY_NUM_LOCK = KEY_NUM_LOCK,
569
570         /**
571         *       The Keypad 0 key
572         */
573         _KEY_NUMPAD_0 = KEY_NUMPAD_0,
574
575         /**
576         *       The Keypad 1 key
577         */
578         _KEY_NUMPAD_1 = KEY_NUMPAD_1,
579
580         /**
581         *       The Keypad 2 key
582         */
583         _KEY_NUMPAD_2 = KEY_NUMPAD_2,
584
585         /**
586         *       The Keypad 3 key
587         */
588         _KEY_NUMPAD_3 = KEY_NUMPAD_3,
589
590         /**
591         *       The Keypad 4 key
592         */
593         _KEY_NUMPAD_4 = KEY_NUMPAD_4,
594
595         /**
596         *       The Keypad 5 key
597         */
598         _KEY_NUMPAD_5 = KEY_NUMPAD_5,
599
600         /**
601         *       The Keypad 6 key
602         */
603         _KEY_NUMPAD_6 = KEY_NUMPAD_6,
604
605         /**
606         *       The Keypad 6 key
607         */
608         _KEY_NUMPAD_7 = KEY_NUMPAD_7,
609
610         /**
611         *       The Keypad 8 key
612         */
613         _KEY_NUMPAD_8 = KEY_NUMPAD_8,
614
615         /**
616         *       The Keypad 9 key
617         */
618         _KEY_NUMPAD_9 = KEY_NUMPAD_9,
619
620         /**
621         *       The Keypad add key
622         */
623         _KEY_NUMPAD_ADD = KEY_NUMPAD_ADD,
624
625         /**
626         *       The Keypad divide key
627         */
628         _KEY_NUMPAD_DIVIDE = KEY_NUMPAD_DIVIDE,
629
630         /**
631         *       The Keypad divide key
632         */
633         _KEY_NUMPAD_DOT = KEY_NUMPAD_DOT,
634
635         /**
636         *       The Keypad enter key
637         */
638         _KEY_NUMPAD_ENTER = KEY_NUMPAD_ENTER,
639
640         /**
641         *       The Keypad multiply key
642         */
643         _KEY_NUMPAD_MULTIPLY = KEY_NUMPAD_MULTIPLY,
644
645         /**
646         *       The Keypad subtract key
647         */
648         _KEY_NUMPAD_SUBTRACT = KEY_NUMPAD_SUBTRACT,
649
650         /**
651         *       The page down key
652         */
653         _KEY_PAGE_DOWN = KEY_PAGE_DOWN,
654
655         /**
656         *       The page up key
657         */
658         _KEY_PAGE_UP = KEY_PAGE_UP,
659
660         /**
661         *       The pause key
662         */
663         _KEY_PAUSEBREAK=  KEY_PAUSE_BREAK,
664
665         /**
666         *       The print key
667         */
668         _KEY_PRINT = KEY_PRINT,
669
670         /**
671         *       The right alt key
672         */
673         _KEY_RALT = KEY_RIGHT_ALT,
674
675         /**
676         *       The right bracket key
677         */
678         _KEY_RBRACKET = KEY_RIGHT_BRACKET,
679
680         /**
681         *       The right control key
682         */
683         _KEY_RCTRL = KEY_RIGHT_CTRL,
684
685         /**
686         *       The right shift key
687         */
688         _KEY_RSHIFT = KEY_RIGHT_SHIFT,
689
690         /**
691         *       The right window key
692         */
693         _KEY_RWIN = KEY_RIGHT_WIN,
694
695         /**
696         *       The scroll lock key
697         */
698         _KEY_SCROLL_LOCK = KEY_SCROLL_LOCK,
699
700         /**
701         *       The semicolon key
702         */
703         _KEY_SEMICOLON = KEY_SEMICOLON,
704
705         /**
706         *       The slash key
707         */
708         _KEY_SLASH = KEY_SLASH,
709
710         /**
711         *       tab key
712         */
713         _KEY_TAB = KEY_TAB,
714
715         /**
716         *       The oem 1 key
717         */
718         _KEY_OEM_1 = KEY_OEM_1,
719
720         /**
721         *       The oem 2 key
722         */
723         _KEY_OEM_2 = KEY_OEM_2,
724
725         /**
726         *       The oem 3 key
727         */
728         _KEY_OEM_3 = KEY_OEM_3,
729
730         /**
731         *       The oem 4 key
732         */
733         _KEY_OEM_4 = KEY_OEM_4,
734
735         /**
736         *       The oem 5 key
737         */
738         _KEY_OEM_5 = KEY_OEM_5,
739
740         /**
741         *       The oem 6 key
742         */
743         _KEY_OEM_6 = KEY_OEM_6,
744
745         /**
746         *       The oem 7 key
747         */
748         _KEY_OEM_7 = KEY_OEM_7,
749
750         /**
751         *       The oem 8 key
752         */
753         _KEY_OEM_8 = KEY_OEM_8,
754
755         /**
756         *       The oem 9 key
757         */
758         _KEY_OEM_9 = KEY_OEM_9,
759
760         /**
761         *       The oem 10 key
762         */
763         _KEY_OEM_10 = KEY_OEM_10,
764
765         /**
766         *       The oem 11 key
767         */
768         _KEY_OEM_11 = KEY_OEM_11,
769
770         /**
771         *       The oem 12 key
772         */
773         _KEY_OEM_12 = KEY_OEM_12,
774
775         /**
776         *       The oem 13 key
777         */
778         _KEY_OEM_13 = KEY_OEM_13,
779
780         /**
781         *       The oem 14 key
782         */
783         _KEY_OEM_14 = KEY_OEM_14,
784
785         /**
786         *       The oem 15 key
787         */
788         _KEY_OEM_15 = KEY_OEM_15,
789
790         /**
791         *       The oem 16 key
792         */
793         _KEY_OEM_16 = KEY_OEM_16,
794
795         /**
796         *       The oem 17 key
797         */
798         _KEY_OEM_17 = KEY_OEM_17,
799
800         /**
801         *       The oem 18 key
802         */
803         _KEY_OEM_18 = KEY_OEM_18,
804
805         /**
806         *       The oem 19 key
807         */
808         _KEY_OEM_19 = KEY_OEM_19,
809
810         /**
811         *       The oem 20 key
812         */
813         _KEY_OEM_20 = KEY_OEM_20,
814
815         _KEY_HARDWARE_MAX = KEY_HARDWARE_MAX,
816
817         _KEY_CTRL_L,
818
819         _KEY_CTRL_R,
820
821         _KEY_SHIFT_L,
822
823         _KEY_SHIFT_R,
824
825         _KEY_NUM_LEFT,
826
827         _KEY_NUM_RIGHT,
828
829         _KEY_NUM_UP,
830
831         _KEY_NUM_DOWN,
832
833         /**
834          *      internal Key  - end
835          */
836         _KEY_END,
837
838         /**
839          *      internal Key  - send
840          */
841         _KEY_SEND
842 };
843
844 enum _KeyModifier
845 {
846         _KEY_MODIFIER_NONE = 0,      /**< No active modifiers */
847         _KEY_MODIFIER_SHIFT = 1 << 0, /**< "Control" is pressed */
848         _KEY_MODIFIER_CTRL = 1 << 1, /**< "Alt" is pressed */
849         _KEY_MODIFIER_ALT = 1 << 2, /**< "Shift" is pressed */
850         _KEY_MODIFIER_WIN = 1 << 3, /**< "Win" (between "Ctrl" and "Alt") is pressed */
851         _KEY_MODIFIER_SCROLL = 1 << 4,  /**< "AltGr" is pressed */
852         _KEY_MODIFIER_NUM = 1 << 5,
853         _KEY_MODIFIER_CAPS = 1 << 6,
854         _KEY_LOCK_SCROLL = 1 << 7,
855         _KEY_LOCK_NUM = 1 << 8,
856         _KEY_LOCK_CAPS = 1 << 9,
857         _KEY_LOCK_SHIFT = 1 << 10,
858         _KEY_MODIFIER_ALTGR = 1 << 11,
859         _KEY_MODIFIER_LAST
860 };
861
862 class _OSP_EXPORT_ _KeyInfo
863 {
864 public:
865         _KeyInfo(KeyState keyState, _KeyCode keyCode, int keyModifier, void* pUserData);
866         ~_KeyInfo(void);
867         _KeyInfo(const _KeyInfo& rhs);
868         _KeyInfo& operator =(const _KeyInfo& rhs);
869
870 public:
871         void SetKeyState(KeyState keyState);
872         KeyState GetKeyState(void) const;
873
874         void SetKeyCode(_KeyCode keyCode);
875         _KeyCode GetKeyCode(void) const;
876
877         void SetKeyModifier(int keyModifier);
878         int GetKeyModifier(void) const;
879
880         void SetUserData(void* pUserData);
881         void* GetUserData(void) const;
882
883 private:
884         KeyState __keyState;
885         _KeyCode __keyCode;
886         int __keyModifier;
887         void* __pUserData;
888 };
889
890 class _IKeyEventListener;
891
892 /**
893 * This is internal. If used in an application, the application can get rejected during the certification process.
894 * @class        _UiKeyEvent
895 * @brief        This class impliments _UiKeyEvent and
896 * fire the Window Event object of a Ui Control.
897 */
898 class _UiKeyEvent
899         : public _UiEvent
900 {
901 // Lifecycle
902 public:
903         /**
904         * This is the default class constructor.
905         *
906         */
907         _UiKeyEvent(const _UiObjectHandle& destination, const _KeyInfo& keyInfo, _UiEventRouteType routeType = _UI_EVENT_ROUTE_TUNNEL_BUBBLE, const _UiObjectHandle& source = _UiObjectHandle());
908         _UiKeyEvent(const _UiKeyEvent& rhs);
909
910         /**
911          * This is the default class destructor.
912          *
913          */
914         virtual ~_UiKeyEvent(void);
915
916 public:
917         _UiKeyEvent& operator =(const _UiKeyEvent& rhs);
918
919 public:
920         _KeyInfo* GetKeyInfo(void) const;
921
922 private:
923         void SetKeyState(KeyState keyState);
924         KeyState GetKeyState(void) const;
925
926         void SetKeyCode(_KeyCode keyCode);
927         _KeyCode GetKeyCode(void) const;
928
929         void SetKeyModifier(int keyModifier);
930         int GetKeyModifier(void) const;
931
932 private:
933         virtual _UiKeyEvent* CloneN(void) const;
934         virtual _UiEventType GetEventType(void) const;
935         virtual bool IsEventEnabled(const _Control& control) const;
936         virtual result OnPreviewEventProcessing(const _Control& control, bool& isFiltered);
937         virtual result OnEventProcessing(const _Control& control, bool& isFiltered);
938         virtual result OnListenerProcessing(const _IUiEventListener& listener, bool& isFiltered);
939
940 private:
941         result FireListener(const _IKeyEventListener* pListener, bool& isFiltered);
942
943 private:
944         _KeyInfo __keyInfo;
945 };
946
947 }} // Tizen::Ui
948
949 #endif //_FUI_INTERNAL_UI_KEY_EVENT_H_