2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
18 * @file FUi_ControlImpl.h
19 * @brief This is the header file for the _ControlImpl class.
21 * This header file contains the declarations of the %_ControlImpl class.
24 #ifndef _FUI_INTERNAL_CONTROL_IMPL_H_
25 #define _FUI_INTERNAL_CONTROL_IMPL_H_
27 #include <FUiControl.h>
28 #include "FUi_Control.h"
30 namespace Tizen { namespace Base { namespace Collection
32 template<class T> class LinkedListT;
35 namespace Tizen { namespace Ui { namespace Animations
40 namespace Tizen { namespace Ui
46 class _TouchLongPressGestureDetector;
47 class _TouchFlickGestureDetector;
48 class TouchGestureDetector;
49 class _AccessibilityContainer;
50 class _AccessibilityContainerImpl;
51 class AccessibilityContainer;
53 class _OSP_EXPORT_ _ControlImpl
54 : public Tizen::Base::Object
55 , public _IControlDelegate
62 virtual ~SizeInfo(void);
63 virtual Tizen::Graphics::Dimension GetDefaultMinimumSize(_ControlOrientation orientation) const; // default: (0, 0)
64 virtual Tizen::Graphics::Dimension GetDefaultMaximumSize(_ControlOrientation orientation) const; // default: (short_max, short_max)
65 virtual Tizen::Graphics::Dimension GetMinimumSizeLimit(_ControlOrientation orientation) const; // default: (0, 0)
66 virtual Tizen::Graphics::Dimension GetMaximumSizeLimit(_ControlOrientation orientation) const; // default: (short_max, short_max)
67 result CheckInitialSizeValid(const Tizen::Graphics::Dimension& size,_ControlOrientation orientation) const;
72 static Tizen::Graphics::Rectangle GetErrorBounds(void);
73 static CompositeMode GetErrorCompositeMode(void);
74 static Tizen::Graphics::Color GetErrorChromaKeyColor(void);
75 static Tizen::Graphics::Dimension GetErrorMinimumSize(void);
76 static Tizen::Graphics::Dimension GetErrorMaximumSize(void);
78 static const SizeInfo& GetFullScreenSizeInfo(void);
82 static _ControlImpl* CreateControlImplN(Control& control);
83 virtual ~_ControlImpl(void);
85 static _ControlImpl* GetInstance(Control& control);
86 static const _ControlImpl* GetInstance(const Control& control);
90 virtual const char* GetPublicClassName(void) const;
91 virtual const Control& GetPublic(void) const;
92 virtual Control& GetPublic(void);
93 virtual const _Control& GetCore(void) const;
94 virtual _Control& GetCore(void);
96 // Public Event Listeners
97 result AddFocusEventListener(IFocusEventListener& listener);
98 result AddKeyEventListener(IKeyEventListener& listener);
99 result AddTouchEventListener(ITouchEventListener& listener);
100 result AddDragDropEventListener(IDragDropEventListener& listener);
101 result AddTouchModeChangedEventListener(ITouchModeChangedEventListener& listener);
102 result RemoveFocusEventListener(IFocusEventListener& listener);
103 result RemoveKeyEventListener(IKeyEventListener& listener);
104 result RemoveTouchEventListener(ITouchEventListener& listener);
105 result RemoveDragDropEventListener(IDragDropEventListener& listener);
106 result RemoveTouchModeChangedEventListener(ITouchModeChangedEventListener& listener);
107 result AddGestureDetector(const TouchGestureDetector& gestureDetector);
108 result RemoveGestureDetector(const TouchGestureDetector& gestureDetector);
109 Tizen::Base::Collection::IListT<TouchGestureDetector*>* GetGestureDetectorList(void) const;
111 // [ToDo] Rename API: These APIs return collection.
112 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>* GetTouchEventListener(void) const;
113 Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*>* GetDragDropEventListener(void) const;
116 virtual Tizen::Graphics::Dimension GetContentSize(void) const;
117 virtual Tizen::Ui::Animations::HitTestResult HitTest(const Tizen::Graphics::FloatPoint& point);
118 virtual Tizen::Base::String GetDescription(void) const;
121 virtual void OnDraw(void);
122 virtual Tizen::Graphics::Canvas* OnCanvasRequestedN(const Tizen::Graphics::Dimension& size);
123 virtual Tizen::Graphics::Bitmap* OnCapturedBitmapRequestedN(void);
124 virtual result OnAttaching(const _Control* pParent);
125 virtual void OnAttachingFailed(const _Control& parent);
126 virtual result OnAttached(void);
127 virtual result OnAttachingToMainTree(const _Control* pParent);
128 virtual result OnAttachedToMainTree(void);
129 virtual result OnDetachingFromMainTree(void);
130 virtual result OnDetaching(void);
131 virtual result OnBoundsChanging(const Tizen::Graphics::Rectangle& bounds);
132 virtual void OnBoundsChanged(void);
133 virtual void OnEvaluateSize(Tizen::Graphics::Dimension& evaluatedSize);
134 virtual void OnParentBoundsChanged(const _Control& parent);
135 virtual void OnChildAttached(const _Control& child);
136 virtual void OnChildDetaching(const _Control& child);
137 virtual void OnChildDetached(const _Control& child);
138 virtual void OnChildBoundsChanged(const _Control& child);
139 virtual void OnChildVisibleStateChanged(const _Control& child);
140 virtual void OnChangeLayout(_ControlOrientation orientation);
141 virtual void OnZOrderChanging(_ControlZOrderUpdate zOrderUpdate);
142 virtual void OnVisibleStateChanging(void);
143 virtual void OnVisibleStateChanged(void);
144 virtual void OnAncestorVisibleStateChanged(const _Control& control);
145 virtual void OnAncestorEnableStateChanged(const _Control& control);
146 virtual void OnTouchPressHandled(const _Control& control);
147 virtual void OnTouchReleaseHandled(const _Control& control);
148 virtual void OnTouchMoveHandled(const _Control& control);
149 virtual void OnTouchCancelHandled(const _Control& control);
150 virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
151 virtual void OnFontInfoRequested(unsigned long& style, int& size);
154 virtual bool OnKeyPressed(const _ControlImpl& source, const _KeyInfo& keyInfo);
155 virtual bool OnKeyReleased(const _ControlImpl& source, const _KeyInfo& keyInfo);
156 virtual bool OnTouchPressed(const _ControlImpl& source, const _TouchInfo& touchinfo);
157 virtual bool OnTouchReleased(const _ControlImpl& source, const _TouchInfo& touchinfo);
158 virtual bool OnTouchMoved(const _ControlImpl& source, const _TouchInfo& touchinfo);
159 virtual bool OnTouchCanceled(const _ControlImpl& source, const _TouchInfo& touchinfo);
160 virtual bool OnFocusGained(const _ControlImpl& source);
161 virtual bool OnFocusLost(const _ControlImpl& source);
162 virtual bool OnNotifiedN(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs);
163 virtual void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs);
166 bool IsAttachedToMainTree(void) const;
167 _ContainerImpl* GetParent(void) const;
170 result Draw(bool recursive = true);
172 void Invalidate(bool recursive);
173 void Invalidate(const Tizen::Graphics::Rectangle& rect);
174 Tizen::Graphics::Canvas* GetCanvasN(void) const;
175 Tizen::Graphics::Canvas* GetCanvasN(const Tizen::Graphics::Rectangle& bounds) const;
176 Tizen::Graphics::Canvas* GetClientCanvasN(void) const;
177 void RequestRedraw(bool show) const;
179 virtual bool IsOpaque(void) const;
180 Tizen::Graphics::Color GetForegroundColor(void) const;
181 Tizen::Graphics::Color GetBackgroundColor(void) const;
182 void SetForegroundColor(const Tizen::Graphics::Color& color);
183 void SetBackgroundColor(const Tizen::Graphics::Color& color);
185 int GetFontSize(void) const;
186 void SetFontSize(int fontSize);
189 result SetFont(const Tizen::Base::String& fontName);
190 Tizen::Base::String GetFont(void) const;
193 bool IsEnabled(void) const;
194 bool GetEnableState(void) const;
195 void SetEnableState(bool enableState);
197 bool IsInputEnabled(void) const;
198 bool GetInputEnableState(void) const;
199 void SetInputEnableState(bool inputEnableState);
202 bool IsVisible(void) const;
203 bool GetVisibleState(void) const;
204 result SetVisibleState(bool visibleState);
207 bool IsFocusable(void) const;
208 bool IsFocused(void) const;
209 void SetFocusableChangable(bool focusableChangable);
210 result SetFocusable(bool focusable);
211 result SetFocused(void);
214 bool IsClipToParent(void) const;
215 result SetClipToParent(bool clipToParent);
218 bool IsMovable(void) const;
219 bool IsResizable(void) const;
221 Tizen::Graphics::Rectangle GetBounds(void) const;
222 Tizen::Graphics::Point GetPosition(void) const;
223 Tizen::Graphics::Dimension GetSize(void) const;
224 result SetBounds(const Tizen::Graphics::Rectangle& bounds, bool checkMove = true);
225 result SetBoundsAndUpdateLayout(const Tizen::Graphics::Rectangle& bounds);
226 result SetPosition(const Tizen::Graphics::Point& position);
227 result SetSize(const Tizen::Graphics::Dimension& size);
229 Tizen::Graphics::Dimension GetMinimumSize(void) const;
230 Tizen::Graphics::Dimension GetMaximumSize(void) const;
231 result SetMinimumSize(const Tizen::Graphics::Dimension& newMinSize);
232 result SetMaximumSize(const Tizen::Graphics::Dimension& newMaxSize);
233 Tizen::Graphics::Point ConvertToControlPosition(const Tizen::Graphics::Point& screenPosition) const;
234 Tizen::Graphics::Point ConvertToScreenPosition(const Tizen::Graphics::Point& controlPosition) const;
236 Tizen::Graphics::Rectangle GetClientBounds(void) const;
237 Tizen::Graphics::Rectangle GetAbsoluteBounds(void) const;
238 result SetClientBounds(const Tizen::Graphics::Rectangle& bounds);
240 virtual Tizen::Graphics::Dimension GetMinimumSizeLimit(void) const;
241 virtual Tizen::Graphics::Dimension GetMaximumSizeLimit(void) const;
243 Tizen::Graphics::Bitmap* GetCapturedBitmapN(void) const;
244 Tizen::Graphics::Rectangle GetInvalidatedBounds(void) const;
246 bool Contains(const Tizen::Graphics::Point& point) const;
248 bool GetBuilderBounds(_ControlOrientation orientation, Tizen::Graphics::Rectangle& bounds) const;
249 result SetBuilderBounds(_ControlOrientation orientation, const Tizen::Graphics::Rectangle& bounds);
252 bool IsLayoutable(void) const;
253 _Layout::LayoutContainer& GetLayoutContainer(void) const;
255 // Key, Touch, Gesture
256 bool IsInTouchMode(void) const;
257 bool IsDragEnabled(void) const;
258 bool IsDropEnabled(void) const;
259 void SetDragEnabled(bool enabled);
260 void SetDropEnabled(bool enabled);
261 bool IsMultiTouchEnabled(void) const;
262 void SetMultiTouchEnabled(bool enabled);
263 result GenerateKeyEvent(KeyState keyState, _KeyCode keyCode);
264 result GenerateTouchEvent(const _TouchInfo& touchInfo);
267 Tizen::Base::String GetName(void) const;
268 void SetName(const Tizen::Base::String& name);
271 void SendUserEvent(RequestId requestId, const Tizen::Base::Collection::IList* pArgs) const;
274 void ConsumeInputEvent(void);
275 ITouchEventListener* GetDefaultTouchEventListener(void) const;
276 IKeyEventListener* GetDefaultKeyEventListener(void) const;
277 void SetDefaultKeyEventListener(IKeyEventListener* pDefaultListener);
278 void SetDefaultTouchEventListener(ITouchEventListener* pDefaultListener);
281 Animations::ControlAnimator* GetControlAnimator(void) const;
283 // Control VisualElement
284 Tizen::Ui::Animations::VisualElement* GetVisualElement(void) const;
286 AccessibilityContainer* GetAccessibilityContainer(void);
288 Tizen::Ui::CompositeMode GetCompositeMode(void) const;
289 result SetCompositeMode(Tizen::Ui::CompositeMode compositeMode);
290 Tizen::Graphics::Color GetChromaKeyColor(void) const;
291 result SetChromaKeyColor(Tizen::Graphics::Color chromaKeyColor);
295 _ControlImpl(Control* pPublic, _Control* pCore);
296 static result CheckConstruction(_Control* pCore, _ControlImpl* pImpl); // Use this in the Factory methods.
298 typedef Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*> PublicEventListenerList;
299 PublicEventListenerList* CreatePublicEventListenerListN(void) const;
301 void SetMovable(bool movable);
302 void SetResizable(bool resizable);
304 // Initializing Impl's bounds
305 result InitializeBoundsProperties(const SizeInfo& sizeInfo, _ControlOrientation orientation);
306 result InitializeBoundsProperties(const SizeInfo& sizeInfo, const Tizen::Graphics::Rectangle& bounds, _ControlOrientation orientation);
307 result InitializeBoundsProperties(const SizeInfo& sizeInfo, const Tizen::Graphics::Dimension& size, _ControlOrientation orientation);
310 _ControlImpl(const _ControlImpl& rhs);
311 _ControlImpl& operator =(const _ControlImpl& rhs);
313 bool IsInputEventConsumed(void) const;
314 void ResetInputEventConsumed(void);
315 bool SendNotification(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs);
317 // [ToDo] If not necessary remove.
318 bool HasCore(void) const;
319 result SetCore(_Control& core);
320 void ResetCore(bool deallocate = false);
322 void Dispose(bool deallocateCore);
324 bool CallOnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
325 bool CallOnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
326 bool CallOnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
327 bool CallOnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
330 Tizen::Graphics::Rectangle __oldBounds;
331 Control* __pControlPublic;
332 _Control* __pControlCore;
333 Tizen::Ui::Animations::ControlAnimator* __pControlAnimator;
334 Tizen::Ui::Animations::VisualElement* __pCustomVisualElement;
336 PublicEventListenerList* __pPublicFocusEventListeners;
337 PublicEventListenerList* __pPublicKeyEventListeners;
338 PublicEventListenerList* __pPublicTouchEventListeners;
339 PublicEventListenerList* __pPublicDragDropEventListeners;
340 PublicEventListenerList* __pPublicTouchModeChangedEventListeners;
342 IKeyEventListener* __pDefaultKeyEventListener;
343 ITouchEventListener* __pDefaultTouchEventListener;
345 Tizen::Graphics::Color __foregroundColor;
348 bool __inputEventConsumed;
349 bool __focusableChangable;
351 class CoreEventListener;
352 CoreEventListener* __pCoreEventListener;
355 CoreKeyEvent* __pCoreKeyEvent;
357 class CoreTouchEvent;
358 CoreTouchEvent* __pCoreTouchEvent;
360 class CoreFocusEvent;
361 CoreFocusEvent* __pCoreFocusEvent;
363 class CoreGestureEvent;
364 CoreGestureEvent* __pCoreGestureEvent;
366 class _PropagatedTouchEventListener;
367 _PropagatedTouchEventListener* __pPropagatedTouchEventListener;
369 class _PropagatedKeyEventListener;
370 _PropagatedKeyEventListener* __pPropagatedKeyEventListener;
372 Tizen::Graphics::Rectangle* __pBuilderPortraitBounds;
373 Tizen::Graphics::Rectangle* __pBuilderLandscapeBounds;
375 _TouchFlickGestureDetector* __pFlickGestureDetector;
376 _TouchLongPressGestureDetector* __pLongPressGestureDetector;
377 Tizen::Base::Collection::IListT<TouchGestureDetector*>* __pPublicGestureDetectors;
378 _AccessibilityContainerImpl* __pAccessibilityContainerImpl;
379 friend class _ContainerImpl;
384 #endif // _FUI_INTERNAL_CONTROL_IMPL_H_