1 #ifndef TEST_CUSTOM_ACTOR_H
2 #define TEST_CUSTOM_ACTOR_H
4 #include <dali/public-api/dali-core.h>
5 #include <dali/devel-api/object/property-helper-devel.h>
7 extern std::vector< std::string > MasterCallStack;
8 extern bool gOnRelayout;
14 struct TestCustomActor;
18 * Test custom actor handle
20 class TestCustomActor : public Dali::CustomActor
25 PROPERTY_START_INDEX = Dali::PROPERTY_REGISTRATION_START_INDEX,
26 PROPERTY_END_INDEX = PROPERTY_START_INDEX + 1000
33 TEST_PROPERTY1 = PROPERTY_START_INDEX,
39 static TestCustomActor New();
40 static TestCustomActor NewNegoSize();
41 static TestCustomActor NewVariant1( Actor childToAdd );
42 static TestCustomActor NewVariant2();
43 static TestCustomActor NewVariant3( Actor childToAdd );
44 static TestCustomActor NewVariant4();
45 static TestCustomActor NewVariant5();
46 static TestCustomActor NewVariant6();
47 static TestCustomActor NewVariant7( const char* name );
48 static TestCustomActor NewVariant8( Actor rival );
49 static TestCustomActor DownCast( Dali::BaseHandle handle );
51 virtual ~TestCustomActor();
52 Impl::TestCustomActor& GetImpl();
54 std::vector< std::string >& GetMethodsCalled();
55 void ResetCallStack();
56 void SetDaliProperty(std::string s);
57 Dali::Vector3 GetSize();
58 Dali::Vector3 GetTargetSize();
59 virtual Dali::Vector3 GetNaturalSize();
60 virtual float GetHeightForWidth( float width );
61 virtual float GetWidthForHeight( float height );
62 virtual void OnRelayout( const Dali::Vector2& size, Dali::RelayoutContainer& container );
63 virtual void OnLayoutNegotiated( float size, Dali::Dimension::Type dimension );
64 virtual void OnCalculateRelayoutSize( Dali::Dimension::Type dimension );
65 void TestRelayoutRequest();
66 float TestGetHeightForWidthBase( float width );
67 float TestGetWidthForHeightBase( float height );
68 float TestCalculateChildSizeBase( const Dali::Actor& child, Dali::Dimension::Type dimension );
69 bool TestRelayoutDependentOnChildrenBase( Dali::Dimension::Type dimension );
70 unsigned int GetDepth();
73 TestCustomActor( Impl::TestCustomActor& impl );
74 explicit TestCustomActor(Dali::Internal::CustomActor* internal);
78 namespace DevelTestCustomActor
84 TEST_PROPERTY1 = Test::TestCustomActor::Property::TEST_PROPERTY1,
85 TEST_PROPERTY2 = Test::TestCustomActor::Property::TEST_PROPERTY2,
86 DEVEL_TEST_PROPERTY3 = TEST_PROPERTY2+1,
87 DEVEL_TEST_PROPERTY4 = TEST_PROPERTY2+2,
88 DEVEL_TEST_PROPERTY5 = TEST_PROPERTY2+3
91 } // Namespace Property
92 } // Namespace DevelTestCustomActor
95 // TypeRegistry needs custom actor Implementations to have the same name (namespaces are ignored so we use one here)
99 struct TestCustomActor : public Dali::CustomActorImpl
106 TestCustomActor(bool nego);
107 virtual ~TestCustomActor();
108 void Initialize( const char* name = NULL );
109 virtual void OnInitialize( const char* name );
110 void ResetCallStack();
111 void AddToCallStacks( const char* method );
112 virtual void OnStageConnection( int depth );
113 virtual void OnStageDisconnection();
114 virtual void OnChildAdd(Dali::Actor& child);
115 virtual void OnChildRemove(Dali::Actor& child);
116 virtual void OnPropertySet( Dali::Property::Index index, Dali::Property::Value propertyValue );
117 virtual void OnSizeSet(const Dali::Vector3& targetSize);
118 virtual void OnSizeAnimation(Dali::Animation& animation, const Dali::Vector3& targetSize);
119 virtual bool OnTouchEvent(const Dali::TouchEvent& event);
120 virtual bool OnHoverEvent(const Dali::HoverEvent& event);
121 virtual bool OnWheelEvent(const Dali::WheelEvent& event);
122 virtual bool OnKeyEvent(const Dali::KeyEvent& event);
123 virtual void OnKeyInputFocusGained();
124 virtual void OnKeyInputFocusLost();
125 virtual Dali::Vector3 GetNaturalSize();
126 virtual float GetHeightForWidth( float width );
127 virtual float GetWidthForHeight( float height );
128 virtual void OnRelayout( const Dali::Vector2& size, Dali::RelayoutContainer& container );
129 virtual void OnSetResizePolicy( Dali::ResizePolicy::Type policy, Dali::Dimension::Type dimension );
130 virtual void OnCalculateRelayoutSize( Dali::Dimension::Type dimension );
131 virtual float CalculateChildSize( const Dali::Actor& child, Dali::Dimension::Type dimension );
132 virtual void OnLayoutNegotiated( float size, Dali::Dimension::Type dimension );
133 virtual bool RelayoutDependentOnChildren( Dali::Dimension::Type dimension = Dali::Dimension::ALL_DIMENSIONS );
134 static void SetProperty( Dali::BaseObject* object, Dali::Property::Index index, const Dali::Property::Value& value );
135 static Dali::Property::Value GetProperty( Dali::BaseObject* object, Dali::Property::Index index );
137 void SetDaliProperty(std::string s);
138 void TestRelayoutRequest();
139 float TestGetHeightForWidthBase( float width );
140 float TestGetWidthForHeightBase( float height );
141 float TestCalculateChildSizeBase( const Dali::Actor& child, Dali::Dimension::Type dimension );
142 bool TestRelayoutDependentOnChildrenBase( Dali::Dimension::Type dimension );
145 Dali::Property::Index mDaliProperty;
146 std::vector< std::string > mMethodsCalled;
147 Dali::Vector3 mSizeSet;
148 Dali::Vector3 mTargetSize;
154 Dali::Vector4 develProp3;
159 inline TestCustomActor& GetImpl( Test::TestCustomActor& handle )
161 DALI_ASSERT_ALWAYS( handle );
162 Dali::RefObject& object = handle.GetImplementation();
163 return static_cast<TestCustomActor&>( object );
166 inline const TestCustomActor& GetImpl( const Test::TestCustomActor& handle )
168 DALI_ASSERT_ALWAYS( handle );
169 const Dali::RefObject& object = handle.GetImplementation();
170 return static_cast<const TestCustomActor&>( object );
175 * Variant which adds a new child during OnStageConnection
177 struct TestCustomActorVariant1 : public TestCustomActor
182 TestCustomActorVariant1( Dali::Actor childToAdd )
183 : mChildToAdd( childToAdd )
187 // From CustomActorImpl
188 virtual void OnStageConnection( int depth )
191 TestCustomActor::OnStageConnection( depth );
194 Self().Add( mChildToAdd );
197 Dali::Actor mChildToAdd;
201 * Variant which removes children during OnStageConnection
203 struct TestCustomActorVariant2 : public TestCustomActor
208 TestCustomActorVariant2()
212 // From CustomActorImpl
213 virtual void OnStageConnection( int depth )
216 TestCustomActor::OnStageConnection( depth );
218 // Remove all the children
219 for( unsigned int i=0, num=Self().GetChildCount(); i<num; ++i )
221 Self().Remove( Self().GetChildAt(0) );
227 * Variant which adds a new child during OnStageDisconnection
229 struct TestCustomActorVariant3 : public TestCustomActor
234 TestCustomActorVariant3( Dali::Actor childToAdd )
235 : mChildToAdd( childToAdd )
239 // From CustomActorImpl
240 virtual void OnStageDisconnection()
243 TestCustomActor::OnStageDisconnection();
246 Self().Add( mChildToAdd );
249 Dali::Actor mChildToAdd;
253 * Variant which removes children during OnStageDisconnection
255 struct TestCustomActorVariant4 : public TestCustomActor
260 TestCustomActorVariant4()
264 // From CustomActorImpl
265 virtual void OnStageDisconnection()
268 TestCustomActor::OnStageDisconnection();
270 // Remove all the children
271 for( unsigned int i=0, num=Self().GetChildCount(); i<num; ++i )
273 Self().Remove( Self().GetChildAt(0) );
279 * Variant which removes its parent from Stage during OnStageConnection
281 struct TestCustomActorVariant5 : public TestCustomActor
286 TestCustomActorVariant5()
290 // From CustomActorImpl
291 virtual void OnStageConnection( int depth )
294 TestCustomActor::OnStageConnection( depth );
296 // Take parent off-stage
297 Dali::Actor parent = Self().GetParent();
300 Dali::Stage::GetCurrent().Remove( parent );
306 * Variant which adds its parent to Stage during OnStageDisconnection
308 struct TestCustomActorVariant6 : public TestCustomActor
313 TestCustomActorVariant6()
317 // From CustomActorImpl
318 virtual void OnStageDisconnection()
321 TestCustomActor::OnStageDisconnection();
323 // Put parent on-stage
324 Dali::Actor parent = Self().GetParent();
327 Dali::Stage::GetCurrent().Add( parent );
333 * Variant which reparents its children into a separate container
335 struct TestCustomActorVariant7 : public TestCustomActor
340 TestCustomActorVariant7()
344 virtual void OnInitialize( const char* name )
346 // We need to do this early, before the OnChildAdd is recorded
347 Self().SetName( name );
349 mContainer = Dali::Actor::New();
350 mContainer.SetName( "Container" );
351 Self().Add( mContainer );
354 // From CustomActorImpl
355 virtual void OnChildAdd(Dali::Actor& child)
358 TestCustomActor::OnChildAdd(child);
361 if ( child != mContainer )
363 mContainer.Add( child );
367 Dali::Actor mContainer;
371 * Variant which attempts to interfere with the reparenting of a child to another container
373 struct TestCustomActorVariant8 : public TestCustomActor
378 TestCustomActorVariant8( Dali::Actor rival )
379 : mRivalContainer( rival )
383 // From CustomActorImpl
384 virtual void OnChildRemove(Dali::Actor& child)
387 TestCustomActor::OnChildRemove(child);
389 mRivalContainer.Remove( child ); // attempt to block reparenting to rival (should be a NOOP)
392 Dali::Actor mRivalContainer;
395 // Need a class that doesn't override virtual methods
396 class SimpleTestCustomActor : public Dali::CustomActorImpl
403 SimpleTestCustomActor()
404 : CustomActorImpl( ActorFlags( REQUIRES_TOUCH_EVENTS | DISABLE_SIZE_NEGOTIATION ) )
411 virtual ~SimpleTestCustomActor()
415 // From CustomActorImpl
416 virtual void OnStageConnection( int depth )
419 virtual void OnStageDisconnection()
422 virtual void OnChildAdd(Dali::Actor& child)
425 virtual void OnChildRemove(Dali::Actor& child)
428 virtual void OnSizeSet(const Dali::Vector3& targetSize)
431 virtual void OnSizeAnimation(Dali::Animation& animation, const Dali::Vector3& targetSize)
434 virtual bool OnTouchEvent(const Dali::TouchEvent& event)
438 virtual bool OnHoverEvent(const Dali::HoverEvent& event)
442 virtual bool OnWheelEvent(const Dali::WheelEvent& event)
446 virtual bool OnKeyEvent(const Dali::KeyEvent& event)
450 virtual void OnKeyInputFocusGained()
453 virtual void OnKeyInputFocusLost()
457 virtual Dali::Vector3 GetNaturalSize()
459 return Dali::Vector3( 0.0f, 0.0f, 0.0f );
462 virtual float GetHeightForWidth( float width )
467 virtual float GetWidthForHeight( float height )
472 virtual void OnRelayout( const Dali::Vector2& size, Dali::RelayoutContainer& container )
476 virtual void OnSetResizePolicy( Dali::ResizePolicy::Type policy, Dali::Dimension::Type dimension )
480 virtual void OnCalculateRelayoutSize( Dali::Dimension::Type dimension )
484 virtual float CalculateChildSize( const Dali::Actor& child, Dali::Dimension::Type dimension )
489 virtual void OnLayoutNegotiated( float size, Dali::Dimension::Type dimension )
493 virtual bool RelayoutDependentOnChildren( Dali::Dimension::Type dimension = Dali::Dimension::ALL_DIMENSIONS )
502 #endif // TEST_CUSTOM_ACTOR_H