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