Apply BG_DISABLED in TokenEdit
[platform/framework/native/uifw.git] / src / ui / inc / FUiCtrl_TokenEditPresenter.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  * @file                FUiCtrl_TokenEditPresenter.h
19  * @brief               This is the header file for the _TokenEditPresenter class.
20  *
21  * This header file contains the declarations of the %_TokenEditPresenter class.
22  */
23 #ifndef _FUI_CTRL_INTERNAL_TOKEN_EDIT_PRESENTER_H_
24 #define _FUI_CTRL_INTERNAL_TOKEN_EDIT_PRESENTER_H_
25
26 #include <FBaseObject.h>
27 #include <FBaseColLinkedList.h>
28 #include <FBaseString.h>
29 #include <FBaseCharacter.h>
30 #include "FUiCtrl_EditPresenter.h"
31 #include "FUiCtrl_TokenEditModel.h"
32 #include "FUiCtrl_TokenEdit.h"
33
34 namespace Tizen { namespace Ui { namespace Controls
35 {
36 class _TokenEdit;
37
38 class SineTimingFunction
39         : public Tizen::Ui::Animations::IVisualElementAnimationTimingFunction
40 {
41 public:
42         float CalculateProgress(float timeProgress) const;
43 };
44
45 class _TokenEditPresenter
46         : public Tizen::Ui::Controls::_EditPresenter
47         , virtual public Tizen::Base::Runtime::IEventListener
48         , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
49 {
50 public:
51         _TokenEditPresenter(void);
52
53         virtual ~_TokenEditPresenter(void);
54
55         result DisposeTokenEditPresenter(void);
56
57         static _TokenEditPresenter* CreateTokenEditPresenterN(void);
58
59         result Initialize(const _Control& control);
60
61         virtual result Draw(Tizen::Graphics::Canvas& canvas);
62
63         result MakeToken(const Tizen::Base::String& tokenString);
64
65         result MakeToken(void);
66
67         result AppendToken(const Tizen::Base::String& token);
68
69         result InsertTokenAt(int index, const Tizen::Base::String& token, bool isUser = false);
70
71         Tizen::Base::String GetTokenAt(int index) const;
72
73         int GetTokenCount(bool isInvokedByApp = false) const;
74
75         int GetSelectedTokenIndex(void) const;
76
77         bool IsTokenEditModeEnabled(void) const;
78
79         result RemoveTokenAt(int index, bool isClearText = false);
80
81         result SetTokenSelected(int index, bool selected);
82
83         result SetTokenEditModeEnabled(bool enable);
84
85         result CalculateTokenPositionFromIndex(int startIndex, bool leftWard = true);
86
87         virtual result SetInitialBounds(void);
88
89         result CalculateDescriptionTextRect(const Tizen::Base::String& titleText);
90
91         virtual void OnCursorTimerExpired(void);
92
93         virtual result AdjustFlexibleHeight(void);
94
95         virtual float CalculateFlexibleHeightF(void);
96
97         virtual result DrawScrollBar(void);
98
99         void SetAutoShrinkModeEnabled(bool enable);
100
101         bool IsAutoShrinkModeEnabled(void) const;
102
103         void SetDescriptionText(Tizen::Base::String descriptionText);
104
105         Tizen::Base::String GetDescriptionText(void) const;
106
107         Tizen::Graphics::FloatRectangle GetTextBoundsF(void) const;
108
109         Tizen::Graphics::Rectangle GetTextBounds(void) const;
110
111         virtual result CutText(void);
112
113         virtual result SetLineSpacing(int linePixelGap);
114
115         virtual result SetLineSpacing(float linePixelGap);
116
117         int GetLineSpacing() const;
118
119         float GetLineSpacingF() const;
120
121         Tizen::Ui::Animations::VisualElementAnimation* CreateAnimationN(Tizen::Ui::Animations::VisualElement& source, bool create);
122
123         virtual bool IsGuideTextActivated(void) const;
124         virtual void DrawText(void);
125         virtual bool IsTextBlockedInTokenEdit(void) const;
126
127         virtual bool OnFocusGained(void);
128         virtual bool OnFocusLost(void);
129
130         virtual result SetFlexBounds(const Tizen::Graphics::FloatRectangle& bounds);
131         virtual result SetTextSize(const int size);
132         virtual result SetTextSize(const float size);
133
134         // Touch callbacks
135         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
136         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
137         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
138
139         virtual void OnInputConnectionTextCommitted(InputConnection& source, const Tizen::Base::String& committedText);
140         virtual void DeleteSurroundingText(InputConnection& source, int offset, int charCount);
141         virtual void OnTextCommitted(const Tizen::Base::String& commitText);
142         virtual void OnSurroundingTextDeleted(int offset, int charCount);
143
144         virtual bool OnTapGestureDetected(void);
145         virtual bool OnLongPressGestureDetected(void);
146
147         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
148         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount){}
149         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target){}
150         void OnBoundsChanged(void);
151
152         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
153         virtual result ChangeLayout(_ControlOrientation orientation);
154         virtual void ResetTextBounds(void);
155         virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
156
157         Tizen::Graphics::FloatRectangle GetDescriptionTextRect(void) const;
158         String GetTextAccessibilityElementText(void) const;
159         void RefreshAccessibilityElements(void);
160         result AddChildAccessibilityElements(void);
161         void RemoveChildAccessibilityElements(void);
162         result AppendTokenAccessibilityElement(void);
163         result InsertTokenAccessibilityElementAt(int index);
164         void RemoveTokenAccessibilityElementAt(int index);
165         result UpdateTokenAccessibilityBounds(void);
166         result UpdateTitleAccessibilityBounds(const FloatRectangle& titleBounds);
167         result ScrollToFocusedTokenAccessibilityElement(const _AccessibilityElement& element);
168
169         //Accessibility callbacks
170         bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
171         bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
172
173         result ScrollToFocusedToken(void);
174         result AttachCursorToToken(void);
175         result DetachCursorFromToken(void);
176         void ExitTokenEditingMode(void);
177         void SetDrawFocusState(bool focusState);
178         int GetFocusedTokenIndex(void) const;
179         void PrepareFocusUiMode(void);
180
181 private:
182         bool DrawToken(int count = -1);
183         Tizen::Graphics::Color GetTokenEditColor(const TokenEditStatus status) const;
184         Tizen::Graphics::Color GetTokenEditTextColor(const TokenEditStatus status) const;
185         result InitializeTokenVisibilityAt(int index);
186         bool DrawDescriptionText(void);
187         result SetDescriptionTextRect(const Tizen::Graphics::FloatRectangle& rect);
188         result TrimTokenAndAdjustEllipsisAt(int index);
189         int GetTokenIndexFromCoordinate(const Tizen::Graphics::Point point) const;
190         result SetEditingTokenTextBounds(int index, bool isSetText = true);
191         result ProcessTokeningByTouchEvent(const _Control& source, const _TouchInfo& touchinfo);
192         result SetTokenBoundsByTouchInfo(const _TouchInfo& touchinfo);
193         result RecalculateTokenBounds(float position);
194         result CheckTokenScrolling(bool scrollToCursorPosition = false);
195         result SetTokenVisualElementBounds(int index, const Tizen::Graphics::FloatRectangle& bounds);
196         int CalculateVisibleTokenCount(void);
197         result InitializeDescriptionText(void);
198         bool CheckCopyPastePopupShowStatus(void);
199         result ChangeInternalLayout(_ControlOrientation orientation);
200         float GetMaxTextHeight(void);
201
202 private:
203         Tizen::Ui::Controls::_TokenEdit* __pTokenEdit;
204
205         Tizen::Base::Collection::LinkedList* __pTokenList;
206
207         Tizen::Base::String __delimiter;
208
209         Tizen::Graphics::Bitmap* __pTokenBgBitmap;
210         Tizen::Graphics::Bitmap* __pTokenBgNormalEffectBitmap;
211         Tizen::Graphics::Bitmap* __pTokenBgPressedEffectBitmap;
212         Tizen::Graphics::Bitmap* __pTokenBgReplacementFocusBitmap;
213         Tizen::Graphics::Bitmap* __pTokenBgFocusEffectBitmap;
214
215         int __pressedTokenIndex;
216
217         bool __isEditingToken;
218
219         int __editingTokenIndex;
220
221         Tizen::Graphics::FloatRectangle __clientRect;
222         Tizen::Graphics::FloatRectangle __initTextRect;
223
224         bool __isEditModeEnabled;
225
226         Tizen::Ui::Animations::_VisualElement* __pDescriptionTextVisualElement;
227
228         Tizen::Graphics::_Text::TextObject* __pDescriptionTextTextObject;
229
230         Tizen::Graphics::FloatRectangle __descriptionTextRect;
231
232         bool __isTokenEditingFinished;
233
234         float __prevScrollValue;
235
236         float __scrollValue;
237
238         bool __isTokenScrolling;
239
240         bool __isNeedToScroll;
241
242         float __maxScrollValue;
243
244         bool __autoShrink;
245
246         Tizen::Base::String __descriptionText;
247
248         bool __isPopupVisible;
249
250         bool __isLongPressed;
251
252         float __lineSpacing;
253
254         int __animatingIndex;
255
256         int __lastTokenIndex;
257
258         const Tizen::Ui::Animations::IVisualElementAnimationTimingFunction* __pTimingFunction;
259
260         Tizen::Graphics::FloatRectangle __descriptionTextRectForScroll;
261
262         float __previousTitleWidth;
263
264         bool __isTokenEditPresenterInitialized;
265
266         bool __isFocus;
267
268         int __previousCursorPosition;
269
270         bool __isScrollValueChanged;
271
272         int __lineAdded;
273
274         bool __isScrollValueModified;
275
276         bool __isTouchMoveInProgress;
277
278         bool __isTitleSliding;
279
280         Tizen::Graphics::FloatPoint __touchPressInfo;
281
282         int __editContentFontSize;
283
284         int __trackTokenIndex;
285
286         bool __isAnimationInProgress;
287
288         static const int ANIMATION_DURATION_BOUNDS = 167;
289
290         static const int ANIMATION_DURATION_OPACITY = 83;
291
292         int __focusOutIndex;
293
294         Tizen::Base::Collection::LinkedListT< _AccessibilityElement* > __accessibilityElements;
295
296         int __focusedTokenIndex;
297
298         bool __drawFocusState;
299
300 };  // _TokenEditPresenter
301
302 }}} // Tizen::Ui::Controls
303
304 #endif      // _FUICTRL_INTERNAL_TOKEN_EDIT_PRESENTER_H_