#include <dali-toolkit/internal/visuals/visual-string-constants.h>
#include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
#include <dali-toolkit/public-api/controls/image-view/image-view.h>
+#include <dali-toolkit/devel-api/asset-manager/asset-manager.h>
namespace
{
static bool DoAction( BaseObject* object, const std::string& actionName, const Property::Map& attributes )
{
- if (!object)
- return false;
+ bool ret = true;
- Toolkit::Control control = Toolkit::Control::DownCast( BaseHandle( object ) );
- if ( !control )
- return false;
+ Dali::BaseHandle handle( object );
+
+ Toolkit::Control control = Toolkit::Control::DownCast( handle );
+
+ DALI_ASSERT_ALWAYS( control );
if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_ACTIVATED ) ||
- actionName == "activate" )
+ actionName == "activate" )
{
// if cast succeeds there is an implementation so no need to check
- if (!DevelControl::AccessibilityActivateSignal( control ).Empty())
+ if( !DevelControl::AccessibilityActivateSignal( control ).Empty() )
DevelControl::AccessibilityActivateSignal( control ).Emit();
- else
- return Internal::GetImplementation( control ).OnAccessibilityActivated();
+ else ret = Internal::GetImplementation( control ).OnAccessibilityActivated();
}
else if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_READING_SKIPPED ) )
{
// if cast succeeds there is an implementation so no need to check
- if (!DevelControl::AccessibilityReadingSkippedSignal( control ).Empty())
+ if( !DevelControl::AccessibilityReadingSkippedSignal( control ).Empty() )
DevelControl::AccessibilityReadingSkippedSignal( control ).Emit();
}
- else if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_READING_PAUSED) )
+ else if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_READING_PAUSED ) )
{
// if cast succeeds there is an implementation so no need to check
- if (!DevelControl::AccessibilityReadingPausedSignal( control ).Empty())
+ if( !DevelControl::AccessibilityReadingPausedSignal( control ).Empty() )
DevelControl::AccessibilityReadingPausedSignal( control ).Emit();
}
else if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_READING_RESUMED ) )
{
// if cast succeeds there is an implementation so no need to check
- if (!DevelControl::AccessibilityReadingResumedSignal( control ).Empty())
+ if( !DevelControl::AccessibilityReadingResumedSignal( control ).Empty() )
DevelControl::AccessibilityReadingResumedSignal( control ).Emit();
}
else if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_READING_CANCELLED ) )
{
// if cast succeeds there is an implementation so no need to check
- if (!DevelControl::AccessibilityReadingCancelledSignal( control ).Empty())
+ if( !DevelControl::AccessibilityReadingCancelledSignal( control ).Empty() )
DevelControl::AccessibilityReadingCancelledSignal( control ).Emit();
}
else if( 0 == strcmp( actionName.c_str(), ACTION_ACCESSIBILITY_READING_STOPPED ) )
{
// if cast succeeds there is an implementation so no need to check
- if (!DevelControl::AccessibilityReadingStoppedSignal( control ).Empty())
+ if(!DevelControl::AccessibilityReadingStoppedSignal( control ).Empty())
DevelControl::AccessibilityReadingStoppedSignal( control ).Emit();
+ } else
+ {
+ ret = false;
}
-
- return true;
+ return ret;
}
/**
Control::Impl::~Impl()
{
+ for( auto&& iter : mVisuals )
+ {
+ StopObservingVisual( iter->visual );
+ }
+
+ for( auto&& iter : mRemoveVisuals )
+ {
+ StopObservingVisual( iter->visual );
+ }
+
AccessibilityDeregister();
// All gesture detectors will be destroyed so no need to disconnect.
delete mStartingPinchScale;
case Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES:
{
- value.Get( controlImpl.mImpl->mAccessibilityAttributes );
+ const Property::Map* map = value.GetMap();
+ if( map && !map->Empty() )
+ {
+ controlImpl.mImpl->mAccessibilityAttributes = *map;
+ }
break;
}
case Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED:
{
- value.Get( controlImpl.mImpl->mAccessibilityAnimated );
+ bool animated;
+ if( value.Get( animated ) )
+ {
+ controlImpl.mImpl->mAccessibilityAnimated = animated;
+ }
break;
}
}
Internal::Control::Impl& controlImpl = Internal::Control::Impl::Get( internalControl );
if( controlImpl.mAccessibilityRole == Dali::Accessibility::Role::UNKNOWN )
controlImpl.mAccessibilityRole = role;
+
+ self.PropertySetSignal().Connect(&controlImpl, [this, &controlImpl](Dali::Handle &handle, Dali::Property::Index index, Dali::Property::Value value)
+ {
+ if (this->self != Dali::Accessibility::Accessible::GetCurrentlyHighlightedActor())
+ {
+ return;
+ }
+
+ if (index == DevelControl::Property::ACCESSIBILITY_NAME
+ || (index == GetNamePropertyIndex() && !controlImpl.mAccessibilityNameSet))
+ {
+ if (controlImpl.mAccessibilityGetNameSignal.Empty())
+ {
+ Emit(Dali::Accessibility::ObjectPropertyChangeEvent::NAME);
+ }
+ }
+
+ if (index == DevelControl::Property::ACCESSIBILITY_DESCRIPTION
+ || (index == GetDescriptionPropertyIndex() && !controlImpl.mAccessibilityDescriptionSet))
+ {
+ if (controlImpl.mAccessibilityGetDescriptionSignal.Empty())
+ {
+ Emit(Dali::Accessibility::ObjectPropertyChangeEvent::DESCRIPTION);
+ }
+ }
+ });
}
std::string Control::Impl::AccessibleImpl::GetName()
s[Dali::Accessibility::State::ENABLED] = true;
s[Dali::Accessibility::State::SENSITIVE] = true;
s[Dali::Accessibility::State::ANIMATED] = self.GetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED ).Get< bool >();
- s[Dali::Accessibility::State::VISIBLE] = self.GetCurrentProperty< bool >( Actor::Property::VISIBLE );
+ s[Dali::Accessibility::State::VISIBLE] = true;
if( modal )
{
s[Dali::Accessibility::State::MODAL] = true;
}
- s[Dali::Accessibility::State::SHOWING] = !self.GetProperty( Dali::DevelActor::Property::CULLED ).Get< bool >();
+ s[Dali::Accessibility::State::SHOWING] = !self.GetProperty( Dali::DevelActor::Property::CULLED ).Get< bool >()
+ && self.GetCurrentProperty< bool >( Actor::Property::VISIBLE );
+
s[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty( Dali::DevelActor::Property::CONNECTED_TO_SCENE ).Get< bool >();
return s;
}
return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor( self );
}
-const char* const FOCUS_BORDER_IMAGE_PATH = DALI_IMAGE_DIR "keyboard_focus.9.png";
-
static Dali::Actor CreateHighlightIndicatorActor()
{
+ std::string focusBorderImagePath(AssetManager::GetDaliImagePath());
+ focusBorderImagePath += "/keyboard_focus.9.png";
// Create the default if it hasn't been set and one that's shared by all the
- // keyboard focusable actors const char* const FOCUS_BORDER_IMAGE_PATH =
- // DALI_IMAGE_DIR "keyboard_focus.9.png";
- auto actor = Toolkit::ImageView::New( FOCUS_BORDER_IMAGE_PATH );
+ // keyboard focusable actors
+ auto actor = Toolkit::ImageView::New( focusBorderImagePath );
actor.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
DevelControl::AppendAccessibilityAttribute( actor, "highlight", "" );
actor.SetProperty( Toolkit::DevelControl::Property::ACCESSIBILITY_ANIMATED, true);
return false;
}
-int Control::Impl::AccessibleImpl::GetHighlightIndex()
-{
- return 0;
-}
-
std::string Control::Impl::AccessibleImpl::GetActionName( size_t index )
{
if ( index >= GetActionCount() ) return "";
}
}
+Property::Index Control::Impl::AccessibleImpl::GetNamePropertyIndex()
+{
+ return Actor::Property::NAME;
+}
+
+Property::Index Control::Impl::AccessibleImpl::GetDescriptionPropertyIndex()
+{
+ return Property::INVALID_INDEX;
+}
+
void Control::Impl::PositionOrSizeChangedCallback( PropertyNotification &p )
{
auto self = Dali::Actor::DownCast(p.GetTarget());