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.
19 * @file FUi_ControlImpl.cpp
20 * @brief This is the implementation file for _ControlImpl class.
23 #include <FBaseColArrayListT.h>
24 #include <FBaseColLinkedListT.h>
25 #include <FBaseRtIEventListener.h>
26 #include <FBaseRtITimerEventListener.h>
27 #include <FUiIDragDropEventListener.h>
28 #include <FUiAccessibilityContainer.h>
29 #include <FUiAnimControlAnimator.h>
30 #include <FUiTouchGestureDetector.h>
31 #include <FApp_AppInfo.h>
32 #include <FBaseSysLog.h>
33 #include <FBase_Log.h>
34 #include <FUiIPropagatedTouchEventListener.h>
35 #include <FUiIPropagatedKeyEventListener.h>
36 #include <FUiKeyEventInfo.h>
37 #include "FUi_ControlImpl.h"
38 #include "FUi_ContainerImpl.h"
39 #include "FUi_Control.h"
40 #include "FUi_ControlManager.h"
41 #include "FUi_ControlImplManager.h"
42 #include "FUi_CoordinateSystemUtils.h"
43 #include "FUi_UiEventManager.h"
44 #include "FUi_UiNotificationEvent.h"
45 #include "FUi_UiTouchEvent.h"
46 #include "FUi_TouchManager.h"
47 #include "FUi_TouchEventArg.h"
48 #include "FUi_ITouchLongPressGestureEventListener.h"
49 #include "FUi_TouchFlickGestureDetector.h"
50 #include "FUi_TouchGestureDetectorImpl.h"
51 #include "FUi_AccessibilityContainerImpl.h"
52 #include "FUi_ResourceManager.h"
53 #include "FUi_WindowImpl.h"
54 #include "FUiAnim_VisualElement.h"
55 #include "FUiAnim_VisualElementImpl.h"
56 #include "FUiCtrl_Popup.h"
57 #include "FUi_Window.h"
61 using namespace Tizen::Base;
62 using namespace Tizen::Base::Collection;
63 using namespace Tizen::Base::Runtime;
64 using namespace Tizen::Graphics;
65 using namespace Tizen::Ui::Animations;
66 using namespace Tizen::App;
67 using namespace Tizen::Base::Utility;
68 using namespace Tizen::Ui::Controls;
70 namespace Tizen { namespace Ui {
72 _ControlImpl::SizeInfo::~SizeInfo(void)
77 _ControlImpl::SizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
79 return Dimension(0, 0);
83 _ControlImpl::SizeInfo::GetDefaultMinimumSizeF(_ControlOrientation orientation) const
85 return FloatDimension(0.0f, 0.0f);
89 _ControlImpl::SizeInfo::GetDefaultMaximumSize(_ControlOrientation orientation) const
91 return Dimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
95 _ControlImpl::SizeInfo::GetDefaultMaximumSizeF(_ControlOrientation orientation) const
97 return FloatDimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
101 _ControlImpl::SizeInfo::GetMinimumSizeLimit(_ControlOrientation orientation) const
103 return Dimension(0, 0);
107 _ControlImpl::SizeInfo::GetMinimumSizeLimitF(_ControlOrientation orientation) const
109 return FloatDimension(0.0f, 0.0f);
113 _ControlImpl::SizeInfo::GetMaximumSizeLimit(_ControlOrientation orientation) const
115 return Dimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
119 _ControlImpl::SizeInfo::GetMaximumSizeLimitF(_ControlOrientation orientation) const
121 return FloatDimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
125 _ControlImpl::SizeInfo::CheckInitialSizeValid(const Dimension& size, _ControlOrientation orientation) const
129 const Dimension minSize = GetDefaultMinimumSize(orientation);
130 const Dimension maxSize = GetDefaultMaximumSize(orientation);
133 (minSize.width <= size.width) && (size.width <= maxSize.width), E_INVALID_ARG,
134 E_INVALID_ARG, "[E_INVALID_ARG] The width %d is out of width range(%d ~ %d).",
135 size.width, minSize.width, maxSize.width);
138 (minSize.height <= size.height) && (size.height <= maxSize.height), E_INVALID_ARG,
139 E_INVALID_ARG, "[E_INVALID_ARG] The height %d is out of height range(%d ~ %d).",
140 size.height, minSize.height, maxSize.height);
146 _ControlImpl::SizeInfo::CheckInitialSizeValidF(const FloatDimension& size, _ControlOrientation orientation) const
150 const FloatDimension minSize = GetDefaultMinimumSizeF(orientation);
151 const FloatDimension maxSize = GetDefaultMaximumSizeF(orientation);
154 (minSize.width <= size.width) && (size.width <= maxSize.width), E_INVALID_ARG,
155 E_INVALID_ARG, "[E_INVALID_ARG] The width %f is out of width range(%f ~ %f).",
156 size.width, minSize.width, maxSize.width);
159 (minSize.height <= size.height) && (size.height <= maxSize.height), E_INVALID_ARG,
160 E_INVALID_ARG, "[E_INVALID_ARG] The height %f is out of height range(%f ~ %f).",
161 size.height, minSize.height, maxSize.height);
166 const _ControlImpl::SizeInfo&
167 _ControlImpl::GetFullScreenSizeInfo(void)
169 class FullScreenSizeInfo : public _ControlImpl::SizeInfo
172 virtual Dimension GetDefaultMinimumSize(_ControlOrientation orientation) const
174 return GetScreenSize();
177 virtual FloatDimension GetDefaultMinimumSizeF(_ControlOrientation orientation) const
179 return GetScreenSizeF();
182 virtual Dimension GetDefaultMaximumSize(_ControlOrientation orientation) const
184 return GetScreenSize();
187 virtual FloatDimension GetDefaultMaximumSizeF(_ControlOrientation orientation) const
189 return GetScreenSizeF();
192 virtual Dimension GetMinimumSizeLimit(_ControlOrientation orientation) const
194 return GetScreenSize();
197 virtual FloatDimension GetMinimumSizeLimitF(_ControlOrientation orientation) const
199 return GetScreenSizeF();
202 virtual Dimension GetMaximumSizeLimit(_ControlOrientation orientation) const
204 return GetScreenSize();
207 virtual FloatDimension GetMaximumSizeLimitF(_ControlOrientation orientation) const
209 return GetScreenSizeF();
213 Dimension GetScreenSize(void) const
215 _ControlManager* pMgr = _ControlManager::GetInstance();
216 SysTryReturn(NID_UI, pMgr, Dimension(0, 0), E_SYSTEM, "[E_SYSTEM] Failed to get control manager.");
217 return pMgr->GetScreenSize();
220 FloatDimension GetScreenSizeF(void) const
222 _ControlManager* pMgr = _ControlManager::GetInstance();
223 SysTryReturn(NID_UI, pMgr, FloatDimension(0.0f, 0.0f), E_SYSTEM, "[E_SYSTEM] Failed to get control manager.");
224 return pMgr->GetScreenSizeF();
228 static FullScreenSizeInfo sizeInfo;
232 // [ToDo] How to turn-off callback while initializing: Reset/Set delegate?
234 _ControlImpl::InitializeBoundsProperties(const SizeInfo& sizeInfo, _ControlOrientation orientation)
236 result r = E_SUCCESS;
238 bool resizable = IsResizable();
241 r = SetMinimumSize(sizeInfo.GetDefaultMinimumSize(orientation));
243 r == E_SUCCESS, E_SYSTEM,
244 E_SYSTEM, "[E_SYSTEM] Failed to initialize default minimum size.");
246 r = SetMaximumSize(sizeInfo.GetDefaultMaximumSize(orientation));
248 r == E_SUCCESS, E_SYSTEM,
249 E_SYSTEM, "[E_SYSTEM] Failed to initialize default maximum size.");
251 SetResizable(resizable);
257 _ControlImpl::InitializeBoundsProperties(const SizeInfo& sizeInfo, const Tizen::Graphics::Rectangle& bounds, _ControlOrientation orientation)
259 result r = InitializeBoundsProperties(sizeInfo, orientation);
265 bool movable = IsMovable();
266 bool resizable = IsResizable();
270 r = SetBounds(bounds);
273 SetResizable(resizable);
279 _ControlImpl::InitializeBoundsPropertiesF(const SizeInfo& sizeInfo, const Tizen::Graphics::FloatRectangle& bounds, _ControlOrientation orientation)
281 result r = InitializeBoundsProperties(sizeInfo, orientation);
287 bool movable = IsMovable();
288 bool resizable = IsResizable();
292 r = SetBounds(bounds);
295 SetResizable(resizable);
301 _ControlImpl::InitializeBoundsProperties(const SizeInfo& sizeInfo, const Tizen::Graphics::Dimension& size, _ControlOrientation orientation)
303 return InitializeBoundsProperties(sizeInfo, Rectangle(0, 0, size.width, size.height), orientation);
307 _ControlImpl::InitializeBoundsPropertiesF(const SizeInfo& sizeInfo, const Tizen::Graphics::FloatDimension& size, _ControlOrientation orientation)
309 return InitializeBoundsPropertiesF(sizeInfo, FloatRectangle(0.0f, 0.0f, size.width, size.height), orientation);
313 _ControlImpl::CreateControlImplN(Control& control)
316 result r = E_SUCCESS;
318 _Control* pCore = _Control::CreateControlN();
320 SysTryReturn(NID_UI, pCore, null, r, "[%s] Propagating.", GetErrorMessage(r));
322 _ControlImpl* pImpl = new (std::nothrow) _ControlImpl(&control, pCore);
323 r = CheckConstruction(pCore, pImpl);
324 SysTryReturn(NID_UI, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
330 _ControlImpl::Destroy(void)
332 result r = E_SUCCESS;
334 _ContainerImpl* pParent = GetParent();
337 r = pParent->RemoveChild(this, true);
338 SysAssert(r == E_SUCCESS);
342 _Control* pParent = GetCore().GetParent();
345 ControlList& children = pParent->GetChildList();
346 r = children.Remove(&GetCore());
349 Control* pControl= &GetPublic();
358 _ControlImpl::GetInstance(Control& control)
360 return static_cast <_ControlImpl*> (control._pControlImpl);
364 _ControlImpl::GetInstance(const Control& control)
366 return static_cast <const _ControlImpl*> (control._pControlImpl);
370 _ControlImpl::CheckConstruction(_Control* pCore, _ControlImpl* pImpl)
376 SysLogException(NID_UI, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Insufficient memory.");
377 return E_OUT_OF_MEMORY;
380 result r = GetLastResult();
385 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
392 const Tizen::Base::String _USER_EVENT = L"UserEvent";
393 const Tizen::Base::String _REQUEST_REDRAW_EVENT = L"RequestRedrawEvent";
394 const Tizen::Base::String _KEYBOARD_INSERTED_EVENT = L"KeyboardInsertedEvent";
395 const int keyPressTimer = 500;
396 const int doublePressTime = 330;
397 const int doublePressMoveAllowance = 10;
400 : public Tizen::Base::Object
403 _UserEventInfo(RequestId requestId, const IList* pArgs)
404 : __requestId(requestId)
405 , __pArgs(const_cast <IList*>(pArgs))
408 virtual ~_UserEventInfo(void) {}
410 RequestId GetRequestId(void) const
421 _UserEventInfo(const _UserEventInfo& rhs);
422 _UserEventInfo& operator =(const _UserEventInfo& rhs);
425 RequestId __requestId;
429 class _ControlImpl::CoreKeyEvent
432 CoreKeyEvent(_ControlImpl& impl)
434 , __core(impl.GetCore())
435 , __public(impl.GetPublic())
444 bool IsPublicKey(_KeyCode keyCode)
446 bool isPublicKey = false;
448 if (keyCode <= _KEY_HARDWARE_MAX)
456 result FirePublicListener(IKeyEventListener& listener, KeyState keyState, KeyCode keyCode)
458 result r = E_SUCCESS;
463 listener.OnKeyPressed(__public, keyCode);
466 listener.OnKeyReleased(__public, keyCode);
468 case KEY_LONGPRESSED:
469 listener.OnKeyLongPressed(__public, keyCode);
481 bool ProcessListener(KeyState keyState, _KeyCode keyCode)
483 bool filterd = false;
486 if (IsPublicKey(keyCode))
488 IEnumeratorT <IEventListener*>* pEnumerator = __impl.__pPublicKeyEventListeners->GetEnumeratorN();
491 while (pEnumerator->MoveNext() == E_SUCCESS)
493 IEventListener* pListener = null;
494 pEnumerator->GetCurrent(pListener);
496 IKeyEventListener* pKeyEventListener = dynamic_cast <IKeyEventListener*>(pListener);
497 if (pKeyEventListener)
499 FirePublicListener(*pKeyEventListener, keyState, (KeyCode)keyCode);
506 if (__impl.IsInputEventConsumed())
508 __impl.ResetInputEventConsumed();
515 if (IsPublicKey(keyCode))
517 IKeyEventListener* pDefaultListener = __impl.GetDefaultKeyEventListener();
518 if (pDefaultListener)
520 FirePublicListener(*pDefaultListener, keyState, (KeyCode)keyCode);
522 if (__impl.IsInputEventConsumed())
524 __impl.ResetInputEventConsumed();
536 CoreKeyEvent(const CoreKeyEvent& rhs);
537 CoreKeyEvent& operator =(const CoreKeyEvent& rhs);
540 _ControlImpl& __impl;
545 class _ControlImpl::CoreTouchEvent
548 CoreTouchEvent(_ControlImpl& impl)
550 , __core(impl.GetCore())
551 , __public(impl.GetPublic())
552 , __oldPreviousPressedTime(0)
553 , __previousPressedTime(0)
554 , __currentPressedTime(0)
555 , __previousPressedPoint(0, 0)
556 , __currentPressedPoint(0, 0)
559 __pTouchManager = _TouchManager::GetInstance();
560 SysTryReturnVoidResult(NID_UI, __pTouchManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
563 ~CoreTouchEvent(void)
569 _TouchEventArg* GetTouchEventArgN(const _TouchInfo& touchInfo)
571 _TouchEventArg* pEventArg = new (std::nothrow) _TouchEventArg(__public, touchInfo.GetTouchStatus());
572 SysTryReturn(NID_UI, pEventArg, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
574 Point startPoint(__pTouchManager->GetStartPoint(touchInfo.GetPointId()).x - __core.GetAbsoluteBounds().x,
575 __pTouchManager->GetStartPoint(touchInfo.GetPointId()).y - __core.GetAbsoluteBounds().y);
577 pEventArg->SetTouchPosition(touchInfo.GetPointId(), startPoint.x, startPoint.y,
578 touchInfo.GetCurrentPosition().x, touchInfo.GetCurrentPosition().y);
582 __impl.__pFlickGestureDetector->GetDistance(xDistance, yDistance);
584 if (xDistance != 0 || yDistance != 0)
586 pEventArg->SetFlickedStatus(true);
590 pEventArg->SetFlickedStatus(false);
596 result FirePublicListener(ITouchEventListener& listener, const TouchEventInfo& touchEventInfo)
598 result r = E_SUCCESS;
600 switch (touchEventInfo.GetTouchStatus())
603 listener.OnTouchPressed(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
605 case TOUCH_LONG_PRESSED:
606 listener.OnTouchLongPressed(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
609 listener.OnTouchReleased(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
612 listener.OnTouchMoved(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
614 case TOUCH_DOUBLE_PRESSED:
615 listener.OnTouchDoublePressed(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
618 listener.OnTouchFocusIn(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
620 case TOUCH_FOCUS_OUT:
621 listener.OnTouchFocusOut(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
624 listener.OnTouchCanceled(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
635 result FireFocusListener(ITouchEventListener& listener, const TouchEventInfo& touchEventInfo)
637 result r = E_SUCCESS;
639 _ControlManager* pControlManager = _ControlManager::GetInstance();
640 SysTryReturn(NID_UI, pControlManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
642 _TouchManager* pTouchManager = _TouchManager::GetInstance();
643 SysTryReturn(NID_UI, pTouchManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
645 Point screenPoint(pTouchManager->GetScreenPoint(touchEventInfo.GetPointId()).x, pTouchManager->GetScreenPoint(touchEventInfo.GetPointId()).y);
647 _Control* pTouchedControl = pControlManager->GetTopmostTouchedControl(screenPoint);
648 SysTryReturn(NID_UI, pTouchedControl, E_INVALID_CONDITION, E_INVALID_CONDITION, "[E_INVALID_CONDITION] pTouchedControl is null.");
650 if (__pTouchManager->GetFocusedControlSource() != pTouchedControl)
652 if (&(__core) != pTouchedControl)
654 if (__pTouchManager->GetFocusedControlSource() == &(__core))
656 listener.OnTouchFocusOut(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
661 listener.OnTouchFocusIn(__public, touchEventInfo.GetCurrentPosition(), touchEventInfo);
664 __pTouchManager->SetFocusedControlSource(*pTouchedControl);
671 result ProcessDragListener(const _TouchInfo& touchInfo)
673 if (!__core.IsDragEnabled())
675 return E_INVALID_CONDITION;
678 result r = E_SUCCESS;
680 IEnumeratorT <IEventListener*>* pDragEnumerator = __impl.__pPublicDragDropEventListeners->GetEnumeratorN();
683 while (pDragEnumerator->MoveNext() == E_SUCCESS)
685 IEventListener* pDragListener = null;
686 pDragEnumerator->GetCurrent(pDragListener);
688 if (pDragListener != null)
690 IDragDropEventListener* pDragDropEventListener = dynamic_cast <IDragDropEventListener*>(pDragListener);
691 if (pDragDropEventListener != null)
693 pDragDropEventListener->OnTouchDragged(__public, _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()));
695 IDragDropEventListenerF* pDragDropEventListenerF = dynamic_cast <IDragDropEventListenerF*>(pDragListener);
696 if (pDragDropEventListenerF != null)
698 pDragDropEventListenerF->OnTouchDraggedF(__public, touchInfo.GetCurrentPosition(), touchInfo.GetCurrentPosition());
702 delete pDragEnumerator;
708 result ProcessDropListener(const _TouchInfo& touchInfo)
710 if (!__core.IsDropEnabled())
712 return E_INVALID_CONDITION;
715 result r = E_SUCCESS;
717 _Control* pDraggedControl = __pTouchManager->GetTouchControlSource();
718 if (pDraggedControl != null)
720 IEnumeratorT<IEventListener*>* pDropEnumerator = __impl.__pPublicDragDropEventListeners->GetEnumeratorN();
723 while (pDropEnumerator->MoveNext() == E_SUCCESS)
725 IEventListener* pDropListener = null;
726 pDropEnumerator->GetCurrent(pDropListener);
728 if (pDropListener != null)
730 IDragDropEventListener* pDropEventListener = dynamic_cast <IDragDropEventListener*>(pDropListener);
731 if (pDropEventListener != null)
733 pDropEventListener->OnTouchDropped(__public, _CoordinateSystemUtils::ConvertToInteger(__pTouchManager->GetStartPoint(touchInfo.GetPointId())), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()));
738 delete pDropEnumerator;
745 result ProcessDropListenerToTopControl(const _TouchInfo& touchInfo)
747 result r = E_SUCCESS;
748 Point pt(__pTouchManager->GetScreenPoint(touchInfo.GetPointId()).x, __pTouchManager->GetScreenPoint(touchInfo.GetPointId()).y);
750 _Control* pCapturedControl = __pTouchManager->GetCapturedControl();
751 _Control* pDraggedControl = __pTouchManager->GetTouchControlSource();
752 if (!pDraggedControl || pCapturedControl)
758 _Control* pTopmostTouchedSource = __core.GetTopmostChildAt(pt);
759 if (!pTopmostTouchedSource)
765 if (!pTopmostTouchedSource->IsDragEnabled())
767 return E_INVALID_CONDITION;
770 TouchEventInfo publicTouchInfo;
772 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
773 SysTryReturn(NID_UI, pEventArg, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
775 publicTouchInfo.Construct(*pEventArg);
777 if (pTopmostTouchedSource != pDraggedControl)
779 _ControlImpl* pTopmostTouchedTarget = static_cast <_ControlImpl*>(pTopmostTouchedSource->GetUserData());
780 SysTryCatch(NID_UI, pTopmostTouchedTarget, , E_SYSTEM, "[E_SYSTEM] System error occurred.");
782 IEnumeratorT <Runtime::IEventListener*>* pDropEnumerator =
783 pTopmostTouchedTarget->GetDragDropEventListener()->GetEnumeratorN();
787 while (pDropEnumerator->MoveNext() == E_SUCCESS)
789 IEventListener* pDropListener = null;
790 pDropEnumerator->GetCurrent(pDropListener);
792 if (pDropListener != null)
794 IDragDropEventListener* pDropEventListener = dynamic_cast <IDragDropEventListener*>(pDropListener);
795 if (pDropEventListener != null)
797 pDropEventListener->OnTouchDropped(pTopmostTouchedTarget->GetPublic(),
798 publicTouchInfo.GetStartPosition(), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()));
802 delete pDropEnumerator;
805 IEnumeratorT <Runtime::IEventListener*>* pEnumerator =
806 pTopmostTouchedTarget->GetTouchEventListener()->GetEnumeratorN();
810 while (pEnumerator->MoveNext() == E_SUCCESS)
812 Runtime::IEventListener* pListener = null;
813 pEnumerator->GetCurrent(pListener);
815 if (pListener != null)
817 ITouchEventListener* pPublicListener = dynamic_cast <ITouchEventListener*>(pListener);
818 SysAssert(pPublicListener);
820 pPublicListener->OnTouchReleased(pTopmostTouchedTarget->GetPublic(), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()), publicTouchInfo);
826 if (pTopmostTouchedTarget->IsInputEventConsumed())
828 pTopmostTouchedTarget->ResetInputEventConsumed();
832 ITouchEventListener* pDefaultListener = pTopmostTouchedTarget->GetDefaultTouchEventListener();
833 if (pDefaultListener)
835 pDefaultListener->OnTouchReleased(pTopmostTouchedTarget->GetPublic(), _CoordinateSystemUtils::ConvertToInteger(touchInfo.GetCurrentPosition()), publicTouchInfo);
837 if (pTopmostTouchedTarget->IsInputEventConsumed())
839 pTopmostTouchedTarget->ResetInputEventConsumed();
844 if (pTopmostTouchedTarget->OnTouchReleased(*pTopmostTouchedTarget, touchInfo))
856 pTopmostTouchedSource->OnTouchReleased(*pTopmostTouchedSource, touchInfo);
877 bool ProcessListener(const _TouchInfo& touchInfo)
879 bool filterd = false;
881 TouchEventInfo publicTouchInfo;
883 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
884 SysTryReturn(NID_UI, pEventArg, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
886 publicTouchInfo.Construct(*pEventArg);
888 _Control* pDraggedControl = __pTouchManager->GetTouchControlSource();
891 IEnumeratorT<IEventListener*>* pEnumerator = __impl.__pPublicTouchEventListeners->GetEnumeratorN();
894 while (pEnumerator->MoveNext() == E_SUCCESS)
896 IEventListener* pListener = null;
897 pEnumerator->GetCurrent(pListener);
899 ITouchEventListener* pTouchEventListener = dynamic_cast <ITouchEventListener*>(pListener);
900 if (pTouchEventListener)
902 FirePublicListener(*pTouchEventListener, publicTouchInfo);
904 if (touchInfo.GetTouchStatus() == _TOUCH_RELEASED)
906 if (pDraggedControl == null) //if exist dragged control, don't send focus event
908 FireFocusListener(*pTouchEventListener, publicTouchInfo);
911 else if (touchInfo.GetTouchStatus() == _TOUCH_MOVED)
913 FireFocusListener(*pTouchEventListener, publicTouchInfo);
918 SysAssert(pTouchEventListener);
924 if (__impl.IsInputEventConsumed())
926 __impl.ResetInputEventConsumed();
939 ITouchEventListener* pDefaultListener = __impl.GetDefaultTouchEventListener();
940 if (pDefaultListener)
942 FirePublicListener(*pDefaultListener, publicTouchInfo);
944 if (__impl.IsInputEventConsumed())
946 __impl.ResetInputEventConsumed();
964 bool ProcessDoublePress(const _TouchInfo& touchinfo, bool& isFiltered)
966 if (__pTouchManager->GetPointCount() == 1)
968 __oldPreviousPressedTime = __previousPressedTime;
969 __previousPressedTime = __currentPressedTime;
970 __currentPressedTime = touchinfo.GetTimeStamp();
971 __previousPressedPoint.x = __currentPressedPoint.x;
972 __previousPressedPoint.y = __currentPressedPoint.y;
973 __currentPressedPoint.x = touchinfo.GetCurrentPosition().x;
974 __currentPressedPoint.y = touchinfo.GetCurrentPosition().y;
976 if (Math::Abs(__previousPressedTime - __currentPressedTime) < doublePressTime)
978 if (Math::Abs(__previousPressedTime - __oldPreviousPressedTime) > doublePressTime)
980 if (Math::Abs(__previousPressedPoint.x - __currentPressedPoint.x) < doublePressMoveAllowance
981 && Math::Abs(__previousPressedPoint.y - __currentPressedPoint.y) < doublePressMoveAllowance )
983 _TouchInfo touchInfo(0, _TOUCH_DOUBLE_PRESSED, __pTouchManager->GetPosition(0), false, 0);
985 SysTryReturn(NID_UI, __impl.__pCoreTouchEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
986 isFiltered = __impl.__pCoreTouchEvent->ProcessListener(touchInfo);
998 CoreTouchEvent(const CoreTouchEvent& rhs);
999 CoreTouchEvent& operator =(const CoreTouchEvent& rhs);
1002 _ControlImpl& __impl;
1005 _TouchManager* __pTouchManager;
1006 unsigned int __oldPreviousPressedTime;
1007 unsigned int __previousPressedTime;
1008 unsigned int __currentPressedTime;
1009 Point __previousPressedPoint;
1010 Point __currentPressedPoint;
1013 class _ControlImpl::CoreFocusEvent
1016 CoreFocusEvent(_ControlImpl& impl)
1018 , __core(impl.GetCore())
1019 , __public(impl.GetPublic())
1023 ~CoreFocusEvent(void)
1028 result FirePublicListener(IFocusEventListener& listener, FocusStatus focusState)
1030 result r = E_SUCCESS;
1035 listener.OnFocusGained(__public);
1038 listener.OnFocusLost(__public);
1050 bool ProcessListener(FocusStatus focusState)
1052 bool filterd = false;
1055 IEnumeratorT <IEventListener*>* pEnumerator = __impl.__pPublicFocusEventListeners->GetEnumeratorN();
1058 while (pEnumerator->MoveNext() == E_SUCCESS)
1060 Runtime::IEventListener* pListener = null;
1061 pEnumerator->GetCurrent(pListener);
1062 IFocusEventListener* pFocusEventListener = dynamic_cast <IFocusEventListener*>(pListener);
1063 if (pFocusEventListener)
1065 FirePublicListener(*pFocusEventListener, focusState);
1076 CoreFocusEvent(const CoreFocusEvent& rhs);
1077 CoreFocusEvent& operator =(const CoreFocusEvent& rhs);
1080 _ControlImpl& __impl;
1085 class _ControlImpl::CoreGestureEvent
1088 CoreGestureEvent(_ControlImpl& impl)
1090 , __core(impl.GetCore())
1091 , __public(impl.GetPublic())
1095 ~CoreGestureEvent(void)
1100 bool ProcessListener(_TouchGestureDetectorType gestureType)
1102 bool filterd = false;
1104 _TouchManager* pTouchManager = _TouchManager::GetInstance();
1105 SysTryReturn(NID_UI, pTouchManager, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1107 switch (gestureType)
1109 case _TOUCH_GESTURE_DETECTOR_TYPE_TAP:
1111 _TouchInfo touchInfo(0, _TOUCH_DOUBLE_PRESSED, pTouchManager->GetPosition(0), false, 0);
1113 SysTryReturn(NID_UI, __impl.__pCoreTouchEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1114 filterd = __impl.__pCoreTouchEvent->ProcessListener(touchInfo);
1117 case _TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS:
1119 _TouchInfo touchInfo(0, _TOUCH_LONG_PRESSED, pTouchManager->GetPosition(0), false, 0);
1121 SysTryReturn(NID_UI, __impl.__pCoreTouchEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1122 filterd = __impl.__pCoreTouchEvent->ProcessListener(touchInfo);
1134 CoreGestureEvent(const CoreGestureEvent& rhs);
1135 CoreGestureEvent& operator =(const CoreGestureEvent& rhs);
1138 _ControlImpl& __impl;
1143 class _ControlImpl::CoreEventListener
1144 : public _IFocusEventListener
1145 , public _INotificationEventListener
1146 , public _ITouchLongPressGestureEventListener
1147 , virtual public Tizen::Base::Runtime::IEventListener
1148 , virtual public _IUiEventListener
1149 , virtual public _ITouchGestureEventListener
1152 CoreEventListener(_ControlImpl& impl)
1154 , __core(impl.GetCore())
1155 , __public(impl.GetPublic())
1156 , __isKeyPressed(false)
1159 __pTouchManager = _TouchManager::GetInstance();
1160 SysTryReturnVoidResult(NID_UI, __pTouchManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1165 virtual ~CoreEventListener(void)
1169 virtual bool OnFocusGained(const _Control& source)
1171 SysTryReturn(NID_UI, __impl.__pCoreFocusEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1173 bool isFiltered = false;
1175 isFiltered = __impl.__pCoreFocusEvent->ProcessListener(FOCUS_GAINED);
1182 isFiltered = __impl.OnFocusGained(__impl);
1189 isFiltered = __core.OnFocusGained(source);
1194 virtual bool OnFocusLost(const _Control& source)
1196 SysTryReturn(NID_UI, __impl.__pCoreFocusEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1198 bool isFiltered = false;
1200 isFiltered = __impl.__pCoreFocusEvent->ProcessListener(FOCUS_LOST);
1207 isFiltered = __impl.OnFocusLost(__impl);
1214 isFiltered = __core.OnFocusLost(source);
1219 virtual bool OnNotifiedN(const _Control& source, Tizen::Base::Collection::IList* pArgs)
1221 if (__impl.SendNotification(__impl, pArgs))
1226 if (&source == &__core)
1228 if (ProcessTouchModeChangedListener(source, pArgs))
1230 pArgs->RemoveAll(true);
1237 if (__impl.OnNotifiedN(__impl, pArgs))
1243 return __core.OnNotifiedN(source, pArgs);
1246 virtual bool OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
1248 SysTryReturn(NID_UI, __impl.__pCoreGestureEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1249 bool isFiltered = false;
1251 isFiltered = __impl.__pCoreGestureEvent->ProcessListener(_TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS);
1256 virtual bool OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture)
1261 bool ProcessTouchModeChangedListener(const _Control& source, Tizen::Base::Collection::IList* pArgs)
1263 IEnumeratorT<IEventListener*>* pEnumerator = __impl.__pPublicTouchModeChangedEventListeners->GetEnumeratorN();
1264 bool isFiltered = false;
1268 while(pEnumerator->MoveNext() == E_SUCCESS)
1270 IEventListener* pEventListener = null;
1271 pEnumerator->GetCurrent(pEventListener);
1273 if (!pEventListener)
1278 String* pString = dynamic_cast<String*>(pArgs->GetAt(0));
1279 if (pString && (*pString == _KEYBOARD_INSERTED_EVENT))
1281 Boolean* pIsTouchMode = dynamic_cast<Boolean*>(pArgs->GetAt(1));
1282 ITouchModeChangedEventListener* pTouchModeListener = dynamic_cast<ITouchModeChangedEventListener*>(pEventListener);
1283 if (pTouchModeListener && pIsTouchMode)
1285 pTouchModeListener->OnTouchModeChanged(__impl.GetPublic(), pIsTouchMode->ToBool()) ;
1297 CoreEventListener(const CoreEventListener& rhs);
1298 CoreEventListener& operator =(const CoreEventListener& rhs);
1301 _ControlImpl& __impl;
1304 _TouchManager* __pTouchManager;
1305 bool __isKeyPressed;
1306 _KeyInfo* __pKeyInfo;
1309 class _ControlImpl::_PropagatedTouchEventListener
1310 : public _IPropagatedTouchEventListener
1313 _PropagatedTouchEventListener(_ControlImpl& impl)
1315 , __core(impl.GetCore())
1316 , __public(impl.GetPublic())
1320 virtual ~_PropagatedTouchEventListener()
1324 _TouchEventArg* GetTouchEventArgN(const _TouchInfo& touchInfo)
1326 _TouchEventArg* pEventArg = new (std::nothrow) _TouchEventArg(__public, touchInfo.GetTouchStatus());
1327 SysTryReturn(NID_UI, pEventArg, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1329 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
1330 SysTryReturn(NID_UI, __pTouchManager, null, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
1332 Point startPoint(__pTouchManager->GetStartPoint(touchInfo.GetPointId()).x - __core.GetAbsoluteBounds().x,
1333 __pTouchManager->GetStartPoint(touchInfo.GetPointId()).y - __core.GetAbsoluteBounds().y);
1335 pEventArg->SetTouchPosition(touchInfo.GetPointId(), startPoint.x, startPoint.y,
1336 touchInfo.GetCurrentPosition().x, touchInfo.GetCurrentPosition().y);
1340 __impl.__pFlickGestureDetector->GetDistance(xDistance, yDistance);
1342 if (xDistance != 0 || yDistance != 0)
1344 pEventArg->SetFlickedStatus(true);
1348 pEventArg->SetFlickedStatus(false);
1354 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
1356 bool isFiltered = false;
1358 if (__impl.__pPublicPropagatedTouchEventListener != null)
1360 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1361 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1363 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1365 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1367 TouchEventInfo publicTouchInfo;
1369 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1370 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1372 publicTouchInfo.Construct(*pEventArg);
1380 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchPressed(control, publicTouchInfo);
1386 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1387 SysTryReturn(NID_UI, pControl, true, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1390 return __impl.CallOnTouchPressed(source, touchInfo);
1393 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
1395 bool isFiltered = false;
1397 if (__impl.__pPublicPropagatedTouchEventListener != null)
1399 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1400 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1402 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1404 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1406 TouchEventInfo publicTouchInfo;
1408 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1409 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1411 publicTouchInfo.Construct(*pEventArg);
1419 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchReleased(control, publicTouchInfo);
1425 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1426 SysTryReturn(NID_UI, pControl, true, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1429 return __impl.CallOnTouchReleased(source, touchInfo);
1432 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
1434 bool isFiltered = false;
1436 if (__impl.__pPublicPropagatedTouchEventListener != null)
1438 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1439 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1441 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1443 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1445 TouchEventInfo publicTouchInfo;
1447 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1448 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1450 publicTouchInfo.Construct(*pEventArg);
1458 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchMoved(control, publicTouchInfo);
1464 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1465 SysTryReturn(NID_UI, pControl, true, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1468 return __impl.CallOnTouchMoved(source, touchInfo);
1471 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
1473 bool isFiltered = false;
1475 if (__impl.__pPublicPropagatedTouchEventListener != null)
1477 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1478 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1480 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1482 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1484 TouchEventInfo publicTouchInfo;
1486 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1487 SysTryReturn(NID_UI, pEventArg, false, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1489 publicTouchInfo.Construct(*pEventArg);
1497 isFiltered = __impl.__pPublicPropagatedTouchEventListener->OnTouchCanceled(control, publicTouchInfo);
1503 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1504 SysTryReturn(NID_UI, pControl, true, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1507 return __impl.CallOnTouchCanceled(source, touchInfo);
1510 virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchInfo)
1512 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1514 if (__impl.__pPublicPropagatedTouchEventListener != null)
1516 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1517 SysTryReturn(NID_UI, pControlImpl, _UI_TOUCH_EVENT_DELIVERY_YES, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1519 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1521 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1523 TouchEventInfo publicTouchInfo;
1525 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1526 SysTryReturn(NID_UI, pEventArg, _UI_TOUCH_EVENT_DELIVERY_YES, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1528 publicTouchInfo.Construct(*pEventArg);
1536 if (__impl.__pPublicPropagatedTouchEventListener->OnPreviewTouchPressed(control, publicTouchInfo) == true)
1538 return _UI_TOUCH_EVENT_DELIVERY_NO;
1541 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1542 SysTryReturn(NID_UI, pControl, _UI_TOUCH_EVENT_DELIVERY_NO, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1546 isFiltered = __impl.OnPreviewTouchPressed(__impl, touchInfo);
1547 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1549 return _UI_TOUCH_EVENT_DELIVERY_NO;
1553 isFiltered = __core.OnPreviewTouchPressed(source, touchInfo);
1558 virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchInfo)
1560 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1562 if (__impl.__pPublicPropagatedTouchEventListener != null)
1564 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1565 SysTryReturn(NID_UI, pControlImpl, _UI_TOUCH_EVENT_DELIVERY_YES, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1567 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1569 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1571 TouchEventInfo publicTouchInfo;
1573 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1574 SysTryReturn(NID_UI, pEventArg, _UI_TOUCH_EVENT_DELIVERY_YES, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1576 publicTouchInfo.Construct(*pEventArg);
1584 if (__impl.__pPublicPropagatedTouchEventListener->OnPreviewTouchReleased(control, publicTouchInfo) == true)
1586 return _UI_TOUCH_EVENT_DELIVERY_NO;
1589 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1590 SysTryReturn(NID_UI, pControl, _UI_TOUCH_EVENT_DELIVERY_NO, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1594 isFiltered = __impl.OnPreviewTouchReleased(__impl, touchInfo);
1595 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1597 return _UI_TOUCH_EVENT_DELIVERY_NO;
1601 isFiltered = __core.OnPreviewTouchReleased(source, touchInfo);
1606 virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchInfo)
1608 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1610 if (__impl.__pPublicPropagatedTouchEventListener != null)
1612 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1613 SysTryReturn(NID_UI, pControlImpl, _UI_TOUCH_EVENT_DELIVERY_YES, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1615 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1617 const _ControlHandle controlHandle = pControlImpl->GetCore().GetHandle();
1619 TouchEventInfo publicTouchInfo;
1621 _TouchEventArg* pEventArg = GetTouchEventArgN(touchInfo);
1622 SysTryReturn(NID_UI, pEventArg, _UI_TOUCH_EVENT_DELIVERY_YES, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
1624 publicTouchInfo.Construct(*pEventArg);
1632 if (__impl.__pPublicPropagatedTouchEventListener->OnPreviewTouchMoved(control, publicTouchInfo) == true)
1634 return _UI_TOUCH_EVENT_DELIVERY_NO;
1637 _Control* pControl = _ControlManager::GetInstance()->GetObject(controlHandle);
1638 SysTryReturn(NID_UI, pControl, _UI_TOUCH_EVENT_DELIVERY_NO, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] Target control is deleted.");
1642 isFiltered = __impl.OnPreviewTouchMoved(__impl, touchInfo);
1643 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1645 return _UI_TOUCH_EVENT_DELIVERY_NO;
1649 isFiltered = __core.OnPreviewTouchMoved(source, touchInfo);
1654 virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchInfo)
1656 return _UI_TOUCH_EVENT_DELIVERY_YES;
1659 virtual bool OnMousePressed(const _Control& source, const _MouseInfo& mouseInfo)
1661 SysLog(NID_UI, "OnMousePressed, source = 0x%x", &source);
1662 bool isFiltered = false;
1665 isFiltered = __impl.OnMousePressed(__impl, mouseInfo);
1672 isFiltered = __core.OnMousePressed(source, mouseInfo);
1677 virtual bool OnMouseReleased(const _Control& source, const _MouseInfo& mouseInfo)
1679 SysLog(NID_UI, "OnMouseReleased, source = 0x%x", &source);
1680 bool isFiltered = false;
1683 isFiltered = __impl.OnMouseReleased(__impl, mouseInfo);
1690 isFiltered = __core.OnMouseReleased(source, mouseInfo);
1695 virtual bool OnMouseMoved(const _Control& source, const _MouseInfo& mouseInfo)
1700 virtual bool OnMouseWheeled(const _Control& source, const _MouseInfo& mouseInfo)
1702 SysLog(NID_UI, "OnWheelMoved, source = 0x%x", &source);
1703 bool isFiltered = false;
1706 isFiltered = __impl.OnMouseWheeled(__impl, mouseInfo);
1713 isFiltered = __core.OnMouseWheeled(source, mouseInfo);
1718 virtual _UiTouchEventDelivery OnPreviewMousePressed(const _Control& source, const _MouseInfo& mouseInfo)
1720 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1723 isFiltered = __impl.OnPreviewMousePressed(__impl, mouseInfo);
1724 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1726 return _UI_TOUCH_EVENT_DELIVERY_NO;
1730 isFiltered = __core.OnPreviewMousePressed(source, mouseInfo);
1735 virtual _UiTouchEventDelivery OnPreviewMouseReleased(const _Control& source, const _MouseInfo& mouseInfo)
1737 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1740 isFiltered = __impl.OnPreviewMouseReleased(__impl, mouseInfo);
1741 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1743 return _UI_TOUCH_EVENT_DELIVERY_NO;
1747 isFiltered = __core.OnPreviewMouseReleased(source, mouseInfo);
1752 virtual _UiTouchEventDelivery OnPreviewMouseMoved(const _Control& source, const _MouseInfo& mouseInfo)
1754 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1757 isFiltered = __impl.OnPreviewMouseMoved(__impl, mouseInfo);
1758 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1760 return _UI_TOUCH_EVENT_DELIVERY_NO;
1764 isFiltered = __core.OnPreviewMouseMoved(source, mouseInfo);
1769 virtual _UiTouchEventDelivery OnPreviewMouseWheeled(const _Control& source, const _MouseInfo& mouseInfo)
1771 _UiTouchEventDelivery isFiltered = _UI_TOUCH_EVENT_DELIVERY_NO;
1774 isFiltered = __impl.OnPreviewMouseWheeled(__impl, mouseInfo);
1775 if (isFiltered == _UI_TOUCH_EVENT_DELIVERY_NO)
1777 return _UI_TOUCH_EVENT_DELIVERY_NO;
1781 isFiltered = __core.OnPreviewMouseWheeled(source, mouseInfo);
1786 virtual void OnTouchPressHandled(const _Control& source)
1788 __impl.OnTouchPressHandled(source);
1791 virtual void OnTouchReleaseHandled(const _Control& source)
1793 __impl.OnTouchReleaseHandled(source);
1796 virtual void OnTouchMoveHandled(const _Control& source)
1798 __impl.OnTouchMoveHandled(source);
1801 virtual void OnTouchCancelHandled(const _Control& source)
1803 __impl.OnTouchCancelHandled(source);
1807 _ControlImpl& __impl;
1812 class _ControlImpl::_PropagatedKeyEventListener
1813 : public _IPropagatedKeyEventListener
1814 , public ITimerEventListener
1817 _PropagatedKeyEventListener(_ControlImpl& impl)
1819 , __core(impl.GetCore())
1820 , __public(impl.GetPublic())
1822 , __isKeyPressed(false)
1827 virtual ~_PropagatedKeyEventListener()
1829 if (__pTimer != null)
1838 void OnTimerExpired(Timer& timer)
1842 SysTryReturnVoidResult(NID_UI, __impl.__pCoreKeyEvent, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1844 __impl.__pCoreKeyEvent->ProcessListener(KEY_LONGPRESSED, __pKeyInfo->GetKeyCode());
1848 virtual bool TranslateKeyEventInfo(const _Control& source, _KeyInfo& keyInfo)
1850 SysTryReturn(NID_UI, __impl.__pCoreKeyEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1852 bool isFiltered = false;
1854 if (__impl.__pPublicPropagatedKeyEventListener != null)
1856 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1857 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1859 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1861 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1862 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1864 isFiltered = __impl.__pPublicPropagatedKeyEventListener->TranslateKeyEventInfo(control, *pKeyEventInfo);
1867 keyInfo.SetKeyCode(static_cast<_KeyCode>(pKeyEventInfo->GetKeyCode()));
1868 keyInfo.SetKeyModifier(static_cast<_KeyModifier>(pKeyEventInfo->GetKeyModifier()));
1874 isFiltered = __impl.TranslateKeyEventInfo(__impl, keyInfo);
1881 isFiltered = __core.TranslateKeyEventInfo(source, keyInfo);
1886 virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
1888 SysTryReturn(NID_UI, __impl.__pCoreKeyEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1890 bool isFiltered = false;
1892 //SysLog(NID_UI, ">>> [impl.1] OnKeyPressed(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1894 if (__impl.__pPublicPropagatedKeyEventListener != null)
1896 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1897 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1899 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1901 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1902 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1904 //SysLog(NID_UI, ">>> [impl.2] OnKeyPressed(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1906 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnKeyPressed(control, *pKeyEventInfo);
1913 //SysLog(NID_UI, ">>> [impl.3] OnKeyPressed(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1915 if (&source == &__core)
1917 if (!__isKeyPressed)
1919 __pTimer = new (std::nothrow) Timer;
1920 SysTryReturn(NID_UI, __pTimer, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
1922 result r = __pTimer->Construct(*this);
1923 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1925 r = __pTimer->Start(keyPressTimer);
1928 __isKeyPressed = true;
1929 __pKeyInfo = const_cast<_KeyInfo*>(&keyInfo);
1933 isFiltered = __impl.__pCoreKeyEvent->ProcessListener(KEY_PRESSED, keyInfo.GetKeyCode());
1941 isFiltered = __impl.OnKeyPressed(__impl, keyInfo);
1948 isFiltered = __core.OnKeyPressed(source, keyInfo);
1953 virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
1955 SysTryReturn(NID_UI, __impl.__pCoreKeyEvent, false, E_SYSTEM, "[E_SYSTEM] System error occurred.");
1957 bool isFiltered = false;
1959 //SysLog(NID_UI, ">>> [impl.1] OnKeyReleased(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1961 if (__impl.__pPublicPropagatedKeyEventListener != null)
1963 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
1964 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
1966 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
1968 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
1969 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
1971 //SysLog(NID_UI, ">>> [impl.2] OnKeyReleased(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1973 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnKeyReleased(control, *pKeyEventInfo);
1980 //SysLog(NID_UI, ">>> [impl.3] OnKeyReleased(%d, %d)", keyInfo.GetKeyCode(), keyInfo.GetKeyModifier());
1982 if (&source == &__core)
1984 __isKeyPressed = false;
1987 if (__pTimer != null)
1995 isFiltered = __impl.__pCoreKeyEvent->ProcessListener(KEY_RELEASED, keyInfo.GetKeyCode());
2003 isFiltered = __impl.OnKeyReleased(__impl, keyInfo);
2010 isFiltered = __core.OnKeyReleased(source, keyInfo);
2015 virtual bool OnPreviewKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
2017 bool isFiltered = false;
2019 if (__impl.__pPublicPropagatedKeyEventListener != null)
2021 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
2022 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
2024 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
2026 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
2027 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
2029 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnPreviewKeyPressed(control, *pKeyEventInfo);
2037 isFiltered = __impl.OnPreviewKeyPressed(__impl, keyInfo);
2044 isFiltered = __core.OnPreviewKeyPressed(source, keyInfo);
2049 virtual bool OnPreviewKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
2051 bool isFiltered = false;
2053 if (__impl.__pPublicPropagatedKeyEventListener != null)
2055 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(source.GetUserData());
2056 SysTryReturn(NID_UI, pControlImpl, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] pControlImpl == null.");
2058 Control& control = static_cast<Control&>(pControlImpl->GetPublic());
2060 KeyEventInfo* pKeyEventInfo = new (std::nothrow) KeyEventInfo(static_cast<KeyCode>(keyInfo.GetKeyCode()),
2061 static_cast<KeyModifier>(keyInfo.GetKeyModifier()));
2063 isFiltered = __impl.__pPublicPropagatedKeyEventListener->OnPreviewKeyReleased(control, *pKeyEventInfo);
2071 isFiltered = __impl.OnPreviewKeyReleased(__impl, keyInfo);
2078 isFiltered = __core.OnPreviewKeyReleased(source, keyInfo);
2083 _ControlImpl& __impl;
2087 Tizen::Base::Runtime::Timer* __pTimer;
2088 bool __isKeyPressed;
2089 _KeyInfo* __pKeyInfo;
2093 _ControlImpl::GetErrorBounds(void)
2095 return Rectangle(0, 0, -1, -1);
2099 _ControlImpl::GetErrorBoundsF(void)
2101 return FloatRectangle(0.0f, 0.0f, -1.0f, -1.0f);
2105 _ControlImpl::GetErrorCompositeMode(void)
2107 return COMPOSITE_MODE_ALPHA_BLENDING;
2111 _ControlImpl::GetErrorChromaKeyColor(void)
2113 return Color::GetColor(COLOR_ID_MAGENTA);
2117 _ControlImpl::GetErrorMinimumSize(void)
2119 return Dimension(-1, -1);
2123 _ControlImpl::GetErrorMinimumSizeF(void)
2125 return FloatDimension(-1.0f, -1.0f);
2129 _ControlImpl::GetErrorMaximumSize(void)
2131 return Dimension(-1, -1);
2135 _ControlImpl::GetErrorMaximumSizeF(void)
2137 return FloatDimension(-1.0f, -1.0f);
2141 _ControlImpl::GetPublicClassName(void) const
2143 return "Tizen::Ui::Control";
2147 _ControlImpl::GetPublic(void) const
2149 return *__pControlPublic;
2153 _ControlImpl::GetPublic(void)
2155 return *__pControlPublic;
2159 _ControlImpl::GetCore(void) const
2161 return *__pControlCore;
2165 _ControlImpl::GetCore(void)
2167 return *__pControlCore;
2171 _ControlImpl::AddFocusEventListener(IFocusEventListener& listener)
2173 OnFocusEventListenerAdded(listener);
2178 _ControlImpl::AddKeyEventListener(IKeyEventListener& listener)
2181 SysTryReturn(NID_UI,
2182 __pPublicKeyEventListeners->Add(const_cast <IKeyEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
2183 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2189 _ControlImpl::AddTouchEventListener(ITouchEventListener& listener)
2191 SysAssert(__pControlCore && __pCoreEventListener && __pLongPressGestureDetector && __pFlickGestureDetector);
2194 SysTryReturn(NID_UI,
2195 __pPublicTouchEventListeners->Add(const_cast <ITouchEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
2196 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2198 OnTouchEventListenerAdded();
2203 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>*
2204 _ControlImpl::GetTouchEventListener(void) const
2206 return __pPublicTouchEventListeners;
2209 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>*
2210 _ControlImpl::GetKeyEventListener(void) const
2212 return __pPublicKeyEventListeners;
2216 _ControlImpl::AddDragDropEventListener(IDragDropEventListener& listener)
2219 SysTryReturn(NID_UI,
2220 __pPublicDragDropEventListeners->Add(const_cast <IDragDropEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
2221 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2227 _ControlImpl::AddDragDropEventListener(IDragDropEventListenerF& listener)
2230 SysTryReturn(NID_UI,
2231 __pPublicDragDropEventListeners->Add(const_cast <IDragDropEventListenerF*>(&listener)) == E_SUCCESS, E_SYSTEM,
2232 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2237 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>*
2238 _ControlImpl::GetDragDropEventListener(void) const
2240 return __pPublicDragDropEventListeners;
2244 _ControlImpl::AddTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
2247 SysTryReturn(NID_UI,
2248 __pPublicTouchModeChangedEventListeners->Add(
2249 const_cast <ITouchModeChangedEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
2250 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2256 _ControlImpl::RemoveFocusEventListener(IFocusEventListener& listener)
2258 OnFocusEventListenerRemoved(listener);
2263 _ControlImpl::RemoveKeyEventListener(IKeyEventListener& listener)
2266 SysTryReturn(NID_UI,
2267 __pPublicKeyEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2268 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2274 _ControlImpl::RemoveTouchEventListener(ITouchEventListener& listener)
2277 SysTryReturn(NID_UI,
2278 __pPublicTouchEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2279 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2281 // [ToDo] if the number of touch event listers becomes 0, disable gesture recognition.
2283 OnTouchEventListenerRemoved();
2289 _ControlImpl::RemoveDragDropEventListener(IDragDropEventListener& listener)
2292 SysTryReturn(NID_UI,
2293 __pPublicDragDropEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2294 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2300 _ControlImpl::RemoveDragDropEventListenerF(IDragDropEventListenerF& listener)
2303 SysTryReturn(NID_UI,
2304 __pPublicDragDropEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2305 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2311 _ControlImpl::RemoveTouchModeChangedEventListener(ITouchModeChangedEventListener& listener)
2314 SysTryReturn(NID_UI,
2315 __pPublicTouchModeChangedEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
2316 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2322 _ControlImpl::AddGestureDetector(const TouchGestureDetector& gestureDetector)
2324 SysTryReturn(NID_UI,
2325 __pPublicGestureDetectors->Add(
2326 const_cast <TouchGestureDetector*>(&gestureDetector)) == E_SUCCESS, E_SYSTEM,
2327 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2329 const _TouchGestureDetectorImpl* pImpl = _TouchGestureDetectorImpl::GetInstance(gestureDetector);
2330 SysTryReturn(NID_UI, pImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2332 result r = GetCore().AddGestureDetector(pImpl->GetCore());
2333 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2339 _ControlImpl::RemoveGestureDetector(const TouchGestureDetector& gestureDetector)
2341 SysTryReturn(NID_UI,
2342 __pPublicGestureDetectors->Remove(
2343 const_cast <TouchGestureDetector*>(&gestureDetector)) == E_SUCCESS, E_SYSTEM,
2344 E_SYSTEM, "[E_SYSTEM] System error occurred.");
2346 const _TouchGestureDetectorImpl* pImpl = _TouchGestureDetectorImpl::GetInstance(gestureDetector);
2347 SysTryReturn(NID_UI, pImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2349 result r = GetCore().RemoveGestureDetector(pImpl->GetCore());
2350 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2355 IListT<TouchGestureDetector*>*
2356 _ControlImpl::GetGestureDetectorList(void) const
2358 return __pPublicGestureDetectors;
2362 _ControlImpl::IsMovable(void) const
2364 return GetCore().IsMovable();
2368 _ControlImpl::IsResizable(void) const
2370 return GetCore().IsResizable();
2374 _ControlImpl::GetContentSize(void) const
2376 return GetCore().GetContentSize();
2380 _ControlImpl::GetContentSizeF(bool horizontalMode, bool verticalMode) const
2382 return GetCore().GetContentSizeF(horizontalMode, verticalMode);
2386 _ControlImpl::HitTest(const Tizen::Graphics::FloatPoint& point)
2388 return GetCore().HitTest(point);
2392 _ControlImpl::GetDescription(void) const
2394 String description(L"");
2396 description.Format(LOG_LEN_MAX, L"0x%x(0x%x, %s) fgColor(0x%x) fontSize(%d) ", this, __pControlPublic, GetPublicClassName(), __foregroundColor.GetRGB32(), __fontSize);
2398 if (__pControlAnimator)
2400 description.Append(L"ControlAnimator(");
2401 description.Append((int)__pControlAnimator);
2402 description.Append(L") ");
2405 if (__pCustomVisualElement)
2407 description.Append(L"CustomVisualElement(");
2408 description.Append((int)__pCustomVisualElement);
2409 description.Append(L") ");
2412 if (__pBuilderPortraitBounds)
2414 description.Append(L"PortraitBounds(");
2415 description.Append(__pBuilderPortraitBounds->x);
2416 description.Append(L" ");
2417 description.Append(__pBuilderPortraitBounds->y);
2418 description.Append(L" ");
2419 description.Append(__pBuilderPortraitBounds->width);
2420 description.Append(L" ");
2421 description.Append(__pBuilderPortraitBounds->height);
2422 description.Append(L") ");
2425 if (__pBuilderLandscapeBounds)
2427 description.Append(L"LandscapeBounds(");
2428 description.Append(__pBuilderLandscapeBounds->x);
2429 description.Append(L" ");
2430 description.Append(__pBuilderLandscapeBounds->y);
2431 description.Append(L" ");
2432 description.Append(__pBuilderLandscapeBounds->width);
2433 description.Append(L" ");
2434 description.Append(__pBuilderLandscapeBounds->height);
2435 description.Append(L") ");
2438 if (__pPublicGestureDetectors->GetCount() > 0 )
2440 IEnumeratorT<TouchGestureDetector*>* pEnumerator = __pPublicGestureDetectors->GetEnumeratorN();
2443 description.Append(L"TouchGestureDetector(");
2445 while (pEnumerator->MoveNext() == E_SUCCESS)
2447 TouchGestureDetector* pTouchGestureDetector = null;
2448 pEnumerator->GetCurrent(pTouchGestureDetector);
2449 if (pTouchGestureDetector)
2451 description.Append((int)pTouchGestureDetector);
2452 description.Append(L" ");
2456 description.Append(L") ");
2462 if (__pPublicFocusEventListeners->GetCount() > 0 )
2464 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicFocusEventListeners->GetEnumeratorN();
2467 description.Append(L"FocusListener(");
2469 while (pEnumerator->MoveNext() == E_SUCCESS)
2471 IEventListener* pListener = null;
2472 pEnumerator->GetCurrent(pListener);
2475 description.Append((int)pListener);
2476 description.Append(L" ");
2480 description.Append(L") ");
2486 if (__pPublicKeyEventListeners->GetCount() > 0 )
2488 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicKeyEventListeners->GetEnumeratorN();
2491 description.Append(L"KeyListener(");
2493 while (pEnumerator->MoveNext() == E_SUCCESS)
2495 IEventListener* pListener = null;
2496 pEnumerator->GetCurrent(pListener);
2499 description.Append((int)pListener);
2500 description.Append(L" ");
2504 description.Append(L") ");
2510 if (__pPublicTouchEventListeners->GetCount() > 0 )
2512 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicTouchEventListeners->GetEnumeratorN();
2515 description.Append(L"TouchListener(");
2517 while (pEnumerator->MoveNext() == E_SUCCESS)
2519 IEventListener* pListener = null;
2520 pEnumerator->GetCurrent(pListener);
2523 description.Append((int)pListener);
2524 description.Append(L" ");
2528 description.Append(L") ");
2534 if (__pPublicDragDropEventListeners->GetCount() > 0 )
2536 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicDragDropEventListeners->GetEnumeratorN();
2539 description.Append(L"DragDropListener(");
2541 while (pEnumerator->MoveNext() == E_SUCCESS)
2543 IEventListener* pListener = null;
2544 pEnumerator->GetCurrent(pListener);
2547 description.Append((int)pListener);
2548 description.Append(L" ");
2552 description.Append(L") ");
2558 if (__pPublicTouchModeChangedEventListeners->GetCount() > 0 )
2560 IEnumeratorT<IEventListener*>* pEnumerator = __pPublicTouchModeChangedEventListeners->GetEnumeratorN();
2563 description.Append(L"TouchModeListener(");
2565 while (pEnumerator->MoveNext() == E_SUCCESS)
2567 IEventListener* pListener = null;
2568 pEnumerator->GetCurrent(pListener);
2571 description.Append((int)pListener);
2572 description.Append(L" ");
2576 description.Append(L") ");
2586 _ControlImpl::OnDraw(void)
2591 Tizen::Graphics::Canvas*
2592 _ControlImpl::OnCanvasRequestedN(const Tizen::Graphics::FloatRectangle& bounds)
2594 return GetCore().OnCanvasRequestedN(bounds);
2597 Tizen::Graphics::Bitmap*
2598 _ControlImpl::OnCapturedBitmapRequestedN(void)
2601 return GetCore().OnCapturedBitmapRequestedN();
2605 _ControlImpl::OnAttaching(const _Control* pParent)
2607 return GetCore().OnAttaching(pParent);
2611 _ControlImpl::OnAttached(void)
2613 return GetCore().OnAttached();
2617 _ControlImpl::OnAttachingToMainTree(const _Control* pParent)
2619 return GetCore().OnAttachingToMainTree(pParent);
2623 _ControlImpl::OnPreAttachedToMainTree(void)
2629 _ControlImpl::OnAttachedToMainTree(void)
2631 result r = E_SUCCESS;
2632 result returnResultPublic = E_SUCCESS;
2633 result returnResultCore = E_SUCCESS;
2635 if (_AppInfo::GetApiVersion() == _API_VERSION_2_0 && _AppInfo::IsOspCompat())
2637 GetCore().SetDrawWhenVisible(false);
2638 GetCore().SetTerminatingOrder(true);
2641 returnResultPublic = GetPublic().OnInitializing();
2642 returnResultCore = GetCore().OnAttachedToMainTree();
2644 if (IsFailed(returnResultPublic) || IsFailed(returnResultCore))
2646 _ContainerImpl* pParent = GetParent();
2647 SysTryReturn(NID_UI, pParent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
2649 r = pParent->RemoveChild(this, false);
2650 SysAssert(r == E_SUCCESS);
2652 SysTryReturn(NID_UI, returnResultPublic == E_SUCCESS, returnResultPublic, returnResultPublic, "[%s] propagated.", GetErrorMessage(returnResultPublic));
2653 SysTryReturn(NID_UI, returnResultCore == E_SUCCESS, returnResultCore, returnResultCore, "[%s] propagated.", GetErrorMessage(returnResultCore));
2656 return returnResultPublic;
2660 _ControlImpl::OnDetachingFromMainTree(void)
2662 GetPublic().OnTerminating();
2663 return GetCore().OnDetachingFromMainTree();
2667 _ControlImpl::OnAttachingFailed(const _Control& parent)
2669 GetCore().OnAttachingFailed(parent);
2673 _ControlImpl::OnDetaching(void)
2679 _ControlImpl::OnBoundsChanging(const Rectangle& bounds)
2681 __oldBounds = _CoordinateSystemUtils::ConvertToFloat(GetBounds());
2683 return GetCore().OnBoundsChanging(bounds);
2687 _ControlImpl::OnBoundsChanging(const FloatRectangle& bounds)
2689 __oldBounds = GetBoundsF();
2691 return GetCore().OnBoundsChanging(bounds);
2695 _ControlImpl::OnBoundsChanged(void)
2697 GetCore().OnBoundsChanged();
2701 _ControlImpl::OnEvaluateSize(Dimension& evaluatedSize)
2703 GetCore().OnEvaluateSize(evaluatedSize);
2707 _ControlImpl::OnEvaluateSize(FloatDimension& evaluatedSize)
2709 return GetCore().OnEvaluateSize(evaluatedSize);
2713 _ControlImpl::OnParentBoundsChanged(const _Control& parent)
2715 GetCore().OnParentBoundsChanged(parent);
2719 _ControlImpl::OnChildAttached(const _Control& child)
2721 GetCore().OnChildAttached(child);
2725 _ControlImpl::OnChildDetaching(const _Control& child)
2727 GetCore().OnChildDetaching(child);
2731 _ControlImpl::OnChildDetached(const _Control& child)
2733 GetCore().OnChildDetached(child);
2737 _ControlImpl::OnChildBoundsChanged(const _Control& child)
2739 GetCore().OnChildBoundsChanged(child);
2743 _ControlImpl::OnChildVisibleStateChanged(const _Control& child)
2745 GetCore().OnChildVisibleStateChanged(child);
2749 _ControlImpl::OnChangeLayout(_ControlOrientation orientation)
2751 result r = E_SUCCESS;
2753 if (IsAttachedToMainTree())
2755 Rectangle builderBounds;
2756 bool exist = GetBuilderBounds(orientation, builderBounds);
2759 bool movable = IsMovable();
2760 bool resizable = IsResizable();
2765 r = SetBounds(builderBounds);
2766 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] Failed to set bounds of %s.", GetPublicClassName());
2767 builderBounds.x = 0;
2768 builderBounds.y = 0;
2769 SetClientBounds(builderBounds);
2771 SetMovable(movable);
2772 SetResizable(resizable);
2777 GetCore().OnChangeLayout(orientation);
2781 _ControlImpl::OnChangeLayout(_ControlRotation rotation)
2783 GetCore().OnChangeLayout(rotation);
2787 _ControlImpl::OnZOrderChanging(_ControlZOrderUpdate zOrderUpdate)
2789 GetCore().OnZOrderChanging(zOrderUpdate);
2793 _ControlImpl::OnVisibleStateChanging(void)
2795 GetCore().OnVisibleStateChanging();
2799 _ControlImpl::OnVisibleStateChanged(void)
2801 GetCore().OnVisibleStateChanged();
2805 _ControlImpl::OnAncestorVisibleStateChanged(const _Control& control)
2807 GetCore().OnAncestorVisibleStateChanged(control);
2811 _ControlImpl::OnAncestorEnableStateChanged(const _Control& control)
2813 GetCore().OnAncestorEnableStateChanged(control);
2817 _ControlImpl::OnAncestorInputEnableStateChanged(const _Control& control)
2819 GetCore().OnAncestorInputEnableStateChanged(control);
2823 _ControlImpl::OnTouchPressHandled(const _Control& control)
2825 GetCore().OnTouchPressHandled(control);
2829 _ControlImpl::OnTouchReleaseHandled(const _Control& control)
2831 GetCore().OnTouchReleaseHandled(control);
2835 _ControlImpl::OnTouchMoveHandled(const _Control& control)
2837 GetCore().OnTouchMoveHandled(control);
2841 _ControlImpl::OnFontChanged(Font* pFont)
2843 GetCore().OnFontChanged(pFont);
2847 _ControlImpl::OnFontInfoRequested(unsigned long& style, int& size)
2849 GetCore().OnFontInfoRequested(style, size);
2853 _ControlImpl::OnFontInfoRequested(unsigned long& style, float& size)
2855 GetCore().OnFontInfoRequested(style, size);
2859 _ControlImpl::OnBackgroundColorChanged(Color& backgroundColor)
2861 GetCore().OnBackgroundColorChanged(backgroundColor);
2865 _ControlImpl::OnFocusableStateChanged(bool focusalbeState)
2867 GetCore().OnFocusableStateChanged(focusalbeState);
2871 _ControlImpl::OnTouchCancelHandled(const _Control& control)
2873 GetCore().OnTouchCancelHandled(control);
2877 _ControlImpl::TranslateKeyEventInfo(const _ControlImpl& source, _KeyInfo& keyInfo)
2883 _ControlImpl::OnKeyPressed(const _ControlImpl& source, const _KeyInfo& keyInfo)
2889 _ControlImpl::OnKeyReleased(const _ControlImpl& source, const _KeyInfo& keyInfo)
2894 bool _ControlImpl::OnPreviewKeyPressed(const _ControlImpl& source, const _KeyInfo& keyInfo)
2899 bool _ControlImpl::OnPreviewKeyReleased(const _ControlImpl& source, const _KeyInfo& keyInfo)
2905 _ControlImpl::CallOnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
2907 bool isFiltered = false;
2909 if (source.IsDelayedTouchEventEnabled())
2911 if (&source == &GetCore())
2913 const_cast<_Control&>(source).AddTouchInfo(touchinfo);
2919 GetCore().SetEventEnableState(true);
2921 if (&source == &GetCore())
2923 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
2929 LinkedListT <Tizen::Base::Runtime::IEventListener*>* pList = GetTouchEventListener();
2930 if (pList && (pList->GetCount() > 0))
2932 __pCoreTouchEvent->ProcessDoublePress(touchinfo, isFiltered);
2935 __pCoreTouchEvent->ProcessDragListener(touchinfo);
2938 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
2939 SysTryReturn(NID_UI, __pTouchManager, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
2941 if (!GetCore().IsEventEnabled())
2943 __pTouchManager->ResetTouchInfo();
2948 if (!__pTouchManager->IsTouchAllowed())
2954 isFiltered = OnTouchPressed(*this, touchinfo);
2961 isFiltered = GetCore().OnTouchPressed(source, touchinfo);
2968 _ControlImpl::CallOnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
2970 bool isFiltered = false;
2972 if (source.IsDelayedTouchEventEnabled())
2974 if (&source == &GetCore())
2976 const_cast<_Control&>(source).AddTouchInfo(touchinfo);
2982 if (&source == &GetCore())
2984 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
2991 __pCoreTouchEvent->ProcessDropListener(touchinfo);
2993 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
2994 SysTryReturn(NID_UI, __pTouchManager, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
2996 if (!__pTouchManager->IsTouchAllowed())
3002 isFiltered = OnTouchReleased(*this, touchinfo);
3008 //send drop event to topmost touched control
3009 __pCoreTouchEvent->ProcessDropListenerToTopControl(touchinfo);
3012 isFiltered = GetCore().OnTouchReleased(source, touchinfo);
3018 _ControlImpl::CallOnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
3020 bool isFiltered = false;
3022 if (source.IsDelayedTouchEventEnabled())
3024 if (&source == &GetCore())
3026 const_cast<_Control&>(source).AddTouchInfo(touchinfo);
3032 if (&source == &GetCore())
3034 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
3040 __pCoreTouchEvent->ProcessDragListener(touchinfo);
3043 _TouchManager* __pTouchManager = _TouchManager::GetInstance();
3044 SysTryReturn(NID_UI, __pTouchManager, false, E_OBJ_NOT_FOUND, "[E_OBJ_NOT_FOUND] __pTouchManager == null.");
3046 if (!__pTouchManager->IsTouchAllowed())
3052 isFiltered = OnTouchMoved(*this, touchinfo);
3059 isFiltered = GetCore().OnTouchMoved(source, touchinfo);
3065 _ControlImpl::CallOnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
3067 bool isFiltered = false;
3069 __pCoreTouchEvent->ProcessDropListener(touchinfo);
3070 __pCoreTouchEvent->ProcessDropListenerToTopControl(touchinfo);
3072 if (&source == &GetCore())
3074 isFiltered = __pCoreTouchEvent->ProcessListener(touchinfo);
3082 isFiltered = OnTouchCanceled(*this, touchinfo);
3089 isFiltered = GetCore().OnTouchCanceled(source, touchinfo);
3095 _ControlImpl::OnTouchEventListenerAdded(void)
3097 // First time, enable gesture.
3098 if (__pPublicTouchEventListeners->GetCount() == 1)
3100 result r = E_SUCCESS;
3102 r = __pControlCore->AddGestureDetector(*__pLongPressGestureDetector);
3103 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3105 r = __pLongPressGestureDetector->AddGestureListener(*__pCoreEventListener);
3106 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3108 r = __pControlCore->AddGestureDetector(*__pFlickGestureDetector);
3109 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3111 r = __pFlickGestureDetector->AddGestureListener(*__pCoreEventListener);
3112 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3118 _ControlImpl::OnTouchEventListenerRemoved(void)
3124 _ControlImpl::OnFocusEventListenerAdded(IFocusEventListener& listener)
3127 SysTryReturnVoidResult(NID_UI,
3128 __pPublicFocusEventListeners->Add(const_cast <IFocusEventListener*>(&listener)) == E_SUCCESS, E_SYSTEM,
3129 "[E_SYSTEM] System error occurred.");
3133 _ControlImpl::OnFocusEventListenerRemoved(IFocusEventListener& listener)
3136 SysTryReturnVoidResult(NID_UI,
3137 __pPublicFocusEventListeners->Remove(&listener) == E_SUCCESS, E_SYSTEM,
3138 "[E_SYSTEM] System error occurred.");
3142 _ControlImpl::OnTouchPressed(const _ControlImpl& source, const _TouchInfo& touchinfo)
3148 _ControlImpl::OnTouchCanceled(const _ControlImpl& source, const _TouchInfo& touchinfo)
3154 _ControlImpl::OnTouchReleased(const _ControlImpl& source, const _TouchInfo& touchinfo)
3160 _ControlImpl::OnTouchMoved(const _ControlImpl& source, const _TouchInfo& touchinfo)
3165 _UiTouchEventDelivery
3166 _ControlImpl::OnPreviewTouchPressed(const _ControlImpl& source, const _TouchInfo& touchInfo)
3168 return _UI_TOUCH_EVENT_DELIVERY_YES;
3171 _UiTouchEventDelivery
3172 _ControlImpl::OnPreviewTouchReleased(const _ControlImpl& source, const _TouchInfo& touchInfo)
3174 return _UI_TOUCH_EVENT_DELIVERY_YES;
3177 _UiTouchEventDelivery
3178 _ControlImpl::OnPreviewTouchMoved(const _ControlImpl& source, const _TouchInfo& touchInfo)
3180 return _UI_TOUCH_EVENT_DELIVERY_YES;
3183 _UiTouchEventDelivery
3184 _ControlImpl::OnPreviewTouchCanceled(const _ControlImpl& source, const _TouchInfo& touchInfo)
3186 return _UI_TOUCH_EVENT_DELIVERY_YES;
3190 _ControlImpl::OnMousePressed(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3196 _ControlImpl::OnMouseReleased(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3202 _ControlImpl::OnMouseMoved(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3208 _ControlImpl::OnMouseWheeled(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3213 _UiTouchEventDelivery
3214 _ControlImpl::OnPreviewMousePressed(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3216 return _UI_TOUCH_EVENT_DELIVERY_YES;
3219 _UiTouchEventDelivery
3220 _ControlImpl::OnPreviewMouseReleased(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3222 return _UI_TOUCH_EVENT_DELIVERY_YES;
3225 _UiTouchEventDelivery
3226 _ControlImpl::OnPreviewMouseMoved(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3228 return _UI_TOUCH_EVENT_DELIVERY_YES;
3231 _UiTouchEventDelivery
3232 _ControlImpl::OnPreviewMouseWheeled(const _ControlImpl& source, const _MouseInfo& mouseinfo)
3234 return _UI_TOUCH_EVENT_DELIVERY_YES;
3238 _ControlImpl::OnFocusGained(const _ControlImpl& source)
3244 _ControlImpl::OnFocusLost(const _ControlImpl& source)
3250 _ControlImpl::OnNotifiedN(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs)
3256 _ControlImpl::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
3258 GetPublic().OnUserEventReceivedN(requestId, pArgs);
3262 _ControlImpl::SendNotification(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs)
3264 _ControlImpl& impl = const_cast <_ControlImpl&>(source);
3266 Tizen::Base::String* pString = dynamic_cast <Tizen::Base::String*>(pArgs->GetAt(0));
3269 if (*pString == _USER_EVENT)
3271 _UserEventInfo* pUserEventInfo = dynamic_cast <_UserEventInfo*>(pArgs->GetAt(1));
3274 impl.OnUserEventReceivedN(pUserEventInfo->GetRequestId(), pUserEventInfo->GetArgs());
3276 pArgs->RemoveAll(true);
3281 else if (*pString == _REQUEST_REDRAW_EVENT)
3285 Boolean* pBoolean = dynamic_cast <Boolean*>(pArgs->GetAt(1));
3286 if (pBoolean && pBoolean->ToBool())
3290 pArgs->RemoveAll(true);
3301 _ControlImpl::Draw(bool recursive)
3303 SysTryReturn(NID_UI,
3304 IsAttachedToMainTree(), E_INVALID_OPERATION,
3305 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3307 GetCore().Draw(recursive);
3313 _ControlImpl::Show(void)
3315 SysTryReturn(NID_UI,
3316 GetParent() || IsAttachedToMainTree(), E_INVALID_OPERATION,
3317 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3325 _ControlImpl::Invalidate(bool recursive)
3327 SysTryReturnVoidResult(NID_UI,
3328 IsAttachedToMainTree(),
3329 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3331 GetCore().Invalidate(recursive);
3335 _ControlImpl::Invalidate(const Rectangle& rect)
3337 SysTryReturnVoidResult(NID_UI,
3338 IsAttachedToMainTree(),
3339 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3341 GetCore().Invalidate(rect);
3345 _ControlImpl::Invalidate(const FloatRectangle& rect)
3347 SysTryReturnVoidResult(NID_UI,
3348 IsAttachedToMainTree(),
3349 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control should be attached to the main tree.");
3351 GetCore().Invalidate(rect);
3355 _ControlImpl::RequestRedraw(bool show) const
3359 ArrayList* pEventArgs = new (std::nothrow) ArrayList;
3360 SysTryReturnVoidResult(NID_UI, pEventArgs, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3362 pEventArgs->Construct();
3364 Tizen::Base::String* pString = new (std::nothrow) Tizen::Base::String(_REQUEST_REDRAW_EVENT);
3365 SysTryReturnVoidResult(NID_UI, pString, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3368 pEventArgs->Add(*pString);
3370 Boolean* pBoolean = new (std::nothrow) Boolean(show);
3371 SysTryReturnVoidResult(NID_UI, pBoolean, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3373 // Index 1 : User Data
3374 pEventArgs->Add(*pBoolean);
3376 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
3377 SysTryReturnVoidResult(NID_UI, pEventManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3379 _UiNotificationEvent event(GetCore().GetHandle(), pEventArgs);
3381 result r = pEventManager->PostEvent(event);
3382 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3386 _ControlImpl::SendUserEvent(RequestId requestId, const IList* pArgs) const
3390 ArrayList* pEventArgs = new (std::nothrow) ArrayList;
3391 SysTryReturnVoidResult(NID_UI, pEventArgs, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3393 pEventArgs->Construct();
3395 Tizen::Base::String* pString = new (std::nothrow) Tizen::Base::String(_USER_EVENT);
3396 SysTryReturnVoidResult(NID_UI, pString, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3399 pEventArgs->Add(*pString);
3401 _UserEventInfo* pUserEventInfo = new (std::nothrow) _UserEventInfo(requestId, pArgs);
3402 SysTryReturnVoidResult(NID_UI, pUserEventInfo, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
3404 // Index 1 : User Data
3405 pEventArgs->Add(*pUserEventInfo);
3407 _UiEventManager* pEventManager = _UiEventManager::GetInstance();
3408 SysTryReturnVoidResult(NID_UI, pEventManager, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3410 _UiNotificationEvent event(GetCore().GetHandle(), pEventArgs);
3412 result r = pEventManager->PostEvent(event);
3413 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3417 _ControlImpl::Contains(const Point& point) const
3419 return GetCore().Contains(point);
3423 _ControlImpl::Contains(const FloatPoint& point) const
3425 return GetCore().Contains(point);
3429 _ControlImpl::ConsumeInputEvent(void)
3432 __inputEventConsumed = true;
3436 _ControlImpl::IsInputEventConsumed(void) const
3439 return __inputEventConsumed;
3443 _ControlImpl::ResetInputEventConsumed(void)
3446 __inputEventConsumed = false;
3450 _ControlImpl::GetName(void) const
3452 return GetCore().GetName();
3456 _ControlImpl::SetName(const Tizen::Base::String& name)
3458 GetCore().SetName(name);
3462 _ControlImpl::GetParent(void) const
3466 _Control* pParent = GetCore().GetParent();
3467 if (pParent == null)
3472 void* pData = pParent->GetUserData();
3475 return null; // This is for the _ControlManager::__pRoot.
3478 _ContainerImpl* pParentImpl = static_cast <_ContainerImpl*>(pData);
3483 _ControlImpl::GetCanvasN(void) const
3485 SysTryReturn(NID_UI,
3486 GetParent() || IsAttachedToMainTree(), null,
3487 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3489 Canvas* pCanvas = GetCore().GetCanvasN();
3490 result r = GetLastResult();
3493 if (r == E_OPERATION_FAILED)
3495 SetLastResult(E_INVALID_OPERATION);
3497 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3503 pCanvas->SetBackgroundColor(GetBackgroundColor());
3504 pCanvas->SetForegroundColor(GetForegroundColor());
3512 _ControlImpl::GetCanvasN(const Rectangle& bounds) const
3514 SysTryReturn(NID_UI,
3515 GetParent() || IsAttachedToMainTree(), null,
3516 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3518 Canvas* pCanvas = GetCore().GetCanvasN(bounds);
3519 result r = GetLastResult();
3522 if (r == E_OPERATION_FAILED)
3524 SetLastResult(E_INVALID_OPERATION);
3526 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3532 pCanvas->SetBackgroundColor(GetBackgroundColor());
3533 pCanvas->SetForegroundColor(GetForegroundColor());
3541 _ControlImpl::GetCanvasN(const FloatRectangle& bounds) const
3543 SysTryReturn(NID_UI,
3544 GetParent() || IsAttachedToMainTree(), null,
3545 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3547 Canvas* pCanvas = GetCore().GetCanvasN(bounds);
3548 result r = GetLastResult();
3551 if (r == E_OPERATION_FAILED)
3553 SetLastResult(E_INVALID_OPERATION);
3555 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3561 pCanvas->SetBackgroundColor(GetBackgroundColor());
3562 pCanvas->SetForegroundColor(GetForegroundColor());
3570 _ControlImpl::GetClientCanvasN(void) const
3572 SysTryReturn(NID_UI,
3573 GetParent() || IsAttachedToMainTree(), null,
3574 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3576 Canvas* pCanvas = GetCore().GetClientCanvasN();
3577 result r = GetLastResult();
3580 if (r == E_OPERATION_FAILED)
3582 SetLastResult(E_INVALID_OPERATION);
3584 SysLog(NID_UI_CTRL, "[%s] Propagated", GetErrorMessage(GetLastResult()));
3590 pCanvas->SetBackgroundColor(GetBackgroundColor());
3591 pCanvas->SetForegroundColor(GetForegroundColor());
3599 _ControlImpl::IsAttachedToMainTree(void) const
3601 return GetCore().IsAttachedToMainTree();
3605 _ControlImpl::IsInTouchMode(void) const
3613 _ControlImpl::IsFocusable(void) const
3615 return GetCore().IsFocusable();
3619 _ControlImpl::SetFocusable(bool focusable)
3621 // [ToDo] Focusable is simple flag. Make this method do not check belows.
3622 SysTryReturn(NID_UI,
3623 __focusableChangable, E_INVALID_OPERATION,
3624 E_INVALID_OPERATION, "[E_INVALID_OPERATION] The control can't chage it's focusable property.");
3626 _Window* pTop = GetCore().GetRootWindow();
3629 SysTryReturn(NID_UI,
3630 focusable || pTop->GetFocusControl(&this->GetCore()) != &this->GetCore(), E_INVALID_OPERATION,
3631 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This already focused control cannot be unfocusable.");
3635 GetCore().SetFocusable(focusable);
3640 _ControlImpl::IsFocused(void) const
3642 return GetCore().IsFocused();
3646 _ControlImpl::SetFocused(void)
3648 return GetCore().SetFocused();
3652 _ControlImpl::SetFocusableChangable(bool focusableChangable)
3654 __focusableChangable = focusableChangable;
3658 _ControlImpl::SetFont(const String& fontName)
3660 result r = GetCore().SetFont(fontName);
3661 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3666 _ControlImpl::GetFont(void) const
3668 return GetCore().GetFont();
3673 _ControlImpl::IsEnabled(void) const
3675 return GetCore().IsEnabled();
3679 _ControlImpl::GetEnableState(void) const
3681 return GetCore().GetEnableState();
3685 _ControlImpl::SetEnableState(bool enableState)
3687 GetCore().SetEnableState(enableState);
3691 _ControlImpl::IsInputEventEnabled(void) const
3693 return GetCore().IsInputEventEnabled();
3697 _ControlImpl::GetInputEnableState(void) const
3699 return GetCore().GetInputEnableState();
3703 _ControlImpl::IsVisible(void) const
3705 // [ToDo] Change the default visible state to false and test.
3706 return GetCore().IsVisible();
3710 _ControlImpl::GetVisibleState(void) const
3712 return GetCore().GetVisibleState();
3716 _ControlImpl::SetVisibleState(bool visibleState)
3719 SysTryReturn(NID_UI,
3720 GetParent() || IsAttachedToMainTree(), E_INVALID_OPERATION,
3721 E_INVALID_OPERATION, "[E_INVALID_OPERATION] This control should have a parent or be attached to the main tree.");
3723 GetCore().SetVisibleState(visibleState);
3729 _ControlImpl::IsLayoutable(void) const
3731 return GetCore().IsLayoutable();
3735 _ControlImpl::IsClipToParent(void) const
3737 return GetCore().IsClipToParent();
3741 _ControlImpl::SetClipToParent(bool clipToParent)
3743 result r = GetCore().SetClipToParent(clipToParent);
3744 SysTryReturn(NID_UI, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
3750 _ControlImpl::IsDragEnabled(void) const
3752 return GetCore().IsDragEnabled();
3756 _ControlImpl::IsDropEnabled(void) const
3758 return GetCore().IsDropEnabled();
3762 _ControlImpl::SetDragEnabled(bool enabled)
3765 GetCore().SetDragEnabled(enabled);
3769 _ControlImpl::SetDropEnabled(bool enabled)
3772 GetCore().SetDropEnabled(enabled);
3776 _ControlImpl::GetBounds(void) const
3778 return GetCore().GetBounds();
3782 _ControlImpl::GetBoundsF(void) const
3784 return GetCore().GetBoundsF();
3788 _ControlImpl::GetPosition(void) const
3790 return GetCore().GetPosition();
3794 _ControlImpl::GetPositionF(void) const
3796 return GetCore().GetPositionF();
3800 _ControlImpl::GetSize(void) const
3802 return GetCore().GetSize();
3806 _ControlImpl::GetSizeF(void) const
3808 return GetCore().GetSizeF();
3812 _ControlImpl::GetUiBuilderOrientation(void) const
3814 _ControlOrientation controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
3816 _Window* pWindow = GetCore().GetRootWindow();
3819 return controlOrientation;
3822 _ControlImplManager* pControlImplManager = _ControlImplManager::GetInstance();
3823 if (!pControlImplManager)
3825 return controlOrientation;
3828 if (pWindow->IsOrientationRoot())
3831 OrientationStatus status = pControlImplManager->GetFormOrientationStatus(this);
3833 if ((status == ORIENTATION_STATUS_LANDSCAPE) || (status == ORIENTATION_STATUS_LANDSCAPE_REVERSE))
3835 controlOrientation = _CONTROL_ORIENTATION_LANDSCAPE;
3839 controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
3847 Tizen::Ui::Controls::_Popup* pPopup = dynamic_cast<Tizen::Ui::Controls::_Popup*>(pWindow);
3850 if (pWindow->IsOrientationCallbackModeEnabled() == false)
3858 _Control* pOwner = pWindow->GetOwner();
3861 _ControlImpl* pControlImpl = static_cast<_ControlImpl*>(pOwner->GetUserData());
3864 OrientationStatus status = pControlImplManager->GetFormOrientationStatus(pControlImpl);
3865 if ((status == ORIENTATION_STATUS_LANDSCAPE) || (status == ORIENTATION_STATUS_LANDSCAPE_REVERSE))
3867 controlOrientation = _CONTROL_ORIENTATION_LANDSCAPE;
3871 controlOrientation = _CONTROL_ORIENTATION_PORTRAIT;
3878 controlOrientation = GetCore().GetOrientation();
3882 return controlOrientation;
3886 _ControlImpl::UpdateBuilderBounds(const Tizen::Graphics::FloatRectangle& bounds)
3888 FloatRectangle builderBounds;
3889 _ControlOrientation controlOrientation = GetUiBuilderOrientation();
3890 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
3893 if (IsAttachedToMainTree())
3895 SetBuilderBounds(controlOrientation, bounds);
3899 SetBuilderBounds(_CONTROL_ORIENTATION_PORTRAIT, bounds);
3900 SetBuilderBounds(_CONTROL_ORIENTATION_LANDSCAPE, bounds);
3906 _ControlImpl::UpdateBuilderSize(const Tizen::Graphics::FloatDimension& dimension)
3908 FloatRectangle builderBounds;
3909 _ControlOrientation controlOrientation = GetUiBuilderOrientation();
3911 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
3914 builderBounds.width = dimension.width;
3915 builderBounds.height = dimension.height;
3916 UpdateBuilderBounds(builderBounds);
3921 _ControlImpl::UpdateBuilderPosition(const FloatPoint& position)
3923 FloatRectangle builderBounds;
3924 _ControlOrientation controlOrientation = GetUiBuilderOrientation();
3926 bool exist = GetBuilderBoundsF(controlOrientation, builderBounds);
3929 builderBounds.x = position.x;
3930 builderBounds.y = position.y;
3931 UpdateBuilderBounds(builderBounds);
3936 _ControlImpl::SetBounds(const Rectangle& bounds, bool callBoundsChangeCallbacks)
3938 UpdateBuilderBounds(_CoordinateSystemUtils::ConvertToFloat(bounds));
3939 return GetCore().SetBounds(bounds, callBoundsChangeCallbacks);
3943 _ControlImpl::SetBounds(const FloatRectangle& bounds, bool callBoundsChangeCallbacks)
3945 UpdateBuilderBounds(bounds);
3946 return GetCore().SetBounds(bounds, callBoundsChangeCallbacks);
3950 _ControlImpl::SetBoundsAndUpdateLayout(const Tizen::Graphics::Rectangle& bounds)
3952 result r = E_SUCCESS;
3953 r = GetCore().SetBounds(bounds);
3955 GetCore().UpdateLayout();
3961 _ControlImpl::SetBoundsAndUpdateLayoutF(const Tizen::Graphics::FloatRectangle& bounds)
3963 result r = E_SUCCESS;
3964 r = GetCore().SetBounds(bounds);
3966 GetCore().UpdateLayout();
3972 _ControlImpl::SetPosition(const Point& position)
3974 UpdateBuilderPosition(_CoordinateSystemUtils::ConvertToFloat(position));
3975 return GetCore().SetPosition(position);
3979 _ControlImpl::SetPosition(const FloatPoint& position)
3981 UpdateBuilderPosition(position);
3982 return GetCore().SetPosition(position);
3986 _ControlImpl::SetSize(const Dimension& size)
3988 UpdateBuilderSize(_CoordinateSystemUtils::ConvertToFloat(size));
3989 return GetCore().SetSize(size);
3993 _ControlImpl::SetSize(const FloatDimension& size)
3995 UpdateBuilderSize(size);
3996 return GetCore().SetSize(size);
4000 _ControlImpl::GetMinimumSize(void) const
4002 return GetCore().GetMinimumSize();
4006 _ControlImpl::GetMinimumSizeF(void) const
4008 return GetCore().GetMinimumSizeF();
4012 _ControlImpl::GetMaximumSize(void) const
4014 return GetCore().GetMaximumSize();
4018 _ControlImpl::GetMaximumSizeF(void) const
4020 return GetCore().GetMaximumSizeF();
4024 _ControlImpl::SetMinimumSize(const Tizen::Graphics::Dimension& newMinSize)
4026 return GetCore().SetMinimumSize(newMinSize);
4030 _ControlImpl::SetMinimumSize(const Tizen::Graphics::FloatDimension& newMinSize)
4032 return GetCore().SetMinimumSize(newMinSize);
4036 _ControlImpl::SetMaximumSize(const Tizen::Graphics::Dimension& newMaxSize)
4038 return GetCore().SetMaximumSize(newMaxSize);
4042 _ControlImpl::SetMaximumSize(const Tizen::Graphics::FloatDimension& newMaxSize)
4044 return GetCore().SetMaximumSize(newMaxSize);
4048 _ControlImpl::ConvertToControlPosition(const Point& screenPosition) const
4050 return GetCore().ConvertToControlPosition(screenPosition);
4054 _ControlImpl::ConvertToControlPosition(const FloatPoint& screenPosition) const
4056 return GetCore().ConvertToControlPosition(screenPosition);
4060 _ControlImpl::ConvertToScreenPosition(const Point& controlPosition) const
4062 return GetCore().ConvertToScreenPosition(controlPosition);
4066 _ControlImpl::ConvertToScreenPosition(const FloatPoint& controlPosition) const
4068 return GetCore().ConvertToScreenPosition(controlPosition);
4071 // [ToDo] Must provide a static method.
4073 _ControlImpl::GetMinimumSizeLimit(void) const
4076 return Dimension(0, 0);
4080 _ControlImpl::GetMinimumSizeLimitF(void) const
4083 return FloatDimension(0.0f, 0.0f);
4086 // [ToDo] Must provide a static method.
4088 _ControlImpl::GetMaximumSizeLimit(void) const
4091 return Dimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
4095 _ControlImpl::GetMaximumSizeLimitF(void) const
4098 return FloatDimension(_Control::MAX_LENGTH, _Control::MAX_LENGTH);
4103 _ControlImpl::GetClientBounds(void) const
4105 return GetCore().GetClientBounds();
4109 _ControlImpl::GetClientBoundsF(void) const
4111 return GetCore().GetClientBoundsF();
4115 _ControlImpl::GetAbsoluteBounds(void) const
4117 return GetCore().GetAbsoluteBounds();
4121 _ControlImpl::GetAbsoluteBoundsF(void) const
4123 return GetCore().GetAbsoluteBoundsF();
4127 _ControlImpl::SetClientBounds(const Rectangle& bounds)
4129 return GetCore().SetClientBounds(bounds);
4133 _ControlImpl::SetClientBounds(const FloatRectangle& bounds)
4135 return GetCore().SetClientBounds(bounds);
4139 _ControlImpl::GetBackgroundColor(void) const
4141 return GetCore().GetBackgroundColor();
4145 _ControlImpl::IsOpaque(void) const
4151 _ControlImpl::SetBackgroundColor(const Color& color)
4155 GetCore().SetBackgroundColor(color);
4160 color.GetColorComponents(r, g, b, a);
4161 GetCore().SetBackgroundColor(Color(r*a/ 255, g*a/255, b*a/ 255, 255));
4166 _ControlImpl::GetForegroundColor(void) const
4169 return __foregroundColor;
4173 _ControlImpl::SetForegroundColor(const Color& color)
4176 __foregroundColor = color;
4180 _ControlImpl::GetFontSize(void) const
4187 _ControlImpl::SetFontSize(int fontSize)
4190 __fontSize = fontSize;
4193 ITouchEventListener*
4194 _ControlImpl::GetDefaultTouchEventListener(void) const
4197 return __pDefaultTouchEventListener;
4201 _ControlImpl::GetDefaultKeyEventListener(void) const
4204 return __pDefaultKeyEventListener;
4208 _ControlImpl::SetDefaultKeyEventListener(IKeyEventListener* pDefaultListener)
4211 __pDefaultKeyEventListener = pDefaultListener;
4215 _ControlImpl::SetDefaultTouchEventListener(ITouchEventListener* pDefaultListener)
4218 __pDefaultTouchEventListener = pDefaultListener;
4222 _ControlImpl::GetCompositeMode(void) const
4225 return COMPOSITE_MODE_ALPHA_BLENDING;
4229 _ControlImpl::SetCompositeMode(CompositeMode compositeMode)
4233 if (compositeMode == COMPOSITE_MODE_ALPHA_BLENDING)
4238 SysLogException(NID_UI, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This operation is not supported.");
4239 return E_UNSUPPORTED_OPERATION;
4243 _ControlImpl::SetChromaKeyColor(Color chromaKeyColor)
4245 SysLogException(NID_UI, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This operation is not supported.");
4246 return E_UNSUPPORTED_OPERATION;
4250 _ControlImpl::GetChromaKeyColor(void) const
4252 static const Color errorColor(0, 0, 0, 0);
4253 SysLogException(NID_UI, E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] This operation is not supported.");
4257 Animations::ControlAnimator*
4258 _ControlImpl::GetControlAnimator(void) const
4262 if ((IsMovable() == false) && (IsResizable() == false))
4264 SysLog(NID_UI, "Control is not animatable.\n");
4268 if (__pControlAnimator == null)
4270 ControlAnimator* pControlAnimator = new (std::nothrow) ControlAnimator();
4271 SysTryReturn(NID_UI, (pControlAnimator != null), null, E_OUT_OF_MEMORY, "Unable to create ControlAnimator instance.\n");
4273 // [ToDo] Check if the Open API can return E_SYSTEM.
4274 result r = pControlAnimator->Construct(*__pControlPublic);
4277 delete pControlAnimator;
4278 SysLogException(NID_UI, E_SYSTEM, "[E_SYSTEM] Failed to create control animator.");
4282 (const_cast <_ControlImpl*>(this))->__pControlAnimator = pControlAnimator;
4285 return __pControlAnimator;
4289 _ControlImpl::GetVisualElement(void) const
4291 return GetCore().GetVisualElement();
4295 _ControlImpl::SetMultiTouchEnabled(bool enabled)
4297 GetCore().SetMultiTouchEnabled(enabled);
4301 _ControlImpl::IsMultiTouchEnabled(void) const
4303 return GetCore().IsMultiTouchEnabled();
4306 _ControlImpl::PublicEventListenerList*
4307 _ControlImpl::CreatePublicEventListenerListN(void) const
4309 PublicEventListenerList* pListenerList = new (std::nothrow) PublicEventListenerList;
4310 SysTryReturn(NID_UI, pListenerList, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4312 return pListenerList;
4316 _ControlImpl::HasCore(void) const
4318 return __pControlCore != null;
4322 _ControlImpl::SetCore(_Control& core)
4324 result r = E_SUCCESS;
4326 __pControlCore = &core;
4327 __pControlCore->SetControlDelegate(*this);
4328 __pControlCore->SetUserData(this);
4330 __pCoreEventListener = new (std::nothrow) CoreEventListener(*this);
4331 SysTryCatch(NID_UI, __pCoreEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4333 __pControlCore->SetEventListener<_UI_EVENT_FOCUS>(__pCoreEventListener);
4334 __pControlCore->SetEventListener<_UI_EVENT_NOTIFICAITON>(__pCoreEventListener);
4336 __pPropagatedTouchEventListener = new (std::nothrow) _PropagatedTouchEventListener(*this);
4337 SysTryCatch(NID_UI, __pPropagatedTouchEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4339 __pControlCore->SetPropagatedTouchEventListener(__pPropagatedTouchEventListener);
4341 __pPropagatedKeyEventListener = new (std::nothrow) _PropagatedKeyEventListener(*this);
4342 SysTryCatch(NID_UI, __pPropagatedKeyEventListener, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4344 __pControlCore->SetPropagatedKeyEventListener(__pPropagatedKeyEventListener);
4350 SysLogException(NID_UI, r, "[%s] Propagating.", GetErrorMessage(r));
4355 _ControlImpl::ResetCore(bool deallocate)
4357 if (__pControlCore == null)
4362 __pControlCore->ResetEventListeners();
4363 __pControlCore->SetUserData(null);
4364 __pControlCore->ResetControlDelegate();
4366 __pFlickGestureDetector->RemoveGestureListener(*__pCoreEventListener);
4367 __pControlCore->RemoveGestureDetector(*__pFlickGestureDetector);
4369 __pLongPressGestureDetector->RemoveGestureListener(*__pCoreEventListener);
4370 __pControlCore->RemoveGestureDetector(*__pLongPressGestureDetector);
4372 __pControlCore->SetPropagatedTouchEventListener(null);
4373 __pControlCore->SetPropagatedKeyEventListener(null);
4377 delete __pControlCore;
4379 __pControlCore = null;
4381 delete __pCoreEventListener;
4382 __pCoreEventListener = null;
4384 delete __pPropagatedTouchEventListener;
4385 __pPropagatedTouchEventListener = null;
4387 delete __pPropagatedKeyEventListener;
4388 __pPropagatedKeyEventListener = null;
4392 _ControlImpl::Dispose(bool deallocateCore)
4394 if(GetVisualElement() && __pCustomVisualElement)
4396 GetVisualElement()->DetachChild( *__pCustomVisualElement);
4398 __pCustomVisualElement = null;
4400 ResetCore(deallocateCore);
4402 // Release core events
4403 delete __pCoreKeyEvent;
4404 __pCoreKeyEvent = null;
4405 delete __pCoreTouchEvent;
4406 __pCoreTouchEvent = null;
4407 delete __pCoreFocusEvent;
4408 __pCoreFocusEvent = null;
4409 delete __pCoreGestureEvent;
4410 __pCoreGestureEvent = null;
4412 // Relese public event listeners
4413 delete __pPublicFocusEventListeners;
4414 __pPublicFocusEventListeners = null;
4415 delete __pPublicKeyEventListeners;
4416 __pPublicKeyEventListeners = null;
4417 delete __pPublicTouchEventListeners;
4418 __pPublicTouchEventListeners = null;
4419 delete __pPublicDragDropEventListeners;
4420 __pPublicDragDropEventListeners = null;
4421 delete __pPublicTouchModeChangedEventListeners;
4422 __pPublicTouchModeChangedEventListeners = null;
4424 // Release builder bounds
4425 delete __pBuilderPortraitBounds;
4426 __pBuilderPortraitBounds = null;
4427 delete __pBuilderLandscapeBounds;
4428 __pBuilderLandscapeBounds = null;
4431 delete __pControlAnimator;
4432 __pControlAnimator = null;
4434 delete __pPublicGestureDetectors;
4435 __pPublicGestureDetectors = null;
4437 delete __pFlickGestureDetector;
4438 __pFlickGestureDetector = null;
4440 delete __pLongPressGestureDetector;
4441 __pLongPressGestureDetector = null;
4443 delete __pAccessibilityContainerImpl;
4444 __pAccessibilityContainerImpl = null;
4446 __pPublicPropagatedTouchEventListener = null;
4447 __pPublicPropagatedKeyEventListener = null;
4450 _ControlImpl::~_ControlImpl(void)
4455 _ControlImpl::_ControlImpl(Control* pPublic, _Control* pCore)
4456 : __pControlPublic(pPublic)
4457 , __pControlCore(null)
4458 , __pControlAnimator(null)
4459 , __pCustomVisualElement(null)
4460 , __pPublicFocusEventListeners(null)
4461 , __pPublicKeyEventListeners(null)
4462 , __pPublicTouchEventListeners(null)
4463 , __pPublicDragDropEventListeners(null)
4464 , __pPublicTouchModeChangedEventListeners(null)
4465 , __pDefaultKeyEventListener(null)
4466 , __pDefaultTouchEventListener(null)
4467 , __foregroundColor(Color(0, 0, 0, 0))
4469 , __inputEventConsumed(false)
4470 , __focusableChangable(true)
4471 , __pCoreEventListener(null)
4472 , __pCoreKeyEvent(null)
4473 , __pCoreTouchEvent(null)
4474 , __pCoreFocusEvent(null)
4475 , __pCoreGestureEvent(null)
4476 , __pBuilderPortraitBounds(null)
4477 , __pBuilderLandscapeBounds(null)
4478 , __pFlickGestureDetector(null)
4479 , __pLongPressGestureDetector(null)
4480 , __pPublicGestureDetectors(null)
4481 , __pAccessibilityContainerImpl(null)
4482 , __pPublicPropagatedTouchEventListener(null)
4483 , __pPublicPropagatedKeyEventListener(null)
4486 result r = E_SUCCESS;
4488 SysAssert(__pControlPublic);
4492 r = SetCore(*pCore);
4493 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
4495 // Core event listeners: [ToDo: mklove.kang] Check exceptions because the constructors can fail.
4496 __pCoreKeyEvent = new (std::nothrow) CoreKeyEvent(*this);
4497 SysTryCatch(NID_UI, __pCoreKeyEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4499 __pCoreTouchEvent = new (std::nothrow) CoreTouchEvent(*this);
4500 SysTryCatch(NID_UI, __pCoreTouchEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4502 __pCoreFocusEvent = new (std::nothrow) CoreFocusEvent(*this);
4503 SysTryCatch(NID_UI, __pCoreFocusEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4505 __pCoreGestureEvent = new (std::nothrow) CoreGestureEvent(*this);
4506 SysTryCatch(NID_UI, __pCoreGestureEvent, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4508 __pFlickGestureDetector = new (std::nothrow) _TouchFlickGestureDetector;
4509 SysTryCatch(NID_UI, __pFlickGestureDetector, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4511 __pLongPressGestureDetector = new (std::nothrow) _TouchLongPressGestureDetector;
4512 SysTryCatch(NID_UI, __pLongPressGestureDetector, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4515 __pPublicFocusEventListeners = CreatePublicEventListenerListN();
4516 r = GetLastResult();
4517 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4519 __pPublicKeyEventListeners = CreatePublicEventListenerListN();
4520 r = GetLastResult();
4521 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4523 __pPublicTouchEventListeners = CreatePublicEventListenerListN();
4524 r = GetLastResult();
4525 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4527 __pPublicDragDropEventListeners = CreatePublicEventListenerListN();
4528 r = GetLastResult();
4529 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4531 __pPublicTouchModeChangedEventListeners = CreatePublicEventListenerListN();
4532 r = GetLastResult();
4533 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4535 __pPublicGestureDetectors = new (std::nothrow) LinkedListT<TouchGestureDetector*>;
4536 r = GetLastResult();
4537 SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4539 r = GET_COLOR_CONFIG(BASIC::foreground, __foregroundColor);
4540 SysTryReturnVoidResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
4543 SysAssert(r == E_SUCCESS);
4548 Dispose(true); // [ToDo] Is it OK?
4552 _ControlImpl::SetEffectSoundEnabled(bool enable)
4554 GetCore().SetEffectSoundEnabled(enable);
4558 _ControlImpl::IsEffectSoundEnabled(void) const
4560 return GetCore().IsEffectSoundEnabled();
4563 _Layout::LayoutContainer&
4564 _ControlImpl::GetLayoutContainer(void) const
4566 return GetCore().GetLayoutContainer();
4570 _ControlImpl::SetBuilderBounds(_ControlOrientation orientation, const Rectangle& bounds)
4574 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
4576 if (__pBuilderPortraitBounds == null)
4578 __pBuilderPortraitBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4580 SysTryReturn(NID_UI,
4581 __pBuilderPortraitBounds, E_OUT_OF_MEMORY,
4582 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4585 *__pBuilderPortraitBounds = _CoordinateSystemUtils::ConvertToFloat(bounds);
4588 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
4590 if (__pBuilderLandscapeBounds == null)
4592 __pBuilderLandscapeBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4594 SysTryReturn(NID_UI,
4595 __pBuilderLandscapeBounds, E_OUT_OF_MEMORY,
4596 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4599 *__pBuilderLandscapeBounds = _CoordinateSystemUtils::ConvertToFloat(bounds);
4608 _ControlImpl::SetBuilderBounds(_ControlOrientation orientation, const FloatRectangle& bounds)
4612 if (orientation == _CONTROL_ORIENTATION_PORTRAIT)
4614 if (__pBuilderPortraitBounds == null)
4616 __pBuilderPortraitBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4618 SysTryReturn(NID_UI,
4619 __pBuilderPortraitBounds, E_OUT_OF_MEMORY,
4620 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4623 *__pBuilderPortraitBounds = bounds;
4626 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE)
4628 if (__pBuilderLandscapeBounds == null)
4630 __pBuilderLandscapeBounds = new (std::nothrow) FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
4632 SysTryReturn(NID_UI,
4633 __pBuilderLandscapeBounds, E_OUT_OF_MEMORY,
4634 E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory shortage.");
4637 *__pBuilderLandscapeBounds = bounds;
4646 _ControlImpl::GetBuilderBounds(_ControlOrientation orientation, Rectangle& bounds) const
4650 if (orientation == _CONTROL_ORIENTATION_PORTRAIT && __pBuilderPortraitBounds)
4652 bounds = _CoordinateSystemUtils::ConvertToInteger(*__pBuilderPortraitBounds);
4655 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE && __pBuilderLandscapeBounds)
4657 bounds = _CoordinateSystemUtils::ConvertToInteger(*__pBuilderLandscapeBounds);
4665 _ControlImpl::GetBuilderBoundsF(_ControlOrientation orientation, FloatRectangle& bounds) const
4669 if (orientation == _CONTROL_ORIENTATION_PORTRAIT && __pBuilderPortraitBounds)
4671 bounds = *__pBuilderPortraitBounds;
4674 else if (orientation == _CONTROL_ORIENTATION_LANDSCAPE && __pBuilderLandscapeBounds)
4676 bounds = *__pBuilderLandscapeBounds;
4684 _ControlImpl::SetContentAreaBounds(const Rectangle& rect)
4686 GetCore().SetContentAreaBounds(rect);
4690 _ControlImpl::SetContentAreaBounds(const FloatRectangle& rect)
4692 GetCore().SetContentAreaBounds(rect);
4696 _ControlImpl::GetContentAreaBounds(void) const
4698 return GetCore().GetContentAreaBounds();
4702 _ControlImpl::GetContentAreaBoundsF(void) const
4704 return GetCore().GetContentAreaBoundsF();
4708 _ControlImpl::GetCapturedBitmapN(void) const
4710 return GetCore().GetCapturedBitmapN(true);
4714 _ControlImpl::GetInvalidatedBounds(void) const
4716 return GetCore().GetInvalidatedBounds();
4720 _ControlImpl::GetInvalidatedBoundsF(void) const
4722 return GetCore().GetInvalidatedBoundsF();
4726 _ControlImpl::GenerateKeyEvent(KeyState keyState, _KeyCode keyCode)
4728 result r = E_SUCCESS;
4730 SysTryReturn(NID_UI, keyState == KEY_LONGPRESSED,
4731 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] keyState is invalid.\n");
4733 SysTryReturn(NID_UI, __pCoreKeyEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
4735 __pCoreKeyEvent->ProcessListener(keyState, keyCode);
4741 _ControlImpl::GenerateTouchEvent(const _TouchInfo& touchInfo)
4743 result r = E_SUCCESS;
4745 _TouchStatus touchStatus = touchInfo.GetTouchStatus();
4747 SysTryReturn(NID_UI, (touchStatus == _TOUCH_LONG_PRESSED) || (touchStatus == _TOUCH_DOUBLE_PRESSED),
4748 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] touchStatus is invalid.\n");
4750 SysTryReturn(NID_UI, __pCoreTouchEvent, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] System error occurred.");
4752 __pCoreTouchEvent->ProcessListener(touchInfo);
4758 _ControlImpl::SetMovable(bool movable)
4760 GetCore().SetMovable(movable);
4764 _ControlImpl::SetResizable(bool resizable)
4766 GetCore().SetResizable(resizable);
4769 AccessibilityContainer*
4770 _ControlImpl::GetAccessibilityContainer(void)
4772 if(__pAccessibilityContainerImpl == null)
4774 AccessibilityContainer* pContainer = _AccessibilityContainerImpl::CreateAccessibilityContainerN(*this);
4777 __pAccessibilityContainerImpl = _AccessibilityContainerImpl::GetInstance(*pContainer);
4785 return &(__pAccessibilityContainerImpl->GetPublic());
4790 _ControlImpl::SetPublicPropagatedTouchEventListener(IPropagatedTouchEventListener* pListener)
4792 __pPublicPropagatedTouchEventListener = pListener;
4796 IPropagatedTouchEventListener*
4797 _ControlImpl::GetPublicPropagatedTouchEventListener(void) const
4799 return __pPublicPropagatedTouchEventListener;
4803 _ControlImpl::SetPublicPropagatedKeyEventListener(IPropagatedKeyEventListener* pListener)
4805 __pPublicPropagatedKeyEventListener = pListener;
4809 IPropagatedKeyEventListener*
4810 _ControlImpl::GetPublicPropagatedKeyEventListener(void) const
4812 return __pPublicPropagatedKeyEventListener;
4816 _ControlImpl::SetPreviousFocus(_ControlImpl* pPreviousFocus)
4818 if (pPreviousFocus == null)
4820 _Control* pControl = null;
4821 return GetCore().SetPreviousFocus(pControl);
4823 return GetCore().SetPreviousFocus(&pPreviousFocus->GetCore());
4827 _ControlImpl::SetNextFocus(_ControlImpl* pNextFocus)
4829 if (pNextFocus == null)
4831 _Control* pControl = null;
4832 return GetCore().SetPreviousFocus(pControl);
4834 return GetCore().SetNextFocus(&pNextFocus->GetCore());
4838 _ControlImpl::GetPreviousFocus(void) const
4840 if (GetCore().GetPreviousFocus() == null)
4844 return static_cast <_ControlImpl* >(GetCore().GetPreviousFocus()->GetUserData());
4848 _ControlImpl::GetNextFocus(void) const
4850 if (GetCore().GetNextFocus() == null)
4854 return static_cast <_ControlImpl* >(GetCore().GetNextFocus()->GetUserData());
4858 _ControlImpl::OnDrawFocus(void)
4860 GetCore().OnDrawFocus();
4864 _ControlImpl::OnChildControlFocusMoved(const _Control& control)
4866 GetCore().OnChildControlFocusMoved(control);
4870 _ControlImpl::OnDescendantControlFocusMoved(const _Control& control)
4872 GetCore().OnDescendantControlFocusMoved(control);
4876 _ControlImpl::OnFocusModeStateChanged(void)
4878 GetCore().OnFocusModeStateChanged();
4881 _ControlImpl::IsChildControlFocusManage(void) const
4883 GetCore().IsChildControlFocusManage();
4887 _ControlImpl::SetTouchPressThreshold(float distance)
4889 GetCore().SetTouchPressThreshold(distance);
4893 _ControlImpl::GetTouchPressThreshold(void) const
4895 return GetCore().GetTouchPressThreshold();
4899 _ControlImpl::GetTouchPressThresholdPixel(void) const
4901 return GetCore().GetTouchPressThresholdPixel();
4905 _ControlImpl::SetFontFromFile(const String& fileName)
4907 result r = GetCore().SetFontFromFile(fileName);
4908 SysTryReturn(NID_UI, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
4913 _ControlImpl::GetFontFile(void) const
4915 return GetCore().GetFontFile();