From: David Steele Date: Thu, 15 Jun 2017 16:13:47 +0000 (+0100) Subject: Added GetTypeInfo to get registered type of a control wrapper X-Git-Tag: dali_1.2.45~3^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=ccead1b7440cb1acd1f06720cca83e32e8ef254b Added GetTypeInfo to get registered type of a control wrapper Added test case to show end-to-end registry setting and usage (i.e. registering a property, registering a visual with that property index, and using CreateTransition to check that the visual was correctly named with the property name) Change-Id: I216a2cbf0299557ac0eb91b5208b20a76f7dadeb --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-ControlWrapper.cpp b/automated-tests/src/dali-toolkit/utc-Dali-ControlWrapper.cpp index 3ea0786..c62e11c 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-ControlWrapper.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-ControlWrapper.cpp @@ -24,7 +24,10 @@ #include #include +#include +#include #include +#include #include #include #include @@ -52,13 +55,14 @@ bool gOnRelayout = false; /////////////////////////////////////////////////////////////////////////////////////////////////// + namespace Impl { struct TestCustomControl : public Toolkit::Internal::ControlWrapper { /** - * Constructor - */ + * Constructor + */ TestCustomControl() : Toolkit::Internal::ControlWrapper( CustomControlBehaviour( Toolkit::Internal::ControlWrapper::DISABLE_STYLE_CHANGE_SIGNALS | Toolkit::Internal::ControlWrapper::REQUIRES_KEYBOARD_NAVIGATION_SUPPORT )) , mDaliProperty( Property::INVALID_INDEX ), @@ -97,26 +101,33 @@ struct TestCustomControl : public Toolkit::Internal::ControlWrapper virtual void OnStageConnection( int depth ) { mDepth = depth; + Control::OnStageConnection(depth); } virtual void OnStageDisconnection() { + Control::OnStageDisconnection(); } virtual void OnChildAdd( Actor& child ) { + Control::OnChildAdd(child); } virtual void OnChildRemove( Actor& child ) { + Control::OnChildRemove(child); } virtual void OnPropertySet( Property::Index index, Property::Value propertyValue ) { + Control::OnPropertySet(index, propertyValue); } virtual void OnSizeSet( const Vector3& targetSize ) { mSizeSet = targetSize; + Control::OnSizeSet( targetSize ); } virtual void OnSizeAnimation( Animation& animation, const Vector3& targetSize ) { mTargetSize = targetSize; + Control::OnSizeAnimation( animation, targetSize ); } virtual bool OnTouchEvent( const TouchEvent& event ) { @@ -155,9 +166,27 @@ struct TestCustomControl : public Toolkit::Internal::ControlWrapper return 0.0f; } + void TestRegisterVisual( Property::Index index, Toolkit::Visual::Base visual ) + { + ControlWrapper::RegisterVisual( index, visual ); + + VisualIndices::iterator iter = std::find( mRegisteredVisualIndices.begin(), mRegisteredVisualIndices.end(), index ); + if( iter == mRegisteredVisualIndices.end() ) + { + mRegisteredVisualIndices.push_back(index); + } + } + virtual void OnRelayout( const Vector2& size, RelayoutContainer& container ) { gOnRelayout = true; + + for( VisualIndices::iterator iter = mRegisteredVisualIndices.begin(); iter != mRegisteredVisualIndices.end() ; ++iter ) + { + Visual::Base visual = GetVisual(*iter); + Property::Map map; // empty map enforces defaults + visual.SetTransformAndSize( map, size ); + } } virtual void OnSetResizePolicy( ResizePolicy::Type policy, Dimension::Type dimension ) @@ -216,13 +245,19 @@ struct TestCustomControl : public Toolkit::Internal::ControlWrapper Vector3 mTargetSize; bool mNego; unsigned int mDepth; + + typedef std::vector VisualIndices; + VisualIndices mRegisteredVisualIndices; }; + + } -static std::string customControlTypeName = "TestCustomControl"; +static std::string customControlTypeName = "MyTestCustomControl"; static TypeRegistration customControl( customControlTypeName, typeid(Dali::Toolkit::Control), NULL ); + int UtcDaliControlWrapperConstructor(void) { ToolkitTestApplication application; // Exceptions require ToolkitTestApplication @@ -236,6 +271,11 @@ int UtcDaliControlWrapperConstructor(void) DALI_TEST_CHECK( ControlWrapper::DownCast( controlWrapper ) ); + Dali::TypeInfo typeInfo = DevelCustomActor::GetTypeInfo( controlWrapper ); + + DALI_TEST_EQUALS( typeInfo.GetName(), customControlTypeName, TEST_LOCATION); + + END_TEST; } @@ -683,3 +723,87 @@ int UtcDaliControlWrapperTypeRegistryCreation(void) END_TEST; } + +void SetProperty(BaseObject* object, const char* const name, Property::Value* value) +{ +} +Property::Value* GetProperty(BaseObject* object, const char* const name ) +{ + return NULL; +} + +int UtcDaliControlWrapperAnimateVisual(void) +{ + tet_infoline("Test that the control wrapper's visuals can be animated by name when registered"); + + ToolkitTestApplication application; + Test::ObjectDestructionTracker objectDestructionTracker; + + { + Impl::TestCustomControl* controlWrapperImpl = new ::Impl::TestCustomControl( Toolkit::Internal::ControlWrapper::CONTROL_BEHAVIOUR_DEFAULT ); + ControlWrapper controlWrapper = ControlWrapper::New( customControlTypeName, *controlWrapperImpl ); + + Property::Index index = Control::CONTROL_PROPERTY_END_INDEX+1; + std::string visualName("colorVisual"); + CSharpTypeRegistry::RegisterProperty( customControlTypeName, visualName, index, Property::VECTOR4, SetProperty, GetProperty ); + + objectDestructionTracker.Start( controlWrapper ); + + Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); + Toolkit::Visual::Base visual; + + Property::Map map; + map[Visual::Property::TYPE] = Visual::COLOR; + map[ColorVisual::Property::MIX_COLOR] = Color::RED; + + visual = visualFactory.CreateVisual( map ); + DALI_TEST_CHECK( visual ); + + // Register to self + controlWrapperImpl->TestRegisterVisual( index, visual ); + + Stage::GetCurrent().Add( controlWrapper ); + controlWrapper.SetSize( 100, 100 ); + application.SendNotification(); + application.Render(0); // Trigger animation start + + Property::Map transition; + transition["target"] = visualName; + transition["property"] = "mixColor"; + transition["targetValue"] = Color::GREEN; + Property::Map animator; + animator["alphaFunction"] = "LINEAR"; + animator["duration"] = 1.0f; + animator["delay"] = 0.0f; + transition["animator"] = animator; + + TransitionData transitionData = TransitionData::New(transition); + Animation anim = DevelControl::CreateTransition( *controlWrapperImpl, transitionData ); + anim.Play(); + + application.SendNotification(); + application.Render(0); // Trigger animation start + + application.Render(1000); // animation end + application.Render( 10); + + Property::Map visualMap; + visual.CreatePropertyMap( visualMap ); + Property::Value* value = visualMap.Find(ColorVisual::Property::MIX_COLOR, "mixColor"); + DALI_TEST_CHECK( value != NULL ); + if( value ) + { + Vector4 testColor = value->Get(); + DALI_TEST_EQUALS( testColor, Color::GREEN, 0.001f, TEST_LOCATION ); + } + + DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), false, TEST_LOCATION ); // Control not destroyed yet + DALI_TEST_EQUALS( controlWrapperImpl->GetVisual( index ), visual, TEST_LOCATION ); + + Stage::GetCurrent().Remove( controlWrapper ); + } + + DALI_TEST_EQUALS( objectDestructionTracker.IsDestroyed(), true, TEST_LOCATION ); // Should be destroyed + + END_TEST; +} diff --git a/dali-toolkit/devel-api/controls/control-wrapper-impl.cpp b/dali-toolkit/devel-api/controls/control-wrapper-impl.cpp index 8028707..37def2b 100755 --- a/dali-toolkit/devel-api/controls/control-wrapper-impl.cpp +++ b/dali-toolkit/devel-api/controls/control-wrapper-impl.cpp @@ -23,6 +23,7 @@ #include #include #include +#include // INTERNAL INCLUDES #include @@ -179,6 +180,11 @@ void ControlWrapper::ApplyThemeStyle() } } +Dali::TypeInfo ControlWrapper::GetTypeInfo() +{ + return DevelCustomActor::GetTypeInfo(Self()); +} + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/devel-api/controls/control-wrapper-impl.h b/dali-toolkit/devel-api/controls/control-wrapper-impl.h index 899a575..e5c371d 100755 --- a/dali-toolkit/devel-api/controls/control-wrapper-impl.h +++ b/dali-toolkit/devel-api/controls/control-wrapper-impl.h @@ -168,6 +168,13 @@ public: // From Control */ void ApplyThemeStyle(); +public: + /** + * Enable access to non-native type info from native side + * @return The type info that was registered on this type + */ + Dali::TypeInfo GetTypeInfo(); + protected: /** diff --git a/dali-toolkit/internal/controls/control/control-data-impl.cpp b/dali-toolkit/internal/controls/control/control-data-impl.cpp index ffcfdd7..81fa035 100644 --- a/dali-toolkit/internal/controls/control/control-data-impl.cpp +++ b/dali-toolkit/internal/controls/control/control-data-impl.cpp @@ -37,6 +37,7 @@ #include #include #include +#include namespace Dali { @@ -602,8 +603,17 @@ Dali::Animation Control::Impl::CreateTransition( const Toolkit::TransitionData& if( visual ) { - DALI_LOG_INFO( gLogFilter, Debug::Concise, "CreateTransition: Found visual for %s\n", - visual.GetName().c_str() ); +#if defined(DEBUG_ENABLED) + Dali::TypeInfo typeInfo; + ControlWrapper* controlWrapperImpl = dynamic_cast(&mControlImpl); + if( controlWrapperImpl ) + { + typeInfo = controlWrapperImpl->GetTypeInfo(); + } + + DALI_LOG_INFO( gLogFilter, Debug::Concise, "CreateTransition: Found %s visual for %s\n", + visual.GetName().c_str(), typeInfo?typeInfo.GetName().c_str():"Unknown" ); +#endif Internal::Visual::Base& visualImpl = Toolkit::GetImplementation( visual ); visualImpl.AnimateProperty( transition, *animator ); }