Purge underscored header file barriers
[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::DoAction( Dali::Property::Index index, Dali::Property::Index action, const Dali::Property::Value attributes )
159 {
160   DummyControl control( *this );
161   DevelControl::DoAction(  control, index, action, attributes);
162 }
163
164 void DummyControlImpl::SetProperty( BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value )
165 {
166   Toolkit::DummyControl control = Toolkit::DummyControl::DownCast( Dali::BaseHandle( object ) );
167   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
168
169   switch(index)
170   {
171     case Toolkit::DummyControl::Property::TEST_VISUAL:
172     case Toolkit::DummyControl::Property::TEST_VISUAL2:
173     case Toolkit::DummyControl::Property::FOREGROUND_VISUAL:
174     case Toolkit::DummyControl::Property::FOCUS_VISUAL:
175     case Toolkit::DummyControl::Property::LABEL_VISUAL:
176     {
177       Property::Map* map = value.GetMap();
178       if( map != NULL )
179       {
180         VisualFactory visualFactory = VisualFactory::Get();
181         Visual::Base visual = visualFactory.CreateVisual(*map);
182         dummyImpl.RegisterVisual(index, visual);
183       }
184       break;
185     }
186   }
187 }
188
189 Property::Value DummyControlImpl::GetProperty( BaseObject* object, Dali::Property::Index propertyIndex )
190 {
191   Toolkit::DummyControl control = Toolkit::DummyControl::DownCast( Dali::BaseHandle( object ) );
192   DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>( control.GetImplementation() );
193
194   Visual::Base visual = dummyImpl.GetVisual( propertyIndex );
195   Property::Map map;
196   if( visual )
197   {
198     visual.CreatePropertyMap( map );
199   }
200   Dali::Property::Value value = map;
201
202   return value;
203 }
204
205
206 Toolkit::DummyControl Impl::DummyControl::New()
207 {
208   IntrusivePtr< Toolkit::Impl::DummyControl > impl = new Toolkit::Impl::DummyControl;
209   Toolkit::DummyControl control( *impl );
210   impl->Initialize();
211   return control;
212 }
213
214 int Impl::DummyControl::constructorCount;
215 int Impl::DummyControl::destructorCount;
216
217 Impl::DummyControl::DummyControl()
218 : DummyControlImpl(),
219   initializeCalled(false),
220   activatedCalled(false),
221   onAccTouchedCalled(false),
222   onAccValueChangeCalled(false),
223   themeChangeCalled(false),
224   fontChangeCalled(false),
225   pinchCalled(false),
226   panCalled(false),
227   tapCalled(false),
228   longPressCalled(false),
229   stageConnectionCalled(false),
230   stageDisconnectionCalled(false),
231   childAddCalled(false),
232   childRemoveCalled(false),
233   sizeSetCalled(false),
234   sizeAnimationCalled(false),
235   touchEventCalled(false),
236   hoverEventCalled(false),
237   wheelEventCalled(false),
238   keyEventCalled(false),
239   keyInputFocusGained(false),
240   keyInputFocusLost(false)
241 {
242   ++constructorCount;
243 }
244
245 Impl::DummyControl::~DummyControl()
246 {
247   ++destructorCount;
248 }
249
250 void Impl::DummyControl::OnInitialize() { initializeCalled = true; }
251 bool Impl::DummyControl::OnAccessibilityActivated() { activatedCalled = true; return true; }
252 bool Impl::DummyControl::OnAccessibilityTouch(const TouchEvent& touchEvent) { onAccTouchedCalled = true; return true; }
253 bool Impl::DummyControl::OnAccessibilityValueChange( bool isIncrease )
254 {
255   onAccValueChangeCalled = true; return true;
256 }
257
258 void Impl::DummyControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
259 {
260   themeChangeCalled = change == StyleChange::THEME_CHANGE;
261   fontChangeCalled = change == StyleChange::DEFAULT_FONT_SIZE_CHANGE;
262 }
263 void Impl::DummyControl::OnPinch(const PinchGesture& pinch) { pinchCalled = true; }
264 void Impl::DummyControl::OnPan(const PanGesture& pan) { panCalled = true; }
265 void Impl::DummyControl::OnTap(const TapGesture& tap) { tapCalled = true; }
266 void Impl::DummyControl::OnLongPress(const LongPressGesture& longPress) { longPressCalled = true; }
267 void Impl::DummyControl::OnStageConnection( int depth ) { Control::OnStageConnection( depth ); stageConnectionCalled = true; }
268 void Impl::DummyControl::OnStageDisconnection() { stageDisconnectionCalled = true; Control::OnStageDisconnection(); }
269 void Impl::DummyControl::OnChildAdd(Actor& child) { childAddCalled = true; }
270 void Impl::DummyControl::OnChildRemove(Actor& child) { childRemoveCalled = true; }
271 void Impl::DummyControl::OnSizeSet(const Vector3& targetSize) { Control::OnSizeSet( targetSize ); sizeSetCalled = true; }
272 void Impl::DummyControl::OnSizeAnimation(Animation& animation, const Vector3& targetSize) { Control::OnSizeAnimation( animation, targetSize ); sizeAnimationCalled = true; }
273 bool Impl::DummyControl::OnTouchEvent(const TouchEvent& event) { touchEventCalled = true; return false; }
274 bool Impl::DummyControl::OnHoverEvent(const HoverEvent& event) { hoverEventCalled = true; return false; }
275 bool Impl::DummyControl::OnWheelEvent(const WheelEvent& event) { wheelEventCalled = true; return false; }
276 bool Impl::DummyControl::OnKeyEvent(const KeyEvent& event) { keyEventCalled = true; return false;}
277 void Impl::DummyControl::OnKeyInputFocusGained() { keyInputFocusGained = true; }
278 void Impl::DummyControl::OnKeyInputFocusLost() { keyInputFocusLost = true; }
279
280 void Impl::DummyControl::SetLayout( Property::Index visualIndex, Property::Map& map )
281 {
282   Property::Value value( map );
283   mLayouts[visualIndex] = value;
284 }
285
286 void Impl::DummyControl::OnRelayout( const Vector2& size, RelayoutContainer& container )
287 {
288   if ( mRelayoutCallback )
289   {
290     mRelayoutCallback( size );  // Execute callback if set
291   }
292
293   Property::Map emptyMap;
294
295   for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
296   {
297     Visual::Base visual = GetVisual(*iter);
298     Property::Value value = mLayouts[*iter];
299     Property::Map* map = NULL;
300
301     if( value.GetType() != Property::NONE )
302     {
303       map = value.GetMap();
304     }
305     if( map == NULL )
306     {
307       map = &emptyMap;
308     }
309
310     visual.SetTransformAndSize( *map, size );
311   }
312 }
313
314 void Impl::DummyControl::SetRelayoutCallback( RelayoutCallbackFunc callback  )
315 {
316   mRelayoutCallback = callback;
317 }
318
319 Vector3 Impl::DummyControl::GetNaturalSize()
320 {
321   Vector2 currentSize;
322
323   for( auto elem : mRegisteredVisualIndices )
324   {
325     Vector2 naturalSize;
326     Visual::Base visual = GetVisual(elem);
327     visual.GetNaturalSize( naturalSize );
328     currentSize.width = std::max( naturalSize.width, currentSize.width );
329     currentSize.height = std::max( naturalSize.height, currentSize.height );
330   }
331
332   return Vector3( currentSize );
333 }
334
335
336
337 DummyControl DummyControl::New( bool override )
338 {
339   DummyControl control;
340
341   if (override)
342   {
343     control = Impl::DummyControl::New();
344   }
345   else
346   {
347     control = DummyControlImpl::New();
348   }
349
350   return control;
351 }
352
353 DummyControl::DummyControl( DummyControlImpl& implementation )
354 : Control( implementation )
355 {
356 }
357
358 DummyControl::DummyControl( Dali::Internal::CustomActor* internal )
359 : Control( internal )
360 {
361   VerifyCustomActorPointer<DummyControlImpl>(internal);
362 }
363
364 } // namespace Toolkit
365
366 } // namespace Dali