// EXTERNAL INCLUDES
#include <dali/integration-api/debug.h>
#include <dali/public-api/object/type-registry.h>
-#include <dali/public-api/images/resource-image.h>
#if defined(DEBUG_ENABLED)
extern Debug::Filter* gLogButtonFilter;
void RadioButton::OnInitialize()
{
Button::OnInitialize();
+
+ DevelControl::SetAccessibilityConstructor( Self(), []( Dali::Actor actor ) {
+ return std::unique_ptr< Dali::Accessibility::Accessible >(
+ new AccessibleImpl( actor, Dali::Accessibility::Role::RADIO_BUTTON ) );
+ } );
}
bool RadioButton::OnToggleReleased()
{
// Radio button overrides toggle release (button up) as doesn't allow un-selection to be performed on it directly.
- bool stateChanged = false;
- if( !IsSelected() )
- {
- Button::SetSelected( true ); // Set button to selected as previously unselected
- stateChanged = true;
- }
- return stateChanged;
+ return false;
}
void RadioButton::OnStateChange( State newState )
// Radio button can be part of a group, if a button in the group is selected then all others should be unselected
DALI_LOG_INFO( gLogButtonFilter, Debug::Verbose, "RadioButton::OnStateChange state(%d)\n", newState );
- switch( newState )
- {
- case SELECTED_STATE:
- {
- Actor parent = Self().GetParent();
- if( parent )
- {
- for( unsigned int i = 0; i < parent.GetChildCount(); ++i )
- {
- Dali::Toolkit::RadioButton radioButtonChild = Dali::Toolkit::RadioButton::DownCast( parent.GetChildAt( i ) );
- if( radioButtonChild && radioButtonChild != Self() )
- {
- radioButtonChild.SetSelected( false );
- }
- }
- }
- }
-
- default:
- {
- break;
- }
- }
+ if ( SELECTED_STATE == newState )
+ {
+ Actor parent = Self().GetParent();
+ if( parent )
+ {
+ for( unsigned int i = 0; i < parent.GetChildCount(); ++i )
+ {
+ Dali::Toolkit::RadioButton radioButtonChild = Dali::Toolkit::RadioButton::DownCast( parent.GetChildAt( i ) );
+ if( radioButtonChild && radioButtonChild != Self() )
+ {
+ radioButtonChild.SetProperty( Toolkit::Button::Property::SELECTED, false );
+ }
+ }
+ }
+ }
+ // TODO: replace it with OnPropertySet hook once Button::Property::SELECTED will be consistently used
+ if (Dali::Accessibility::IsUp() && (newState == SELECTED_STATE || newState == UNSELECTED_STATE))
+ {
+ Dali::Accessibility::Accessible::Get(Self())->EmitStateChanged(
+ Dali::Accessibility::State::CHECKED, newState == SELECTED_STATE ? 1 : 0, 0
+ );
+ }
+}
+
+Dali::Accessibility::States RadioButton::AccessibleImpl::CalculateStates()
+{
+ auto tmp = Button::AccessibleImpl::CalculateStates();
+ auto slf = Toolkit::Button::DownCast( self );
+ if( slf.GetProperty<bool>( Toolkit::Button::Property::SELECTED ) )
+ tmp[Dali::Accessibility::State::CHECKED] = true;
+ tmp[Dali::Accessibility::State::SELECTABLE] = true;
+ return tmp;
}
} // namespace Internal