add patch
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_Button.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_Button.h
19  * @brief               This is the header file for the _Button class.
20  *
21  * This header file contains the declarations of the %_Button class.
22  */
23 #ifndef _FUI_CTRL_INTERNAL_BUTTON_H_
24 #define _FUI_CTRL_INTERNAL_BUTTON_H_
25
26 #include <FUiCtrlButton.h>
27 #include "FUi_Control.h"
28 #include "FUiCtrl_IActionEventListener.h"
29 #include "FUiCtrl_ActionEvent.h"
30
31 namespace Tizen { namespace Ui
32 {
33 class _AccessibilityElement;
34 }} // Tizen::Ui
35
36 namespace Tizen { namespace Ui { namespace Controls
37 {
38 class _ButtonPresenter;
39
40 /**
41  * @class _Button
42  * @brief
43  * @since       2.0
44  *
45  *
46  *
47  *
48  */
49 enum _ButtonStatus
50 {
51         _BUTTON_STATUS_NORMAL = 0,
52         _BUTTON_STATUS_DISABLED,
53         _BUTTON_STATUS_PRESSED,
54         _BUTTON_STATUS_HIGHLIGHTED,
55         _BUTTON_STATUS_SELECTED
56 };
57
58 enum _ButtonStyle
59 {
60         _BUTTON_STYLE_NORMAL,
61         _BUTTON_STYLE_SEGMENT
62 };
63
64 class _OSP_EXPORT_ _Button
65         : public Tizen::Ui::_Control
66         , public _IPropertyChangeEventListener
67         , virtual public Tizen::Base::Runtime::IEventListener
68         , virtual public Tizen::Ui::_IUiEventListener
69         , virtual public Tizen::Ui::_IUiEventPreviewer
70 {
71         DECLARE_CLASS_BEGIN(_Button, _Control);
72         DECLARE_PROPERTY("normalColor", GetPropertyNormalColor, SetPropertyNormalColor);
73         DECLARE_PROPERTY("disabledColor", GetPropertyDisabledColor, SetPropertyDisabledColor);
74         DECLARE_PROPERTY("pressedColor", GetPropertyPressedColor, SetPropertyPressedColor);
75         DECLARE_PROPERTY("highlightedColor", GetPropertyHighlightedColor, SetPropertyHighlightedColor);
76         DECLARE_PROPERTY("selectedColor", GetPropertySelectedColor, SetPropertySelectedColor);
77         DECLARE_PROPERTY("normalTextColor", GetPropertyNormalTextColor, SetPropertyNormalTextColor);
78         DECLARE_PROPERTY("disabledTextColor", GetPropertyDisabledTextColor, SetPropertyDisabledTextColor);
79         DECLARE_PROPERTY("pressedTextColor", GetPropertyPressedTextColor, SetPropertyPressedTextColor);
80         DECLARE_PROPERTY("highlightedTextColor", GetPropertyHighlightedTextColor, SetPropertyHighlightedTextColor);
81         DECLARE_PROPERTY("selectedTextColor", GetPropertySelectedTextColor, SetPropertySelectedTextColor);
82         DECLARE_PROPERTY("text", GetPropertyText, SetPropertyText);
83         DECLARE_PROPERTY("textSize", GetPropertyTextSize, SetPropertyTextSize);
84         DECLARE_PROPERTY("actionId", GetPropertyActionId, SetPropertyActionId);
85         DECLARE_CLASS_END();
86
87         result SetPropertyNormalColor(const Variant& color);
88         Variant GetPropertyNormalColor(void) const;
89         result SetPropertyDisabledColor(const Variant& color);
90         Variant GetPropertyDisabledColor(void) const;
91         result SetPropertyPressedColor(const Variant& color);
92         Variant GetPropertyPressedColor(void) const;
93         result SetPropertyHighlightedColor(const Variant& color);
94         Variant GetPropertyHighlightedColor(void) const;
95         result SetPropertySelectedColor(const Variant& color);
96         Variant GetPropertySelectedColor(void) const;
97
98         result SetPropertyNormalTextColor(const Variant& color);
99         Variant GetPropertyNormalTextColor(void) const;
100         result SetPropertyDisabledTextColor(const Variant& color);
101         Variant GetPropertyDisabledTextColor(void) const;
102         result SetPropertyPressedTextColor(const Variant& color);
103         Variant GetPropertyPressedTextColor(void) const;
104         result SetPropertyHighlightedTextColor(const Variant& color);
105         Variant GetPropertyHighlightedTextColor(void) const;
106         result SetPropertySelectedTextColor(const Variant& color);
107         Variant GetPropertySelectedTextColor(void) const;
108
109         result SetPropertyText(const Variant& text);
110         Variant GetPropertyText(void) const;
111
112         result SetPropertyTextSize(const Variant& textSize);
113         Variant GetPropertyTextSize(void) const;
114         result SetPropertyActionId(const Variant& actionId);
115         Variant GetPropertyActionId(void) const;
116
117         virtual void OnPropertyChanging(Tizen::Ui::_PropertyBase& source, const Tizen::Base::String& name, const Variant& oldProperty, const Variant& newProperty);
118         virtual void OnPropertyChanged(Tizen::Ui::_PropertyBase& source, const Tizen::Base::String& name, const Variant& oldProperty, const Variant& newProperty);
119
120 public:
121         virtual ~_Button(void);
122
123 public:
124         static _Button* CreateButtonN(void);
125
126         virtual void OnDraw(void);
127         virtual result OnAttachedToMainTree(void);
128         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
129         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
130         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
131         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
132         virtual void OnTouchMoveHandled(const _Control& control);
133         virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
134         virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo);
135         virtual void OnBoundsChanged(void);
136         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
137         virtual void OnFontInfoRequested(unsigned long& style, int& size);
138         virtual void OnFontInfoRequested(unsigned long& style, float& size);
139         virtual Tizen::Graphics::FloatDimension GetContentSizeF(bool horizontalMode, bool verticalMode) const;
140         virtual void OnAncestorEnableStateChanged(const _Control& control);
141         virtual void OnDrawFocus(void);
142         virtual void OnChildControlFocusMoved(const _Control& control);
143         virtual bool IsChildControlFocusManage(void) const;
144         virtual void OnFocusableStateChanged(bool focusalbeState);
145         virtual void OnFocusModeStateChanged(void);
146         virtual bool OnFocusGained(const _Control& source);
147         virtual bool OnFocusLost(const _Control& source);
148         virtual Tizen::Graphics::Canvas* OnCanvasRequestedN(const Tizen::Graphics::FloatRectangle& bounds);
149
150 public:
151         result SetText(const Tizen::Base::String& text);
152         Tizen::Base::String GetText(void) const;
153
154         result SetColor(_ButtonStatus status, const Tizen::Graphics::Color& color);
155         Tizen::Graphics::Color GetColor(_ButtonStatus status) const;
156
157         result AddActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
158         result RemoveActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
159
160         result SetActionId(int actionId);
161         int GetActionId(void) const;
162
163         result SetTextHorizontalAlignment(HorizontalAlignment alignment);
164         HorizontalAlignment GetTextHorizontalAlignment(void) const;
165         result SetTextVerticalAlignment(VerticalAlignment alignment);
166         VerticalAlignment GetTextVerticalAlignment(void) const;
167
168         result SetTextColor(_ButtonStatus status, const Tizen::Graphics::Color& color);
169         Tizen::Graphics::Color GetTextColor(_ButtonStatus status) const;
170
171         result SetBitmap(_ButtonStatus status, const Tizen::Graphics::Point& position, const Tizen::Graphics::Bitmap& bitmap);
172         Tizen::Graphics::Bitmap* GetBitmap(_ButtonStatus status) const;
173         Tizen::Graphics::Point GetBitmapPosition(_ButtonStatus status) const;
174
175         result SetBitmap(_ButtonStatus status, const Tizen::Graphics::FloatPoint& position, const Tizen::Graphics::Bitmap& bitmap);
176         Tizen::Graphics::FloatPoint GetBitmapPositionF(_ButtonStatus status) const;
177
178         result SetEffectBitmap(_ButtonStatus status, const Tizen::Graphics::Point& position, const Tizen::Graphics::Bitmap& bitmap);
179         Tizen::Graphics::Bitmap* GetEffectBitmap(_ButtonStatus status) const;
180         Tizen::Graphics::Point GetEffectBitmapPosition(_ButtonStatus status) const;
181
182         result SetEffectBitmap(_ButtonStatus status, const Tizen::Graphics::FloatPoint& position, const Tizen::Graphics::Bitmap& bitmap);
183         Tizen::Graphics::FloatPoint GetEffectBitmapPositionF(_ButtonStatus status) const;
184
185         result SetToolbarItemBackgroundBitmap(_ButtonStatus status, const Tizen::Graphics::Bitmap& bitmap);
186         Tizen::Graphics::Bitmap* GetToolbarItemBackgroundBitmap(_ButtonStatus status) const;
187
188         result SetUnderlineBitmap(const Tizen::Graphics::Bitmap& bitmap);
189         Tizen::Graphics::Bitmap* GetUnderlineBitmap(void) const;
190
191         result SetTabTextDimLeftBitmap(const Tizen::Graphics::Bitmap& bitmap);
192         Tizen::Graphics::Bitmap* GetTabTextDimLeftBitmap(void) const;
193
194         result SetTabTextDimRightBitmap(const Tizen::Graphics::Bitmap& bitmap);
195         Tizen::Graphics::Bitmap* GetTabTextDimRightBitmap(void) const;
196
197         result SetSubTitleEffectBitmap(const Tizen::Graphics::Bitmap& bitmap);
198         Tizen::Graphics::Bitmap* GetSubTitleEffectBitmap(void) const;
199
200         result SetBackgroundBitmap(_ButtonStatus status, const Tizen::Graphics::Bitmap& bitmap);
201         Tizen::Graphics::Bitmap* GetBackgroundBitmap(_ButtonStatus status) const;
202
203         result SetBackgroundEffectBitmap(_ButtonStatus status, const Tizen::Graphics::Bitmap& bitmap);
204         Tizen::Graphics::Bitmap* GetBackgroundEffectBitmap(_ButtonStatus status) const;
205
206         result SetTextSize(int size, unsigned long fontStyle = Tizen::Graphics::FONT_STYLE_PLAIN);
207         int GetTextSize(void) const;
208
209         result SetTextSize(float size, unsigned long fontStyle = Tizen::Graphics::FONT_STYLE_PLAIN);
210         float GetTextSizeF(void) const;
211
212         result SetButtonStyle(_ButtonStyle buttonStyle);
213         _ButtonStyle GetButtonStyle(void) const;
214
215         result SetButtonStatus(_ButtonStatus buttonStatus, bool fire = true);
216         _ButtonStatus GetButtonStatus(void) const;
217
218         result SetTextMaxLine(int textMaxLine);
219         int GetTextMaxLine(void) const;
220
221         result UnloadBackgroundBitmap(_ButtonStatus status);
222         result UnloadBackgroundEffectBitmap(_ButtonStatus status);
223         bool IsUserBackgroundBitmap(_ButtonStatus status) const;
224         bool IsUserBackgroundEffectBitmap(_ButtonStatus status) const;
225
226
227         result FireActionEvent(void);
228
229         result SetUserDefinedTextArea(const Tizen::Graphics::Rectangle& bounds);
230         result SetUserDefinedTextArea(const Tizen::Graphics::FloatRectangle& bounds);
231         Tizen::Graphics::Rectangle GetUserDefinedTextArea(void) const;
232         Tizen::Graphics::FloatRectangle GetUserDefinedTextAreaF(void) const;
233
234         bool UserDefinedText(void) const;
235         result ShowUnderlineBitmap(bool show);
236
237         result SetMargin(int leftMargin, int topMargin, int rightMargin, int bottomMargin);
238         int GetLeftMargin(void) const;
239         int GetTopMargin(void) const;
240         int GetRightMargin(void) const;
241         int GetBottomMargin(void) const;
242
243         result SetMargin(float leftMargin, float topMargin, float rightMargin, float bottomMargin);
244         float GetLeftMarginF(void) const;
245         float GetTopMarginF(void) const;
246         float GetRightMarginF(void) const;
247         float GetBottomMarginF(void) const;
248
249         Tizen::Graphics::FloatDimension GetContentSizeInternalF(bool horizontalMode, bool verticalMode) const;
250         int GetTextExtentSize(void) const;
251         float GetTextExtentSizeF(void) const;
252
253         result SetMultilineTextSize(const Variant& textsize);
254         float GetMultilineTextSizeF(void) const;
255
256         bool IsMultilineFontSizeSet(void) const;
257
258         result SetTabTextSlide(bool tabTextSlide);
259         bool IsTabTextSlide(void) const;
260
261 protected:
262         result SetPresenter(const _ButtonPresenter& buttonPresenter);
263
264 private:
265         bool IsTouchAreaChanged(bool currentButtonArea);
266         void InitializeAccessibilityElement(void);
267
268         _Button(void);
269         _Button(const _Button& rhs);
270         _Button& operator =(const _Button& rhs);
271
272 private:
273         enum
274         {
275                 NUMBER_OF_BUTTON_STATUS = 5
276         };
277
278 private:
279         _ButtonPresenter* __pButtonPresenter;
280         _ActionEvent* __pActionEvent;
281
282         int __actionId;
283
284         Tizen::Base::String __text;
285
286         Tizen::Graphics::Color __textColor[NUMBER_OF_BUTTON_STATUS];
287         Tizen::Graphics::Color __color[NUMBER_OF_BUTTON_STATUS];
288
289         Tizen::Graphics::Bitmap* __pBitmap[NUMBER_OF_BUTTON_STATUS];
290         Tizen::Graphics::FloatPoint __bitmapPosition[NUMBER_OF_BUTTON_STATUS];
291
292         Tizen::Graphics::Bitmap* __pEffectBitmap[NUMBER_OF_BUTTON_STATUS];
293         Tizen::Graphics::FloatPoint __effectBitmapPosition[NUMBER_OF_BUTTON_STATUS];
294
295         Tizen::Graphics::Bitmap* __pToolbarItemBackgroundBitmap[NUMBER_OF_BUTTON_STATUS];
296         Tizen::Graphics::Bitmap* __pBackgroundBitmap[NUMBER_OF_BUTTON_STATUS];
297         Tizen::Graphics::Bitmap* __pBackgroundEffectBitmap[NUMBER_OF_BUTTON_STATUS];
298         Tizen::Graphics::Bitmap* __pUnderlineBitmap;
299         Tizen::Graphics::Bitmap* __pTabTextDimLeftBitmap;
300         Tizen::Graphics::Bitmap* __pTabTextDimRightBitmap;
301         Tizen::Graphics::Bitmap* __pSubTitleEffectBitmap;
302
303         HorizontalAlignment __horizontalAlignment;
304         VerticalAlignment __verticalAlignment;
305
306         _ButtonStatus __buttonStatus;
307         _ButtonStyle __buttonStyle;
308
309         float __textSize;
310         float __multilineFontSize;
311         int __textMaxLine;
312
313         bool __isSettingMultilineFontSize;
314
315         bool __isUserBackgroundBitmap[NUMBER_OF_BUTTON_STATUS];
316         bool __isUserBackgroundEffectBitmap[NUMBER_OF_BUTTON_STATUS];
317
318         bool __previousTouchArea;
319
320         bool __userDefinedText;
321
322         bool __tabTextSlide;
323
324         float __leftMargin;
325         float __topMargin;
326         float __rightMargin;
327         float __bottomMargin;
328
329         Tizen::Graphics::FloatRectangle __userDefinedTextArea;
330
331         Tizen::Ui::_AccessibilityElement* __pTextElement;
332
333         static const float SENSITIVE = 0.08f;
334 };      // _Button
335
336 }}} // Tizen::Ui::Controls
337
338 #endif  // _FUI_CTRL_INTERNAL_BUTTON_H_