3461f0d996971b0d5c92eed488bfbfb74c3ea8e9
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / dummy-control.cpp
1 /*
2  * Copyright (c) 2017 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 #include "dummy-control.h"
19
20 #include <dali-toolkit/dali-toolkit.h>
21 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
22 #include <dali-toolkit/devel-api/controls/control-devel.h>
23
24 namespace Dali
25 {
26
27 namespace Toolkit
28 {
29
30 DummyControl::DummyControl()
31 {
32 }
33
34 DummyControl::DummyControl(const DummyControl& control)
35 : Control( control )
36 {
37 }
38
39 DummyControl::~DummyControl()
40 {
41 }
42
43 DummyControl DummyControl::DownCast( BaseHandle handle )
44 {
45   return Control::DownCast<DummyControl, DummyControlImpl>(handle);
46 }
47
48 DummyControl& DummyControl::operator=(const DummyControl& control)
49 {
50   Control::operator=( control );
51   return *this;
52 }
53
54 // Used to test signal connections
55 void DummyControlImpl::CustomSlot1( Actor actor )
56 {
57   mCustomSlot1Called = true;
58 }
59
60 namespace {
61
62 BaseHandle Create()
63 {
64   return DummyControlImpl::New();
65 }
66
67 DALI_TYPE_REGISTRATION_BEGIN( Toolkit::DummyControl, Toolkit::Control, Create );
68 DALI_TYPE_REGISTRATION_END()
69
70 Dali::PropertyRegistration dummyControlVisualProperty01(
71   typeRegistration, "testVisual", Dali::Toolkit::DummyControl::Property::TEST_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
72
73 Dali::PropertyRegistration dummyControlVisualProperty02(
74   typeRegistration, "testVisual2", Dali::Toolkit::DummyControl::Property::TEST_VISUAL2, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
75
76 Dali::PropertyRegistration dummyControlVisualProperty03(
77   typeRegistration, "foregroundVisual", Dali::Toolkit::DummyControl::Property::FOREGROUND_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
78
79 Dali::PropertyRegistration dummyControlVisualProperty04(
80   typeRegistration, "focusVisual", Dali::Toolkit::DummyControl::Property::FOCUS_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
81
82 Dali::PropertyRegistration dummyControlVisualProperty05(
83   typeRegistration, "labelVisual", Dali::Toolkit::DummyControl::Property::LABEL_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
84
85 }
86
87 DummyControl DummyControlImpl::New()
88 {
89   IntrusivePtr< DummyControlImpl > impl = new DummyControlImpl;
90   DummyControl control( *impl );
91   impl->Initialize();
92   return control;
93 }
94
95 DummyControlImpl::DummyControlImpl()
96 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_HOVER_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ),
97   mCustomSlot1Called(false)
98 {
99 }
100
101 DummyControlImpl::~DummyControlImpl()
102 {
103 }
104
105 void DummyControlImpl::RegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
106 {
107   DevelControl::RegisterVisual( *this, index, visual );
108
109   VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
110   if( iter == mRegisteredVisualIndices.end() )
111   {
112     mRegisteredVisualIndices.push_back(index);
113   }
114 }
115
116 void DummyControlImpl::RegisterVisual( Property::Index index, Toolkit::Visual::Base visual, bool enabled )
117 {
118   DevelControl::RegisterVisual( *this, index, visual, enabled );
119
120   VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
121   if( iter == mRegisteredVisualIndices.end() )
122   {
123     mRegisteredVisualIndices.push_back(index);
124   }
125 }
126
127 void DummyControlImpl::UnregisterVisual( Property::Index index )
128 {
129   DevelControl::UnregisterVisual( *this, index );
130
131   VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
132   if( iter != mRegisteredVisualIndices.end() )
133   {
134     mRegisteredVisualIndices.erase(iter);
135   }
136 }
137
138 Toolkit::Visual::Base DummyControlImpl::GetVisual( Property::Index index )
139 {
140   return DevelControl::GetVisual( *this, index );
141 }
142
143 void DummyControlImpl::EnableVisual( Property::Index index, bool enabled )
144 {
145   DevelControl::EnableVisual( *this, index, enabled );
146 }
147
148 bool DummyControlImpl::IsVisualEnabled( Property::Index index )
149 {
150   return DevelControl::IsVisualEnabled( *this, index );
151 }
152
153 Animation DummyControlImpl::CreateTransition( const Toolkit::TransitionData& transition )
154 {
155   return DevelControl::CreateTransition( *this, transition );
156 }
157
158 void DummyControlImpl::SetProperty( BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value )
159 {
160   Toolkit::DummyControl control = Toolkit::DummyControl::DownCast( Dali::BaseHandle( object ) );
161   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
162
163   switch(index)
164   {
165     case Toolkit::DummyControl::Property::TEST_VISUAL:
166     case Toolkit::DummyControl::Property::TEST_VISUAL2:
167     case Toolkit::DummyControl::Property::FOREGROUND_VISUAL:
168     case Toolkit::DummyControl::Property::FOCUS_VISUAL:
169     case Toolkit::DummyControl::Property::LABEL_VISUAL:
170     {
171       Property::Map* map = value.GetMap();
172       if( map != NULL )
173       {
174         VisualFactory visualFactory = VisualFactory::Get();
175         Visual::Base visual = visualFactory.CreateVisual(*map);
176         dummyImpl.RegisterVisual(index, visual);
177       }
178       break;
179     }
180   }
181 }
182
183 Property::Value DummyControlImpl::GetProperty( BaseObject* object, Dali::Property::Index propertyIndex )
184 {
185   Dali::Property::Value value;
186   return value;
187 }
188
189 Toolkit::DummyControl Impl::DummyControl::New()
190 {
191   IntrusivePtr< Toolkit::Impl::DummyControl > impl = new Toolkit::Impl::DummyControl;
192   Toolkit::DummyControl control( *impl );
193   impl->Initialize();
194   return control;
195 }
196
197
198 Impl::DummyControl::DummyControl()
199 : DummyControlImpl(),
200   initializeCalled(false),
201   activatedCalled(false),
202   onAccTouchedCalled(false),
203   onAccValueChangeCalled(false),
204   themeChangeCalled(false),
205   fontChangeCalled(false),
206   pinchCalled(false),
207   panCalled(false),
208   tapCalled(false),
209   longPressCalled(false),
210   stageConnectionCalled(false),
211   stageDisconnectionCalled(false),
212   childAddCalled(false),
213   childRemoveCalled(false),
214   sizeSetCalled(false),
215   sizeAnimationCalled(false),
216   touchEventCalled(false),
217   hoverEventCalled(false),
218   wheelEventCalled(false),
219   keyEventCalled(false),
220   keyInputFocusGained(false),
221   keyInputFocusLost(false)
222 {
223 }
224
225 Impl::DummyControl::~DummyControl() { }
226
227
228 void Impl::DummyControl::OnInitialize() { initializeCalled = true; }
229 bool Impl::DummyControl::OnAccessibilityActivated() { activatedCalled = true; return true; }
230 bool Impl::DummyControl::OnAccessibilityTouch(const TouchEvent& touchEvent) { onAccTouchedCalled = true; return true; }
231 bool Impl::DummyControl::OnAccessibilityValueChange( bool isIncrease )
232 {
233   onAccValueChangeCalled = true; return true;
234 }
235
236 void Impl::DummyControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
237 {
238   themeChangeCalled = change == StyleChange::THEME_CHANGE;
239   fontChangeCalled = change == StyleChange::DEFAULT_FONT_SIZE_CHANGE;
240 }
241 void Impl::DummyControl::OnPinch(const PinchGesture& pinch) { pinchCalled = true; }
242 void Impl::DummyControl::OnPan(const PanGesture& pan) { panCalled = true; }
243 void Impl::DummyControl::OnTap(const TapGesture& tap) { tapCalled = true; }
244 void Impl::DummyControl::OnLongPress(const LongPressGesture& longPress) { longPressCalled = true; }
245 void Impl::DummyControl::OnStageConnection( int depth ) { Control::OnStageConnection( depth ); stageConnectionCalled = true; }
246 void Impl::DummyControl::OnStageDisconnection() { stageDisconnectionCalled = true; Control::OnStageDisconnection(); }
247 void Impl::DummyControl::OnChildAdd(Actor& child) { childAddCalled = true; }
248 void Impl::DummyControl::OnChildRemove(Actor& child) { childRemoveCalled = true; }
249 void Impl::DummyControl::OnSizeSet(const Vector3& targetSize) { Control::OnSizeSet( targetSize ); sizeSetCalled = true; }
250 void Impl::DummyControl::OnSizeAnimation(Animation& animation, const Vector3& targetSize) { Control::OnSizeAnimation( animation, targetSize ); sizeAnimationCalled = true; }
251 bool Impl::DummyControl::OnTouchEvent(const TouchEvent& event) { touchEventCalled = true; return false; }
252 bool Impl::DummyControl::OnHoverEvent(const HoverEvent& event) { hoverEventCalled = true; return false; }
253 bool Impl::DummyControl::OnWheelEvent(const WheelEvent& event) { wheelEventCalled = true; return false; }
254 bool Impl::DummyControl::OnKeyEvent(const KeyEvent& event) { keyEventCalled = true; return false;}
255 void Impl::DummyControl::OnKeyInputFocusGained() { keyInputFocusGained = true; }
256 void Impl::DummyControl::OnKeyInputFocusLost() { keyInputFocusLost = true; }
257
258 void Impl::DummyControl::SetLayout( Property::Index visualIndex, Property::Map& map )
259 {
260   Property::Value value( map );
261   mLayouts[visualIndex] = value;
262 }
263
264 void Impl::DummyControl::OnRelayout( const Vector2& size, RelayoutContainer& container )
265 {
266   if ( mRelayoutCallback )
267   {
268     mRelayoutCallback( size );  // Execute callback if set
269   }
270
271   Property::Map emptyMap;
272
273   for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
274   {
275     Visual::Base visual = GetVisual(*iter);
276     Property::Value value = mLayouts[*iter];
277     Property::Map* map = NULL;
278
279     if( value.GetType() != Property::NONE )
280     {
281       map = value.GetMap();
282     }
283     if( map == NULL )
284     {
285       map = &emptyMap;
286     }
287
288     visual.SetTransformAndSize( *map, size );
289   }
290 }
291
292 void Impl::DummyControl::SetRelayoutCallback( RelayoutCallbackFunc callback  )
293 {
294   mRelayoutCallback = callback;
295 }
296
297
298 DummyControl DummyControl::New( bool override )
299 {
300   DummyControl control;
301
302   if (override)
303   {
304     control = Impl::DummyControl::New();
305   }
306   else
307   {
308     control = DummyControlImpl::New();
309   }
310
311   return control;
312 }
313
314 DummyControl::DummyControl( DummyControlImpl& implementation )
315 : Control( implementation )
316 {
317 }
318
319 DummyControl::DummyControl( Dali::Internal::CustomActor* internal )
320 : Control( internal )
321 {
322   VerifyCustomActorPointer<DummyControlImpl>(internal);
323 }
324
325 } // namespace Toolkit
326
327 } // namespace Dali