Fork for IVI: mesa fixing
[profile/ivi/uifw.git] / src / ui / inc / FUiCtrl_ScrollPanel.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_ScrollPanel.h
20  * @brief       This is the header file for the _ScrollPanel class.
21  *
22  * This header file contains the declarations of the _ScrollPanel class.
23  */
24
25 #ifndef _FUI_CTRL_INTERNAL_SCROLL_PANEL_H_
26 #define _FUI_CTRL_INTERNAL_SCROLL_PANEL_H_
27
28 #include <FUiAnimIVisualElementAnimationStatusEventListener.h>
29 #include <FUiAnimIVisualElementAnimationTickEventListener.h>
30 #include <FUiCtrlScrollPanelTypes.h>
31 #include <FUiCtrlTableViewTypes.h>
32 #include "FUi_ITouchFlickGestureEventListener.h"
33 #include "FUi_IAccessibilityListener.h"
34 #include "FUi_AccessibilityContainer.h"
35 #include "FUi_AccessibilityElement.h"
36 #include "FUiCtrl_IScrollableContainer.h"
37 #include "FUiCtrl_IScrollEventListener.h"
38 #include "FUiCtrl_ScrollPanelEvent.h"
39 #include "FUiCtrl_Panel.h"
40
41 namespace Tizen { namespace Ui
42 {
43
44 class _Control;
45 class _ControlImpl;
46 class _TouchInfo;
47 class _TouchFlickGestureDetector;
48
49 namespace Animations
50 {
51
52 class VisualElementValueAnimation;
53
54 }       // Tizen::Ui::Animations
55
56 }} // Tizen::Ui
57
58 namespace Tizen { namespace Ui { namespace Controls
59 {
60
61 class _UiScrollEvent;
62 class _Scroll;
63 class _ScrollPanelPresenter;
64
65
66 class _OSP_EXPORT_ _ScrollPanel
67         : public _Panel
68         , public _IScrollEventListener
69         , public _IScrollableContainer
70         , public _ITouchFlickGestureEventListener
71         , public _IAccessibilityListener
72         , public Tizen::Ui::Animations::IVisualElementAnimationTickEventListener
73         , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
74         , virtual public _IUiEventListener
75         , virtual public _IUiEventPreviewer
76         , virtual public Tizen::Base::Runtime::IEventListener
77         , virtual public _ITouchGestureEventListener
78 {
79 // Lifecycle
80 public:
81         virtual ~_ScrollPanel(void);
82
83         static _ScrollPanel* CreateScrollPanelN(const Tizen::Graphics::Rectangle& rect
84                 , ScrollPanelScrollDirection scrollDirection = SCROLL_PANEL_SCROLL_DIRECTION_VERTICAL
85                 , bool autoResizingEnable = true
86                 , bool pageScrollEnabled = false);
87 // Operations
88 public:
89         // delegateas
90         virtual void OnDraw(void);
91         virtual result OnBoundsChanging(const Tizen::Graphics::Rectangle& bounds);
92         virtual void OnBoundsChanged(void);
93
94         // listener
95         virtual void OnChildAttached(const _Control& child);
96         virtual void OnChildDetached(const _Control& child);
97         virtual void OnChildBoundsChanged(const _Control& child);
98
99         // scroll event listener
100         virtual void OnScrollEndReached(_Control& source, ScrollEndEvent type);
101         virtual void OnScrollPositionChanged(_Control& source, int scrollPos);
102
103         // touch Event Previewer
104         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
105         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
106         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
107         virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
108
109         // touch Event Listener
110         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
111         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
112         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
113         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
114         virtual void OnTouchMoveHandled(const _Control& control);
115
116         // gestureListener Callback API
117         virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
118         virtual bool OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture);
119
120         // accessibility listener
121         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
122         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
123         virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
124         virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
125         virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
126         virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
127         virtual bool OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
128         virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
129         // scroll animation event listener
130         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
131         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
132         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
133         virtual void OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue);
134
135         // manage scroll event listener
136         void AddScrollEventListener(const _IScrollEventListener& listener);
137         void RemoveScrollEventListener(const _IScrollEventListener& listener);
138
139         // scroll operations
140         void ScrollToBottom(void) const;
141         void ScrollToTop(void) const;
142         void ScrollToLeft(void) const;
143         void ScrollToRight(void) const;
144
145         // scrollable container interface
146         virtual bool ScrollToControl(const _Control& source);
147
148         // Accessor
149         int GetScrollPosition(void) const;
150         void SetScrollPosition(int position, bool withAnimation = false);
151
152         // scroll position
153         int GetVerticalScrollPosition(void) const;
154         void SetVerticalScrollPosition(int position);
155
156         int GetHorizontalScrollPosition(void) const;
157         void SetHorizontalScrollPosition(int position);
158
159         // scroll area type
160         bool IsScrollAreaAutoResizingEnabled(void) const;
161         void SetScrollAreaAutoResizingEnabled(bool autoResizingEnable);
162
163         // scroll area bounds
164         Tizen::Graphics::Rectangle GetScrollAreaBounds(void) const;
165         result SetClientAreaHeight(int height);
166         result SetClientAreaWidth(int width);
167         result SetScrollAreaBounds(Tizen::Graphics::Rectangle& bounds);
168
169         // scroll direction
170         ScrollPanelScrollDirection GetScrollDirection(void) const;
171         void SetScrollDirection(ScrollPanelScrollDirection direction);
172
173         ScrollInputMode GetScrollInputMode(void) const;
174         void SetScrollInputMode(ScrollInputMode mode);
175
176         // page scroll
177         bool IsPageScrollEnabled(void) const;
178         void SetPageScrollEnabled(bool enable);
179
180         Tizen::Graphics::Dimension GetPageScrollAlignSize(void) const;
181         void SetPageScrollAlignSize(Tizen::Graphics::Dimension size);
182
183         bool IsPageScrollFlickMoveLimitedOnePage(void) const;
184
185         // store SIP keypad binding control
186         const _Control* GetControlKeypadBinding(void) const;
187         void SetControlKeypadBinding(const _Control* pControl);
188
189         // scrollpanel event
190         _ScrollPanelEvent* GetScrollPanelEvent(void) const;
191         void SetScrollPanelEvent(const _ScrollPanelEvent* pScrollPanelEvent);
192
193         // _Scroll
194         bool IsScrollBarVisible(void) const;
195         void SetScrollBarVisible(bool scrollBarVisible);
196
197         _Scroll* GetScrollBar(void) const;
198         void SetScrollBar(const _Scroll* pVerticalScrollBar);
199
200         _Scroll* GetVerticalScrollBar(void) const;
201         void SetVerticalScrollBar(const _Scroll* pVerticalScrollBar);
202
203         _Scroll* GetHorizontalScrollBar(void) const;
204         void SetHorizontalScrollBar(const _Scroll* pHorizontalScrollBar);
205
206         bool IsFixingClientBoundsEnable(void) const;
207         void SetFixingClientBoundsEnable(bool enable);
208
209         // VE Value Animation
210         Tizen::Ui::Animations::VisualElementValueAnimation* GetScrollingAnimation(void) const;
211
212         // event fire
213         result FireOnScrollEndEvent(ScrollEndEvent scrollEndEventType);
214         result FireOnScrollPositionChangedEvent(void);
215         result FireOnScrollPositionChangedEvent(int scrollPosition);
216         result FireOnScrollStoppedEvent(void);
217         result FireScrollPanelEvent(const _Control& source, CoreScrollPanelStatus scrollPanelStatus);
218
219 // Lifecycle
220 protected:
221         _ScrollPanel(void);
222
223         virtual result Initialize(const _ScrollPanelPresenter& presenter);
224
225         // Accessor
226         virtual result SetScrollPanelPresenter(const _ScrollPanelPresenter* presenter);
227
228 private:
229         // The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
230         _ScrollPanel(const _ScrollPanel& rhs);
231
232         // The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
233         _ScrollPanel& operator =(const _ScrollPanel& rhs);
234
235 // Attribute
236 private:
237         _ScrollPanelPresenter* __pScrollPanelPresenter;
238
239         // Scroll event
240         _UiScrollEvent* __pScrollEvent;
241
242         // ScrollPanel event
243         _ScrollPanelEvent* __pCoreScrollPanelEvent;
244
245         // gesture event
246         _TouchFlickGestureDetector* __pGestureFlick;
247
248         const _Control* __pKeyPadBindingControl;
249
250         // scroll feature
251         ScrollPanelScrollDirection __scrollDirection;
252         ScrollInputMode __scrollInputMode;
253
254         // scroll area feature
255         bool __autoResizingEnable;
256
257         // page scroll
258         bool __pageScrollEnabled;
259         Tizen::Graphics::Dimension __pageScrollAlignSize;
260         bool __pageScrollMoveOnlyOnePageOnFlick;
261
262         // scroll bar
263         bool __scrollBarVisible;
264         _Scroll* __pHorizontalScrollBar;
265         _Scroll* __pVerticalScrollBar;
266
267         // scrolling animation
268         Tizen::Ui::Animations::VisualElementValueAnimation* __pScrollingAnimation;
269
270         bool __fixingClientBoundsEnable;
271 }; // _ScrollPanel
272
273 }}} // Tizen::Ui::Controls
274
275 #endif // _FUI_CTRL_INTERNAL_SCROLL_PANEL_H_
276