Tizen 2.1 base
[framework/osp/uifw.git] / inc / FUiCtrlButton.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        FUiCtrlButton.h
20  * @brief       This is the header file for the %Button class.
21  *
22  * This header file contains the declarations of the %Button class and its helper classes.
23  */
24
25 #ifndef _FUI_CTRL_BUTTON_H_
26 #define _FUI_CTRL_BUTTON_H_
27
28 #include <FBaseTypes.h>
29 #include <FBaseString.h>
30 #include <FGrpRectangle.h>
31 #include <FGrpColor.h>
32 #include <FUiIActionEventListener.h>
33 #include <FUiControl.h>
34 #include <FUiContainer.h>
35 #include <FUiCtrlControlsTypes.h>
36
37 namespace Tizen { namespace Ui { namespace Controls
38 {
39 /**
40  * @enum ButtonStatus
41  *
42  * Defines the %Button control status.
43  *
44  * @since       2.0
45  */
46 enum ButtonStatus
47 {
48         BUTTON_STATUS_NORMAL,          /**< The normal status */
49         BUTTON_STATUS_DISABLED,        /**< The disabled status */
50         BUTTON_STATUS_PRESSED,         /**< The pressed status */
51         BUTTON_STATUS_HIGHLIGHTED      /**< The highlighted status */
52 };
53
54 /**
55  * @class       Button
56  * @brief This class defines the common behavior of a %Button control.
57  *
58  * @since 2.0
59  *
60  * The %Button class displays a rectangular area that can be pressed.
61  *
62  * For more information on the class features, see <a href="../org.tizen.native.appprogramming/html/guide/ui/implementing_button.htm">Buttons</a>.
63  *
64  * The following example demonstrates how to use the %Button class.
65  *
66  *
67  * @code
68 // Sample code for ButtonSample.h
69 #include <FUi.h>
70
71 class ButtonSample
72         : public Tizen::Ui::Controls::Form
73         , public Tizen::Ui::IActionEventListener
74 {
75 public:
76         ButtonSample(void)
77         : __pButton(null)
78         , __pBitmapButton(null){}
79
80         bool Initialize(void);
81         virtual result OnInitializing(void);
82
83         // IActionEventListener
84         virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
85
86 private:
87         static const int ID_BUTTON  = 101;
88         static const int ID_BITMAP_BUTTON = 102;
89
90         Tizen::Ui::Controls::Button* __pButton;
91         Tizen::Ui::Controls::Button* __pBitmapButton;
92 };
93
94  *      @endcode
95  *
96  *      @code
97 // Sample code for ButtonSample.cpp
98 #include <FApp.h>
99 #include <FGraphics.h>
100
101 #include "ButtonSample.h"
102
103 using namespace Tizen::App;
104 using namespace Tizen::Graphics;
105 using namespace Tizen::Ui::Controls;
106
107 bool
108 ButtonSample::Initialize(void)
109 {
110         Construct(FORM_STYLE_NORMAL);
111         return true;
112 }
113
114 result
115 ButtonSample::OnInitializing(void)
116 {
117         result r = E_SUCCESS;
118
119         // Creates an instance of Button
120         __pButton = new Button();
121         __pButton->Construct(Rectangle(50, 50, 200, 200), L"Button");
122         __pButton->SetActionId(ID_BUTTON);
123         __pButton->AddActionEventListener(*this);
124
125         AddControl(*__pButton);
126
127         // Creates an instance of Button for bitmap button
128         __pBitmapButton = new Button();
129         __pBitmapButton->Construct(Rectangle(260, 50, 200, 200));
130         __pBitmapButton->SetActionId(ID_BITMAP_BUTTON);
131         __pBitmapButton->AddActionEventListener(*this);
132
133         // Gets instances of Bitmap
134         AppResource *pAppResource = Application::GetInstance()->GetAppResource();
135         Bitmap* pBitmapNormal = pAppResource->GetBitmapN(L"tizen.png");
136         Bitmap* pBitmapPressed = pAppResource->GetBitmapN(L"tizen.png");
137
138         // Sets the bitmaps to the bitmap button
139         __pBitmapButton->SetNormalBackgroundBitmap(*pBitmapNormal);
140         __pBitmapButton->SetPressedBackgroundBitmap(*pBitmapPressed);
141
142         // Deallocates bitmaps
143         delete pBitmapNormal;
144         delete pBitmapPressed;
145
146         // Adds the bitmap button to the form
147         AddControl(*__pBitmapButton);
148
149         return r;
150 }
151
152 // IActionEventListener implementation
153 void
154 ButtonSample::OnActionPerformed(const Control& source, int actionId)
155 {
156         switch (actionId)
157         {
158         case ID_BUTTON:
159                 {
160                         // ....
161                 }
162                 break;
163         case ID_BITMAP_BUTTON:
164                 {
165                         // ....
166                 }
167                 break;
168         default:
169                 break;
170         }
171 }
172  * @endcode
173  *
174  */
175 class _OSP_EXPORT_ Button
176         : public Tizen::Ui::Control
177 {
178 public:
179         /**
180          * This is the default constructor for this class.
181          *
182          * @since               2.0
183          */
184         Button(void);
185
186         /**
187          * This is the destructor for this class.
188          *
189          * @since               2.0
190          */
191         virtual ~Button(void);
192
193         /**
194          * Initializes this instance of %Button with the specified parameters.
195          *
196          * @since                       2.0
197          *
198          * @return              An error code
199          * @param[in]   rect                    An instance of the Rectangle class @n
200          *                                                              This instance represents the x and y coordinates of the top-left corner @n
201          *                              of the created window along with its width and height. @n
202          * @param[in]   text                    The text to be displayed on the button
203          * @exception   E_SUCCESS                       The method is successful.
204          * @exception   E_INVALID_ARG   A specified input parameter is invalid.
205          * @exception   E_SYSTEM                        A system error has occurred.
206          * @remarks             A control is fully functional only after it has been added to a container. Therefore, some methods may fail if they are used before
207          *                              adding the control to the container.
208          * @remarks             To display the text in multi-lines or to denote the end of line, use '\\n'.
209          * @remarks             The size of the control must be within the range defined by the minimum and maximum sizes.
210          */
211         result Construct(const Tizen::Graphics::Rectangle& rect, const Tizen::Base::String& text = L"");
212
213         /**
214          * Adds a listener instance. @n
215          * The added listener can listen to events on the given event dispatcher's context when they are fired.
216          *
217          * @since                       2.0
218          *
219          * @param[in]   listener        The event listener to be added
220          */
221         void AddActionEventListener(Tizen::Ui::IActionEventListener& listener);
222
223         /**
224          * Removes a listener instance. @n
225          * The removed listener cannot listen to events when they are fired.
226          *
227          * @since                       2.0
228          *
229          * @param[in]   listener        The event listener to be removed
230          */
231         void RemoveActionEventListener(Tizen::Ui::IActionEventListener& listener);
232
233         /**
234          * Sets the action ID of the button.
235          *
236          * @since               2.0
237          *
238          * @param[in]   actionId                The action ID
239          */
240         void SetActionId(int actionId);
241
242         /**
243           * Gets the action ID of the button.
244           *
245           * @since              2.0
246           *
247           * @return             An integer value representing the action ID
248           */
249         int GetActionId(void) const;
250
251 public:
252         /**
253          * Sets the text that the button displays.
254          *
255          * @since               2.0
256          *
257          * @param[in]   text    The text of the button
258          * @remarks             To display text in multi-lines or to denote the end of line, use '\\n'.
259          */
260         void SetText(const Tizen::Base::String& text);
261
262         /**
263          * Sets the horizontal alignment of the text of the button.
264          *
265          * @since               2.0
266          *
267          * @param[in]   alignment       The horizontal text alignment
268          */
269         void SetTextHorizontalAlignment(HorizontalAlignment alignment);
270
271         /**
272          * Sets the vertical alignment of the text of the button.
273          *
274          * @since               2.0
275          *
276          * @param[in]   alignment       The vertical text alignment
277          */
278         void SetTextVerticalAlignment(VerticalAlignment alignment);
279
280 public:
281         /**
282          * Gets the text displayed by the button.
283          *
284          * @since       2.0
285          *
286          * @return      The text of the button
287          */
288         Tizen::Base::String GetText(void) const;
289
290         /**
291          * Gets the horizontal alignment of the text of the button.
292          *
293          * @since       2.0
294          *
295          * @return      The horizontal text alignment
296          */
297         HorizontalAlignment GetTextHorizontalAlignment(void) const;
298
299         /**
300          * Gets the vertical alignment of the text of the button.
301          *
302          * @since       2.0
303          *
304          * @return      The vertical text alignment
305          */
306         VerticalAlignment GetTextVerticalAlignment(void) const;
307
308         //Normal color
309         /**
310          * Sets the color of the text to be displayed on the button.
311          *
312          * @since                       2.0
313          *
314          * @param[in]   color   The text color to be set
315          */
316         virtual void SetTextColor(const Tizen::Graphics::Color& color);
317
318         /**
319          * Gets the color of the text to be displayed on the button.
320          *
321          * @since                       2.0
322          *
323          * @return      The text color
324          */
325         virtual Tizen::Graphics::Color GetTextColor(void) const;
326
327         //Pressed color
328         /**
329          * Sets the text color of the button for the pressed state.
330          *
331          * @since                       2.0
332          *
333          * @param[in]   color   The color to be set
334          */
335         void SetPressedTextColor(const Tizen::Graphics::Color& color);
336
337         /**
338          * Gets the text color of the button for the pressed state.
339          *
340          * @since                       2.0
341          *
342          * @return      The text color when the button is pressed
343          */
344         Tizen::Graphics::Color GetPressedTextColor(void) const;
345
346         //Disabled color
347         /**
348          * Sets the text color of the button for the disabled state.
349          *
350          * @since                       2.0
351          *
352          * @param[in]   color   The color to be set
353          */
354         void SetDisabledTextColor(const Tizen::Graphics::Color& color);
355
356         /**
357          * Gets the text color of the button for the disabled state.
358          *
359          * @since                       2.0
360          *
361          * @return              The disabled text color
362          */
363         Tizen::Graphics::Color GetDisabledTextColor(void) const;
364
365         /**
366          * Sets the text color of the button for the highlighted state.
367          *
368          * @since           2.0
369          *
370          * @param[in]   color   The color to be set
371          * @remarks     While navigating the user interface using the directional keys, the focused UI control is highlighted.
372          */
373         void SetHighlightedTextColor(const Tizen::Graphics::Color& color);
374
375         /**
376          * Gets the text color of the button for the highlighted state.
377          *
378          * @since           2.0
379          *
380          * @return    The highlighted text color
381          * @remarks    While navigating the user interface using the directional keys, the selected UI control is highlighted and takes the focus.
382          */
383         Tizen::Graphics::Color GetHighlightedTextColor(void) const;
384
385         /**
386          * Sets a bitmap that is to be displayed when the button is not pressed.
387          *
388          * @since           2.0
389          *
390          * @param[in]   position        The location of a bitmap where it is to be displayed on the button
391          * @param[in]   bitmap          The bitmap of to be set
392          */
393         void SetNormalBitmap(const Tizen::Graphics::Point& position, const Tizen::Graphics::Bitmap& bitmap);
394
395         /**
396          * Sets the bitmap that is to be displayed on the button when it is pressed.
397          *
398          * @since               2.0
399          *
400          * @param[in]   position        The location of a bitmap where it is to be displayed on the Button control
401          * @param[in]   bitmap          The bitmap to be set
402          */
403         void SetPressedBitmap(const Tizen::Graphics::Point& position, const Tizen::Graphics::Bitmap& bitmap);
404
405         /**
406         * Sets the disabled bitmap of the button.
407         *
408         * @since                        2.0
409         *
410         * @param[in]            position        The location of disabled bitmap
411         * @param[in]    bitmap          The disabled bitmap of the button
412         */
413         void SetDisabledBitmap(const Tizen::Graphics::Point& position, const Tizen::Graphics::Bitmap& bitmap);
414
415         /**
416          * Sets the normal background bitmap of the button.
417          *
418          * @since               2.0
419          *
420          * @param[in]   bitmap                  The normal background image
421          */
422         void SetNormalBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
423
424         /**
425          * Sets the pressed background bitmap of the button.
426          *
427          * @since               2.0
428          *
429          * @param[in]   bitmap                  The pressed background bitmap
430          */
431         void SetPressedBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
432
433         /**
434          * Sets the highlighted background bitmap of the button.
435          *
436          * @since               2.0
437          *
438          * @param[in]   bitmap    The highlighted background bitmap
439          * @remarks             When a user navigates the user interface using the directional keys, the focused UI control is highlighted.
440          */
441         void SetHighlightedBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
442
443         /**
444          * Gets the color of the button for the specified status.
445          *
446          * @since       2.0
447          *
448          * @return      The color, @n
449          *                              else RGBA(0, 0, 0, 0) if an error occurs
450          * @param[in]   status               The status
451          * @exception   E_SUCCESS            The method is successful.
452          * @remarks     The specific error code can be accessed using the GetLastResult() method.
453          */
454         Tizen::Graphics::Color GetColor(ButtonStatus status) const;
455
456         /**
457          * Sets the color of the button for the specified status.
458          *
459          * @since       2.0
460          *
461          * @return      An error code
462          * @param[in]   status               The status
463          * @param[in]   color                The button color
464          * @exception   E_SUCCESS            The method is successful.
465          * @exception   E_SYSTEM             A system error has occurred.
466          */
467         result SetColor(ButtonStatus status, const Tizen::Graphics::Color& color);
468
469         /**
470          * Gets the text size.
471          *
472          * @since       2.0
473          *
474          * @return      The size of the text, @n
475          *              else @c -1 if an error occurs
476          * @exception   E_SUCCESS                 The method is successful.
477          * @exception   E_SYSTEM                  A system error has occurred.
478          * @remarks     The specific error code can be accessed using the GetLastResult() method.
479          * @see         SetTextSize()
480          */
481         int GetTextSize(void) const;
482
483         /**
484          * Sets the text size.
485          *
486          * @since       2.0
487          *
488          * @return      An error code
489          * @param[in]   size              The text size
490          * @exception   E_SUCCESS         The method is successful.
491          * @exception   E_INVALID_ARG     The specified input parameter is invalid. @n
492          *                                The specified @c size must be greater than @c 0.
493          * @exception   E_SYSTEM          A system error has occurred.
494          * @see                           GetTextSize()
495          */
496         result SetTextSize(int size);
497
498 protected:
499         friend class _ButtonImpl;
500
501 private:
502         //
503         // This is the copy constructor for this class.
504         //
505         Button(const Button& rhs);
506
507         //
508         // Assigns the value of the specified instance to the current instance of %Button.
509         //
510         Button& operator =(const Button& rhs);
511
512 }; // Button
513
514 }}} // Tizen::Ui::Controls
515
516 #endif // _FUI_CTRL_BUTTON_H_