X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fbutton-impl.cpp;h=1f5510d4d64e070130234fbb22744c768c36301c;hp=79ac7dbaebff0afc2f8867c608642c7b54c68683;hb=e3d6a0a27fd980a4ced6e7257abdc32bc192e871;hpb=98de7da7b7768f266b3e9579ede04ec421bfe596 diff --git a/dali-toolkit/internal/controls/buttons/button-impl.cpp b/dali-toolkit/internal/controls/buttons/button-impl.cpp index 79ac7db..1f5510d 100644 --- a/dali-toolkit/internal/controls/buttons/button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/button-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +22,7 @@ #include // for strcmp #include #include -#include -#include +#include #include #include #include @@ -35,13 +34,14 @@ #include #include #include -#include +#include #include +#include #include #include #include -#include -#include +#include +#include #if defined(DEBUG_ENABLED) Debug::Filter* gLogButtonFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_BUTTON_CONTROL"); @@ -74,21 +74,15 @@ DALI_PROPERTY_REGISTRATION( Toolkit, Button, "initialAutoRepeatingDelay", DALI_PROPERTY_REGISTRATION( Toolkit, Button, "nextAutoRepeatingDelay", FLOAT, NEXT_AUTO_REPEATING_DELAY ) DALI_PROPERTY_REGISTRATION( Toolkit, Button, "togglable", BOOLEAN, TOGGLABLE ) DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selected", BOOLEAN, SELECTED ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedStateImage", MAP, UNSELECTED_STATE_IMAGE ) // Deprecated property -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedStateImage", MAP, SELECTED_STATE_IMAGE ) // Deprecated property -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledStateImage", MAP, DISABLED_STATE_IMAGE ) // Deprecated property -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedColor", VECTOR4, UNSELECTED_COLOR ) // Deprecated property -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedColor", VECTOR4, SELECTED_COLOR ) // Deprecated property +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedVisual", MAP, UNSELECTED_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedVisual", MAP, SELECTED_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedVisual", MAP, DISABLED_SELECTED_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedVisual", MAP, DISABLED_UNSELECTED_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedBackgroundVisual", MAP, UNSELECTED_BACKGROUND_VISUAL ) DALI_PROPERTY_REGISTRATION( Toolkit, Button, "label", MAP, LABEL ) -DALI_PROPERTY_REGISTRATION( Toolkit, Button, "labelText", STRING, LABEL_TEXT ) // Deprecated property -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedVisual", MAP, UNSELECTED_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "selectedVisual", MAP, SELECTED_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedVisual", MAP, DISABLED_SELECTED_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedVisual", MAP, DISABLED_UNSELECTED_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "unselectedBackgroundVisual", MAP, UNSELECTED_BACKGROUND_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "selectedBackgroundVisual", MAP, SELECTED_BACKGROUND_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedBackgroundVisual", MAP, DISABLED_UNSELECTED_BACKGROUND_VISUAL ) -DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedBackgroundVisual", MAP, DISABLED_SELECTED_BACKGROUND_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "selectedBackgroundVisual", MAP, SELECTED_BACKGROUND_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledUnselectedBackgroundVisual", MAP, DISABLED_UNSELECTED_BACKGROUND_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Button, "disabledSelectedBackgroundVisual", MAP, DISABLED_SELECTED_BACKGROUND_VISUAL ) DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "labelRelativeAlignment", STRING, LABEL_RELATIVE_ALIGNMENT ) DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "labelPadding", VECTOR4, LABEL_PADDING ) DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, Button, "visualPadding", VECTOR4, VISUAL_PADDING ) @@ -121,12 +115,12 @@ const Scripting::StringEnum ALIGNMENT_STRING_TABLE[] = const unsigned int ALIGNMENT_STRING_TABLE_COUNT = sizeof( ALIGNMENT_STRING_TABLE ) / sizeof( ALIGNMENT_STRING_TABLE[0] ); -const Property::Index GET_VISUAL_INDEX_FOR_STATE[][Button::STATE_COUNT] = +const Property::Index VISUAL_INDEX_FOR_STATE[][Button::STATE_COUNT] = { - { Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::UNSELECTED_VISUAL }, - { Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::SELECTED_VISUAL }, - { Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL }, - { Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL, Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL } + { Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::UNSELECTED_VISUAL }, + { Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::SELECTED_VISUAL }, + { Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL }, + { Toolkit::Button::Property::DISABLED_SELECTED_BACKGROUND_VISUAL, Toolkit::Button::Property::DISABLED_SELECTED_VISUAL } }; /** @@ -186,33 +180,18 @@ void Button::SetAutoRepeating( bool autoRepeating ) } } -bool Button::IsAutoRepeating() const -{ - return mAutoRepeating; -} - void Button::SetInitialAutoRepeatingDelay( float initialAutoRepeatingDelay ) { DALI_ASSERT_DEBUG( initialAutoRepeatingDelay > 0.f ); mInitialAutoRepeatingDelay = initialAutoRepeatingDelay; } -float Button::GetInitialAutoRepeatingDelay() const -{ - return mInitialAutoRepeatingDelay; -} - void Button::SetNextAutoRepeatingDelay( float nextAutoRepeatingDelay ) { DALI_ASSERT_DEBUG( nextAutoRepeatingDelay > 0.f ); mNextAutoRepeatingDelay = nextAutoRepeatingDelay; } -float Button::GetNextAutoRepeatingDelay() const -{ - return mNextAutoRepeatingDelay; -} - void Button::SetTogglableButton( bool togglable ) { mTogglableButton = togglable; @@ -224,11 +203,6 @@ void Button::SetTogglableButton( bool togglable ) } } -bool Button::IsTogglableButton() const -{ - return mTogglableButton; -} - void Button::SetSelected( bool selected ) { if( mTogglableButton ) @@ -299,19 +273,6 @@ bool Button::ValidateState( State requestedState ) return transitionTable[mButtonState][requestedState]; } -void Button::PerformFunctionOnVisualsInState( void(Button::*functionPtr)( Property::Index visualIndex), State state ) -{ - DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::PerformFunctionOnVisualsInState BACKROUND visual(%d) for state (%d)\n", - GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND], state ); - DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::PerformFunctionOnVisualsInState FOREGROUND visuals(%d) for state (%d)\n", - GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND], state ); - - (this->*functionPtr)( GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); - (this->*functionPtr)( GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); - - RelayoutRequest(); -} - void Button::ChangeState( State requestedState ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::ChangeState ReuestedState(%d)\n", requestedState ); @@ -327,13 +288,17 @@ void Button::ChangeState( State requestedState ) mPreviousButtonState = mButtonState; // Store previous state for visual removal (used when animations ended) mButtonState = requestedState; // Update current state - if ( Self().OnStage() ) + if ( Self().GetProperty< bool >( Actor::Property::CONNECTED_TO_SCENE ) ) { OnStateChange( mButtonState ); // Notify derived buttons - PerformFunctionOnVisualsInState( &Button::SelectRequiredVisual, mButtonState ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ BACKGROUND ] ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ FOREGROUND ] ); // If animation supported then visual removal should be performed after any transition animation has completed. // If Required Visual is not loaded before current visual is removed then a flickering will be evident. - PerformFunctionOnVisualsInState( &Button::OnButtonVisualRemoval, mPreviousButtonState ); // Derived button can override OnButtonVisualRemoval + // Derived button can override OnButtonVisualRemoval + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ BACKGROUND ] ); + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ FOREGROUND ] ); + RelayoutRequest(); } Toolkit::Button handle( GetOwner() ); @@ -347,28 +312,6 @@ bool Button::IsSelected() const return mTogglableButton && selected; } -void Button::SetLabelText( const std::string& label ) -{ - Self().SetProperty( Toolkit::Button::Property::LABEL, label ); -} - -std::string Button::GetLabelText() const -{ - Property::Value value = Self().GetProperty( Toolkit::Button::Property::LABEL ); - - Property::Map *labelProperty = value.GetMap(); - - std::string textLabel; - - if ( labelProperty ) - { - Property::Value* value = labelProperty->Find( Toolkit::TextVisual::Property::TEXT ); - value->Get( textLabel ); - } - - return textLabel; -} - void Button::MergeWithExistingLabelProperties( const Property::Map& inMap, Property::Map& outMap ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "MergeLabelProperties with %d properties\n", inMap.Count() ); @@ -382,7 +325,7 @@ void Button::MergeWithExistingLabelProperties( const Property::Map& inMap, Prope * 3) Merge with new properties ( settings ) * 4) Return new merged map */ - Toolkit::Visual::Base visual = GetVisual( Toolkit::Button::Property::LABEL ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, Toolkit::Button::Property::LABEL ); if ( visual ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "MergeLabelProperties Visual already exists, retrieving existing map\n"); @@ -417,8 +360,7 @@ Button::Align Button::GetLabelAlignment() * 3) Register visual with control with false for enable flag. Button will later enable visual when needed ( Button::SelectRequiredVisual ) * 4) Unregister visual if empty map was provided. This is the method to remove a visual */ - -void Button::CreateVisualsForComponent( Property::Index index, const Property::Value& value, const float visualDepth ) +void Button::CreateVisualsForComponent( Property::Index index, const Property::Value& value, const int visualDepth ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "CreateVisualsForComponent index(%d)\n", index ); Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); @@ -437,7 +379,7 @@ void Button::CreateVisualsForComponent( Property::Index index, const Property::V else { // if its not a string then get a Property::Map from the property if possible. - Property::Map *map = value.GetMap(); + const Property::Map *map = value.GetMap(); if( map && !map->Empty() ) // Empty map results in current visual removal. { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "CreateVisualsForComponent Using Map(%d)\n", index ); @@ -448,23 +390,26 @@ void Button::CreateVisualsForComponent( Property::Index index, const Property::V if ( buttonVisual ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "CreateVisualsForComponent RegisterVisual index(%d) enabled(%s)\n", - index, IsVisualEnabled( index )?"true":"false" ); - buttonVisual.SetDepthIndex( visualDepth ); - RegisterVisual( index, buttonVisual, IsVisualEnabled( index ) ); + index, DevelControl::IsVisualEnabled( *this, index )?"true":"false" ); + // enable the visual if needed for current state + const bool enabled = ( ( index == VISUAL_INDEX_FOR_STATE[ mButtonState ][ BACKGROUND ] )|| + ( index == VISUAL_INDEX_FOR_STATE[ mButtonState ][ FOREGROUND ] )|| + ( index == Toolkit::Button::Property::LABEL ) ); + DevelControl::RegisterVisual( *this, index, buttonVisual, enabled, visualDepth ); } else { - UnregisterVisual( index ); + DevelControl::UnregisterVisual( *this, index ); DALI_LOG_INFO( gLogButtonFilter, Debug::General, "CreateVisualsForComponent Visual not created or empty map (clearing visual).(%d)\n", index); } - PerformFunctionOnVisualsInState( &Button::SelectRequiredVisual, mButtonState ); + RelayoutRequest(); } bool Button::GetPropertyMapForVisual( Property::Index visualIndex, Property::Map& retreivedMap ) const { DALI_LOG_INFO( gLogButtonFilter, Debug::General, "GetPropertyMapForVisual visual(%d)\n", visualIndex); bool success = false; - Toolkit::Visual::Base visual = GetVisual( visualIndex ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, visualIndex ); if ( visual ) { visual.CreatePropertyMap( retreivedMap ); @@ -673,9 +618,10 @@ void Button::OnInitialize() mTapDetector.Attach( self ); mTapDetector.DetectedSignal().Connect(this, &Button::OnTap); - self.SetKeyboardFocusable( true ); + self.SetProperty( Actor::Property::KEYBOARD_FOCUSABLE, true ); + self.SetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, true ); - self.TouchSignal().Connect( this, &Button::OnTouch ); + self.TouchedSignal().Connect( this, &Button::OnTouch ); } bool Button::OnAccessibilityActivated() @@ -683,52 +629,50 @@ bool Button::OnAccessibilityActivated() return OnKeyboardEnter(); } -bool Button::OnTouch( Actor actor, const TouchData& touch ) +bool Button::OnTouch( Actor actor, const TouchEvent& touch ) { - - // Only events are processed when the button is not disabled and the touch event has only - // one touch point. - - if( !IsDisabled() && ( 1 == touch.GetPointCount() ) ) + if( !IsDisabled() && (actor == touch.GetHitActor(0)) ) { - switch( touch.GetState( 0 ) ) + if ( 1 == touch.GetPointCount() ) { - case PointState::DOWN: - { - ButtonDown(); - break; - } - case PointState::UP: + switch( touch.GetState( 0 ) ) { - ButtonUp(); - break; - } - case PointState::INTERRUPTED: - { - OnTouchPointInterrupted(); - break; - } - case PointState::LEAVE: - { - OnTouchPointLeave(); - break; - } - case PointState::MOTION: - case PointState::STATIONARY: // FALLTHROUGH - { - // Nothing to do - break; + case PointState::DOWN: + { + ButtonDown(); + break; + } + case PointState::UP: + { + ButtonUp(); + break; + } + case PointState::INTERRUPTED: + { + OnTouchPointInterrupted(); + break; + } + case PointState::LEAVE: + { + OnTouchPointLeave(); + break; + } + case PointState::MOTION: + case PointState::STATIONARY: // FALLTHROUGH + { + // Nothing to do + break; + } } } - } - else if( 1 < touch.GetPointCount() ) - { - OnTouchPointLeave(); // Notification for derived classes. + else if( 1 < touch.GetPointCount() ) + { + OnTouchPointLeave(); // Notification for derived classes. - // Sets the button state to the default - mButtonPressedState = UNPRESSED; + // Sets the button state to the default + mButtonPressedState = UNPRESSED; + } } - return false; } @@ -741,7 +685,7 @@ bool Button::OnKeyboardEnter() return ret; } -void Button::OnStageDisconnection() +void Button::OnSceneDisconnection() { if( DEPRESSED == mButtonPressedState ) { @@ -758,16 +702,19 @@ void Button::OnStageDisconnection() mButtonPressedState = UNPRESSED; - Control::OnStageDisconnection(); // Visuals will be set off stage + Control::OnSceneDisconnection(); // Visuals will be set off stage } -void Button::OnStageConnection( int depth ) +void Button::OnSceneConnection( int depth ) { - DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::OnStageConnection ptr(%p) \n", this ); - PerformFunctionOnVisualsInState( &Button::OnButtonVisualRemoval, mPreviousButtonState ); + DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::OnSceneConnection ptr(%p) \n", this ); + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ BACKGROUND ] ); + OnButtonVisualRemoval( VISUAL_INDEX_FOR_STATE[ mPreviousButtonState ][ FOREGROUND ] ); SelectRequiredVisual( Toolkit::Button::Property::LABEL ); - PerformFunctionOnVisualsInState( &Button::SelectRequiredVisual, mButtonState ); - Control::OnStageConnection( depth ); // Enabled visuals will be put on stage + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ BACKGROUND ] ); + SelectRequiredVisual( VISUAL_INDEX_FOR_STATE[ mButtonState ][ FOREGROUND ] ); + Control::OnSceneConnection( depth ); // Enabled visuals will be put on stage + RelayoutRequest(); } Vector3 Button::GetNaturalSize() @@ -784,7 +731,7 @@ Vector3 Button::GetNaturalSize() for ( int state = Button::UNSELECTED_STATE; state < Button::STATE_COUNT; state++ ) { - Toolkit::Visual::Base visual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[state][FOREGROUND] ); Size visualSize; if ( visual ) { @@ -799,7 +746,7 @@ Vector3 Button::GetNaturalSize() { for ( int state = Button::UNSELECTED_STATE; state < Button::STATE_COUNT; state++ ) { - Toolkit::Visual::Base visual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[state][BACKGROUND] ); Size visualSize; if ( visual ) { @@ -827,7 +774,7 @@ Vector3 Button::GetNaturalSize() // Get natural size of label if text has been set if ( mTextStringSetFlag ) { - Toolkit::Visual::Base visual = GetVisual( Toolkit::Button::Property::LABEL ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, Toolkit::Button::Property::LABEL ); if ( visual ) { @@ -880,9 +827,8 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) { DALI_LOG_INFO( gLogButtonFilter, Debug::General, "OnRelayout targetSize(%f,%f) ptr(%p) state[%d]\n", size.width, size.height, this, mButtonState ); - Toolkit::Visual::Base currentVisual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[mButtonState][FOREGROUND] ); - - Toolkit::Visual::Base currentBackGroundVisual = GetVisual( GET_VISUAL_INDEX_FOR_STATE[mButtonState][BACKGROUND] ); + Toolkit::Visual::Base currentVisual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[mButtonState][FOREGROUND] ); + Toolkit::Visual::Base currentBackGroundVisual = DevelControl::GetVisual( *this, VISUAL_INDEX_FOR_STATE[mButtonState][BACKGROUND] ); // Sizes and padding set to zero, if not present then values will no effect calculations. Vector2 visualPosition = Vector2::ZERO; @@ -979,8 +925,8 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, size ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ); + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, size ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); currentBackGroundVisual.SetTransformAndSize( visualTransform, size ); } @@ -991,19 +937,19 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, visualSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET, visualPosition ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) - .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, visualSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET, visualPosition ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) + .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); currentVisual.SetTransformAndSize( visualTransform, size ); } if ( mTextStringSetFlag ) { - Toolkit::Visual::Base textVisual = GetVisual( Toolkit::Button::Property::LABEL ); // No need to search for Label visual if no text set. + Toolkit::Visual::Base textVisual = DevelControl::GetVisual( *this, Toolkit::Button::Property::LABEL ); // No need to search for Label visual if no text set. if ( textVisual ) { @@ -1022,12 +968,12 @@ void Button::OnRelayout( const Vector2& size, RelayoutContainer& container ) Property::Map textVisualTransform; - textVisualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, preSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET, labelPosition ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) - .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); + textVisualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, preSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET, labelPosition ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) + .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, visualAnchorPoint ); textVisual.SetTransformAndSize( textVisualTransform, size ); } @@ -1097,8 +1043,11 @@ void Button::Released() void Button::SelectRequiredVisual( Property::Index visualIndex ) { DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::SelectRequiredVisual index(%d) state(%d)\n", visualIndex, mButtonState ); - - EnableVisual( visualIndex, true ); + // only enable visuals that exist + if( DevelControl::GetVisual( *this, visualIndex ) ) + { + DevelControl::EnableVisual( *this, visualIndex, true ); + } } void Button::RemoveVisual( Property::Index visualIndex ) @@ -1106,11 +1055,11 @@ void Button::RemoveVisual( Property::Index visualIndex ) // Use OnButtonVisualRemoval if want button developer to have the option to override removal. DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::RemoveVisual index(%d) state(%d)\n", visualIndex, mButtonState ); - Toolkit::Visual::Base visual = GetVisual( visualIndex ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, visualIndex ); if( visual ) { - EnableVisual( visualIndex, false ); + DevelControl::EnableVisual( *this, visualIndex, false ); } } @@ -1167,60 +1116,24 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope break; } - case Toolkit::Button::Property::UNSELECTED_STATE_IMAGE: // Legacy Tizen 3.0 - { - GetImplementation( button ).CreateVisualsForComponent( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, value, DepthIndex::BACKGROUND ); - break; - } - case Toolkit::Button::Property::DISABLED_STATE_IMAGE: // Legacy Tizen 3.0 - { - GetImplementation( button ).CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, value, DepthIndex::BACKGROUND ); - break; - } - case Toolkit::Button::Property::SELECTED_STATE_IMAGE: // Legacy Tizen 3.0 - { - GetImplementation( button ).CreateVisualsForComponent( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, value, DepthIndex::BACKGROUND ); - break; - } - case Toolkit::DevelButton::Property::UNSELECTED_VISUAL: - case Toolkit::DevelButton::Property::SELECTED_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL: + case Toolkit::Button::Property::UNSELECTED_VISUAL: + case Toolkit::Button::Property::SELECTED_VISUAL: + case Toolkit::Button::Property::DISABLED_SELECTED_VISUAL: + case Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL: { GetImplementation( button ).CreateVisualsForComponent( index, value, DepthIndex::CONTENT ); break; } - case Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL: - case Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: { GetImplementation( button ).CreateVisualsForComponent( index , value, DepthIndex::BACKGROUND); break; } - case Toolkit::Button::Property::UNSELECTED_COLOR: - { - DALI_LOG_WARNING("[%s] Using deprecated Property Button::Property::UNSELECTED_COLOR instead use Button::Property::UNSELECTED_BACKGROUND_VISUAL\n", __FUNCTION__); - GetImplementation( button ).SetColor( value.Get< Vector4 >(), Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); - break; - } - - case Toolkit::Button::Property::SELECTED_COLOR: - { - DALI_LOG_WARNING("[%s] Using deprecated Property Button::Property::SELECTED_COLOR instead use Button::Property::SELECTED_BACKGROUND_VISUAL\n", __FUNCTION__); - GetImplementation( button ).SetColor( value.Get< Vector4 >(), Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ); - break; - } - - case Toolkit::Button::Property::LABEL_TEXT: - { - DALI_LOG_WARNING("[%s] Using deprecated Property Button::Property::LABEL_TEXT instead use Button::Property::LABEL\n", __FUNCTION__); - GetImplementation( button ).SetLabelText(value.Get< std::string >() ); - break; - } - case Toolkit::Button::Property::LABEL: { Property::Map outTextVisualProperties; @@ -1231,7 +1144,7 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "Button::SetProperty Setting TextVisual with string[%s]\n", textString.c_str() ); Property::Map setPropertyMap; - setPropertyMap.Add( Toolkit::Visual::Property::TYPE, Toolkit::DevelVisual::TEXT ) + setPropertyMap.Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT ) .Add( Toolkit::TextVisual::Property::TEXT, textString ); GetImplementation( button ).MergeWithExistingLabelProperties( setPropertyMap, outTextVisualProperties ); @@ -1239,18 +1152,17 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope else { // Get a Property::Map from the property if possible. - Property::Map* setPropertyMap = value.GetMap(); + const Property::Map* setPropertyMap = value.GetMap(); if( setPropertyMap ) { - TextVisual::ConvertStringKeysToIndexKeys( *setPropertyMap ); - GetImplementation( button ).MergeWithExistingLabelProperties( *setPropertyMap, outTextVisualProperties ); + Property::Map indexKeys = TextVisual::ConvertStringKeysToIndexKeys( *setPropertyMap ); + GetImplementation( button ).MergeWithExistingLabelProperties( indexKeys, outTextVisualProperties ); } } if( !outTextVisualProperties.Empty() ) { GetImplementation( button ).CreateVisualsForComponent( index, outTextVisualProperties, DepthIndex::CONTENT ); - GetImplementation( button ).RelayoutRequest(); } break; } @@ -1263,7 +1175,6 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope labelAlignment ); GetImplementation( button ).SetLabelAlignment( labelAlignment ); - GetImplementation( button ).RelayoutRequest(); break; } @@ -1278,7 +1189,6 @@ void Button::SetProperty( BaseObject* object, Property::Index index, const Prope { Vector4 padding ( value.Get< Vector4 >() ); GetImplementation( button ).SetForegroundPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); - GetImplementation( button ).RelayoutRequest(); break; } } @@ -1331,32 +1241,14 @@ Property::Value Button::GetProperty( BaseObject* object, Property::Index propert break; } - case Toolkit::Button::Property::UNSELECTED_STATE_IMAGE: - { - value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); - break; - } - - case Toolkit::Button::Property::SELECTED_STATE_IMAGE: - { - value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ); - break; - } - - case Toolkit::Button::Property::DISABLED_STATE_IMAGE: - { - value = GetImplementation( button ).GetUrlForImageVisual( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL ); - break; - } - - case Toolkit::DevelButton::Property::UNSELECTED_VISUAL: - case Toolkit::DevelButton::Property::SELECTED_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL: - case Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL: - case Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: - case Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::UNSELECTED_VISUAL: + case Toolkit::Button::Property::SELECTED_VISUAL: + case Toolkit::Button::Property::DISABLED_SELECTED_VISUAL: + case Toolkit::Button::Property::DISABLED_UNSELECTED_VISUAL: + case Toolkit::Button::Property::UNSELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::SELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::DISABLED_SELECTED_BACKGROUND_VISUAL: + case Toolkit::Button::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL: case Toolkit::Button::Property::LABEL: { Property::Map visualProperty; @@ -1367,24 +1259,6 @@ Property::Value Button::GetProperty( BaseObject* object, Property::Index propert break; } - case Toolkit::Button::Property::UNSELECTED_COLOR: - { - value = GetImplementation( button ).GetUnselectedColor(); - break; - } - - case Toolkit::Button::Property::SELECTED_COLOR: - { - value = GetImplementation( button ).GetSelectedColor(); - break; - } - - case Toolkit::Button::Property::LABEL_TEXT: - { - value = GetImplementation( button ).GetLabelText(); - break; - } - case Toolkit::DevelButton::Property::LABEL_RELATIVE_ALIGNMENT: { const char* alignment = Scripting::GetEnumerationName< Button::Align >( GetImplementation( button ).GetLabelAlignment(), @@ -1440,185 +1314,37 @@ Padding Button::GetForegroundPadding() return mForegroundPadding; } -//////////////////////////////////////////////////////////////////////// -// Legacy functions from Tizen 2.4 and 3.0 - -// Legacy code needed whilst Color can be set by direct Property setting ( deprecated ) instead of setting a Visual -void Button::SetColor( const Vector4& color, Property::Index visualIndex ) +std::string Button::AccessibleImpl::GetNameRaw() { - if ( visualIndex == Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ) - { - mSelectedColor = color; - } - else - { - mUnselectedColor = color; - } + auto slf = Toolkit::Button::DownCast( self ); - Property::Map map; - map[ Toolkit::Visual::Property::TYPE ] = Toolkit::Visual::COLOR; - map[ Toolkit::ColorVisual::Property::MIX_COLOR ] = color; + Property::Map label = slf.GetProperty( Toolkit::Button::Property::LABEL ); - CreateVisualsForComponent( visualIndex, map, DepthIndex::BACKGROUND ); -} + std::string labelText; + label.Find( Toolkit::TextVisual::Property::TEXT )->Get( labelText ); -const Vector4 Button::GetUnselectedColor() const -{ - return mUnselectedColor; + return labelText; } -const Vector4 Button::GetSelectedColor() const +Property::Index Button::AccessibleImpl::GetNamePropertyIndex() { - return mSelectedColor; -} - -void Button::SetAnimationTime( float animationTime ) -{ - // Used by deprecated API - mAnimationTime = animationTime; -} - -float Button::GetAnimationTime() const -{ - // Used by deprecated API - return mAnimationTime; -} + Property::Index label = Toolkit::Button::Property::LABEL; + Property::Map labelMap = self.GetProperty(label); -void Button::SetLabel( Actor label ) -{ - if ( label ) - { - Property::Value value =""; - value = label.GetProperty(Toolkit::TextLabel::Property::TEXT); - - SetLabelText( value.Get() ); - } -} - -void Button::SetUnselectedImage( const std::string& filename ) -{ - SetBackgroundImage( filename ); -} - -void Button::SetBackgroundImage( const std::string& filename ) -{ - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); - } + if (MapContainsTextString(labelMap)) + return label; else - { - UnregisterVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); - } -} - -void Button::SetSelectedImage( const std::string& filename ) -{ - SetSelectedBackgroundImage( filename ); -} - -void Button::SetSelectedBackgroundImage( const std::string& filename ) -{ - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); - } - else - { - UnregisterVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ); - } + return Property::INVALID_INDEX; } -void Button::SetDisabledBackgroundImage( const std::string& filename ) +Dali::Accessibility::States Button::AccessibleImpl::CalculateStates() { - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, filename, DepthIndex::BACKGROUND ); - } -} - -void Button::SetDisabledImage( const std::string& filename ) -{ - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_VISUAL, filename, DepthIndex::CONTENT ); - } -} - -void Button::SetDisabledSelectedImage( const std::string& filename ) -{ - if( !filename.empty() ) - { - CreateVisualsForComponent( Toolkit::DevelButton::Property::DISABLED_SELECTED_VISUAL, filename, DepthIndex::CONTENT ); - } -} - -// Used by Deprecated Properties which don't use the Visual Property maps for setting and getting -std::string Button::GetUrlForImageVisual( const Property::Index index ) const -{ - Toolkit::Visual::Base visual = GetVisual( index ); - std::string result; - - if ( visual ) - { - Dali::Property::Map retreivedMap; - visual.CreatePropertyMap( retreivedMap ); - Property::Value* value = retreivedMap.Find( Toolkit::ImageVisual::Property::URL, Property::STRING ); - if ( value ) - { - result = value->Get(); - } - } - - return result; -} - -// Below functions DEPRECATED_1_0.50 - Return empty Actors - -namespace -{ -std::string GetUrlFromImage( Image& image ) -{ - ResourceImage resourceImage = ResourceImage::DownCast( image ); - - std::string imageUrl; - - if ( resourceImage ) - { - imageUrl = resourceImage.GetUrl(); - } - return imageUrl; -} - -} // namespace - - -void Button::SetButtonImage( Image image ) -{ - DALI_LOG_WARNING("Button::SetButtonImage @DEPRECATED_1_0.50\n"); - SetUnselectedImage( GetUrlFromImage( image ) ); -} - -void Button::SetSelectedImage( Image image ) -{ - DALI_LOG_WARNING("Button::SetSelectedImage @DEPRECATED_1_0.50\n"); - SetSelectedImage( GetUrlFromImage( image ) ); -} - -Actor Button::GetButtonImage() const -{ - DALI_LOG_WARNING("Button::GetButtonImage @DEPRECATED_1_0.50\n"); - Actor imageView = Toolkit::ImageView::New( GetUrlForImageVisual( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL ) ); - - return imageView; -} - -Actor Button::GetSelectedImage() const -{ - DALI_LOG_WARNING("Button::GetSelectedImage @DEPRECATED_1_0.50\n"); - Actor imageView = Toolkit::ImageView::New( GetUrlForImageVisual( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL ) ); - - return imageView; + auto tmp = Control::Impl::AccessibleImpl::CalculateStates(); + tmp[Dali::Accessibility::State::SELECTABLE] = true; + auto slf = Toolkit::Button::DownCast( self ); + tmp[Dali::Accessibility::State::ENABLED] = !slf.GetProperty( Toolkit::Button::Property::DISABLED ); + tmp[Dali::Accessibility::State::CHECKED] = slf.GetProperty( Toolkit::Button::Property::SELECTED ); + return tmp; } } // namespace Internal