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