Merging EditDateTime & DateTimePicker Changes from RSA-master to RSA-tizen2.1
[platform/framework/native/uifw.git] / src / ui / inc / FUiCtrl_DateTimeBarPresenter.h
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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_DateTimeBarPresenter.h
20  * @brief               This is the header file for the _DateTimeBarPresenter class.
21  *
22  * This header file contains the declarations of the %_DateTimeBarPresenter class.
23  */
24
25 #ifndef _FUI_CTRL_INTERNAL_DATETIMEBAR_PRESENTER_H_
26 #define _FUI_CTRL_INTERNAL_DATETIMEBAR_PRESENTER_H_
27
28 #include <FGrp_TextTextObject.h>
29 #include "FUiCtrl_DateTimeBarModel.h"
30 #include "FUi_ITouchFlickGestureEventListener.h"
31 #include "FUiCtrl_FlickAnimation.h"
32
33 namespace Tizen { namespace Ui { namespace Controls
34 {
35 class _DateTimeBar;
36
37 class _DateTimeBarPresenter
38         : public Tizen::Base::Object
39           , public Tizen::Base::Runtime::ITimerEventListener
40 {
41 public:
42         _DateTimeBarPresenter(_DateTimeBar* pDateTimeBar);
43         virtual ~_DateTimeBarPresenter(void);
44
45 public:
46         static _DateTimeBarPresenter* CreateInstanceN(_DateTimeBar& dateTimeBar);
47         void AddFlickAnimationInfo();
48
49         result CalculateWindowBounds(void);
50         result LoadArrowBitmap(void);
51         result Draw(void);
52
53         result AddItems(int actionId);
54         result RemoveAllItems(void);
55
56         Tizen::Graphics::FloatRectangle GetBodyBounds(void) const;
57         void SetArrowBounds(const Tizen::Graphics::FloatRectangle& bounds);
58         Tizen::Graphics::FloatRectangle GetWindowBounds(void) const;
59         Tizen::Graphics::FloatRectangle GetArrowBounds(void) const;
60
61         int GetItemCount(void) const;
62         _DateTimeBarItem* GetItemAt(int index) const;
63
64         int GetFirstDrawnItemIndex(void) const;
65
66         int GetMinimumValue(void) const;
67         void SetMinimumValue(int minValue);
68
69         int GetMaximumValue(void) const;
70         void SetMaximumValue(int maxValue);
71
72         result DrawFocus();
73         void SetItemFocused(bool isFocused);
74
75         float GetItemWidth(void) const;
76         float GetItemMargin(void) const;
77         float GetFontSize(void) const;
78         float GetLeftRightMargin(void) const;
79
80         bool OnKeyPressed(const _Control &source, const _KeyInfo &keyInfo);
81         virtual bool OnTouchPressed(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
82         virtual bool OnTouchReleased(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
83         virtual bool OnTouchMoved(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
84         virtual bool OnTouchCanceled(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
85         virtual void OnTouchMoveHandled(const Tizen::Ui::_Control& control);
86         virtual bool OnFlickGestureDetected(int distanceX,int distanceY,int duration);
87         void StartFlickAnimation(void);
88         void StartAnimationEffect(void);
89         void SetInitialAnimationValue(float animationValue);
90         void SetFont(Tizen::Graphics::Font& pFont);
91         int GetSelectedItemIndex(void) const;
92         void MoveNext(void);
93         void MovePrevious(void);
94
95         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
96         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
97
98 private:
99         result AddItem(int actionId);
100         result InsertItems(int actionId);
101         result InsertItem(int index, int actionId);
102         result DeleteItem(int index);
103
104         result DrawItem(Tizen::Graphics::Canvas& canvas);
105         result DrawBackground(Tizen::Graphics::Canvas& canvas);
106         result DrawArrow(Tizen::Graphics::Canvas& canvas);
107
108         result SetItemStatus(int index, _DateTimeBarItemStatus status);
109         _DateTimeBarItemStatus GetItemStatus(int index) const;
110
111         result LoadItems();
112
113         result StartFlickAnimationTimer(void);
114         result ResetFlickAnimationTimer(void);
115
116         void SetItemSelected(int index);
117
118         void SetFirstDrawnItemIndex(int index);
119         int GetItemIndexFromPosition(const Tizen::Graphics::FloatPoint& point) const;
120
121         void SetWindowBounds(const Tizen::Graphics::FloatRectangle& bounds);
122         void SetBodyBounds(const Tizen::Graphics::FloatRectangle& bounds);
123         result AdjustItemPosition(float distance);
124         result AdjustAccessibilityElementPosition(float distance);
125         void AddAccessibilityElement(void);
126         void InsertAccessibilityElementAt(int index);
127
128         Tizen::Base::String GetDisplayedText(int value) const;
129         result LoadResource(void);
130
131         _DateTimeBarPresenter(const _DateTimeBarPresenter&);
132         _DateTimeBarPresenter& operator =(const _DateTimeBarPresenter&);
133
134         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
135         void ValidateAndAdjustStartPosition(void);
136
137 private:
138         _DateTimeBar* __pDateTimeBar;
139         _DateTimeBarModel* __pDateTimeBarModel;
140
141         Tizen::Graphics::FloatPoint __currentPoint;
142         bool __isTouchMoved;
143         bool __touchMoveHandled;
144         bool __isFlickEnabled;
145         bool __isFlickInProgress;
146         float __distance;
147         Tizen::Base::Runtime::Timer* __pFlickAnimationTimer;
148         _FlickAnimation __flickAnimation;
149         Tizen::Base::String __selectedText;
150
151         static const int FLICK_ANIMATION_TIMER_PERIOD = 10;
152         static const int FLICK_ANIMATION_FPS_DATE_TIME_BAR = 30;
153         static const int FLICK_ANIMATION_SENSITIVITY_DATE_TIME_BAR = 30;
154         static const int FLICK_ANIMATION_VELOCITY_FACTOR_DATE_TIME_BAR = 3;
155
156         Tizen::Graphics::FloatRectangle __bodyAreaBounds;
157         Tizen::Graphics::FloatRectangle __arrowAreaBounds;
158         Tizen::Graphics::FloatRectangle __windowAreaBounds;
159         Tizen::Graphics::Bitmap* __pBgColorReplacementBitmap;
160         Tizen::Graphics::Bitmap*  __pFocusBitmap;
161         Tizen::Graphics::Bitmap* __pArrowColorReplacementBitmap;
162         bool __isInitialAnimation;
163         int __initialAnimationValue;
164         Tizen::Graphics::Font* __pFont;
165         bool __isFocused;
166         int __focusedIndex;
167         Tizen::Graphics::FloatRectangle __focusBounds;
168         static const int UPDATE_ITEM_COUNT = 3;
169
170 }; // _DateTimeBarPresenter
171
172 }}} // Tizen::Ui::Controls
173
174 #endif  //_FUI_CTRL_INTERNAL_DATETIMEBAR_PRESENTER_H_