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.
19 * @file FUiCtrl_ScrollPanelPresenter.h
20 * @brief This is the header file for the _ScrollPanelPresenter class.
22 * This header file contains the declarations of the _ScrollPanelPresenter class.
25 #ifndef _FUI_CTRL_INTERNAL_SCROLL_PANEL_PRESENTER_H_
26 #define _FUI_CTRL_INTERNAL_SCROLL_PANEL_PRESENTER_H_
28 #include <FBaseRtITimerEventListener.h>
29 #include "FUiCtrl_ScrollPanel.h"
30 #include "FUiCtrl_PanelPresenter.h"
32 namespace Tizen { namespace Ui
37 class _TouchFlickGestureDetector;
41 namespace Tizen { namespace Ui { namespace Controls
44 class _ScrollPanelModel;
47 class _ScrollPanelPresenter
48 : public _PanelPresenter
49 , public Tizen::Base::Runtime::ITimerEventListener
50 , virtual public Tizen::Base::Runtime::IEventListener
54 _ScrollPanelPresenter(void);
55 virtual ~_ScrollPanelPresenter(void);
59 virtual result Initialize(_ScrollPanel& scrollPanel);
61 virtual result Draw(void);
64 virtual result OnBoundsChanging(const Tizen::Graphics::Rectangle& bounds);
65 virtual void OnBoundsChanged(void);
68 virtual void OnChildAttached(const _Control& child);
69 virtual void OnChildDetached(const _Control& child);
70 virtual void OnChildBoundsChanged(const _Control& child);
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);
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);
85 // gestureListener callback API
86 virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
87 virtual bool OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture);
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);
97 // scroll event listener
98 virtual void OnScrollEndReached(_Control& source, ScrollEndEvent type);
99 virtual void OnScrollPositionChanged(_Control& source, int scrollPos);
101 // Timer - Tension, FlickGesture
102 virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
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);
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);
112 void ScrollToBottom(void);
113 void ScrollToTop(void);
114 void ScrollToLeft(void);
115 void ScrollToRight(void);
117 // scrollable container interface
118 bool ScrollToControl(const _Control& source);
121 bool IsScrollable(void) const;
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);
131 void SetScrollPosition(int position, bool withAnimation); // sets and move
132 int GetScrollPosition(void) const;
134 int GetVerticalScrollPosition(void) const;
135 void SetVerticalScrollPosition(int position);
137 int GetHorizontalScrollPosition(void) const;
138 void SetHorizontalScrollPosition(int position);
142 virtual void UpdateLayout(void);
145 const _Control* GetPressedControl(void) const;
146 Tizen::Graphics::Point GetPreviousTouchPosition(void) const;
147 Tizen::Graphics::Point GetCurrentTouchPosition(void) const;
149 bool IsScrollAnimationRunning(void) const;
152 virtual int ScrollToInternal(int targetPosition);
153 int ScrollTo(int distance);
154 int ScrollTo(int distance, bool withAnimation);
156 // Scrollbar operations
157 virtual void FadeOutScrollBar(void);
158 virtual void StopFadeOutScrollBar(void);
159 virtual void FadeInScrollBar(void);
162 void RollbackBouncing(bool withAnimation);
165 // The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
166 _ScrollPanelPresenter(const _ScrollPanelPresenter& rhs);
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);
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);
178 void AdjustModel(void);
181 int GetScrollPositionInternal(void) const;
182 void SetScrollPositionInternal(int position);
184 int GetVerticalScrollPositionInternal(void) const;
185 void SetVerticalScrollPositionInternal(int position);
187 int GetHorizontalScrollPositionInternal(void) const;
188 void SetHorizontalScrollPositionInternal(int position);
190 void StopScrollingAnimation(void);
191 int FixScrollPositionIntoScrollAreaBounds(int position) const;
192 int FixScrollPositionIntoScrollAreaBounds(int position, Tizen::Graphics::Rectangle bounds, Tizen::Graphics::Rectangle scrollArea) const;
194 // Scrollbar operations
195 void ChangeScrollBarRange(void);
196 void ChangeScrollBarPosition(int position);
199 bool IsControlOutOfView(const _Control& control) const;
200 void ScrollToControlWhenOutOfView(const _Control& control);
202 // scroll bar load effect
203 void StartScrollBarLoadEffectTimer(void);
204 void StopScrollBarLoadEffectTimer(void);
207 int CalculateFlickAmount(int flickDistance, int flickDuration);
208 bool DoFlickGestureRecognized(_TouchFlickGestureDetector& gesture);
210 void StartFlickScrollEffectTimer(void);
211 void StopFlickScrollEffectTimer(void);
215 _ScrollPanel* __pScrollPanel;
216 _ScrollPanelModel* __pScrollPanelModel;
218 _Control* __pPressedControl;
219 bool __subControlMoved;
221 bool __scrollOccured;
223 Tizen::Graphics::Point __previousTouchedPosition;
224 Tizen::Graphics::Point __currentMovedPosition;
226 bool __scrollAnimationRunning;
229 Tizen::Base::Runtime::Timer* __pFlickScrollEffectTimer;
230 _FlickDirection __flickDirection;
233 Tizen::Base::Runtime::Timer* __pScrollBarLoadEffectTimer;
234 bool __scrollBarFirstLoaded;
238 bool __firstTouchMove;
239 ScrollPanelScrollDirection __firstScrollMoveDirection;
241 }; // _ScrollPanelPresenter
243 }}} // Tizen::Ui::Controls
245 #endif // _FUI_CTRL_INTERNAL_SCROLL_PANEL_PRESENTER_H_