2 * Copyright (c) 2017 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 #include "dummy-control.h"
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>
30 DummyControl::DummyControl()
34 DummyControl::DummyControl(const DummyControl& control)
39 DummyControl::~DummyControl()
43 DummyControl DummyControl::DownCast( BaseHandle handle )
45 return Control::DownCast<DummyControl, DummyControlImpl>(handle);
48 DummyControl& DummyControl::operator=(const DummyControl& control)
50 Control::operator=( control );
54 // Used to test signal connections
55 void DummyControlImpl::CustomSlot1( Actor actor )
57 mCustomSlot1Called = true;
64 return DummyControlImpl::New();
67 DALI_TYPE_REGISTRATION_BEGIN( Toolkit::DummyControl, Toolkit::Control, Create );
68 DALI_TYPE_REGISTRATION_END()
70 Dali::PropertyRegistration dummyControlVisualProperty01(
71 typeRegistration, "testVisual", Dali::Toolkit::DummyControl::Property::TEST_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
73 Dali::PropertyRegistration dummyControlVisualProperty02(
74 typeRegistration, "testVisual2", Dali::Toolkit::DummyControl::Property::TEST_VISUAL2, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
76 Dali::PropertyRegistration dummyControlVisualProperty03(
77 typeRegistration, "foregroundVisual", Dali::Toolkit::DummyControl::Property::FOREGROUND_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
79 Dali::PropertyRegistration dummyControlVisualProperty04(
80 typeRegistration, "focusVisual", Dali::Toolkit::DummyControl::Property::FOCUS_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
82 Dali::PropertyRegistration dummyControlVisualProperty05(
83 typeRegistration, "labelVisual", Dali::Toolkit::DummyControl::Property::LABEL_VISUAL, Dali::Property::MAP, &Dali::Toolkit::DummyControlImpl::SetProperty, &Dali::Toolkit::DummyControlImpl::GetProperty );
87 DummyControl DummyControlImpl::New()
89 IntrusivePtr< DummyControlImpl > impl = new DummyControlImpl;
90 DummyControl control( *impl );
95 DummyControlImpl::DummyControlImpl()
96 : Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_HOVER_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ),
97 mCustomSlot1Called(false)
101 DummyControlImpl::~DummyControlImpl()
105 void DummyControlImpl::RegisterVisual( Property::Index index, Toolkit::Visual::Base visual )
107 DevelControl::RegisterVisual( *this, index, visual );
109 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
110 if( iter == mRegisteredVisualIndices.end() )
112 mRegisteredVisualIndices.push_back(index);
116 void DummyControlImpl::RegisterVisual( Property::Index index, Toolkit::Visual::Base visual, bool enabled )
118 DevelControl::RegisterVisual( *this, index, visual, enabled );
120 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
121 if( iter == mRegisteredVisualIndices.end() )
123 mRegisteredVisualIndices.push_back(index);
127 void DummyControlImpl::UnregisterVisual( Property::Index index )
129 DevelControl::UnregisterVisual( *this, index );
131 VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index );
132 if( iter != mRegisteredVisualIndices.end() )
134 mRegisteredVisualIndices.erase(iter);
138 Toolkit::Visual::Base DummyControlImpl::GetVisual( Property::Index index )
140 return DevelControl::GetVisual( *this, index );
143 void DummyControlImpl::EnableVisual( Property::Index index, bool enabled )
145 DevelControl::EnableVisual( *this, index, enabled );
148 bool DummyControlImpl::IsVisualEnabled( Property::Index index )
150 return DevelControl::IsVisualEnabled( *this, index );
153 Animation DummyControlImpl::CreateTransition( const Toolkit::TransitionData& transition )
155 return DevelControl::CreateTransition( *this, transition );
158 void DummyControlImpl::DoAction( Dali::Property::Index index, Dali::Property::Index action, const Dali::Property::Value attributes )
160 DummyControl control( *this );
161 DevelControl::DoAction( control, index, action, attributes);
164 void DummyControlImpl::SetProperty( BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value )
166 Toolkit::DummyControl control = Toolkit::DummyControl::DownCast( Dali::BaseHandle( object ) );
167 DummyControlImpl& dummyImpl = static_cast<DummyControlImpl&>(control.GetImplementation());
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:
177 Property::Map* map = value.GetMap();
180 VisualFactory visualFactory = VisualFactory::Get();
181 Visual::Base visual = visualFactory.CreateVisual(*map);
182 dummyImpl.RegisterVisual(index, visual);
189 Property::Value DummyControlImpl::GetProperty( BaseObject* object, Dali::Property::Index propertyIndex )
191 Dali::Property::Value value;
196 Toolkit::DummyControl Impl::DummyControl::New()
198 IntrusivePtr< Toolkit::Impl::DummyControl > impl = new Toolkit::Impl::DummyControl;
199 Toolkit::DummyControl control( *impl );
205 Impl::DummyControl::DummyControl()
206 : DummyControlImpl(),
207 initializeCalled(false),
208 activatedCalled(false),
209 onAccTouchedCalled(false),
210 onAccValueChangeCalled(false),
211 themeChangeCalled(false),
212 fontChangeCalled(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)
232 Impl::DummyControl::~DummyControl() { }
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 )
240 onAccValueChangeCalled = true; return true;
243 void Impl::DummyControl::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change )
245 themeChangeCalled = change == StyleChange::THEME_CHANGE;
246 fontChangeCalled = change == StyleChange::DEFAULT_FONT_SIZE_CHANGE;
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; }
265 void Impl::DummyControl::SetLayout( Property::Index visualIndex, Property::Map& map )
267 Property::Value value( map );
268 mLayouts[visualIndex] = value;
271 void Impl::DummyControl::OnRelayout( const Vector2& size, RelayoutContainer& container )
273 if ( mRelayoutCallback )
275 mRelayoutCallback( size ); // Execute callback if set
278 Property::Map emptyMap;
280 for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter )
282 Visual::Base visual = GetVisual(*iter);
283 Property::Value value = mLayouts[*iter];
284 Property::Map* map = NULL;
286 if( value.GetType() != Property::NONE )
288 map = value.GetMap();
295 visual.SetTransformAndSize( *map, size );
299 void Impl::DummyControl::SetRelayoutCallback( RelayoutCallbackFunc callback )
301 mRelayoutCallback = callback;
304 Vector3 Impl::DummyControl::GetNaturalSize()
308 for( auto elem : mRegisteredVisualIndices )
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 );
317 return Vector3( currentSize );
322 DummyControl DummyControl::New( bool override )
324 DummyControl control;
328 control = Impl::DummyControl::New();
332 control = DummyControlImpl::New();
338 DummyControl::DummyControl( DummyControlImpl& implementation )
339 : Control( implementation )
343 DummyControl::DummyControl( Dali::Internal::CustomActor* internal )
344 : Control( internal )
346 VerifyCustomActorPointer<DummyControlImpl>(internal);
349 } // namespace Toolkit