Updated demos to use DALi clang-format
[platform/core/uifw/dali-demo.git] / examples / simple-visuals-control / my-control.h
1 #ifndef DALI_DEMO_MY_CONTROL_H
2 #define DALI_DEMO_MY_CONTROL_H
3
4 /*
5  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <string>
22
23 namespace Demo
24 {
25 namespace Internal
26 {
27 class MyControl;
28 }
29
30 /**
31  * @brief MyControl is an example control,
32  *
33  * @details It's purpose is to show how to create a simple control to work with the style sheet and state changes.
34  * States changes includes Normal, Focused and Disabled, this example uses the style sheet to set visuals for Normal and Focused states.
35  * When the Focus manager changes the control to be focused the visual displayed is changed and vice versa.
36  *
37  * The visual has the property name ICON_VISUAL with the style sheet string equivalent of "iconVisual"
38  *
39  */
40
41 class MyControl : public Dali::Toolkit::Control
42 {
43 public:
44   /**
45    * The start and end property ranges for this Control
46    * My control can use properties from Toolkit::Control as it is derived from it. As control is derived from Actor, MyControl can also use Dali::Actor Properties.
47    *
48    * To ensure that the Property indexes from MyControl do not shadow any from Control we start it's index from the end of Toolkit::Control's indexes.
49    *
50    * Toolkit::Control would have done the same with Actor.
51    *
52    * The end index for this control is set to the start index + 1000 hence MyControl can have 1000 property indexes.
53    *
54    * PROPERTY_END_INDEX for MyControl is public, if another control is derived from it then if can specify MyControl::PROPERTY_END_INDEX+1 to start it's
55    * indexing after MyControls last index.
56    */
57   enum PropertyRange
58   {
59     PROPERTY_START_INDEX            = Dali::Toolkit::Control::CONTROL_PROPERTY_END_INDEX + 1,
60     PROPERTY_END_INDEX              = PROPERTY_START_INDEX + 1000,
61     ANIMATABLE_PROPERTY_START_INDEX = Dali::ANIMATABLE_PROPERTY_REGISTRATION_START_INDEX,
62     ANIMATABLE_PROPERTY_END_INDEX   = ANIMATABLE_PROPERTY_START_INDEX + 1000
63   };
64
65   struct Property
66   {
67     enum
68     {
69       /**
70        * @brief name "iconVisual", type string if it is a url, map otherwise
71        * @details Sets the icon visual to be displayed by the control
72        */
73       ICON_VISUAL = PROPERTY_START_INDEX
74     };
75   };
76
77 public: // Construction / destruction
78   /**
79    * @brief Create an uninitialized handle
80    */
81   MyControl();
82
83   /**
84    * @brief Create a new MyControl
85    */
86   static MyControl New();
87
88   /**
89    * @brief Destructor. This is non-virtual since derived Handle types must not contain data or virtual methods
90    */
91   ~MyControl();
92
93   /**
94    * @brief Copy Constructor
95    *
96    * @param[in] shadowButton the handle of the control to copy
97    */
98   MyControl(const MyControl& shadowButton);
99
100   /**
101    * @brief Assignment Operator
102    *
103    * @param[in] shadowButton the source of the assignment
104    */
105   MyControl& operator=(const MyControl& shadowButton);
106
107   /**
108    * @brief Downcast
109    *
110    * @param[in] shadowButton the handle of control to downcast to MyControl
111    */
112   static MyControl DownCast(BaseHandle handle);
113
114 public: //  // Not intended for application developers
115   /// @cond internal
116   /**
117    * @brief Create a handle from an implementation
118    */
119   MyControl(Internal::MyControl& implementation);
120
121   /**
122    * @brief Allow the creation of an ShadowButton handle from an internal CustomActor pointer
123    */
124   MyControl(Dali::Internal::CustomActor* internal);
125   /// @endcond
126 };
127
128 } // namespace Demo
129
130 #endif // DALI_DEMO_MY_CONTROL_H