2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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 <FUiKeyEventInfo.h>
25 #include "FUi_UiKeyEvent.h"
26 #include "FUi_IKeyEventListener.h"
27 #include "FUi_IKeyEventPreviewer.h"
28 #include "FUi_Control.h"
29 #include "FUi_ControlImpl.h"
31 namespace Tizen { namespace Ui
34 _KeyInfo::_KeyInfo(KeyState keyState, _KeyCode keyCode, int keyModifier, void* pUserData)
35 : __keyState(keyState)
37 , __keyModifier(keyModifier)
38 , __pUserData(pUserData)
42 _KeyInfo::_KeyInfo(const _KeyInfo& rhs)
43 : __keyState(rhs.__keyState)
44 , __keyCode(rhs.__keyCode)
45 , __keyModifier(rhs.__keyModifier)
46 , __pUserData(rhs.__pUserData)
51 _KeyInfo::operator =(const _KeyInfo& rhs)
55 __keyState = rhs.__keyState;
56 __keyCode = rhs.__keyCode;
57 __keyModifier = rhs.__keyModifier;
58 __pUserData = rhs.__pUserData;
64 _KeyInfo::~_KeyInfo(void)
69 _KeyInfo::SetKeyState(KeyState keyState)
71 __keyState = keyState;
75 _KeyInfo::GetKeyState(void) const
81 _KeyInfo::SetKeyCode(_KeyCode keyCode)
87 _KeyInfo::GetKeyCode(void) const
93 _KeyInfo::SetKeyModifier(int keyModifier)
95 __keyModifier = keyModifier;
99 _KeyInfo::GetKeyModifier(void) const
101 return __keyModifier;
105 _KeyInfo::SetUserData(void* pUserData)
107 __pUserData = pUserData;
111 _KeyInfo::GetUserData(void) const
116 _UiKeyEvent::_UiKeyEvent(const _UiObjectHandle& destination, const _KeyInfo& keyInfo, _UiEventRouteType routeType, const _UiObjectHandle& source)
117 : _UiEvent(destination, source, routeType)
122 _UiKeyEvent::~_UiKeyEvent(void)
126 _UiKeyEvent::_UiKeyEvent(const _UiKeyEvent& rhs)
128 , __keyInfo(rhs.__keyInfo)
133 _UiKeyEvent::operator =(const _UiKeyEvent& rhs)
135 _UiEvent::operator =(rhs);
139 __keyInfo = rhs.__keyInfo;
146 _UiKeyEvent::GetKeyInfo(void) const
148 return const_cast<_KeyInfo*>(&__keyInfo);
152 _UiKeyEvent::CloneN(void) const
154 return new (std::nothrow) _UiKeyEvent(*this);
158 _UiKeyEvent::GetEventType(void) const
160 return _UI_EVENT_KEY;
164 _UiKeyEvent::SetKeyState(const KeyState keyState)
166 __keyInfo.SetKeyState(keyState);
170 _UiKeyEvent::GetKeyState(void) const
172 return __keyInfo.GetKeyState();
176 _UiKeyEvent::SetKeyCode(const _KeyCode keyCode)
178 __keyInfo.SetKeyCode(keyCode);
182 _UiKeyEvent::GetKeyCode(void) const
184 return __keyInfo.GetKeyCode();
188 _UiKeyEvent::SetKeyModifier(int keyModifier)
190 __keyInfo.SetKeyModifier(keyModifier);
194 _UiKeyEvent::GetKeyModifier(void) const
196 return __keyInfo.GetKeyModifier();
200 _UiKeyEvent::IsEventEnabled(const _Control& control) const
202 if (!_UiEvent::IsEventEnabled(control))
207 if (( GetKeyInfo()->GetKeyCode() == _KEY_CONTEXT_MENU )
208 || ( GetKeyInfo()->GetKeyCode() == _KEY_CLEAR ))
213 if (!control.IsInputEventEnabled())
223 _UiKeyEvent::OnPreviewEventProcessing(const _Control& control, bool& isFiltered)
225 result r = E_SUCCESS;
227 _IKeyEventPreviewer* pKeyEventPreviewer = control.GetPropagatedKeyEventListener();
228 SysTryReturn(NID_UI, pKeyEventPreviewer, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
230 const _Control* pTarget = GetControl(GetDestination());
231 SysTryReturn(NID_UI, pTarget, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
233 // call a listener method by the key state
234 switch (GetKeyState())
238 isFiltered = pKeyEventPreviewer->OnPreviewKeyPressed(*pTarget, __keyInfo);
244 isFiltered = pKeyEventPreviewer->OnPreviewKeyReleased(*pTarget, __keyInfo);
249 //SysLogI(NID_UI, "unable to determine the key event type.");
258 _UiKeyEvent::OnEventProcessing(const _Control& control, bool& isFiltered)
265 _IKeyEventListener* pKeyEventListener = control.GetPropagatedKeyEventListener();
266 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
268 return FireListener(pKeyEventListener, isFiltered);
272 _UiKeyEvent::OnListenerProcessing(const _IUiEventListener& listener, bool& isFiltered)
274 _IKeyEventListener* pKeyEventListener = dynamic_cast <_IKeyEventListener*>(const_cast <_IUiEventListener*>(&listener));
275 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
277 return FireListener(pKeyEventListener, isFiltered);
281 _UiKeyEvent::FireListener(const _IKeyEventListener* pListener, bool& isFiltered)
283 _IKeyEventListener* pKeyEventListener = const_cast <_IKeyEventListener*>(pListener);
284 SysTryReturn(NID_UI, pKeyEventListener, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
286 result r = E_SUCCESS;
288 const _Control* pTarget = GetControl(GetDestination());
289 SysTryReturn(NID_UI, pTarget, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
291 // call a listener method by the key state
292 switch (GetKeyState())
295 isFiltered = pKeyEventListener->OnKeyPressed(*pTarget, __keyInfo);
299 isFiltered = pKeyEventListener->OnKeyReleased(*pTarget, __keyInfo);
302 // 2.0 compatibility for key simulate
303 case KEY_LONGPRESSED:
305 _ControlImpl* pTargetImpl = static_cast<_ControlImpl*>(pTarget->GetUserData());
308 pTargetImpl->GenerateKeyEvent(KEY_LONGPRESSED, GetKeyCode());
314 //SysLogI(NID_UI, "unable to determine the key event type.");