ea4909d1e03845c3cd14b74ae32702666cb0a5a9
[platform/core/uifw/dali-toolkit.git] / base / dali-toolkit / internal / controls / buttons / check-box-button-impl.cpp
1 /*
2  * Copyright (c) 2014 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
20 #include "check-box-button-impl.h"
21
22 // EXTERNAL INCLUDES
23
24 #include <algorithm>
25
26 // INTERNAL INCLUDES
27
28 #include "check-box-button-default-painter-impl.h"
29
30 namespace Dali
31 {
32
33 namespace Toolkit
34 {
35
36 namespace Internal
37 {
38
39 namespace
40 {
41
42 BaseHandle Create()
43 {
44   return Toolkit::CheckBoxButton::New();
45 }
46
47 TypeRegistration mType( typeid(Toolkit::CheckBoxButton), typeid(Toolkit::Button), Create );
48
49 TypeAction a1(mType, Toolkit::CheckBoxButton::ACTION_CHECK_BOX_BUTTON_CLICK, &CheckBoxButton::DoAction);
50
51 }
52
53 namespace
54 {
55   // Helper function used to cast a ButtonPainterPtr to CheckBoxButtonDefaultPainterPtr
56   CheckBoxButtonDefaultPainterPtr GetCheckBoxButtonPainter( ButtonPainterPtr painter )
57   {
58     return static_cast<CheckBoxButtonDefaultPainter*>( painter.Get() );
59   }
60 } // namespace
61
62 Dali::Toolkit::CheckBoxButton CheckBoxButton::New()
63 {
64   // Create the implementation, temporarily owned on stack
65   IntrusivePtr< CheckBoxButton > internalCheckBoxButton = new CheckBoxButton();
66
67   // Pass ownership to CustomActor
68   Dali::Toolkit::CheckBoxButton checkBoxButton( *internalCheckBoxButton );
69
70   // Second-phase init of the implementation
71   // This can only be done after the CustomActor connection has been made...
72   internalCheckBoxButton->Initialize();
73
74   return checkBoxButton;
75 }
76
77 void CheckBoxButton::SetChecked( bool checked )
78 {
79   if( !mDimmed && ( checked != mChecked ) )
80   {
81     // Stores the state.
82     mChecked = checked;
83
84     Toolkit::CheckBoxButton handle( GetOwner() );
85
86     // Notifies the painter the checkbox has been checked.
87     GetCheckBoxButtonPainter( mPainter )->Checked( handle );
88
89     // Emit signal.
90     mClickedSignalV2.Emit( handle );
91   }
92 }
93
94 bool CheckBoxButton::IsChecked() const
95 {
96   return mChecked;
97 }
98
99 void CheckBoxButton::SetBackgroundImage( Image image )
100 {
101   SetBackgroundImage( ImageActor::New( image ) );
102 }
103
104 void CheckBoxButton::SetBackgroundImage( Actor image )
105 {
106   Toolkit::CheckBoxButton handle( GetOwner() );
107   GetCheckBoxButtonPainter( mPainter )->SetBackgroundImage( handle, image );
108 }
109
110 Actor& CheckBoxButton::GetBackgroundImage()
111 {
112   return mBackgroundImage;
113 }
114
115 Actor CheckBoxButton::GetBackgroundImage() const
116 {
117   return mBackgroundImage;
118 }
119
120 void CheckBoxButton::SetCheckedImage( Image image )
121 {
122   SetCheckedImage( ImageActor::New( image ) );
123 }
124
125 void CheckBoxButton::SetCheckedImage( Actor image )
126 {
127   Toolkit::CheckBoxButton handle( GetOwner() );
128   GetCheckBoxButtonPainter( mPainter )->SetCheckedImage( handle, image );
129 }
130
131 Actor& CheckBoxButton::GetCheckedImage()
132 {
133   return mCheckedImage;
134 }
135
136 Actor CheckBoxButton::GetCheckedImage() const
137 {
138   return mCheckedImage;
139 }
140
141 void CheckBoxButton::SetDimmedBackgroundImage( Image image )
142 {
143   SetDimmedBackgroundImage( ImageActor::New( image ) );
144 }
145
146 void CheckBoxButton::SetDimmedBackgroundImage( Actor image )
147 {
148   Toolkit::CheckBoxButton handle( GetOwner() );
149   GetCheckBoxButtonPainter( mPainter )->SetDimmedBackgroundImage( handle, image );
150 }
151
152 Actor& CheckBoxButton::GetDimmedBackgroundImage()
153 {
154   return mDimmedBackgroundImage;
155 }
156
157 Actor CheckBoxButton::GetDimmedBackgroundImage() const
158 {
159   return mDimmedBackgroundImage;
160 }
161
162 void CheckBoxButton::SetDimmedCheckedImage( Image image )
163 {
164   SetDimmedCheckedImage( ImageActor::New( image ) );
165 }
166
167 void CheckBoxButton::SetDimmedCheckedImage( Actor image )
168 {
169   Toolkit::CheckBoxButton handle( GetOwner() );
170   GetCheckBoxButtonPainter( mPainter )->SetDimmedCheckedImage( handle, image );
171 }
172
173 Actor& CheckBoxButton::GetDimmedCheckedImage()
174 {
175   return mDimmedCheckedImage;
176 }
177
178 Actor CheckBoxButton::GetDimmedCheckedImage() const
179 {
180   return mDimmedCheckedImage;
181 }
182
183 Actor& CheckBoxButton::GetFadeOutBackgroundImage()
184 {
185   return mFadeOutBackgroundImage;
186 }
187
188 Actor& CheckBoxButton::GetFadeOutCheckedImage()
189 {
190   return mFadeOutCheckedImage;
191 }
192
193 void CheckBoxButton::OnButtonInitialize()
194 {
195   mUseFadeAnimationProperty = Self().RegisterProperty( Toolkit::CheckBoxButton::USE_FADE_ANIMATION_PROPERTY_NAME, false );
196   mUseCheckAnimationProperty = Self().RegisterProperty( Toolkit::CheckBoxButton::USE_CHECK_ANIMATION_PROPERTY_NAME, true );
197 }
198
199 void CheckBoxButton::OnButtonUp()
200 {
201   if( ButtonDown == mState )
202   {
203     // Stores the state, notifies the painter and emits a signal.
204     SetChecked( !mChecked );
205   }
206 }
207
208 void CheckBoxButton::OnAnimationTimeSet( float animationTime )
209 {
210   GetCheckBoxButtonPainter( mPainter )->SetAnimationTime( animationTime );
211 }
212
213 float CheckBoxButton::OnAnimationTimeRequested() const
214 {
215   return GetCheckBoxButtonPainter( mPainter )->GetAnimationTime();
216 }
217
218 void CheckBoxButton::OnActivated()
219 {
220   // When the button is activated, it performs the click action
221   std::vector<Property::Value> attributes;
222   DoClickAction(attributes);
223 }
224
225 void CheckBoxButton::DoClickAction(const PropertyValueContainer& attributes)
226 {
227   // Prevents the button signals from doing a recursive loop by sending an action
228   // and re-emitting the signals.
229   if(!mClickActionPerforming)
230   {
231     mClickActionPerforming = true;
232     SetChecked( !mChecked );
233     mClickActionPerforming = false;
234   }
235 }
236
237 bool CheckBoxButton::DoAction(BaseObject* object, const std::string& actionName, const std::vector<Property::Value>& attributes)
238 {
239   bool ret = false;
240
241   Dali::BaseHandle handle(object);
242
243   Toolkit::CheckBoxButton button = Toolkit::CheckBoxButton::DownCast(handle);
244
245   if(Toolkit::CheckBoxButton::ACTION_CHECK_BOX_BUTTON_CLICK == actionName)
246   {
247     GetImplementation(button).DoClickAction(attributes);
248     ret = true;
249   }
250
251   return ret;
252 }
253
254 CheckBoxButton::CheckBoxButton()
255 : Button(),
256   mChecked( false ),
257   mClickActionPerforming(false)
258 {
259   // Creates specific painter.
260   mPainter = new CheckBoxButtonDefaultPainter();
261 }
262
263 CheckBoxButton::~CheckBoxButton()
264 {
265   mPainter = NULL;
266 }
267
268 } // namespace Internal
269
270 } // namespace Toolkit
271
272 } // namespace Dali