2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
18 * @file FUi_UiKeyEvent.cpp
19 * @brief This is the implementation file for the _UiKeyEvent class.
22 #include <FBaseResult.h>
23 #include <FBaseSysLog.h>
24 #include "FUi_UiKeyEvent.h"
25 #include "FUi_IKeyEventListener.h"
26 #include "FUi_IKeyEventPreviewer.h"
27 #include "FUi_Control.h"
28 #include "FUi_ControlImpl.h"
30 namespace Tizen { namespace Ui
33 _KeyInfo::_KeyInfo(KeyState keyState, _KeyCode keyCode, int keyModifier, void* pUserData)
34 : __keyState(keyState)
36 , __keyModifier(keyModifier)
37 , __pUserData(pUserData)
41 _KeyInfo::_KeyInfo(const _KeyInfo& rhs)
42 : __keyState(rhs.__keyState)
43 , __keyCode(rhs.__keyCode)
44 , __keyModifier(rhs.__keyModifier)
45 , __pUserData(rhs.__pUserData)
50 _KeyInfo::operator =(const _KeyInfo& rhs)
54 __keyState = rhs.__keyState;
55 __keyCode = rhs.__keyCode;
56 __keyModifier = rhs.__keyModifier;
57 __pUserData = rhs.__pUserData;
63 _KeyInfo::~_KeyInfo(void)
68 _KeyInfo::SetKeyState(KeyState keyState)
70 __keyState = keyState;
74 _KeyInfo::GetKeyState(void) const
80 _KeyInfo::SetKeyCode(_KeyCode keyCode)
86 _KeyInfo::GetKeyCode(void) const
92 _KeyInfo::SetKeyModifier(int keyModifier)
94 __keyModifier = keyModifier;
98 _KeyInfo::GetKeyModifier(void) const
100 return __keyModifier;
104 _KeyInfo::SetUserData(void* pUserData)
106 __pUserData = pUserData;
110 _KeyInfo::GetUserData(void) const
115 _UiKeyEvent::_UiKeyEvent(const _UiObjectHandle& destination, const _KeyInfo& keyInfo, _UiEventRouteType routeType, const _UiObjectHandle& source)
116 : _UiEvent(destination, source, routeType)
121 _UiKeyEvent::~_UiKeyEvent(void)
125 _UiKeyEvent::_UiKeyEvent(const _UiKeyEvent& rhs)
127 , __keyInfo(rhs.__keyInfo)
132 _UiKeyEvent::operator =(const _UiKeyEvent& rhs)
134 _UiEvent::operator =(rhs);
138 __keyInfo = rhs.__keyInfo;
145 _UiKeyEvent::GetKeyInfo(void) const
151 _UiKeyEvent::CloneN(void) const
153 return new (std::nothrow) _UiKeyEvent(*this);
157 _UiKeyEvent::GetEventType(void) const
159 return _UI_EVENT_KEY;
163 _UiKeyEvent::SetKeyState(const KeyState keyState)
165 __keyInfo.SetKeyState(keyState);
169 _UiKeyEvent::GetKeyState(void) const
171 return __keyInfo.GetKeyState();
175 _UiKeyEvent::SetKeyCode(const _KeyCode keyCode)
177 __keyInfo.SetKeyCode(keyCode);
181 _UiKeyEvent::GetKeyCode(void) const
183 return __keyInfo.GetKeyCode();
187 _UiKeyEvent::SetKeyModifier(int keyModifier)
189 __keyInfo.SetKeyModifier(keyModifier);
193 _UiKeyEvent::GetKeyModifier(void) const
195 return __keyInfo.GetKeyModifier();
199 _UiKeyEvent::OnPreviewEventProcessing(const _Control& control, bool& isFiltered)
201 result r = E_SUCCESS;
203 if (!control.IsInputEnabled())
208 _IKeyEventPreviewer* pKeyEventPreviewer = control.GetEventPreviewer<_UI_EVENT_KEY, _IKeyEventPreviewer*>();
209 SysTryReturn(NID_UI, pKeyEventPreviewer, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
211 const _Control* pTarget = GetControl(GetDestination());
212 SysTryReturn(NID_UI, pTarget, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
214 // call a listener method by the key state
215 switch (GetKeyState())
219 isFiltered = pKeyEventPreviewer->OnPreviewKeyPressed(*pTarget, __keyInfo);
225 isFiltered = pKeyEventPreviewer->OnPreviewKeyReleased(*pTarget, __keyInfo);
230 //SysLogI(NID_UI, "unable to determine the key event type.");
239 _UiKeyEvent::OnEventProcessing(const _Control& control, bool& isFiltered)
246 _IKeyEventListener* pKeyEventListener = control.GetPropagatedKeyEventListener();
247 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
249 return FireListener(pKeyEventListener, isFiltered);
253 _UiKeyEvent::OnListenerProcessing(const _IUiEventListener& listener, bool& isFiltered)
255 _IKeyEventListener* pKeyEventListener = dynamic_cast <_IKeyEventListener*>(const_cast <_IUiEventListener*>(&listener));
256 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
258 return FireListener(pKeyEventListener, isFiltered);
262 _UiKeyEvent::FireListener(const _IKeyEventListener* pListener, bool& isFiltered)
264 _IKeyEventListener* pKeyEventListener = const_cast <_IKeyEventListener*>(pListener);
265 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
267 result r = E_SUCCESS;
269 const _Control* pTarget = GetControl(GetDestination());
270 SysTryReturn(NID_UI, pTarget, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
272 // call a listener method by the key state
273 switch (GetKeyState())
276 isFiltered = pKeyEventListener->OnKeyPressed(*pTarget, __keyInfo);
280 isFiltered = pKeyEventListener->OnKeyReleased(*pTarget, __keyInfo);
283 // 2.0 compatibility for key simulate
284 case KEY_LONGPRESSED:
286 _ControlImpl* pTargetImpl = static_cast<_ControlImpl*>(pTarget->GetUserData());
289 pTargetImpl->GenerateKeyEvent(KEY_LONGPRESSED, GetKeyCode());
295 //SysLogI(NID_UI, "unable to determine the key event type.");