cbecb9b635e4edda73cc248dbc4e2167a8a584e6
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / test-button.cpp
1 /*
2  * Copyright (c) 2016 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 #include <dali/dali.h>
18 #include <dali-toolkit/dali-toolkit.h>
19 #include <test-button.h>
20 #include <dali/devel-api/object/type-registry-helper.h>
21
22 using namespace Dali;
23 using namespace Dali::Toolkit;
24
25 namespace
26 {
27 Property::Value ConvertAnimationMap( const Test::TestAnimationData& animationMap )
28 {
29   // We have a data structure. Now convert it back into an array:
30   Property::Array animators;
31   for( unsigned int i=0; i<animationMap.Size(); ++i )
32   {
33     Property::Map animator;
34     animator.Insert( "target", Property::Value(animationMap.mAnimationDataList[i]->target ));
35     animator.Insert( "property", Property::Value(animationMap.mAnimationDataList[i]->property ));
36     animator.Insert( "value", Property::Value(animationMap.mAnimationDataList[i]->value ));
37     animator.Insert( "alphaFunction", Property::Value(animationMap.mAnimationDataList[i]->alphaFunction ));
38     animator.Insert( "timePeriodDelay", Property::Value(animationMap.mAnimationDataList[i]->timePeriodDelay ));
39     animator.Insert( "timePeriodDuration", Property::Value(animationMap.mAnimationDataList[i]->timePeriodDuration ));
40     animators.PushBack( animator );
41   }
42   Property::Value animation( animators );
43   return animation;
44 }
45 }
46
47 namespace Test
48 {
49 namespace Impl
50 {
51
52 Test::TestButton TestButton::New()
53 {
54   IntrusivePtr<TestButton> internalTestButton = new TestButton();
55   Test::TestButton button( *internalTestButton );
56   internalTestButton->Initialize();
57   return button;
58 }
59
60 TestButton::TestButton()
61 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS|REQUIRES_STYLE_CHANGE_SIGNALS ) )
62 {
63 }
64
65 TestButton::~TestButton()
66 {
67 }
68
69 void TestButton::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value )
70 {
71   Test::TestButton button = Test::TestButton::DownCast( Dali::BaseHandle( object ) );
72
73   if ( button )
74   {
75     switch ( index )
76     {
77       case Test::TestButton::Property::PRESS_TRANSITION:
78       {
79         if( value.GetType() == Property::MAP )
80         {
81           Property::Map* valueMap = value.GetMap();
82           TestButton& buttonImpl = GetImpl(button);
83           buttonImpl.mPressTransitionData.Clear();
84           NewAnimation( *valueMap, buttonImpl.mPressTransitionData );
85         }
86         else if( value.GetType() == Property::ARRAY )
87         {
88           Property::Array* valueArray = value.GetArray();
89           TestButton& buttonImpl = GetImpl(button);
90           buttonImpl.mPressTransitionData.Clear();
91           NewAnimation( *valueArray, buttonImpl.mPressTransitionData );
92         }
93         break;
94       }
95     }
96   }
97 }
98
99 Property::Value TestButton::GetProperty( BaseObject* object, Property::Index propertyIndex )
100 {
101   Test::TestButton button = Test::TestButton::DownCast( Dali::BaseHandle( object ) );
102
103   if ( button )
104   {
105     TestButton& buttonImpl = GetImpl(button);
106     switch ( propertyIndex )
107     {
108       case Test::TestButton::Property::PRESS_TRANSITION:
109       {
110         return ConvertAnimationMap(buttonImpl.mPressTransitionData);
111         break;
112       }
113       case Test::TestButton::Property::RELEASE_TRANSITION:
114       {
115         return ConvertAnimationMap(buttonImpl.mReleaseTransitionData);
116         break;
117       }
118       case Test::TestButton::Property::DISABLED_TRANSITION:
119       {
120         return ConvertAnimationMap(buttonImpl.mDisabledTransitionData);
121         break;
122       }
123       case Test::TestButton::Property::ENABLED_TRANSITION:
124       {
125         return ConvertAnimationMap(buttonImpl.mEnabledTransitionData);
126         break;
127       }
128     }
129   }
130   return Property::Value();
131 }
132
133 BaseHandle Create()
134 {
135   return TestButton::New();
136 }
137
138 // Generates typeRegistration static variable.
139 DALI_TYPE_REGISTRATION_BEGIN( Test::TestButton, Dali::Toolkit::Control, Create )
140
141 DALI_PROPERTY_REGISTRATION( Test, TestButton, "pressTransition", ARRAY, PRESS_TRANSITION )
142 DALI_PROPERTY_REGISTRATION( Test, TestButton, "releaseTransition", ARRAY, RELEASE_TRANSITION)
143 DALI_PROPERTY_REGISTRATION( Test, TestButton, "disabledTransition", ARRAY, DISABLED_TRANSITION )
144 DALI_PROPERTY_REGISTRATION( Test, TestButton, "enabledTransition", ARRAY, ENABLED_TRANSITION )
145
146 DALI_TYPE_REGISTRATION_END()
147
148 } // Impl Namespace
149
150 TestButton::TestButton()
151 : Control()
152 {
153 }
154
155 TestButton::TestButton(const TestButton& button)
156 : Control( button )
157 {
158 }
159
160 TestButton::TestButton(Impl::TestButton& impl)
161 : Control(impl)
162 {
163 }
164
165 TestButton::TestButton(Dali::Internal::CustomActor* internal)
166 : Control(internal)
167 {
168   VerifyCustomActorPointer<Impl::TestButton>(internal);
169 }
170
171 TestButton& TestButton::operator=( const TestButton& button)
172 {
173   if(&button != this)
174   {
175     Control::operator=(button);
176   }
177   return *this;
178 }
179
180 TestButton::~TestButton()
181 {
182 }
183
184 TestButton TestButton::New()
185 {
186   return Impl::TestButton::New();
187 }
188
189 TestButton TestButton::DownCast( BaseHandle handle )
190 {
191   return Control::DownCast<TestButton,Impl::TestButton>(handle);
192 }
193
194 } // namespace Test