Fork for IVI: mesa fixing
[profile/ivi/uifw.git] / src / ui / inc / FUiCtrl_ScrollPanelPresenter.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 /**
19  * @file        FUiCtrl_ScrollPanelPresenter.h
20  * @brief       This is the header file for the _ScrollPanelPresenter class.
21  *
22  * This header file contains the declarations of the _ScrollPanelPresenter class.
23  */
24
25 #ifndef _FUI_CTRL_INTERNAL_SCROLL_PANEL_PRESENTER_H_
26 #define _FUI_CTRL_INTERNAL_SCROLL_PANEL_PRESENTER_H_
27
28 #include <FBaseRtITimerEventListener.h>
29 #include "FUiCtrl_ScrollPanel.h"
30 #include "FUiCtrl_PanelPresenter.h"
31
32 namespace Tizen { namespace Ui
33 {
34
35 class _Control;
36 class _TouchInfo;
37 class _TouchFlickGestureDetector;
38
39 }}      // Tizen::Ui
40
41 namespace Tizen { namespace Ui { namespace Controls
42 {
43
44 class _ScrollPanelModel;
45
46
47 class _ScrollPanelPresenter
48         : public _PanelPresenter
49         , public Tizen::Base::Runtime::ITimerEventListener
50         , virtual public Tizen::Base::Runtime::IEventListener
51 {
52 // Lifecycle
53 public:
54         _ScrollPanelPresenter(void);
55         virtual ~_ScrollPanelPresenter(void);
56
57 // Operations
58 public:
59         virtual result Initialize(_ScrollPanel& scrollPanel);
60
61         virtual result Draw(void);
62
63         // Control Delegator
64         virtual result OnBoundsChanging(const Tizen::Graphics::Rectangle& bounds);
65         virtual void OnBoundsChanged(void);
66
67         // Listener
68         virtual void OnChildAttached(const _Control& child);
69         virtual void OnChildDetached(const _Control& child);
70         virtual void OnChildBoundsChanged(const _Control& child);
71
72         // Touch Event Previewer
73         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchInfo);
74         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchInfo);
75         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchInfo);
76         virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
77
78         // Touch Event Listener
79         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchInfo);
80         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchInfo);
81         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchInfo);
82         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
83         virtual void OnTouchMoveHandled(const _Control& control);
84
85         // gestureListener callback API
86         virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
87         virtual bool OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture);
88
89         // accessibility listener
90         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
91         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
92         virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
93         virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
94         virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
95         virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
96
97         // scroll event listener
98         virtual void OnScrollEndReached(_Control& source, ScrollEndEvent type);
99         virtual void OnScrollPositionChanged(_Control& source, int scrollPos);
100
101         // Timer - Tension, FlickGesture
102         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
103
104         // scroll animation event listener
105         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
106         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
107         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
108
109         virtual void OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue);
110
111         // Scroll Operations
112         void ScrollToBottom(void);
113         void ScrollToTop(void);
114         void ScrollToLeft(void);
115         void ScrollToRight(void);
116
117         // scrollable container interface
118         bool ScrollToControl(const _Control& source);
119
120         // Accessor
121         bool IsScrollable(void) const;
122
123         // scroll area
124         Tizen::Graphics::Rectangle GetScrollAreaBounds(void) const;
125         result SetClientAreaHeight(int height);
126         result SetClientAreaWidth(int width);
127         result SetScrollAreaBounds(Tizen::Graphics::Rectangle& bounds);
128         void SetScrollAreaBoundsInternal(Tizen::Graphics::Rectangle& bounds);
129
130         // scroll position
131         void SetScrollPosition(int position, bool withAnimation);       // sets and move
132         int GetScrollPosition(void) const;
133
134         int GetVerticalScrollPosition(void) const;
135         void SetVerticalScrollPosition(int position);
136
137         int GetHorizontalScrollPosition(void) const;
138         void SetHorizontalScrollPosition(int position);
139
140 protected:
141         // Update Layout
142         virtual void UpdateLayout(void);
143
144         // Accessor
145         const _Control* GetPressedControl(void) const;
146         Tizen::Graphics::Point GetPreviousTouchPosition(void) const;
147         Tizen::Graphics::Point GetCurrentTouchPosition(void) const;
148
149         bool IsScrollAnimationRunning(void) const;
150
151         // Scroll operation
152         virtual int ScrollToInternal(int targetPosition);
153         int ScrollTo(int distance);
154         int ScrollTo(int distance, bool withAnimation);
155
156         // Scrollbar operations
157         virtual void FadeOutScrollBar(void);
158         virtual void StopFadeOutScrollBar(void);
159         virtual void FadeInScrollBar(void);
160
161         // bouncing back
162         void RollbackBouncing(bool withAnimation);
163
164 private:
165         // The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
166         _ScrollPanelPresenter(const _ScrollPanelPresenter& rhs);
167
168         // The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
169         _ScrollPanelPresenter& operator =(const _ScrollPanelPresenter& rhs);
170
171         // Previous Touch Event
172         result RunPreviewTouchPressed(const _Control& source, const _TouchInfo& touchInfo);
173         result RunPreviewTouchMoved(const _Control& source, const _TouchInfo& touchInfo);
174         result RunPreviewTouchReleased(const _Control& source, const _TouchInfo& touchInfo);
175         result RunPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
176
177         // Adjust Model
178         void AdjustModel(void);
179
180         // scroll
181         int GetScrollPositionInternal(void) const;
182         void SetScrollPositionInternal(int position);
183
184         int GetVerticalScrollPositionInternal(void) const;
185         void SetVerticalScrollPositionInternal(int position);
186
187         int GetHorizontalScrollPositionInternal(void) const;
188         void SetHorizontalScrollPositionInternal(int position);
189
190         void StopScrollingAnimation(void);
191         int FixScrollPositionIntoScrollAreaBounds(int position) const;
192         int FixScrollPositionIntoScrollAreaBounds(int position, Tizen::Graphics::Rectangle bounds, Tizen::Graphics::Rectangle scrollArea) const;
193
194         // Scrollbar operations
195         void ChangeScrollBarRange(void);
196         void ChangeScrollBarPosition(int position);
197
198         // scroll to ...
199         bool IsControlOutOfView(const _Control& control) const;
200         void ScrollToControlWhenOutOfView(const _Control& control);
201
202         // scroll bar load effect
203         void StartScrollBarLoadEffectTimer(void);
204         void StopScrollBarLoadEffectTimer(void);
205
206         // Flick
207         int CalculateFlickAmount(int flickDistance, int flickDuration);
208         bool DoFlickGestureRecognized(_TouchFlickGestureDetector& gesture);
209
210         void StartFlickScrollEffectTimer(void);
211         void StopFlickScrollEffectTimer(void);
212
213 // Attribute
214 private:
215         _ScrollPanel* __pScrollPanel;
216         _ScrollPanelModel* __pScrollPanelModel;
217
218         _Control* __pPressedControl;
219         bool __subControlMoved;
220         bool __touchPressed;
221         bool __scrollOccured;
222
223         Tizen::Graphics::Point __previousTouchedPosition;
224         Tizen::Graphics::Point __currentMovedPosition;
225
226         bool __scrollAnimationRunning;
227         bool __flickRunning;
228
229         Tizen::Base::Runtime::Timer* __pFlickScrollEffectTimer;
230         _FlickDirection __flickDirection;
231         int __flickCount;
232
233         Tizen::Base::Runtime::Timer* __pScrollBarLoadEffectTimer;
234         bool __scrollBarFirstLoaded;
235
236         bool __bouncing;
237
238         bool __firstTouchMove;
239         ScrollPanelScrollDirection __firstScrollMoveDirection;
240
241 }; // _ScrollPanelPresenter
242
243 }}} // Tizen::Ui::Controls
244
245 #endif // _FUI_CTRL_INTERNAL_SCROLL_PANEL_PRESENTER_H_
246