2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://www.apache.org/licenses/LICENSE-2.0/
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.
18 * @file FUiCtrl_TokenEditPresenter.h
19 * @brief This is the header file for the _TokenEditPresenter class.
21 * This header file contains the declarations of the %_TokenEditPresenter class.
23 #ifndef _FUI_CTRL_INTERNAL_TOKEN_EDIT_PRESENTER_H_
24 #define _FUI_CTRL_INTERNAL_TOKEN_EDIT_PRESENTER_H_
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"
34 namespace Tizen { namespace Ui { namespace Controls
38 class SineTimingFunction
39 : public Tizen::Ui::Animations::IVisualElementAnimationTimingFunction
42 float CalculateProgress(float timeProgress) const;
45 class _TokenEditPresenter
46 : public Tizen::Ui::Controls::_EditPresenter
47 , virtual public Tizen::Base::Runtime::IEventListener
48 , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
51 _TokenEditPresenter(void);
53 virtual ~_TokenEditPresenter(void);
55 result DisposeTokenEditPresenter(void);
57 static _TokenEditPresenter* CreateTokenEditPresenterN(void);
59 result Initialize(const _Control& control);
61 virtual result Draw(Tizen::Graphics::Canvas& canvas);
63 result MakeToken(const Tizen::Base::String& tokenString);
65 result MakeToken(void);
67 result AppendToken(const Tizen::Base::String& token);
69 result InsertTokenAt(int index, const Tizen::Base::String& token, bool isUser = false);
71 Tizen::Base::String GetTokenAt(int index) const;
73 int GetTokenCount(bool isInvokedByApp = false) const;
75 int GetSelectedTokenIndex(void) const;
77 bool IsTokenEditModeEnabled(void) const;
79 result RemoveTokenAt(int index, bool isClearText = false);
81 result SetTokenSelected(int index, bool selected);
83 result SetTokenEditModeEnabled(bool enable);
85 result CalculateTokenPositionFromIndex(int startIndex, bool leftWard = true);
87 virtual result SetInitialBounds(void);
89 result CalculateDescriptionTextRect(const Tizen::Base::String& titleText);
91 virtual void OnCursorTimerExpired(void);
93 virtual result AdjustFlexibleHeight(void);
95 virtual float CalculateFlexibleHeightF(void);
97 virtual result DrawScrollBar(void);
99 void SetAutoShrinkModeEnabled(bool enable);
101 bool IsAutoShrinkModeEnabled(void) const;
103 void SetDescriptionText(Tizen::Base::String descriptionText);
105 Tizen::Base::String GetDescriptionText(void) const;
107 Tizen::Graphics::FloatRectangle GetTextBoundsF(void) const;
109 Tizen::Graphics::Rectangle GetTextBounds(void) const;
111 virtual result CutText(void);
113 virtual result SetLineSpacing(int linePixelGap);
115 virtual result SetLineSpacing(float linePixelGap);
117 int GetLineSpacing() const;
119 float GetLineSpacingF() const;
121 Tizen::Ui::Animations::VisualElementAnimation* CreateAnimationN(Tizen::Ui::Animations::VisualElement& source, bool create);
123 virtual bool IsGuideTextActivated(void) const;
124 virtual void DrawText(void);
125 virtual bool IsTextBlockedInTokenEdit(void) const;
127 virtual bool OnFocusGained(void);
128 virtual bool OnFocusLost(void);
130 virtual result SetFlexBounds(const Tizen::Graphics::FloatRectangle& bounds);
131 virtual result SetTextSize(const int size);
132 virtual result SetTextSize(const float size);
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);
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);
144 virtual bool OnTapGestureDetected(void);
145 virtual bool OnLongPressGestureDetected(void);
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);
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);
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);
169 //Accessibility callbacks
170 bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
171 bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
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);
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);
203 Tizen::Ui::Controls::_TokenEdit* __pTokenEdit;
205 Tizen::Base::Collection::LinkedList* __pTokenList;
207 Tizen::Base::String __delimiter;
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;
215 int __pressedTokenIndex;
217 bool __isEditingToken;
219 int __editingTokenIndex;
221 Tizen::Graphics::FloatRectangle __clientRect;
222 Tizen::Graphics::FloatRectangle __initTextRect;
224 bool __isEditModeEnabled;
226 Tizen::Ui::Animations::_VisualElement* __pDescriptionTextVisualElement;
228 Tizen::Graphics::_Text::TextObject* __pDescriptionTextTextObject;
230 Tizen::Graphics::FloatRectangle __descriptionTextRect;
232 bool __isTokenEditingFinished;
234 float __prevScrollValue;
238 bool __isTokenScrolling;
240 bool __isNeedToScroll;
242 float __maxScrollValue;
246 Tizen::Base::String __descriptionText;
248 bool __isPopupVisible;
250 bool __isLongPressed;
254 int __animatingIndex;
256 int __lastTokenIndex;
258 const Tizen::Ui::Animations::IVisualElementAnimationTimingFunction* __pTimingFunction;
260 Tizen::Graphics::FloatRectangle __descriptionTextRectForScroll;
262 float __previousTitleWidth;
264 bool __isTokenEditPresenterInitialized;
268 int __previousCursorPosition;
270 bool __isScrollValueChanged;
274 bool __isScrollValueModified;
276 bool __isTouchMoveInProgress;
278 bool __isTitleSliding;
280 Tizen::Graphics::FloatPoint __touchPressInfo;
282 int __editContentFontSize;
284 int __trackTokenIndex;
286 bool __isAnimationInProgress;
288 static const int ANIMATION_DURATION_BOUNDS = 167;
290 static const int ANIMATION_DURATION_OPACITY = 83;
294 Tizen::Base::Collection::LinkedListT< _AccessibilityElement* > __accessibilityElements;
296 int __focusedTokenIndex;
298 bool __drawFocusState;
300 }; // _TokenEditPresenter
302 }}} // Tizen::Ui::Controls
304 #endif // _FUICTRL_INTERNAL_TOKEN_EDIT_PRESENTER_H_