Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUi_ControlImpl.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 //     http://floralicense.org/license/
10 //
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.
16 //
17 /**
18  * @file        FUi_ControlImpl.h
19  * @brief       This is the header file for the _ControlImpl class.
20  *
21  * This header file contains the declarations of the %_ControlImpl class.
22  */
23
24 #ifndef _FUI_INTERNAL_CONTROL_IMPL_H_
25 #define _FUI_INTERNAL_CONTROL_IMPL_H_
26
27 #include <FUiControl.h>
28 #include "FUi_Control.h"
29
30 namespace Tizen { namespace Base { namespace Collection
31 {
32 template<class T> class LinkedListT;
33 }}}
34
35 namespace Tizen { namespace Ui { namespace Animations
36 {
37 class VisualElement;
38 }}}
39
40 namespace Tizen { namespace Ui
41 {
42
43 class _ContainerImpl;
44 class _Control;
45 class _TouchInfo;
46 class _TouchLongPressGestureDetector;
47 class _TouchFlickGestureDetector;
48 class TouchGestureDetector;
49 class _AccessibilityContainer;
50 class _AccessibilityContainerImpl;
51 class AccessibilityContainer;
52
53 class _OSP_EXPORT_ _ControlImpl
54         : public Tizen::Base::Object
55         , public _IControlDelegate
56 {
57 // Size Info
58 public:
59         class SizeInfo
60         {
61         public:
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;
68         };
69
70 // Constants
71 public:
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);
77
78         static const SizeInfo& GetFullScreenSizeInfo(void);
79
80 // Life Cycle
81 public:
82         static _ControlImpl* CreateControlImplN(Control& control);
83         virtual ~_ControlImpl(void);
84
85         static _ControlImpl* GetInstance(Control& control);
86         static const _ControlImpl* GetInstance(const Control& control);
87
88 // Common
89 public:
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);
95
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;
110
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;
114
115 // Queries
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;
119
120 // Callbacks
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);
152
153 // Event Callbacks
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);
164
165 // Control Hierarchy
166         bool IsAttachedToMainTree(void) const;
167         _ContainerImpl* GetParent(void) const;
168
169 // Drawing
170         result Draw(bool recursive = true);
171         result Show(void);
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;
178
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);
184
185         int GetFontSize(void) const;
186         void SetFontSize(int fontSize);
187
188 // Font
189         result SetFont(const Tizen::Base::String& fontName);
190         Tizen::Base::String GetFont(void) const;
191
192 // Enable
193         bool IsEnabled(void) const;
194         bool GetEnableState(void) const;
195         void SetEnableState(bool enableState);
196
197         bool IsInputEnabled(void) const;
198         bool GetInputEnableState(void) const;
199         void SetInputEnableState(bool inputEnableState);
200
201 // Visible
202         bool IsVisible(void) const;
203         bool GetVisibleState(void) const;
204         result SetVisibleState(bool visibleState);
205
206 // Focus
207         bool IsFocusable(void) const;
208         bool IsFocused(void) const;
209         void SetFocusableChangable(bool focusableChangable);
210         result SetFocusable(bool focusable);
211         result SetFocused(void);
212
213 // Clipping
214         bool IsClipToParent(void) const;
215         result SetClipToParent(bool clipToParent);
216
217 // Geometry
218         bool IsMovable(void) const;
219         bool IsResizable(void) const;
220
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);
228
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;
235
236         Tizen::Graphics::Rectangle GetClientBounds(void) const;
237         Tizen::Graphics::Rectangle GetAbsoluteBounds(void) const;
238         result SetClientBounds(const Tizen::Graphics::Rectangle& bounds);
239
240         virtual Tizen::Graphics::Dimension GetMinimumSizeLimit(void) const;
241         virtual Tizen::Graphics::Dimension GetMaximumSizeLimit(void) const;
242
243         Tizen::Graphics::Bitmap* GetCapturedBitmapN(void) const;
244         Tizen::Graphics::Rectangle GetInvalidatedBounds(void) const;
245
246         bool Contains(const Tizen::Graphics::Point& point) const;
247
248         bool GetBuilderBounds(_ControlOrientation orientation, Tizen::Graphics::Rectangle& bounds) const;
249         result SetBuilderBounds(_ControlOrientation orientation, const Tizen::Graphics::Rectangle& bounds);
250
251 // Layout
252         bool IsLayoutable(void) const;
253         _Layout::LayoutContainer& GetLayoutContainer(void) const;
254
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);
265
266 // Name
267         Tizen::Base::String GetName(void) const;
268         void SetName(const Tizen::Base::String& name);
269
270 // Use Event
271         void SendUserEvent(RequestId requestId, const Tizen::Base::Collection::IList* pArgs) const;
272
273 // Event Consumming
274         void ConsumeInputEvent(void);
275         ITouchEventListener* GetDefaultTouchEventListener(void) const;
276         IKeyEventListener* GetDefaultKeyEventListener(void) const;
277         void SetDefaultKeyEventListener(IKeyEventListener* pDefaultListener);
278         void SetDefaultTouchEventListener(ITouchEventListener* pDefaultListener);
279
280 // Control Animator
281         Animations::ControlAnimator* GetControlAnimator(void) const;
282
283 // Control VisualElement
284         Tizen::Ui::Animations::VisualElement* GetVisualElement(void) const;
285
286         AccessibilityContainer* GetAccessibilityContainer(void);
287 // Deprecated APIs
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);
292
293
294 protected:
295         _ControlImpl(Control* pPublic, _Control* pCore);
296         static result CheckConstruction(_Control* pCore, _ControlImpl* pImpl); // Use this in the Factory methods.
297
298         typedef Tizen::Base::Collection::LinkedListT <Tizen::Base::Runtime::IEventListener*> PublicEventListenerList;
299         PublicEventListenerList* CreatePublicEventListenerListN(void) const;
300
301         void SetMovable(bool movable);
302         void SetResizable(bool resizable);
303
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);
308
309 private:
310         _ControlImpl(const _ControlImpl& rhs);
311         _ControlImpl& operator =(const _ControlImpl& rhs);
312
313         bool IsInputEventConsumed(void) const;
314         void ResetInputEventConsumed(void);
315         bool SendNotification(const _ControlImpl& source, Tizen::Base::Collection::IList* pArgs);
316
317         // [ToDo] If not necessary remove.
318         bool HasCore(void) const;
319         result SetCore(_Control& core);
320         void ResetCore(bool deallocate = false);
321
322         void Dispose(bool deallocateCore);
323
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);
328
329 private:
330         Tizen::Graphics::Rectangle __oldBounds;
331         Control* __pControlPublic;
332         _Control* __pControlCore;
333         Tizen::Ui::Animations::ControlAnimator* __pControlAnimator;
334         Tizen::Ui::Animations::VisualElement* __pCustomVisualElement;
335
336         PublicEventListenerList* __pPublicFocusEventListeners;
337         PublicEventListenerList* __pPublicKeyEventListeners;
338         PublicEventListenerList* __pPublicTouchEventListeners;
339         PublicEventListenerList* __pPublicDragDropEventListeners;
340         PublicEventListenerList* __pPublicTouchModeChangedEventListeners;
341
342         IKeyEventListener* __pDefaultKeyEventListener;
343         ITouchEventListener* __pDefaultTouchEventListener;
344
345         Tizen::Graphics::Color __foregroundColor;
346         int __fontSize;
347
348         bool __inputEventConsumed;
349         bool __focusableChangable;
350
351         class CoreEventListener;
352         CoreEventListener* __pCoreEventListener;
353
354         class CoreKeyEvent;
355         CoreKeyEvent* __pCoreKeyEvent;
356
357         class CoreTouchEvent;
358         CoreTouchEvent* __pCoreTouchEvent;
359
360         class CoreFocusEvent;
361         CoreFocusEvent* __pCoreFocusEvent;
362
363         class CoreGestureEvent;
364         CoreGestureEvent* __pCoreGestureEvent;
365
366         class _PropagatedTouchEventListener;
367         _PropagatedTouchEventListener* __pPropagatedTouchEventListener;
368
369         class _PropagatedKeyEventListener;
370         _PropagatedKeyEventListener* __pPropagatedKeyEventListener;
371
372         Tizen::Graphics::Rectangle* __pBuilderPortraitBounds;
373         Tizen::Graphics::Rectangle* __pBuilderLandscapeBounds;
374
375         _TouchFlickGestureDetector* __pFlickGestureDetector;
376         _TouchLongPressGestureDetector* __pLongPressGestureDetector;
377         Tizen::Base::Collection::IListT<TouchGestureDetector*>* __pPublicGestureDetectors;
378         _AccessibilityContainerImpl* __pAccessibilityContainerImpl;
379         friend class _ContainerImpl;
380 }; // _ControlImpl
381
382 }} // Tizen::Ui
383
384 #endif // _FUI_INTERNAL_CONTROL_IMPL_H_