Added Auxiliary image to NPatch visual.
[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   Dali::Property::Value value;
192   return value;
193 }
194
195
196 Toolkit::DummyControl Impl::DummyControl::New()
197 {
198   IntrusivePtr< Toolkit::Impl::DummyControl > impl = new Toolkit::Impl::DummyControl;
199   Toolkit::DummyControl control( *impl );
200   impl->Initialize();
201   return control;
202 }
203
204
205 Impl::DummyControl::DummyControl()
206 : DummyControlImpl(),
207   initializeCalled(false),
208   activatedCalled(false),
209   onAccTouchedCalled(false),
210   onAccValueChangeCalled(false),
211   themeChangeCalled(false),
212   fontChangeCalled(false),
213   pinchCalled(false),
214   panCalled(false),
215   tapCalled(false),
216   longPressCalled(false),
217   stageConnectionCalled(false),
218   stageDisconnectionCalled(false),
219   childAddCalled(false),
220   childRemoveCalled(false),
221   sizeSetCalled(false),
222   sizeAnimationCalled(false),
223   touchEventCalled(false),
224   hoverEventCalled(false),
225   wheelEventCalled(false),
226   keyEventCalled(false),
227   keyInputFocusGained(false),
228   keyInputFocusLost(false)
229 {
230 }
231
232 Impl::DummyControl::~DummyControl() { }
233
234
235 void Impl::DummyControl::OnInitialize() { initializeCalled = true; }
236 bool Impl::DummyControl::OnAccessibilityActivated() { activatedCalled = true; return true; }
237 bool Impl::DummyControl::OnAccessibilityTouch(const TouchEvent& touchEvent) { onAccTouchedCalled = true; return true; }
238 bool Impl::DummyControl::OnAccessibilityValueChange( bool isIncrease )
239 {
240   onAccValueChangeCalled = true; return true;
241 }
242
243 void Impl::DummyControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
244 {
245   themeChangeCalled = change == StyleChange::THEME_CHANGE;
246   fontChangeCalled = change == StyleChange::DEFAULT_FONT_SIZE_CHANGE;
247 }
248 void Impl::DummyControl::OnPinch(const PinchGesture& pinch) { pinchCalled = true; }
249 void Impl::DummyControl::OnPan(const PanGesture& pan) { panCalled = true; }
250 void Impl::DummyControl::OnTap(const TapGesture& tap) { tapCalled = true; }
251 void Impl::DummyControl::OnLongPress(const LongPressGesture& longPress) { longPressCalled = true; }
252 void Impl::DummyControl::OnStageConnection( int depth ) { Control::OnStageConnection( depth ); stageConnectionCalled = true; }
253 void Impl::DummyControl::OnStageDisconnection() { stageDisconnectionCalled = true; Control::OnStageDisconnection(); }
254 void Impl::DummyControl::OnChildAdd(Actor& child) { childAddCalled = true; }
255 void Impl::DummyControl::OnChildRemove(Actor& child) { childRemoveCalled = true; }
256 void Impl::DummyControl::OnSizeSet(const Vector3& targetSize) { Control::OnSizeSet( targetSize ); sizeSetCalled = true; }
257 void Impl::DummyControl::OnSizeAnimation(Animation& animation, const Vector3& targetSize) { Control::OnSizeAnimation( animation, targetSize ); sizeAnimationCalled = true; }
258 bool Impl::DummyControl::OnTouchEvent(const TouchEvent& event) { touchEventCalled = true; return false; }
259 bool Impl::DummyControl::OnHoverEvent(const HoverEvent& event) { hoverEventCalled = true; return false; }
260 bool Impl::DummyControl::OnWheelEvent(const WheelEvent& event) { wheelEventCalled = true; return false; }
261 bool Impl::DummyControl::OnKeyEvent(const KeyEvent& event) { keyEventCalled = true; return false;}
262 void Impl::DummyControl::OnKeyInputFocusGained() { keyInputFocusGained = true; }
263 void Impl::DummyControl::OnKeyInputFocusLost() { keyInputFocusLost = true; }
264
265 void Impl::DummyControl::SetLayout( Property::Index visualIndex, Property::Map& map )
266 {
267   Property::Value value( map );
268   mLayouts[visualIndex] = value;
269 }
270
271 void Impl::DummyControl::OnRelayout( const Vector2& size, RelayoutContainer& container )
272 {
273   if ( mRelayoutCallback )
274   {
275     mRelayoutCallback( size );  // Execute callback if set
276   }
277
278   Property::Map emptyMap;
279
280   for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
281   {
282     Visual::Base visual = GetVisual(*iter);
283     Property::Value value = mLayouts[*iter];
284     Property::Map* map = NULL;
285
286     if( value.GetType() != Property::NONE )
287     {
288       map = value.GetMap();
289     }
290     if( map == NULL )
291     {
292       map = &emptyMap;
293     }
294
295     visual.SetTransformAndSize( *map, size );
296   }
297 }
298
299 void Impl::DummyControl::SetRelayoutCallback( RelayoutCallbackFunc callback  )
300 {
301   mRelayoutCallback = callback;
302 }
303
304 Vector3 Impl::DummyControl::GetNaturalSize()
305 {
306   Vector2 currentSize;
307
308   for( auto elem : mRegisteredVisualIndices )
309   {
310     Vector2 naturalSize;
311     Visual::Base visual = GetVisual(elem);
312     visual.GetNaturalSize( naturalSize );
313     currentSize.width = std::max( naturalSize.width, currentSize.width );
314     currentSize.height = std::max( naturalSize.height, currentSize.height );
315   }
316
317   return Vector3( currentSize );
318 }
319
320
321
322 DummyControl DummyControl::New( bool override )
323 {
324   DummyControl control;
325
326   if (override)
327   {
328     control = Impl::DummyControl::New();
329   }
330   else
331   {
332     control = DummyControlImpl::New();
333   }
334
335   return control;
336 }
337
338 DummyControl::DummyControl( DummyControlImpl& implementation )
339 : Control( implementation )
340 {
341 }
342
343 DummyControl::DummyControl( Dali::Internal::CustomActor* internal )
344 : Control( internal )
345 {
346   VerifyCustomActorPointer<DummyControlImpl>(internal);
347 }
348
349 } // namespace Toolkit
350
351 } // namespace Dali