[AT-SPI] Synchronize with AT-SPI cleanup in dali-adaptor 56/267456/4
authorArtur Świgoń <a.swigon@samsung.com>
Fri, 3 Dec 2021 13:00:20 +0000 (14:00 +0100)
committerArtur Świgoń <a.swigon@samsung.com>
Thu, 23 Dec 2021 09:46:29 +0000 (10:46 +0100)
A related dali-adaptor change adds const-correctness and introduces a
new, more coherent naming convention for Accessible objects. The name
ControlAccessible now matches ApplicationAccessible, ProxyAccessible
etc. and the upcoming ActorAccessible.

Change-Id: I63a6887e1c291fbfb475fd8c2384126a31981d6b

48 files changed:
automated-tests/src/dali-toolkit-internal/utc-Dali-Accessibility-Controls-BridgeUp.cpp
dali-toolkit/devel-api/controls/accessible-impl.cpp [deleted file]
dali-toolkit/devel-api/controls/accessible-impl.h [deleted file]
dali-toolkit/devel-api/controls/control-accessible.cpp [new file with mode: 0644]
dali-toolkit/devel-api/controls/control-accessible.h [new file with mode: 0644]
dali-toolkit/devel-api/controls/control-devel.h
dali-toolkit/devel-api/file.list
dali-toolkit/internal/controls/alignment/alignment-impl.cpp
dali-toolkit/internal/controls/bloom-view/bloom-view-impl.cpp
dali-toolkit/internal/controls/buttons/button-impl.cpp
dali-toolkit/internal/controls/buttons/button-impl.h
dali-toolkit/internal/controls/buttons/toggle-button-impl.cpp
dali-toolkit/internal/controls/buttons/toggle-button-impl.h
dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.cpp
dali-toolkit/internal/controls/control/control-data-impl.h
dali-toolkit/internal/controls/effects-view/effects-view-impl.cpp
dali-toolkit/internal/controls/flex-container/flex-container-impl.cpp
dali-toolkit/internal/controls/gaussian-blur-view/gaussian-blur-view-impl.cpp
dali-toolkit/internal/controls/image-view/image-view-impl.cpp
dali-toolkit/internal/controls/magnifier/magnifier-impl.cpp
dali-toolkit/internal/controls/model3d-view/model3d-view-impl.cpp
dali-toolkit/internal/controls/navigation-view/navigation-view-impl.cpp
dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp
dali-toolkit/internal/controls/popup/popup-impl.cpp
dali-toolkit/internal/controls/popup/popup-impl.h
dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp
dali-toolkit/internal/controls/progress-bar/progress-bar-impl.h
dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.cpp
dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h
dali-toolkit/internal/controls/scrollable/scrollable-impl.cpp
dali-toolkit/internal/controls/scrollable/scrollable-impl.h
dali-toolkit/internal/controls/shadow-view/shadow-view-impl.cpp
dali-toolkit/internal/controls/slider/slider-impl.cpp
dali-toolkit/internal/controls/slider/slider-impl.h
dali-toolkit/internal/controls/super-blur-view/super-blur-view-impl.cpp
dali-toolkit/internal/controls/table-view/table-view-impl.cpp
dali-toolkit/internal/controls/text-controls/text-anchor-impl.h
dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp
dali-toolkit/internal/controls/text-controls/text-editor-impl.h
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.h
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp
dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp
dali-toolkit/internal/controls/tool-bar/tool-bar-impl.cpp
dali-toolkit/internal/controls/video-view/video-view-impl.cpp

index 684d70d9b31ada5808c63bf6a35414846b096c95..9e352e50f961a5210396217f4939675f7b7a748b 100644 (file)
@@ -1077,11 +1077,11 @@ int UtcDaliAccessibilityScrollToChildScrollView(void)
 
   Wait(application);
 
-  auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(scrollView));
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(scrollView));
   DALI_TEST_CHECK(accessibleParent);
-  auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorA));
+  auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorA));
   DALI_TEST_CHECK(accessibleA);
-  auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(actorB));
+  auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(actorB));
   DALI_TEST_CHECK(accessibleB);
 
   accessibleA->GrabHighlight(); // == scrollView.ScrollTo(actorA)
@@ -1132,11 +1132,11 @@ int UtcDaliAccessibilityScrollToChildItemView(void)
 
   Wait(application);
 
-  auto* accessibleParent = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view));
+  auto* accessibleParent = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view));
   DALI_TEST_CHECK(accessibleParent);
-  auto* accessibleA = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
+  auto* accessibleA = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(0)));
   DALI_TEST_CHECK(accessibleA);
-  auto* accessibleB = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
+  auto* accessibleB = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(view.GetItem(1)));
   DALI_TEST_CHECK(accessibleB);
 
   accessibleA->GrabHighlight(); // == view.ScrollToItem(view.GetItemId(actorA))
@@ -1155,7 +1155,7 @@ int UtcDaliAccessibilityScrollToChildNonScrollable(void)
 
   TextLabel label = TextLabel::New("123");
 
-  auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(label));
+  auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(label));
   DALI_TEST_CHECK(accessible);
 
   DALI_TEST_EQUALS(accessible->IsScrollable(), false, TEST_LOCATION);
@@ -1197,7 +1197,7 @@ int UtcDaliAccessibilityCheckHighlight(void)
   Wait(application);
 
   // Set highlight to first child (A) to enable movement tracking
-  auto* accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
+  auto* accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
   DALI_TEST_CHECK(accessible);
   accessible->GrabHighlight();
   Wait(application);
@@ -1223,7 +1223,7 @@ int UtcDaliAccessibilityCheckHighlight(void)
   Dali::Accessibility::TestResetMoveOutedCalled();
 
   // Set highlight to second child (B) to enable movement tracking
-  accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonB));
+  accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonB));
   DALI_TEST_CHECK(accessible);
   accessible->GrabHighlight();
   Wait(application);
@@ -1261,7 +1261,7 @@ int UtcDaliAccessibilityCheckHighlight(void)
   Dali::Accessibility::TestResetMoveOutedCalled();
 
   // Disable movement tracking on B by giving highlight to A
-  accessible = dynamic_cast<DevelControl::AccessibleImpl*>(Dali::Accessibility::Accessible::Get(buttonA));
+  accessible = dynamic_cast<DevelControl::ControlAccessible*>(Dali::Accessibility::Accessible::Get(buttonA));
   DALI_TEST_CHECK(accessible);
   accessible->GrabHighlight();
   Wait(application);
diff --git a/dali-toolkit/devel-api/controls/accessible-impl.cpp b/dali-toolkit/devel-api/controls/accessible-impl.cpp
deleted file mode 100644 (file)
index e01bcb5..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-/*
- * Copyright (c) 2021 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-// CLASS HEADER
-#include "accessible-impl.h"
-
-// EXTERNAL INCLUDES
-#ifdef DGETTEXT_ENABLED
-#include <libintl.h>
-#endif
-
-#include <dali/devel-api/actors/actor-devel.h>
-#include <dali/devel-api/adaptor-framework/window-devel.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/devel-api/asset-manager/asset-manager.h>
-#include <dali-toolkit/internal/controls/control/control-data-impl.h>
-#include <dali-toolkit/public-api/controls/control-impl.h>
-#include <dali-toolkit/public-api/controls/control.h>
-#include <dali-toolkit/public-api/controls/image-view/image-view.h>
-#include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
-
-namespace Dali::Toolkit::DevelControl
-{
-namespace
-{
-static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit")
-{
-#ifdef DGETTEXT_ENABLED
-    /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced
-          consider calling utility function for converting non-localized string into well-formatted key before lookup. */
-    return dgettext(domain, string.c_str());
-#else
-    return string;
-#endif
-}
-
-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
-  auto actor = Toolkit::ImageView::New(focusBorderImagePath);
-  actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
-
-  DevelControl::AppendAccessibilityAttribute(actor, "highlight", std::string());
-  actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
-
-  return actor;
-}
-} // unnamed namespace
-
-AccessibleImpl::AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal)
-: mSelf(self),
-  mIsModal(modal)
-{
-  auto control = Dali::Toolkit::Control::DownCast(Self());
-
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  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 AccessibleImpl::GetName()
-{
-  auto control = Dali::Toolkit::Control::DownCast(Self());
-
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  std::string name;
-
-  if(!controlImpl.mAccessibilityGetNameSignal.Empty())
-  {
-    controlImpl.mAccessibilityGetNameSignal.Emit(name);
-  }
-  else if(controlImpl.mAccessibilityNameSet)
-  {
-    name = controlImpl.mAccessibilityName;
-  }
-  else if(auto raw = GetNameRaw(); !raw.empty())
-  {
-    name = raw;
-  }
-  else
-  {
-    name = Self().GetProperty<std::string>(Actor::Property::NAME);
-  }
-
-  if(controlImpl.mAccessibilityTranslationDomainSet)
-  {
-    return GetLocaleText(name, controlImpl.mAccessibilityTranslationDomain.c_str());
-  }
-
-  return GetLocaleText(name);
-}
-
-std::string AccessibleImpl::GetNameRaw()
-{
-  return {};
-}
-
-std::string AccessibleImpl::GetDescription()
-{
-  auto control = Dali::Toolkit::Control::DownCast(Self());
-
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  std::string description;
-
-  if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty())
-  {
-    controlImpl.mAccessibilityGetDescriptionSignal.Emit(description);
-  }
-  else if(controlImpl.mAccessibilityDescriptionSet)
-  {
-    description = controlImpl.mAccessibilityDescription;
-  }
-  else
-  {
-    description = GetDescriptionRaw();
-  }
-  if(controlImpl.mAccessibilityTranslationDomainSet)
-  {
-    return GetLocaleText(description, controlImpl.mAccessibilityTranslationDomain.c_str());
-  }
-
-  return GetLocaleText(description);
-}
-
-std::string AccessibleImpl::GetDescriptionRaw()
-{
-  return {};
-}
-
-Dali::Accessibility::Accessible* AccessibleImpl::GetParent()
-{
-  return Dali::Accessibility::Accessible::Get(Self().GetParent());
-}
-
-size_t AccessibleImpl::GetChildCount()
-{
-  return Self().GetChildCount();
-}
-
-Dali::Accessibility::Accessible* AccessibleImpl::GetChildAtIndex(size_t index)
-{
-  return Dali::Accessibility::Accessible::Get(Self().GetChildAt(static_cast<unsigned int>(index)));
-}
-
-size_t AccessibleImpl::GetIndexInParent()
-{
-  auto self = Self();
-  auto parent = self.GetParent();
-  DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent");
-
-  auto count = parent.GetChildCount();
-  for(auto i = 0u; i < count; ++i)
-  {
-    auto child = parent.GetChildAt(i);
-    if(child == self)
-    {
-      return i;
-    }
-  }
-  DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent");
-  return static_cast<size_t>(-1);
-}
-
-Dali::Accessibility::Role AccessibleImpl::GetRole()
-{
-  return Self().GetProperty<Dali::Accessibility::Role>(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE);
-}
-
-std::string AccessibleImpl::GetLocalizedRoleName()
-{
-  return GetLocaleText(GetRoleName());
-}
-
-bool AccessibleImpl::IsShowing()
-{
-  Dali::Actor self = Self();
-  if(!self.GetProperty<bool>(Actor::Property::VISIBLE) || self.GetProperty<Vector4>(Actor::Property::WORLD_COLOR).a == 0 || self.GetProperty<bool>(Dali::DevelActor::Property::CULLED))
-  {
-    return false;
-  }
-
-  auto* child  = this;
-  auto* parent = dynamic_cast<Toolkit::DevelControl::AccessibleImpl*>(child->GetParent());
-  if(!parent)
-  {
-    return true;
-  }
-
-  auto childExtent = child->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
-  while(parent)
-  {
-    auto control      = Dali::Toolkit::Control::DownCast(parent->Self());
-    if(!control.GetProperty<bool>(Actor::Property::VISIBLE))
-    {
-      return false;
-    }
-    auto clipMode     = control.GetProperty(Actor::Property::CLIPPING_MODE).Get<bool>();
-    auto parentExtent = parent->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
-    if ((clipMode != ClippingMode::DISABLED) && !parentExtent.Intersects(childExtent))
-    {
-      return false;
-    }
-    parent = dynamic_cast<Toolkit::DevelControl::AccessibleImpl*>(parent->GetParent());
-  }
-
-  return true;
-}
-
-Dali::Accessibility::States AccessibleImpl::CalculateStates()
-{
-  Dali::Actor self = Self();
-  Dali::Accessibility::States state;
-  state[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
-  state[Dali::Accessibility::State::FOCUSED]   = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
-
-  if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE)
-  {
-    state[Dali::Accessibility::State::HIGHLIGHTABLE] = false;
-  }
-  else
-  {
-    state[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>();
-  }
-
-  state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self;
-  state[Dali::Accessibility::State::ENABLED]     = true;
-  state[Dali::Accessibility::State::SENSITIVE]   = true;
-  state[Dali::Accessibility::State::VISIBLE]     = self.GetProperty<bool>(Actor::Property::VISIBLE);
-
-  if(mIsModal)
-  {
-    state[Dali::Accessibility::State::MODAL] = true;
-  }
-  state[Dali::Accessibility::State::SHOWING] = IsShowing();
-  state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
-  return state;
-}
-
-Dali::Accessibility::States AccessibleImpl::GetStates()
-{
-  return CalculateStates();
-}
-
-Dali::Accessibility::Attributes AccessibleImpl::GetAttributes()
-{
-  std::unordered_map<std::string, std::string> attributeMap;
-  auto control = Dali::Toolkit::Control::DownCast(Self());
-  auto attribute = control.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
-  auto map = attribute.GetMap();
-
-  if(map)
-  {
-    auto mapSize = map->Count();
-
-    for(unsigned int i = 0; i < mapSize; i++)
-    {
-      auto mapKey = map->GetKeyAt(i);
-      if(mapKey.type == Dali::Property::Key::STRING)
-      {
-        std::string mapValue;
-        if(map->GetValue(i).Get(mapValue))
-        {
-          attributeMap.emplace(std::move(mapKey.stringKey), std::move(mapValue));
-        }
-      }
-    }
-  }
-
-  return attributeMap;
-}
-
-Dali::Accessibility::ComponentLayer AccessibleImpl::GetLayer()
-{
-  return Dali::Accessibility::ComponentLayer::WINDOW;
-}
-
-Dali::Rect<> AccessibleImpl::GetExtents(Dali::Accessibility::CoordinateType type)
-{
-  Dali::Actor self = Self();
-
-  Vector2 screenPosition = self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION).Get<Vector2>();
-  auto size = self.GetCurrentProperty<Vector3>(Actor::Property::SIZE) * self.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE);
-  bool positionUsesAnchorPoint = self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT).Get<bool>();
-  Vector3 anchorPointOffSet = size * (positionUsesAnchorPoint ? self.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT);
-  Vector2 position = Vector2((screenPosition.x - anchorPointOffSet.x), (screenPosition.y - anchorPointOffSet.y));
-
-  if(type == Dali::Accessibility::CoordinateType::WINDOW)
-  {
-    return {position.x, position.y, size.x, size.y};
-  }
-  else // Dali::Accessibility::CoordinateType::SCREEN
-  {
-    auto window = Dali::DevelWindow::Get(self);
-    auto windowPosition = window.GetPosition();
-    return {position.x + windowPosition.GetX(), position.y + windowPosition.GetY(), size.x, size.y};
-  }
-}
-
-int16_t AccessibleImpl::GetMdiZOrder()
-{
-  return 0;
-}
-double AccessibleImpl::GetAlpha()
-{
-  return 0;
-}
-
-bool AccessibleImpl::GrabFocus()
-{
-  return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(Self());
-}
-
-void AccessibleImpl::ScrollToSelf()
-{
-  auto* child = this;
-  auto* parent = dynamic_cast<Toolkit::DevelControl::AccessibleImpl*>(child->GetParent());
-
-  while (parent)
-  {
-    if (parent->IsScrollable())
-    {
-      parent->ScrollToChild(child->Self());
-    }
-
-    parent = dynamic_cast<Toolkit::DevelControl::AccessibleImpl*>(parent->GetParent());
-  }
-}
-
-void AccessibleImpl::RegisterPositionPropertyNotification()
-{
-  auto                     control         = Dali::Toolkit::Control::DownCast(Self());
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  controlImpl.RegisterAccessibilityPositionPropertyNotification();
-}
-
-void AccessibleImpl::UnregisterPositionPropertyNotification()
-{
-  auto                     control         = Dali::Toolkit::Control::DownCast(Self());
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-  controlImpl.UnregisterAccessibilityPositionPropertyNotification();
-}
-
-bool AccessibleImpl::GrabHighlight()
-{
-  Dali::Actor self = Self();
-  auto oldHighlightedActor = GetCurrentlyHighlightedActor();
-
-  if(!Dali::Accessibility::IsUp())
-  {
-    return false;
-  }
-
-  if(self == oldHighlightedActor)
-  {
-    return true;
-  }
-
-  // Clear the old highlight.
-  if(oldHighlightedActor)
-  {
-    auto oldHighlightObject = dynamic_cast<Dali::Accessibility::Component*>(Internal::Control::Impl::GetAccessibilityObject(oldHighlightedActor));
-    if(oldHighlightObject)
-    {
-      oldHighlightObject->ClearHighlight();
-    }
-  }
-
-  auto highlight = GetHighlightActor();
-  if(!highlight)
-  {
-    highlight = CreateHighlightIndicatorActor();
-    SetHighlightActor(highlight);
-  }
-
-  highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
-  highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f);
-  highlight.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
-
-  // Need to set resize policy again, to update SIZE property which is set by
-  // AccessibleImpl_NUI. The highlight could move from AccessibleImpl_NUI to
-  // AccessibleImpl. In this case, highlight has incorrect size.
-  highlight.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
-
-  // Remember the highlight actor, so that when the default is changed with
-  // SetHighlightActor(), the currently displayed highlight can still be cleared.
-  mCurrentHighlightActor = highlight;
-  ScrollToSelf();
-  self.Add(highlight);
-  SetCurrentlyHighlightedActor(self);
-  EmitHighlighted(true);
-  RegisterPositionPropertyNotification();
-
-  return true;
-}
-
-bool AccessibleImpl::ClearHighlight()
-{
-  Dali::Actor self = Self();
-
-  if(!Dali::Accessibility::IsUp())
-  {
-    return false;
-  }
-
-  if(GetCurrentlyHighlightedActor() == self)
-  {
-    UnregisterPositionPropertyNotification();
-    self.Remove(mCurrentHighlightActor.GetHandle());
-    mCurrentHighlightActor = {};
-    SetCurrentlyHighlightedActor({});
-    EmitHighlighted(false);
-    return true;
-  }
-  return false;
-}
-
-std::string AccessibleImpl::GetActionName(size_t index)
-{
-  if(index >= GetActionCount())
-  {
-    return {};
-  }
-
-  Dali::TypeInfo type;
-  Self().GetTypeInfo(type);
-  DALI_ASSERT_ALWAYS(type && "no TypeInfo object");
-  return type.GetActionName(index);
-}
-
-std::string AccessibleImpl::GetLocalizedActionName(size_t index)
-{
-  return GetLocaleText(GetActionName(index));
-}
-
-std::string AccessibleImpl::GetActionDescription(size_t index)
-{
-  return {};
-}
-
-size_t AccessibleImpl::GetActionCount()
-{
-  Dali::TypeInfo type;
-  Self().GetTypeInfo(type);
-  DALI_ASSERT_ALWAYS(type && "no TypeInfo object");
-  return type.GetActionCount();
-}
-
-std::string AccessibleImpl::GetActionKeyBinding(size_t index)
-{
-  return {};
-}
-
-bool AccessibleImpl::DoAction(size_t index)
-{
-  std::string actionName = GetActionName(index);
-  return Self().DoAction(actionName, {});
-}
-
-bool AccessibleImpl::DoAction(const std::string& name)
-{
-  return Self().DoAction(name, {});
-}
-
-bool AccessibleImpl::DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo)
-{
-  auto control = Dali::Toolkit::Control::DownCast(Self());
-
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-
-  if(!controlImpl.mAccessibilityDoGestureSignal.Empty())
-  {
-    auto ret = std::make_pair(gestureInfo, false);
-    controlImpl.mAccessibilityDoGestureSignal.Emit(ret);
-    return ret.second;
-  }
-
-  return false;
-}
-
-std::vector<Dali::Accessibility::Relation> AccessibleImpl::GetRelationSet()
-{
-  auto control = Dali::Toolkit::Control::DownCast(Self());
-
-  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
-  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
-
-  std::vector<Dali::Accessibility::Relation> ret;
-
-  for(auto& relation : controlImpl.mAccessibilityRelations)
-  {
-    auto& targets = relation.second;
-
-    ret.emplace_back(Accessibility::Relation{relation.first, {}});
-
-    // Map every Accessible* to its Address
-    std::transform(targets.begin(), targets.end(), std::back_inserter(ret.back().targets), [](auto* x) {
-      return x->GetAddress();
-    });
-  }
-
-  return ret;
-}
-
-Dali::Actor AccessibleImpl::GetInternalActor()
-{
-  return Dali::Actor{};
-}
-
-bool AccessibleImpl::ScrollToChild(Actor child)
-{
-  return false;
-}
-
-Dali::Property::Index AccessibleImpl::GetNamePropertyIndex()
-{
-  return Actor::Property::NAME;
-}
-
-Dali::Property::Index AccessibleImpl::GetDescriptionPropertyIndex()
-{
-  return Dali::Property::INVALID_INDEX;
-}
-
-void AccessibleImpl::SetLastPosition(Vector2 position)
-{
-  mLastPosition = position;
-}
-
-Vector2 AccessibleImpl::GetLastPosition() const
-{
-  return mLastPosition;
-}
-
-} // namespace Dali::Toolkit::DevelControl
diff --git a/dali-toolkit/devel-api/controls/accessible-impl.h b/dali-toolkit/devel-api/controls/accessible-impl.h
deleted file mode 100644 (file)
index f1f62a7..0000000
+++ /dev/null
@@ -1,273 +0,0 @@
-#ifndef DALI_TOOLKIT_ACCESSIBLE_IMPL_H
-#define DALI_TOOLKIT_ACCESSIBLE_IMPL_H
-/*
- * Copyright (c) 2021 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.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-// EXTERNAL INCLUDES
-#include <dali/devel-api/adaptor-framework/accessibility.h>
-#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
-#include <dali/devel-api/atspi-interfaces/accessible.h>
-#include <dali/devel-api/atspi-interfaces/action.h>
-#include <dali/devel-api/atspi-interfaces/collection.h>
-#include <dali/devel-api/atspi-interfaces/component.h>
-#include <dali/public-api/object/weak-handle.h>
-
-// INTERNAL INCLUDES
-#include <dali-toolkit/public-api/dali-toolkit-common.h>
-
-namespace Dali::Toolkit::DevelControl {
-
-/**
- * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
- *
- * You can create a derived class (and register it using SetAccessibilityConstructor)
- * in order to customize Accessibility for a given control.
- *
- * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
- * @see Dali::Accessibility::Accessible
- * @see Dali::Accessibility::Component
- * @see Dali::Accessibility::Collection
- * @see Dali::Accessibility::Action
- * @see Dali::Accessibility::Value
- * @see Dali::Accessibility::Text
- * @see Dali::Accessibility::EditableText
- */
-struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible,
-                                         public virtual Dali::Accessibility::Component,
-                                         public virtual Dali::Accessibility::Collection,
-                                         public virtual Dali::Accessibility::Action
-{
-protected:
-  Vector2                       mLastPosition{0.0f, 0.0f};
-  Dali::WeakHandle<Dali::Actor> mSelf;
-  Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
-  bool mIsModal = false;
-  bool mIsRoot = false;
-
-  Dali::Actor Self() const
-  {
-    auto handle = mSelf.GetHandle();
-
-    // Control::Impl holds a std::unique_ptr to the Accessible object,
-    // so that one does not outlive the other.
-    DALI_ASSERT_ALWAYS(handle);
-
-    return handle;
-  }
-
-  void ScrollToSelf();
-
-  /**
-   * @brief Register property notification to check highlighted object position
-   */
-  void RegisterPositionPropertyNotification();
-
-  /**
-   * @brief Remove property notification added by RegisterPropertyNotification
-   */
-  void UnregisterPositionPropertyNotification();
-
-  /**
-   * @brief Check if the actor is showing
-   * @return True if the actor is showing
-   */
-  bool IsShowing();
-
-public:
-  AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetName()
-   */
-  std::string GetName() override;
-
-  /**
-   * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
-   */
-  virtual std::string GetNameRaw();
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetDescription()
-   */
-  std::string GetDescription() override;
-
-  /**
-   * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
-   */
-  virtual std::string GetDescriptionRaw();
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetParent()
-   */
-  Dali::Accessibility::Accessible* GetParent() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetChildCount()
-   */
-  size_t GetChildCount() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
-   */
-  Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
-   */
-  size_t GetIndexInParent() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetRole()
-   */
-  Dali::Accessibility::Role GetRole() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
-   */
-  std::string GetLocalizedRoleName() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetStates()
-   */
-  Dali::Accessibility::States GetStates() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetAttributes()
-   */
-  Dali::Accessibility::Attributes GetAttributes() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::GetExtents()
-   */
-  Dali::Rect<> GetExtents(Accessibility::CoordinateType type) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::GetLayer()
-   */
-  Dali::Accessibility::ComponentLayer GetLayer() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
-   */
-  int16_t GetMdiZOrder() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::GrabFocus()
-   */
-  bool GrabFocus() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::GetAlpha()
-   */
-  double GetAlpha() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::GrabHighlight()
-   */
-  bool GrabHighlight() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Component::ClearHighlight()
-   */
-  bool ClearHighlight() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::GetActionName()
-   */
-  std::string GetActionName(size_t index) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
-   */
-  std::string GetLocalizedActionName(size_t index) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::GetActionDescription()
-   */
-  std::string GetActionDescription(size_t index) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::GetActionCount()
-   */
-  size_t GetActionCount() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
-   */
-  std::string GetActionKeyBinding(size_t index) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::DoAction(size_t)
-   */
-  bool DoAction(size_t index) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
-   */
-  bool DoAction(const std::string& name) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::DoGesture()
-   */
-  bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
-   */
-  std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetInternalActor()
-   */
-  Dali::Actor GetInternalActor() override;
-
-  /**
-   * @copydoc Dali::Accessibility::Accessible::GetStates()
-   */
-  virtual Dali::Accessibility::States CalculateStates();
-
-  /**
-   * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible
-   * @return false if scrolling is not supported or child is already visible
-   */
-  virtual bool ScrollToChild(Actor child);
-
-  /**
-   * @brief Returns the index of the property that represents this actor's name
-   */
-  virtual Dali::Property::Index GetNamePropertyIndex();
-
-  /**
-   * @brief Returns the index of the property that represents this actor's description
-   */
-  virtual Dali::Property::Index GetDescriptionPropertyIndex();
-
-  /**
-   * @brief Sets last object position
-   * @param[in] position Last object position
-   */
-  void SetLastPosition(Vector2 position);
-
-  /**
-   * @brief Gets last object position
-   * @return The Last object position
-   */
-  Vector2 GetLastPosition() const;
-};
-
-} // namespace Dali::Toolkit::DevelControl
-
-#endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H
diff --git a/dali-toolkit/devel-api/controls/control-accessible.cpp b/dali-toolkit/devel-api/controls/control-accessible.cpp
new file mode 100644 (file)
index 0000000..7010a6c
--- /dev/null
@@ -0,0 +1,585 @@
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include "control-accessible.h"
+
+// EXTERNAL INCLUDES
+#ifdef DGETTEXT_ENABLED
+#include <libintl.h>
+#endif
+
+#include <dali/devel-api/actors/actor-devel.h>
+#include <dali/devel-api/adaptor-framework/window-devel.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/devel-api/asset-manager/asset-manager.h>
+#include <dali-toolkit/internal/controls/control/control-data-impl.h>
+#include <dali-toolkit/public-api/controls/control-impl.h>
+#include <dali-toolkit/public-api/controls/control.h>
+#include <dali-toolkit/public-api/controls/image-view/image-view.h>
+#include <dali-toolkit/public-api/focus-manager/keyboard-focus-manager.h>
+
+namespace Dali::Toolkit::DevelControl
+{
+namespace
+{
+static std::string GetLocaleText(std::string string, const char *domain = "dali-toolkit")
+{
+#ifdef DGETTEXT_ENABLED
+    /*TODO: currently non-localized string is used as a key for translation lookup. In case the lookup key formatting is forced
+          consider calling utility function for converting non-localized string into well-formatted key before lookup. */
+    return dgettext(domain, string.c_str());
+#else
+    return string;
+#endif
+}
+
+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
+  auto actor = Toolkit::ImageView::New(focusBorderImagePath);
+  actor.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
+
+  DevelControl::AppendAccessibilityAttribute(actor, "highlight", std::string());
+  actor.SetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE, false);
+
+  return actor;
+}
+} // unnamed namespace
+
+ControlAccessible::ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal)
+: mSelf(self),
+  mIsModal(modal)
+{
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  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 ControlAccessible::GetName() const
+{
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+  std::string name;
+
+  if(!controlImpl.mAccessibilityGetNameSignal.Empty())
+  {
+    controlImpl.mAccessibilityGetNameSignal.Emit(name);
+  }
+  else if(controlImpl.mAccessibilityNameSet)
+  {
+    name = controlImpl.mAccessibilityName;
+  }
+  else if(auto raw = GetNameRaw(); !raw.empty())
+  {
+    name = raw;
+  }
+  else
+  {
+    name = Self().GetProperty<std::string>(Actor::Property::NAME);
+  }
+
+  if(controlImpl.mAccessibilityTranslationDomainSet)
+  {
+    return GetLocaleText(name, controlImpl.mAccessibilityTranslationDomain.c_str());
+  }
+
+  return GetLocaleText(name);
+}
+
+std::string ControlAccessible::GetNameRaw() const
+{
+  return {};
+}
+
+std::string ControlAccessible::GetDescription() const
+{
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+  std::string description;
+
+  if(!controlImpl.mAccessibilityGetDescriptionSignal.Empty())
+  {
+    controlImpl.mAccessibilityGetDescriptionSignal.Emit(description);
+  }
+  else if(controlImpl.mAccessibilityDescriptionSet)
+  {
+    description = controlImpl.mAccessibilityDescription;
+  }
+  else
+  {
+    description = GetDescriptionRaw();
+  }
+  if(controlImpl.mAccessibilityTranslationDomainSet)
+  {
+    return GetLocaleText(description, controlImpl.mAccessibilityTranslationDomain.c_str());
+  }
+
+  return GetLocaleText(description);
+}
+
+std::string ControlAccessible::GetDescriptionRaw() const
+{
+  return {};
+}
+
+Dali::Accessibility::Accessible* ControlAccessible::GetParent()
+{
+  return Dali::Accessibility::Accessible::Get(Self().GetParent());
+}
+
+size_t ControlAccessible::GetChildCount() const
+{
+  return Self().GetChildCount();
+}
+
+Dali::Accessibility::Accessible* ControlAccessible::GetChildAtIndex(size_t index)
+{
+  return Dali::Accessibility::Accessible::Get(Self().GetChildAt(static_cast<unsigned int>(index)));
+}
+
+size_t ControlAccessible::GetIndexInParent()
+{
+  auto self = Self();
+  auto parent = self.GetParent();
+  DALI_ASSERT_ALWAYS(parent && "can't call GetIndexInParent on object without parent");
+
+  auto count = parent.GetChildCount();
+  for(auto i = 0u; i < count; ++i)
+  {
+    auto child = parent.GetChildAt(i);
+    if(child == self)
+    {
+      return i;
+    }
+  }
+  DALI_ASSERT_ALWAYS(false && "object isn't child of it's parent");
+  return static_cast<size_t>(-1);
+}
+
+Dali::Accessibility::Role ControlAccessible::GetRole() const
+{
+  return Self().GetProperty<Dali::Accessibility::Role>(Toolkit::DevelControl::Property::ACCESSIBILITY_ROLE);
+}
+
+std::string ControlAccessible::GetLocalizedRoleName() const
+{
+  return GetLocaleText(GetRoleName());
+}
+
+bool ControlAccessible::IsShowing()
+{
+  Dali::Actor self = Self();
+  if(!self.GetProperty<bool>(Actor::Property::VISIBLE) || self.GetProperty<Vector4>(Actor::Property::WORLD_COLOR).a == 0 || self.GetProperty<bool>(Dali::DevelActor::Property::CULLED))
+  {
+    return false;
+  }
+
+  auto* child  = this;
+  auto* parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(child->GetParent());
+  if(!parent)
+  {
+    return true;
+  }
+
+  auto childExtent = child->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+  while(parent)
+  {
+    auto control      = Dali::Toolkit::Control::DownCast(parent->Self());
+    if(!control.GetProperty<bool>(Actor::Property::VISIBLE))
+    {
+      return false;
+    }
+    auto clipMode     = control.GetProperty(Actor::Property::CLIPPING_MODE).Get<bool>();
+    auto parentExtent = parent->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+    if ((clipMode != ClippingMode::DISABLED) && !parentExtent.Intersects(childExtent))
+    {
+      return false;
+    }
+    parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(parent->GetParent());
+  }
+
+  return true;
+}
+
+Dali::Accessibility::States ControlAccessible::CalculateStates()
+{
+  Dali::Actor self = Self();
+  Dali::Accessibility::States state;
+  state[Dali::Accessibility::State::FOCUSABLE] = self.GetProperty<bool>(Actor::Property::KEYBOARD_FOCUSABLE);
+  state[Dali::Accessibility::State::FOCUSED]   = Toolkit::KeyboardFocusManager::Get().GetCurrentFocusActor() == self;
+
+  if(self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).GetType() == Dali::Property::NONE)
+  {
+    state[Dali::Accessibility::State::HIGHLIGHTABLE] = false;
+  }
+  else
+  {
+    state[Dali::Accessibility::State::HIGHLIGHTABLE] = self.GetProperty(Toolkit::DevelControl::Property::ACCESSIBILITY_HIGHLIGHTABLE).Get<bool>();
+  }
+
+  state[Dali::Accessibility::State::HIGHLIGHTED] = GetCurrentlyHighlightedActor() == self;
+  state[Dali::Accessibility::State::ENABLED]     = true;
+  state[Dali::Accessibility::State::SENSITIVE]   = true;
+  state[Dali::Accessibility::State::VISIBLE]     = self.GetProperty<bool>(Actor::Property::VISIBLE);
+
+  if(mIsModal)
+  {
+    state[Dali::Accessibility::State::MODAL] = true;
+  }
+  state[Dali::Accessibility::State::SHOWING] = IsShowing();
+  state[Dali::Accessibility::State::DEFUNCT] = !self.GetProperty(Dali::DevelActor::Property::CONNECTED_TO_SCENE).Get<bool>();
+  return state;
+}
+
+Dali::Accessibility::States ControlAccessible::GetStates()
+{
+  return CalculateStates();
+}
+
+Dali::Accessibility::Attributes ControlAccessible::GetAttributes() const
+{
+  std::unordered_map<std::string, std::string> attributeMap;
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+  auto attribute = control.GetProperty(Dali::Toolkit::DevelControl::Property::ACCESSIBILITY_ATTRIBUTES);
+  auto map = attribute.GetMap();
+
+  if(map)
+  {
+    auto mapSize = map->Count();
+
+    for(unsigned int i = 0; i < mapSize; i++)
+    {
+      auto mapKey = map->GetKeyAt(i);
+      if(mapKey.type == Dali::Property::Key::STRING)
+      {
+        std::string mapValue;
+        if(map->GetValue(i).Get(mapValue))
+        {
+          attributeMap.emplace(std::move(mapKey.stringKey), std::move(mapValue));
+        }
+      }
+    }
+  }
+
+  return attributeMap;
+}
+
+Dali::Accessibility::ComponentLayer ControlAccessible::GetLayer() const
+{
+  return Dali::Accessibility::ComponentLayer::WINDOW;
+}
+
+Dali::Rect<> ControlAccessible::GetExtents(Dali::Accessibility::CoordinateType type) const
+{
+  Dali::Actor self = Self();
+
+  Vector2 screenPosition = self.GetProperty(Dali::DevelActor::Property::SCREEN_POSITION).Get<Vector2>();
+  auto size = self.GetCurrentProperty<Vector3>(Actor::Property::SIZE) * self.GetCurrentProperty<Vector3>(Actor::Property::WORLD_SCALE);
+  bool positionUsesAnchorPoint = self.GetProperty(Dali::DevelActor::Property::POSITION_USES_ANCHOR_POINT).Get<bool>();
+  Vector3 anchorPointOffSet = size * (positionUsesAnchorPoint ? self.GetCurrentProperty<Vector3>(Actor::Property::ANCHOR_POINT) : AnchorPoint::TOP_LEFT);
+  Vector2 position = Vector2((screenPosition.x - anchorPointOffSet.x), (screenPosition.y - anchorPointOffSet.y));
+
+  if(type == Dali::Accessibility::CoordinateType::WINDOW)
+  {
+    return {position.x, position.y, size.x, size.y};
+  }
+  else // Dali::Accessibility::CoordinateType::SCREEN
+  {
+    auto window = Dali::DevelWindow::Get(self);
+    auto windowPosition = window.GetPosition();
+    return {position.x + windowPosition.GetX(), position.y + windowPosition.GetY(), size.x, size.y};
+  }
+}
+
+int16_t ControlAccessible::GetMdiZOrder() const
+{
+  return 0;
+}
+
+double ControlAccessible::GetAlpha() const
+{
+  return 0;
+}
+
+bool ControlAccessible::GrabFocus()
+{
+  return Toolkit::KeyboardFocusManager::Get().SetCurrentFocusActor(Self());
+}
+
+void ControlAccessible::ScrollToSelf()
+{
+  auto* child = this;
+  auto* parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(child->GetParent());
+
+  while (parent)
+  {
+    if (parent->IsScrollable())
+    {
+      parent->ScrollToChild(child->Self());
+    }
+
+    parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(parent->GetParent());
+  }
+}
+
+void ControlAccessible::RegisterPositionPropertyNotification()
+{
+  auto                     control         = Dali::Toolkit::Control::DownCast(Self());
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+  controlImpl.RegisterAccessibilityPositionPropertyNotification();
+}
+
+void ControlAccessible::UnregisterPositionPropertyNotification()
+{
+  auto                     control         = Dali::Toolkit::Control::DownCast(Self());
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+  controlImpl.UnregisterAccessibilityPositionPropertyNotification();
+}
+
+bool ControlAccessible::GrabHighlight()
+{
+  Dali::Actor self = Self();
+  auto oldHighlightedActor = GetCurrentlyHighlightedActor();
+
+  if(!Dali::Accessibility::IsUp())
+  {
+    return false;
+  }
+
+  if(self == oldHighlightedActor)
+  {
+    return true;
+  }
+
+  // Clear the old highlight.
+  if(oldHighlightedActor)
+  {
+    auto oldHighlightObject = dynamic_cast<Dali::Accessibility::Component*>(Internal::Control::Impl::GetAccessibilityObject(oldHighlightedActor));
+    if(oldHighlightObject)
+    {
+      oldHighlightObject->ClearHighlight();
+    }
+  }
+
+  auto highlight = GetHighlightActor();
+  if(!highlight)
+  {
+    highlight = CreateHighlightIndicatorActor();
+    SetHighlightActor(highlight);
+  }
+
+  highlight.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT);
+  highlight.SetProperty(Actor::Property::POSITION_Z, 1.0f);
+  highlight.SetProperty(Actor::Property::POSITION, Vector2(0.0f, 0.0f));
+
+  // Need to set resize policy again, to update SIZE property which is set by
+  // NUIViewAccessible. The highlight could move from NUIViewAccessible to
+  // ControlAccessible. In this case, highlight has incorrect size.
+  highlight.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
+
+  // Remember the highlight actor, so that when the default is changed with
+  // SetHighlightActor(), the currently displayed highlight can still be cleared.
+  mCurrentHighlightActor = highlight;
+  ScrollToSelf();
+  self.Add(highlight);
+  SetCurrentlyHighlightedActor(self);
+  EmitHighlighted(true);
+  RegisterPositionPropertyNotification();
+
+  return true;
+}
+
+bool ControlAccessible::ClearHighlight()
+{
+  Dali::Actor self = Self();
+
+  if(!Dali::Accessibility::IsUp())
+  {
+    return false;
+  }
+
+  if(GetCurrentlyHighlightedActor() == self)
+  {
+    UnregisterPositionPropertyNotification();
+    self.Remove(mCurrentHighlightActor.GetHandle());
+    mCurrentHighlightActor = {};
+    SetCurrentlyHighlightedActor({});
+    EmitHighlighted(false);
+    return true;
+  }
+  return false;
+}
+
+std::string ControlAccessible::GetActionName(size_t index) const
+{
+  if(index >= GetActionCount())
+  {
+    return {};
+  }
+
+  Dali::TypeInfo type;
+  Self().GetTypeInfo(type);
+  DALI_ASSERT_ALWAYS(type && "no TypeInfo object");
+  return type.GetActionName(index);
+}
+
+std::string ControlAccessible::GetLocalizedActionName(size_t index) const
+{
+  return GetLocaleText(GetActionName(index));
+}
+
+std::string ControlAccessible::GetActionDescription(size_t index) const
+{
+  return {};
+}
+
+size_t ControlAccessible::GetActionCount() const
+{
+  Dali::TypeInfo type;
+  Self().GetTypeInfo(type);
+  DALI_ASSERT_ALWAYS(type && "no TypeInfo object");
+  return type.GetActionCount();
+}
+
+std::string ControlAccessible::GetActionKeyBinding(size_t index) const
+{
+  return {};
+}
+
+bool ControlAccessible::DoAction(size_t index)
+{
+  std::string actionName = GetActionName(index);
+  return Self().DoAction(actionName, {});
+}
+
+bool ControlAccessible::DoAction(const std::string& name)
+{
+  return Self().DoAction(name, {});
+}
+
+bool ControlAccessible::DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo)
+{
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+
+  if(!controlImpl.mAccessibilityDoGestureSignal.Empty())
+  {
+    auto ret = std::make_pair(gestureInfo, false);
+    controlImpl.mAccessibilityDoGestureSignal.Emit(ret);
+    return ret.second;
+  }
+
+  return false;
+}
+
+std::vector<Dali::Accessibility::Relation> ControlAccessible::GetRelationSet()
+{
+  auto control = Dali::Toolkit::Control::DownCast(Self());
+
+  Internal::Control&       internalControl = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlImpl     = Internal::Control::Impl::Get(internalControl);
+
+  std::vector<Dali::Accessibility::Relation> ret;
+
+  for(auto& relation : controlImpl.mAccessibilityRelations)
+  {
+    auto& targets = relation.second;
+
+    ret.emplace_back(Accessibility::Relation{relation.first, {}});
+
+    // Map every Accessible* to its Address
+    std::transform(targets.begin(), targets.end(), std::back_inserter(ret.back().targets), [](auto* x) {
+      return x->GetAddress();
+    });
+  }
+
+  return ret;
+}
+
+Dali::Actor ControlAccessible::GetInternalActor()
+{
+  return Dali::Actor{};
+}
+
+bool ControlAccessible::ScrollToChild(Actor child)
+{
+  return false;
+}
+
+Dali::Property::Index ControlAccessible::GetNamePropertyIndex()
+{
+  return Actor::Property::NAME;
+}
+
+Dali::Property::Index ControlAccessible::GetDescriptionPropertyIndex()
+{
+  return Dali::Property::INVALID_INDEX;
+}
+
+void ControlAccessible::SetLastPosition(Vector2 position)
+{
+  mLastPosition = position;
+}
+
+Vector2 ControlAccessible::GetLastPosition() const
+{
+  return mLastPosition;
+}
+
+} // namespace Dali::Toolkit::DevelControl
diff --git a/dali-toolkit/devel-api/controls/control-accessible.h b/dali-toolkit/devel-api/controls/control-accessible.h
new file mode 100644 (file)
index 0000000..5e576fd
--- /dev/null
@@ -0,0 +1,275 @@
+#ifndef DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
+#define DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
+
+/*
+ * Copyright (c) 2021 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/accessibility.h>
+#include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
+#include <dali/devel-api/atspi-interfaces/accessible.h>
+#include <dali/devel-api/atspi-interfaces/action.h>
+#include <dali/devel-api/atspi-interfaces/collection.h>
+#include <dali/devel-api/atspi-interfaces/component.h>
+#include <dali/public-api/object/weak-handle.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/dali-toolkit-common.h>
+
+namespace Dali::Toolkit::DevelControl {
+
+/**
+ * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
+ *
+ * You can create a derived class (and register it using SetAccessibilityConstructor)
+ * in order to customize Accessibility for a given control.
+ *
+ * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
+ * @see Dali::Accessibility::Accessible
+ * @see Dali::Accessibility::Component
+ * @see Dali::Accessibility::Collection
+ * @see Dali::Accessibility::Action
+ * @see Dali::Accessibility::Value
+ * @see Dali::Accessibility::Text
+ * @see Dali::Accessibility::EditableText
+ */
+struct DALI_TOOLKIT_API ControlAccessible : public virtual Dali::Accessibility::Accessible,
+                                            public virtual Dali::Accessibility::Component,
+                                            public virtual Dali::Accessibility::Collection,
+                                            public virtual Dali::Accessibility::Action
+{
+protected:
+  Vector2                       mLastPosition{0.0f, 0.0f};
+  Dali::WeakHandle<Dali::Actor> mSelf;
+  Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
+  bool mIsModal = false;
+  bool mIsRoot = false;
+
+  Dali::Actor Self() const
+  {
+    auto handle = mSelf.GetHandle();
+
+    // Control::Impl holds a std::unique_ptr to the Accessible object,
+    // so that one does not outlive the other.
+    DALI_ASSERT_ALWAYS(handle);
+
+    return handle;
+  }
+
+  void ScrollToSelf();
+
+  /**
+   * @brief Register property notification to check highlighted object position
+   */
+  void RegisterPositionPropertyNotification();
+
+  /**
+   * @brief Remove property notification added by RegisterPropertyNotification
+   */
+  void UnregisterPositionPropertyNotification();
+
+  /**
+   * @brief Check if the actor is showing
+   * @return True if the actor is showing
+   */
+  bool IsShowing();
+
+public:
+  ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetName()
+   */
+  std::string GetName() const override;
+
+  /**
+   * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
+   */
+  virtual std::string GetNameRaw() const;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetDescription()
+   */
+  std::string GetDescription() const override;
+
+  /**
+   * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
+   */
+  virtual std::string GetDescriptionRaw() const;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetParent()
+   */
+  Dali::Accessibility::Accessible* GetParent() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetChildCount()
+   */
+  size_t GetChildCount() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
+   */
+  Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
+   */
+  size_t GetIndexInParent() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetRole()
+   */
+  Dali::Accessibility::Role GetRole() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
+   */
+  std::string GetLocalizedRoleName() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetStates()
+   */
+  Dali::Accessibility::States GetStates() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetAttributes()
+   */
+  Dali::Accessibility::Attributes GetAttributes() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::GetExtents()
+   */
+  Dali::Rect<> GetExtents(Accessibility::CoordinateType type) const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::GetLayer()
+   */
+  Dali::Accessibility::ComponentLayer GetLayer() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
+   */
+  int16_t GetMdiZOrder() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::GrabFocus()
+   */
+  bool GrabFocus() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::GetAlpha()
+   */
+  double GetAlpha() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::GrabHighlight()
+   */
+  bool GrabHighlight() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Component::ClearHighlight()
+   */
+  bool ClearHighlight() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::GetActionName()
+   */
+  std::string GetActionName(size_t index) const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
+   */
+  std::string GetLocalizedActionName(size_t index) const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::GetActionDescription()
+   */
+  std::string GetActionDescription(size_t index) const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::GetActionCount()
+   */
+  size_t GetActionCount() const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
+   */
+  std::string GetActionKeyBinding(size_t index) const override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::DoAction(std::size_t)
+   */
+  bool DoAction(size_t index) override;
+
+  /**
+   * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
+   */
+  bool DoAction(const std::string& name) override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::DoGesture()
+   */
+  bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
+   */
+  std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetInternalActor()
+   */
+  Dali::Actor GetInternalActor() override;
+
+  /**
+   * @copydoc Dali::Accessibility::Accessible::GetStates()
+   */
+  virtual Dali::Accessibility::States CalculateStates();
+
+  /**
+   * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible
+   * @return false if scrolling is not supported or child is already visible
+   */
+  virtual bool ScrollToChild(Actor child);
+
+  /**
+   * @brief Returns the index of the property that represents this actor's name
+   */
+  virtual Dali::Property::Index GetNamePropertyIndex();
+
+  /**
+   * @brief Returns the index of the property that represents this actor's description
+   */
+  virtual Dali::Property::Index GetDescriptionPropertyIndex();
+
+  /**
+   * @brief Sets last object position
+   * @param[in] position Last object position
+   */
+  void SetLastPosition(Vector2 position);
+
+  /**
+   * @brief Gets last object position
+   * @return The Last object position
+   */
+  Vector2 GetLastPosition() const;
+};
+
+} // namespace Dali::Toolkit::DevelControl
+
+#endif // DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
index 00ff6a0e3a127486848ac51575f52e6eebad8f99..5d276cbbb3ccaa3cf413f687589fa44576960226 100644 (file)
@@ -24,7 +24,7 @@
 #include <dali/public-api/animation/time-period.h>
 
 // INTERNAL INCLUDES
-#include <dali-toolkit/devel-api/controls/accessible-impl.h>
+#include <dali-toolkit/devel-api/controls/control-accessible.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
 #include <dali-toolkit/public-api/controls/control.h>
 
@@ -563,7 +563,7 @@ DALI_TOOLKIT_API void NotifyAccessibilityStateChange(Dali::Actor control, Dali::
  * @code
  *   SetAccessibilityConstructor( []( Dali::Actor actor ) {
        return std::unique_ptr< Dali::Accessibility::Accessible >(
-       new AccessibleImpl( actor, Dali::Accessibility::Role::DIALOG, true ) );
+       new ControlAccessible( actor, Dali::Accessibility::Role::DIALOG, true ) );
       } );
   * @endcode
   *
index 3a40bc9634cd422b0d4394a8ba58a9286e204b60..cc5abef21c258e315b98c655986303222a6423f3 100755 (executable)
@@ -9,8 +9,8 @@ SET( devel_api_src_files
   ${devel_api_src_dir}/builder/builder.cpp
   ${devel_api_src_dir}/builder/json-parser.cpp
   ${devel_api_src_dir}/builder/tree-node.cpp
-  ${devel_api_src_dir}/controls/accessible-impl.cpp
   ${devel_api_src_dir}/controls/canvas-view/canvas-view.cpp
+  ${devel_api_src_dir}/controls/control-accessible.cpp
   ${devel_api_src_dir}/controls/control-devel.cpp
   ${devel_api_src_dir}/controls/control-wrapper.cpp
   ${devel_api_src_dir}/controls/control-wrapper-impl.cpp
@@ -86,8 +86,8 @@ SET( devel_api_accessibility-manager_header_files
 )
 
 SET( devel_api_controls_header_files
-  ${devel_api_src_dir}/controls/accessible-impl.h
   ${devel_api_src_dir}/controls/canvas-view/canvas-view.h
+  ${devel_api_src_dir}/controls/control-accessible.h
   ${devel_api_src_dir}/controls/control-depth-index-ranges.h
   ${devel_api_src_dir}/controls/control-devel.h
   ${devel_api_src_dir}/controls/control-wrapper.h
index 1c2271c4bc7344d99aedd161b8b16d399ac11348..d9b3b4dbcc57d175582ed90479cf361a3b907263 100644 (file)
@@ -189,7 +189,7 @@ void Alignment::OnInitialize()
 {
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index 55259db2cee691d82b73fd41202d3905e39d41f4..5ed17c8d64f9fa02a88cd447fbc7db843bdd533a 100644 (file)
@@ -219,7 +219,7 @@ void BloomView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::ANIMATION));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::ANIMATION));
   });
 }
 
index 7ff5875b77012f3fc2f90d1a6f1d3320a999bb0c..7fb1ab8294da7f644a6083aa6f3e17a0ce9fbdc6 100644 (file)
@@ -1303,7 +1303,7 @@ Padding Button::GetForegroundPadding()
   return mForegroundPadding;
 }
 
-std::string Button::AccessibleImpl::GetNameRaw()
+std::string Button::AccessibleImpl::GetNameRaw() const
 {
   std::string   labelText;
   auto          slf      = Toolkit::Button::DownCast(Self());
@@ -1335,7 +1335,7 @@ Property::Index Button::AccessibleImpl::GetNamePropertyIndex()
 
 Dali::Accessibility::States Button::AccessibleImpl::CalculateStates()
 {
-  auto tmp                                    = DevelControl::AccessibleImpl::CalculateStates();
+  auto tmp                                    = DevelControl::ControlAccessible::CalculateStates();
   tmp[Dali::Accessibility::State::SELECTABLE] = true;
   auto slf                                    = Toolkit::Button::DownCast(Self());
   tmp[Dali::Accessibility::State::ENABLED]    = !slf.GetProperty<bool>(Toolkit::Button::Property::DISABLED);
index ced51fde93a6bd4e1a95312d0865eb22d1656841..3e36873403f180602b7c6af9ff31f22e7ca87eec 100644 (file)
@@ -535,12 +535,12 @@ private:
   bool mClickActionPerforming; ///< Used to manage signal emissions during action
 
 protected:
-  struct AccessibleImpl : public DevelControl::AccessibleImpl
+  struct AccessibleImpl : public DevelControl::ControlAccessible
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
 
     Dali::Accessibility::States CalculateStates() override;
-    std::string                 GetNameRaw() override;
+    std::string                 GetNameRaw() const override;
     Property::Index             GetNamePropertyIndex() override;
   };
 };
index 1697b20e4f06e09f7ea5490ed6bc305597e94190..3010e694b90be2d0bd4e9173df67b016613a2be2 100644 (file)
@@ -383,7 +383,7 @@ Dali::Accessibility::States ToggleButton::AccessibleImpl::CalculateStates()
   return states;
 }
 
-std::string ToggleButton::AccessibleImpl::GetDescriptionRaw()
+std::string ToggleButton::AccessibleImpl::GetDescriptionRaw() const
 {
   auto button   = Toolkit::ToggleButton::DownCast(Self());
   auto index    = button.GetProperty<int>(Toolkit::ToggleButton::Property::CURRENT_STATE_INDEX);
index 322285b1dcf0d87fba8b2b3b7ddef60dd81fbb09..6629d404ac06040a62f9b476050134949816b801 100644 (file)
@@ -158,7 +158,7 @@ protected:
     using Button::AccessibleImpl::AccessibleImpl;
 
     Dali::Accessibility::States CalculateStates() override;
-    std::string                 GetDescriptionRaw() override;
+    std::string                 GetDescriptionRaw() const override;
     Property::Index             GetDescriptionPropertyIndex() override;
   };
   void OnStateChange(State newState) override;
index e8fefbf474ddaedaa5148e231e925e0c0d474860..6ec6fc996e0e67c910bf5622b63b631ba1a28492 100644 (file)
@@ -99,7 +99,7 @@ void CanvasView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE));
   });
 
   Adaptor::Get().RegisterProcessor(*this, true);
index 4aecc292a88109b93e57d03e6d66d864035793ca..a476ecae4597998195fbccecfea852ee5e9dde3c 100644 (file)
@@ -411,11 +411,11 @@ void SetVisualsOffScene(const RegisteredVisualContainer& container, Actor parent
   }
 }
 
-Dali::Rect<> GetShowingGeometry(Dali::Rect<> rect, Dali::Toolkit::DevelControl::AccessibleImpl* accessibleImpl)
+Dali::Rect<> GetShowingGeometry(Dali::Rect<> rect, Dali::Toolkit::DevelControl::ControlAccessible* accessible)
 {
   Rect<>  parentRect;
   Vector2 currentPosition;
-  auto    parent = dynamic_cast<Toolkit::DevelControl::AccessibleImpl*>(accessibleImpl->GetParent());
+  auto    parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(accessible->GetParent());
 
   while(parent)
   {
@@ -434,7 +434,7 @@ Dali::Rect<> GetShowingGeometry(Dali::Rect<> rect, Dali::Toolkit::DevelControl::
       return rect;
     }
 
-    parent = dynamic_cast<Toolkit::DevelControl::AccessibleImpl*>(parent->GetParent());
+    parent = dynamic_cast<Toolkit::DevelControl::ControlAccessible*>(parent->GetParent());
   }
 
   return rect;
@@ -513,7 +513,7 @@ Control::Impl::Impl(Control& controlImpl)
     });
 
   mAccessibilityConstructor = [](Dali::Actor actor) -> std::unique_ptr<Dali::Accessibility::Accessible> {
-    return std::unique_ptr<Dali::Accessibility::Accessible>(new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::UNKNOWN));
+    return std::unique_ptr<Dali::Accessibility::Accessible>(new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::UNKNOWN));
   };
 }
 
@@ -551,16 +551,16 @@ const Control::Impl& Control::Impl::Get(const Internal::Control& internalControl
 
 void Control::Impl::CheckHighlightedObjectGeometry()
 {
-  auto accessibleImpl = dynamic_cast<Dali::Toolkit::DevelControl::AccessibleImpl*>(mAccessibilityObject.get());
-  if(!accessibleImpl)
+  auto accessible = dynamic_cast<Dali::Toolkit::DevelControl::ControlAccessible*>(mAccessibilityObject.get());
+  if(!accessible)
   {
-    DALI_LOG_ERROR("accessibleImpl is not a pointer to a DevelControl::AccessibleImpl type");
+    DALI_LOG_ERROR("accessible is not a pointer to a DevelControl::ControlAccessible type");
     return;
   }
 
-  auto lastPosition   = accessibleImpl->GetLastPosition();
-  auto accessibleRect = accessibleImpl->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
-  auto rect = GetShowingGeometry(accessibleRect, accessibleImpl);
+  auto lastPosition   = accessible->GetLastPosition();
+  auto accessibleRect = accessible->GetExtents(Dali::Accessibility::CoordinateType::WINDOW);
+  auto rect = GetShowingGeometry(accessibleRect, accessible);
 
   switch(mAccessibilityLastScreenRelativeMoveType)
   {
@@ -608,7 +608,7 @@ void Control::Impl::CheckHighlightedObjectGeometry()
     }
   }
 
-  accessibleImpl->SetLastPosition(Vector2(accessibleRect.x, accessibleRect.y));
+  accessible->SetLastPosition(Vector2(accessibleRect.x, accessibleRect.y));
 }
 
 void Control::Impl::RegisterAccessibilityPositionPropertyNotification()
index c81be411455fee654157f010c293b0dff5009610..e616e52b32654bede8e0602a197decb7bac60d88 100644 (file)
@@ -71,7 +71,7 @@ typedef Dali::OwnerContainer<RegisteredVisual*> RegisteredVisualContainer;
  */
 class Control::Impl : public ConnectionTracker, public Visual::EventObserver
 {
-  friend class Toolkit::DevelControl::AccessibleImpl;
+  friend class Toolkit::DevelControl::ControlAccessible;
 
 public:
   /**
index 88fa83f3446d97aeb6a90ad17dbbe5505bf286ec..0f3e141cf4237ad924c0cf4308dc4aa77aa92cd9 100644 (file)
@@ -236,7 +236,7 @@ void EffectsView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index 4a3b065e3e76eacf38955d2ae301db9c145f813f..964afe214fb6b28d943077511976189e27342ac8 100644 (file)
@@ -837,7 +837,7 @@ void FlexContainer::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index 29d36b1e9bb21d88998aef37e9f07315c8cc8d35..64d5ecb5167caa8c720163822136069dbe28e374 100644 (file)
@@ -297,7 +297,7 @@ void GaussianBlurView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index 1a653a13477e6cc79e2a6635a27280dd32012b0e..c29988655479096ebf4c4c94552e333572efde66 100644 (file)
@@ -96,7 +96,7 @@ void ImageView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE));
   });
 }
 
index e37a53430e27700f4aeec14fa22866ddaed1d670..c4e8ce2bcd99c7c7b9192b315d61e2c1c596230a 100644 (file)
@@ -220,7 +220,7 @@ void Magnifier::Initialize()
 
   DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index f9bf49110fcbbcf23cfec897259f4c8bf2a86188..b9ee8734f91cf714e9e73c61f20683b9370db7ca 100644 (file)
@@ -282,7 +282,7 @@ void Model3dView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::IMAGE));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::IMAGE));
   });
 }
 
index 3dd690938e9c235c2ba8ba4d2713fe0aca277f42..9eab2906bea941c83706e2ceccb55cb6df0a111b 100644 (file)
@@ -72,7 +72,7 @@ void NavigationView::OnInitialize()
 {
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index d74574ce2e5b006a40ce1e2ded96ce583fa3be78..69369de7b86701d79e6d17443060688d8ae65b6e 100644 (file)
@@ -416,7 +416,7 @@ void PageTurnView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::PAGE_TAB_LIST));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::PAGE_TAB_LIST));
   });
 }
 
index 9abcfe01187b170f2fb80d76fe5459d4a03fefc9..5331e74f74f94ee40b5efcef56197d0edc727934 100644 (file)
@@ -1994,7 +1994,7 @@ void Popup::SetupTouch()
   }
 }
 
-std::string Popup::AccessibleImpl::GetNameRaw()
+std::string Popup::AccessibleImpl::GetNameRaw() const
 {
   auto        popup = Toolkit::Popup::DownCast(Self());
   std::string title;
@@ -2018,7 +2018,7 @@ std::string Popup::AccessibleImpl::GetNameRaw()
 
 Dali::Accessibility::States Popup::AccessibleImpl::CalculateStates()
 {
-  auto states       = DevelControl::AccessibleImpl::CalculateStates();
+  auto states       = DevelControl::ControlAccessible::CalculateStates();
   auto popup        = Toolkit::Popup::DownCast(Self());
   auto displayState = popup.GetProperty<std::string>(Toolkit::Popup::Property::DISPLAY_STATE);
 
index 630caa8763fe8736df87cf1ed4c87d575690adae..50a2fd6f1b50d88c025beabc6c0e9a86ec512df3 100644 (file)
@@ -241,11 +241,11 @@ public:
   static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex);
 
 protected:
-  struct AccessibleImpl : public DevelControl::AccessibleImpl
+  struct AccessibleImpl : public DevelControl::ControlAccessible
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
 
-    std::string                 GetNameRaw() override;
+    std::string                 GetNameRaw() const override;
     Dali::Accessibility::States CalculateStates() override;
   };
 
index 100630734b3fccc595d4d9369a822ba01340417f..1a243a25f87e691677b0f1487308469ad6782c48 100644 (file)
@@ -676,18 +676,18 @@ void ProgressBar::OnSceneConnection(int depth)
   }
 }
 
-double ProgressBar::AccessibleImpl::GetMinimum()
+double ProgressBar::AccessibleImpl::GetMinimum() const
 {
   return DEFAULT_LOWER_BOUND;
 }
 
-double ProgressBar::AccessibleImpl::GetCurrent()
+double ProgressBar::AccessibleImpl::GetCurrent() const
 {
   auto self = Toolkit::ProgressBar::DownCast(Self());
   return self.GetProperty(Toolkit::ProgressBar::Property::PROGRESS_VALUE).Get<float>();
 }
 
-double ProgressBar::AccessibleImpl::GetMaximum()
+double ProgressBar::AccessibleImpl::GetMaximum() const
 {
   return DEFAULT_UPPER_BOUND;
 }
@@ -704,7 +704,7 @@ bool ProgressBar::AccessibleImpl::SetCurrent(double current)
   return true;
 }
 
-double ProgressBar::AccessibleImpl::GetMinimumIncrement()
+double ProgressBar::AccessibleImpl::GetMinimumIncrement() const
 {
   return 0.0;
 }
index c6729bb04606a0e4dde93c7d8325af4a1bd44c93..96540d2e06100886970fb060cb22d826a971c87f 100644 (file)
@@ -265,15 +265,16 @@ private:
   Property::Map           mSecondaryProgressVisualMap;    ///< To backup visual properties when switching determinate/indeterminate.
 
 protected:
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::Value
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
-    double GetMinimum() override;
-    double GetCurrent() override;
-    double GetMaximum() override;
+    using DevelControl::ControlAccessible::ControlAccessible;
+
+    double GetMinimum() const override;
+    double GetCurrent() const override;
+    double GetMaximum() const override;
     bool   SetCurrent(double) override;
-    double GetMinimumIncrement() override;
+    double GetMinimumIncrement() const override;
   };
 };
 
index 1da42973a0623254045d2b87c5adcc9b0d2efa7c..1fef71b5041052964f39695c658d9b7b78fa9545 100644 (file)
@@ -861,21 +861,21 @@ Toolkit::ScrollBar ScrollBar::New(Toolkit::ScrollBar::Direction direction)
   return handle;
 }
 
-double ScrollBar::AccessibleImpl::GetMinimum()
+double ScrollBar::AccessibleImpl::GetMinimum() const
 {
   auto self = Toolkit::ScrollBar::DownCast(Self());
   Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle();
   return scrollableHandle ? scrollableHandle.GetCurrentProperty<float>(GetImpl(self).mPropertyMinScrollPosition) : 0.0f;
 }
 
-double ScrollBar::AccessibleImpl::GetCurrent()
+double ScrollBar::AccessibleImpl::GetCurrent() const
 {
   auto self = Toolkit::ScrollBar::DownCast(Self());
   Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle();
   return scrollableHandle ? scrollableHandle.GetCurrentProperty<float>(GetImpl(self).mPropertyScrollPosition) : 0.0f;
 }
 
-double ScrollBar::AccessibleImpl::GetMaximum()
+double ScrollBar::AccessibleImpl::GetMaximum() const
 {
   auto self = Toolkit::ScrollBar::DownCast(Self());
   Handle scrollableHandle = GetImpl(self).mScrollableObject.GetHandle();
@@ -910,7 +910,7 @@ bool ScrollBar::AccessibleImpl::SetCurrent(double current)
   return true;
 }
 
-double ScrollBar::AccessibleImpl::GetMinimumIncrement()
+double ScrollBar::AccessibleImpl::GetMinimumIncrement() const
 {
   return 1.0;
 }
index 8c6ef2a20a88d04ae05bd4d5cb055081bd723bf0..97a7daa5c304e7619885fca9e0a8c234f64fa109 100644 (file)
@@ -314,15 +314,16 @@ private:
   bool mIndicatorFirstShow : 1; ///< True if the indicator has never been shown
 
 protected:
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::Value
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
-    double GetMinimum() override;
-    double GetCurrent() override;
-    double GetMaximum() override;
+    using DevelControl::ControlAccessible::ControlAccessible;
+
+    double GetMinimum() const override;
+    double GetCurrent() const override;
+    double GetMaximum() const override;
     bool   SetCurrent(double) override;
-    double GetMinimumIncrement() override;
+    double GetMinimumIncrement() const override;
   };
 };
 
index 609476a6eed961cfbe3eb1c4bc49126779a41d14..ea3240f2bbf4d942cff4ed66420fbdeef7b0195f 100644 (file)
@@ -92,7 +92,7 @@ Scrollable::~Scrollable()
 {
 }
 
-bool Scrollable::AccessibleImpl::IsScrollable()
+bool Scrollable::AccessibleImpl::IsScrollable() const
 {
   return true;
 }
index 4240a1e46c0c5cfacac359a2277ec06d519b5ac8..44d9a332f9bb7911f157f8c81d8682d25f1d26bb 100644 (file)
@@ -117,11 +117,11 @@ public:
   virtual void SetOvershootSize(const Vector2& size) = 0;
 
 protected: // From Control
-  struct AccessibleImpl : public DevelControl::AccessibleImpl
+  struct AccessibleImpl : public DevelControl::ControlAccessible
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
 
-    bool IsScrollable() override;
+    bool IsScrollable() const override;
   };
 
   /**
index 612a9a47737e730e029cb5a7a67e23dcf7e0fc7c..1197a464a46c8cd65cf7efcf85a3325d836fef12 100644 (file)
@@ -258,7 +258,7 @@ void ShadowView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index 8cac5edfbc7ed07171ae60e6c4d503b58459698f..7e6370d984db4d05e1d8518ba6f502812f005c83 100644 (file)
@@ -1411,19 +1411,19 @@ Property::Value Slider::GetProperty(BaseObject* object, Property::Index property
   return value;
 }
 
-double Slider::AccessibleImpl::GetMinimum()
+double Slider::AccessibleImpl::GetMinimum() const
 {
   auto self = Toolkit::Slider::DownCast(Self());
   return self.GetProperty(Toolkit::Slider::Property::LOWER_BOUND).Get<float>();
 }
 
-double Slider::AccessibleImpl::GetCurrent()
+double Slider::AccessibleImpl::GetCurrent() const
 {
   auto self = Toolkit::Slider::DownCast(Self());
   return self.GetProperty(Toolkit::Slider::Property::VALUE).Get<float>();
 }
 
-double Slider::AccessibleImpl::GetMaximum()
+double Slider::AccessibleImpl::GetMaximum() const
 {
   auto self = Toolkit::Slider::DownCast(Self());
   return self.GetProperty(Toolkit::Slider::Property::UPPER_BOUND).Get<float>();
@@ -1477,7 +1477,7 @@ bool Slider::AccessibleImpl::SetCurrent(double current)
   return true;
 }
 
-double Slider::AccessibleImpl::GetMinimumIncrement()
+double Slider::AccessibleImpl::GetMinimumIncrement() const
 {
   auto self = Toolkit::Slider::DownCast(Self());
 
index 082f06653d3107555d49c58441f186293d6839db..73859532cca52d43a9cf683591b2d63caab1b34e 100644 (file)
@@ -749,15 +749,16 @@ private:
     mSnapToMarks : 1;  ///< Turn on or off snapping to marks
 
 protected:
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::Value
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
-    double GetMinimum() override;
-    double GetCurrent() override;
-    double GetMaximum() override;
+    using DevelControl::ControlAccessible::ControlAccessible;
+
+    double GetMinimum() const override;
+    double GetCurrent() const override;
+    double GetMaximum() const override;
     bool   SetCurrent(double) override;
-    double GetMinimumIncrement() override;
+    double GetMinimumIncrement() const override;
   };
 };
 
index 6325e62940888537f6011751be28133dbeb382f5..fef8956b51ee408d457e9623bbfbcb22f16e7fe8 100644 (file)
@@ -151,7 +151,7 @@ void SuperBlurView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::FILLER));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::FILLER));
   });
 }
 
index 9aec5bac2f8e5d102d42ed259b810ac0957ecaf8..24267756f789e9ab7840f0b397acdbdf50409cfc 100644 (file)
@@ -1121,7 +1121,7 @@ void TableView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TABLE));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TABLE));
   });
 }
 
index 6e595b19135208aed80d5fb16f2da7c12088e595..e26006d6fcc6ec52955d9c4292d1c17fcfe36b0e 100644 (file)
@@ -105,10 +105,10 @@ protected:
   /**
    * @brief This structure is to connect TextAnchor with Accessible functions.
    */
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::Hyperlink
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
     /**
      * @copydoc Dali::Accessibility::Hyperlink::GetEndIndex()
      */
index 5e9e7d91a16eeba3640483b72a7e410f5612a70a..d35e92b20bcc0af80df79da0ec9d3a256958c654 100644 (file)
@@ -1289,13 +1289,13 @@ TextEditor::~TextEditor()
   }
 }
 
-std::string TextEditor::AccessibleImpl::GetName()
+std::string TextEditor::AccessibleImpl::GetName() const
 {
   auto self = Toolkit::TextEditor::DownCast(Self());
   return self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
 }
 
-std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOffset)
+std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) const
 {
   if(endOffset <= startOffset)
   {
@@ -1313,7 +1313,7 @@ std::string TextEditor::AccessibleImpl::GetText(size_t startOffset, size_t endOf
   return text.substr(startOffset, endOffset - startOffset);
 }
 
-size_t TextEditor::AccessibleImpl::GetCharacterCount()
+size_t TextEditor::AccessibleImpl::GetCharacterCount() const
 {
   auto self = Toolkit::TextEditor::DownCast(Self());
   auto text = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
@@ -1321,7 +1321,7 @@ size_t TextEditor::AccessibleImpl::GetCharacterCount()
   return text.size();
 }
 
-size_t TextEditor::AccessibleImpl::GetCursorOffset()
+size_t TextEditor::AccessibleImpl::GetCursorOffset() const
 {
   auto slf = Toolkit::TextEditor::DownCast(Self());
   return Dali::Toolkit::GetImpl(slf).GetTextController()->GetCursorPosition();
@@ -1343,7 +1343,7 @@ bool TextEditor::AccessibleImpl::SetCursorOffset(size_t offset)
   return true;
 }
 
-Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary)
+Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) const
 {
   auto self     = Toolkit::TextEditor::DownCast(Self());
   auto text     = self.GetProperty(Toolkit::TextEditor::Property::TEXT).Get<std::string>();
@@ -1434,7 +1434,7 @@ Dali::Accessibility::Range TextEditor::AccessibleImpl::GetTextAtOffset(size_t of
   return range;
 }
 
-Dali::Accessibility::Range TextEditor::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex)
+Dali::Accessibility::Range TextEditor::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) const
 {
   // Since DALi supports only one selection indexes higher than 0 are ignored
   if(selectionIndex > 0)
@@ -1526,12 +1526,12 @@ Dali::Accessibility::States TextEditor::AccessibleImpl::CalculateStates()
 {
   using namespace Dali::Accessibility;
 
-  auto states              = DevelControl::AccessibleImpl::CalculateStates();
+  auto states              = DevelControl::ControlAccessible::CalculateStates();
   states[State::EDITABLE]  = true;
   states[State::FOCUSABLE] = true;
 
   Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl();
-  if(mSelf == focusControl)
+  if(Self() == focusControl)
   {
     states[State::FOCUSED] = true;
   }
index 50ecda5737c460bb2e5edb5768a7814970303b63..6ea1cc86f5244e2f510c0e056b29daee9529e480 100644 (file)
@@ -556,32 +556,31 @@ private: // Data
   /**
    * @brief This structure is to connect TextEditor with Accessible functions.
    */
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
-                          public virtual Dali::Accessibility::Text,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::EditableText,
                           public virtual Dali::Accessibility::Hypertext
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
 
     /**
      * @copydoc Dali::Accessibility::Accessible::GetName()
      */
-    std::string GetName() override;
+    std::string GetName() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetText()
      */
-    std::string GetText(size_t startOffset, size_t endOffset) override;
+    std::string GetText(size_t startOffset, size_t endOffset) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetCharacterCount()
      */
-    size_t GetCharacterCount() override;
+    size_t GetCharacterCount() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetCursorOffset()
      */
-    size_t GetCursorOffset() override;
+    size_t GetCursorOffset() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::SetCursorOffset()
@@ -591,12 +590,12 @@ private: // Data
     /**
      * @copydoc Dali::Accessibility::Text::GetTextAtOffset()
      */
-    Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override;
+    Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetRangeOfSelection()
      */
-    Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override;
+    Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::RemoveSelection()
index 9cefc6c0f1e4a586790a42f3c4f369ed5f8c9fcd..7eec04ef4905bfd7a99ba68a8b9f625cf8aa2596 100644 (file)
@@ -1138,7 +1138,7 @@ Vector<Vector2> TextField::GetTextPosition(const uint32_t startIndex, const uint
   return mController->GetTextPosition(startIndex, endIndex);
 }
 
-std::string TextField::AccessibleImpl::GetName()
+std::string TextField::AccessibleImpl::GetName() const
 {
   auto self = Toolkit::TextField::DownCast(Self());
   if(IsHiddenInput(self))
@@ -1149,7 +1149,7 @@ std::string TextField::AccessibleImpl::GetName()
   return self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
 }
 
-std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOffset)
+std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) const
 {
   if(endOffset <= startOffset)
   {
@@ -1170,7 +1170,7 @@ std::string TextField::AccessibleImpl::GetText(size_t startOffset, size_t endOff
   return text.substr(startOffset, endOffset - startOffset);
 }
 
-size_t TextField::AccessibleImpl::GetCharacterCount()
+size_t TextField::AccessibleImpl::GetCharacterCount() const
 {
   auto self = Toolkit::TextField::DownCast(Self());
   auto text = self.GetProperty(Toolkit::TextField::Property::TEXT).Get<std::string>();
@@ -1178,7 +1178,7 @@ size_t TextField::AccessibleImpl::GetCharacterCount()
   return text.size();
 }
 
-size_t TextField::AccessibleImpl::GetCursorOffset()
+size_t TextField::AccessibleImpl::GetCursorOffset() const
 {
   auto self = Toolkit::TextField::DownCast(Self());
   return Dali::Toolkit::GetImpl(self).GetTextController()->GetCursorPosition();
@@ -1201,7 +1201,7 @@ bool TextField::AccessibleImpl::SetCursorOffset(size_t offset)
 }
 
 Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset(
-  size_t offset, Dali::Accessibility::TextBoundary boundary)
+  size_t offset, Dali::Accessibility::TextBoundary boundary) const
 {
   auto self  = Toolkit::TextField::DownCast(Self());
   auto range = Dali::Accessibility::Range{};
@@ -1299,7 +1299,7 @@ Dali::Accessibility::Range TextField::AccessibleImpl::GetTextAtOffset(
   return range;
 }
 
-Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex)
+Dali::Accessibility::Range TextField::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) const
 {
   // Since DALi supports only one selection indexes higher than 0 are ignored
   if(selectionIndex > 0)
@@ -1399,13 +1399,13 @@ Dali::Accessibility::States TextField::AccessibleImpl::CalculateStates()
 {
   using namespace Dali::Accessibility;
 
-  auto states = DevelControl::AccessibleImpl::CalculateStates();
+  auto states = DevelControl::ControlAccessible::CalculateStates();
 
   states[State::EDITABLE]  = true;
   states[State::FOCUSABLE] = true;
 
   Toolkit::Control focusControl = Toolkit::KeyInputFocusManager::Get().GetCurrentFocusControl();
-  if(mSelf == focusControl)
+  if(Self() == focusControl)
   {
     states[State::FOCUSED] = true;
   }
index 6efd4952919289be308118d14dd3ceb05e35c21f..e53189eabec241239a607d722c351e9a411ddcb0 100644 (file)
@@ -504,32 +504,31 @@ protected:
   /**
    * @brief This structure is to connect TextField with Accessible functions.
    */
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
-                          public virtual Dali::Accessibility::Text,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::EditableText,
                           public virtual Dali::Accessibility::Hypertext
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
 
     /**
      * @copydoc Dali::Accessibility::Accessible::GetName()
      */
-    std::string GetName() override;
+    std::string GetName() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetText()
      */
-    std::string GetText(size_t startOffset, size_t endOffset) override;
+    std::string GetText(size_t startOffset, size_t endOffset) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetCharacterCount()
      */
-    size_t GetCharacterCount() override;
+    size_t GetCharacterCount() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetCursorOffset()
      */
-    size_t GetCursorOffset() override;
+    size_t GetCursorOffset() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::SetCursorOffset()
@@ -539,12 +538,12 @@ protected:
     /**
      * @copydoc Dali::Accessibility::Text::GetTextAtOffset()
      */
-    Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override;
+    Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetRangeOfSelection()
      */
-    Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override;
+    Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::RemoveSelection()
index 9e15b344fc371f81058f1cbb69ae12f11d82d629..ae948e271000d8757d07cbd0a181fed739cbcb3e 100644 (file)
@@ -1146,7 +1146,7 @@ Vector<Vector2> TextLabel::GetTextPosition(const uint32_t startIndex, const uint
   return mController->GetTextPosition(startIndex, endIndex);
 }
 
-std::string TextLabel::AccessibleImpl::GetNameRaw()
+std::string TextLabel::AccessibleImpl::GetNameRaw() const
 {
   auto self = Toolkit::TextLabel::DownCast(Self());
   return self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
@@ -1157,7 +1157,7 @@ Property::Index TextLabel::AccessibleImpl::GetNamePropertyIndex()
   return Toolkit::TextLabel::Property::TEXT;
 }
 
-std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOffset)
+std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOffset) const
 {
   if(endOffset <= startOffset)
   {
@@ -1175,7 +1175,7 @@ std::string TextLabel::AccessibleImpl::GetText(size_t startOffset, size_t endOff
   return text.substr(startOffset, endOffset - startOffset);
 }
 
-size_t TextLabel::AccessibleImpl::GetCharacterCount()
+size_t TextLabel::AccessibleImpl::GetCharacterCount() const
 {
   auto self = Toolkit::TextLabel::DownCast(Self());
   auto text = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
@@ -1183,7 +1183,7 @@ size_t TextLabel::AccessibleImpl::GetCharacterCount()
   return text.size();
 }
 
-size_t TextLabel::AccessibleImpl::GetCursorOffset()
+size_t TextLabel::AccessibleImpl::GetCursorOffset() const
 {
   return {};
 }
@@ -1193,7 +1193,7 @@ bool TextLabel::AccessibleImpl::SetCursorOffset(size_t offset)
   return {};
 }
 
-Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary)
+Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t offset, Dali::Accessibility::TextBoundary boundary) const
 {
   auto self     = Toolkit::TextLabel::DownCast(Self());
   auto text     = self.GetProperty(Toolkit::TextLabel::Property::TEXT).Get<std::string>();
@@ -1284,7 +1284,7 @@ Dali::Accessibility::Range TextLabel::AccessibleImpl::GetTextAtOffset(size_t off
   return range;
 }
 
-Dali::Accessibility::Range TextLabel::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex)
+Dali::Accessibility::Range TextLabel::AccessibleImpl::GetRangeOfSelection(size_t selectionIndex) const
 {
   // Since DALi supports only one selection indexes higher than 0 are ignored
   if(selectionIndex > 0)
index 3f1080c177c48bd4cbd028a984ca6355b1c2d0e6..8bedc5baebc4e32e48902e1f134ab7b13e718518 100644 (file)
@@ -243,26 +243,26 @@ protected:
   /**
    * @brief This structure is to connect TextLabel with Accessible functions.
    */
-  struct AccessibleImpl : public DevelControl::AccessibleImpl,
+  struct AccessibleImpl : public DevelControl::ControlAccessible,
                           public virtual Dali::Accessibility::Text,
                           public virtual Dali::Accessibility::Hypertext
   {
-    using DevelControl::AccessibleImpl::AccessibleImpl;
+    using DevelControl::ControlAccessible::ControlAccessible;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetText()
      */
-    std::string GetText(size_t startOffset, size_t endOffset) override;
+    std::string GetText(size_t startOffset, size_t endOffset) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetCharacterCount()
      */
-    size_t GetCharacterCount() override;
+    size_t GetCharacterCount() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetCursorOffset()
      */
-    size_t GetCursorOffset() override;
+    size_t GetCursorOffset() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::SetCursorOffset()
@@ -272,12 +272,12 @@ protected:
     /**
      * @copydoc Dali::Accessibility::Text::GetTextAtOffset()
      */
-    Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) override;
+    Accessibility::Range GetTextAtOffset(size_t offset, Accessibility::TextBoundary boundary) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetRangeOfSelection()
      */
-    Accessibility::Range GetRangeOfSelection(size_t selectionIndex) override;
+    Accessibility::Range GetRangeOfSelection(size_t selectionIndex) const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::RemoveSelection()
@@ -292,7 +292,7 @@ protected:
     /**
      * @copydoc Dali::Accessibility::Text::GetNameRaw()
      */
-    std::string GetNameRaw() override;
+    std::string GetNameRaw() const override;
 
     /**
      * @copydoc Dali::Accessibility::Text::GetNamePropertyIndex()
index e2d9f911e8a173fbc746e2953a28e5d21a1e24f8..2ff1bd413e6ac2346ec01055587a9b693a277c7d 100644 (file)
@@ -399,7 +399,7 @@ void TextSelectionPopup::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::DIALOG, true));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::DIALOG, true));
   });
 
   //Enable highightability
index ba2b8d5bc71102783462c209d9a4d85e9fa2aef0..32203289034d5ec8e44f5ecca5f64b3d04e5c68b 100644 (file)
@@ -166,7 +166,7 @@ void TextSelectionToolbar::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TOOL_BAR));
   });
 }
 
index 2aefaafcc7f26c8a3893649c502a302dff2a17b3..0e894df0de354f1e0c951097f4fae333a1c0a797 100644 (file)
@@ -313,7 +313,7 @@ void ToolBar::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(Self(), [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::TOOL_BAR));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::TOOL_BAR));
   });
 }
 
index 181a47e8519d4ddc95a9a08d452b18851bca19e1..9934f3b3f5b1778b3f6040648e0e35edca775559 100644 (file)
@@ -120,7 +120,7 @@ void VideoView::OnInitialize()
 
   DevelControl::SetAccessibilityConstructor(self, [](Dali::Actor actor) {
     return std::unique_ptr<Dali::Accessibility::Accessible>(
-      new DevelControl::AccessibleImpl(actor, Dali::Accessibility::Role::VIDEO));
+      new DevelControl::ControlAccessible(actor, Dali::Accessibility::Role::VIDEO));
   });
 
   //Enable highightability