[dali_1.2.35] Merge branch 'devel/master'
[platform/core/uifw/dali-core.git] / dali / public-api / events / key-event.cpp
1 /*
2  * Copyright (c) 2015 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 <dali/public-api/events/key-event.h>
20
21 // INTERNAL INCLUDES
22 #include <dali/devel-api/events/key-event-devel.h>
23 #include <dali/devel-api/common/map-wrapper.h>
24
25 namespace Dali
26 {
27
28 namespace
29 {
30 const unsigned int MODIFIER_SHIFT = 0x1;
31 const unsigned int MODIFIER_CTRL  = 0x2;
32 const unsigned int MODIFIER_ALT   = 0x4;
33 const int KEY_INVALID_CODE = -1;
34
35 struct KeyEventImpl
36 {
37   std::string deviceName;
38 };
39
40 typedef std::map< KeyEvent*, KeyEventImpl*> KeyEventMap;
41 typedef KeyEventMap::const_iterator KeyEventMapIter;
42
43
44 KeyEventMap keyEventImplMap;
45
46 }
47
48 KeyEvent::KeyEvent()
49 : keyPressedName(""),
50   keyPressed(""),
51   keyCode(KEY_INVALID_CODE),
52   keyModifier(0),
53   time(0),
54   state(KeyEvent::Down)
55 {
56   KeyEventImpl* impl = new KeyEventImpl;
57   keyEventImplMap[this] = impl;
58 }
59
60 KeyEvent::KeyEvent(const std::string& keyName, const std::string& keyString, int keyCode, int keyModifier,unsigned long timeStamp, const State& keyState)
61 : keyPressedName(keyName),
62   keyPressed(keyString),
63   keyCode(keyCode),
64   keyModifier(keyModifier),
65   time(timeStamp),
66   state(keyState)
67 {
68   KeyEventImpl* impl = new KeyEventImpl;
69   keyEventImplMap[this] = impl;
70 }
71
72 KeyEvent::~KeyEvent()
73 {
74   delete keyEventImplMap[this];
75   keyEventImplMap.erase( this );
76 }
77
78 bool KeyEvent::IsShiftModifier() const
79 {
80   if ((MODIFIER_SHIFT & keyModifier) == MODIFIER_SHIFT)
81   {
82     return true;
83   }
84
85   return false;
86 }
87
88 bool KeyEvent::IsCtrlModifier() const
89 {
90   if ((MODIFIER_CTRL & keyModifier) == MODIFIER_CTRL)
91   {
92     return true;
93   }
94
95   return false;
96 }
97
98 bool KeyEvent::IsAltModifier() const
99 {
100   if ((MODIFIER_ALT & keyModifier) == MODIFIER_ALT)
101   {
102     return true;
103   }
104
105   return false;
106 }
107
108 std::string DevelKeyEvent::GetDeviceName( KeyEvent& keyEvent )
109 {
110   KeyEventMapIter search;
111
112   search = keyEventImplMap.find( &keyEvent );
113
114   std::string result = "";
115
116   if( search != keyEventImplMap.end())
117   {
118     result = search->second->deviceName;
119   }
120
121   return result;
122 }
123
124 void DevelKeyEvent::SetDeviceName( KeyEvent& keyEvent, std::string deviceName )
125 {
126   KeyEventMapIter search = keyEventImplMap.find( &keyEvent );
127
128   if( search != keyEventImplMap.end())
129   {
130     search->second->deviceName = deviceName;
131   }
132 }
133
134
135 } // namespace Dali