[dali_1.9.20] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / buttons / push-button-impl.cpp
1 /*
2  * Copyright (c) 2020 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 // CLASS HEADER
19 #include "push-button-impl.h"
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/type-registry.h>
23 #include <dali/public-api/object/type-registry-helper.h>
24 #include <dali/devel-api/scripting/scripting.h>
25 #include <dali/integration-api/debug.h>
26
27 // INTERNAL INCLUDES
28 #include <dali-toolkit/public-api/controls/image-view/image-view.h>
29 #include <dali-toolkit/public-api/controls/text-controls/text-label.h>
30 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
31 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
32
33 #if defined(DEBUG_ENABLED)
34   extern Debug::Filter* gLogButtonFilter;
35 #endif
36
37 namespace Dali
38 {
39
40 namespace Toolkit
41 {
42
43 namespace Internal
44 {
45
46 namespace
47 {
48
49 BaseHandle Create()
50 {
51   return Toolkit::PushButton::New();
52 }
53
54 // Properties
55
56 DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PushButton, Toolkit::Button, Create )
57
58 DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "labelPadding",  STRING, LABEL_PADDING )
59 DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "iconPadding",  STRING, ICON_PADDING )
60
61 DALI_TYPE_REGISTRATION_END()
62
63 } // unnamed namespace
64
65 namespace
66 {
67
68 } // unnamed namespace
69
70 Dali::Toolkit::PushButton PushButton::New()
71 {
72   // Create the implementation, temporarily owned on stack
73   IntrusivePtr< PushButton > internalPushButton = new PushButton();
74
75   // Pass ownership to CustomActor
76   Dali::Toolkit::PushButton pushButton( *internalPushButton );
77
78   // Second-phase init of the implementation
79   // This can only be done after the CustomActor connection has been made...
80   internalPushButton->Initialize();
81
82   return pushButton;
83 }
84
85 PushButton::PushButton()
86 : Button(),
87   mIconAlignment( RIGHT )
88 {
89 }
90
91 PushButton::~PushButton()
92 {
93 }
94
95 void PushButton::OnInitialize()
96 {
97   Button::OnInitialize();
98
99   // Push button requires the Leave event.
100   Actor self = Self();
101   self.SetProperty( Actor::Property::LEAVE_REQUIRED, true );
102 }
103
104 void PushButton::SetIconAlignment( const PushButton::IconAlignment iconAlignment )
105 {
106   mIconAlignment = iconAlignment;
107   Button::Align labelAlignment;
108   switch ( iconAlignment )
109   {
110   case RIGHT:
111   {
112     labelAlignment = Button::BEGIN;
113     break;
114   }
115   case TOP:
116   {
117     labelAlignment = Button::BOTTOM;
118     break;
119   }
120   case BOTTOM:
121   {
122     labelAlignment = Button::TOP;
123     break;
124   }
125   case LEFT:
126   default:
127     labelAlignment = Button::END;
128     break;
129   }
130
131   Button::SetLabelAlignment( labelAlignment );
132 }
133
134 const PushButton::IconAlignment PushButton::GetIconAlignment() const
135 {
136   return mIconAlignment;
137 }
138
139 void PushButton::SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value )
140 {
141   Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) );
142
143   if ( pushButton )
144   {
145     PushButton& pushButtonImpl( GetImplementation( pushButton ) );
146
147     // Properties remain here for Tizen 3.0 legacy requirements. Are now in Button base class
148
149     switch ( propertyIndex )
150     {
151       case Toolkit::PushButton::Property::LABEL_PADDING:
152       {
153         Vector4 padding ( value.Get< Vector4 >() );
154         pushButtonImpl.Button::SetLabelPadding( Padding( padding.x, padding.y, padding.z, padding.w ) );
155         break;
156       }
157       case Toolkit::PushButton::Property::ICON_PADDING:
158       {
159         Vector4 padding ( value.Get< Vector4 >() );
160         pushButtonImpl.Button::SetForegroundPadding( Padding( padding.x, padding.y, padding.z, padding.w ) );
161         break;
162       }
163     }
164   }
165 }
166
167 Property::Value PushButton::GetProperty( BaseObject* object, Property::Index propertyIndex )
168 {
169   Property::Value value;
170
171   Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) );
172
173   if ( pushButton )
174   {
175     PushButton& pushButtonImpl( GetImplementation( pushButton ) );
176
177     switch ( propertyIndex )
178     {
179       case Toolkit::PushButton::Property::LABEL_PADDING:
180       {
181         Padding padding = pushButtonImpl.Button::GetLabelPadding();
182         value = Vector4( padding.x, padding.y, padding.top, padding.bottom);
183         break;
184       }
185       case Toolkit::PushButton::Property::ICON_PADDING:
186       {
187         Padding padding = pushButtonImpl.Button::GetForegroundPadding();
188         value = Vector4( padding.x, padding.y, padding.top, padding.bottom);
189         break;
190       }
191     }
192   }
193
194   return value;
195 }
196
197 } // namespace Internal
198
199 } // namespace Toolkit
200
201 } // namespace Dali