[dali_2.3.42] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / controls / control-devel.cpp
index a604433..72e7ab1 100644 (file)
@@ -1,5 +1,5 @@
 /*
 /*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2024 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.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -114,6 +114,13 @@ void DoAction(Control& control, Dali::Property::Index visualIndex, Dali::Propert
   controlDataImpl.DoAction(visualIndex, actionId, attributes);
 }
 
   controlDataImpl.DoAction(visualIndex, actionId, attributes);
 }
 
+void DoActionExtension(Control& control, Dali::Property::Index visualIndex, Dali::Property::Index actionId, Dali::Any attributes)
+{
+  Internal::Control&       controlInternal = Toolkit::Internal::GetImplementation(control);
+  Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(controlInternal);
+  controlDataImpl.DoActionExtension(visualIndex, actionId, attributes);
+}
+
 void SetInputMethodContext(Internal::Control& control, InputMethodContext& inputMethodContext)
 {
   Internal::Control::Impl::Get(control).SetInputMethodContext(inputMethodContext);
 void SetInputMethodContext(Internal::Control& control, InputMethodContext& inputMethodContext)
 {
   Internal::Control::Impl::Get(control).SetInputMethodContext(inputMethodContext);
@@ -178,11 +185,16 @@ Toolkit::DevelControl::AccessibilityDoGestureSignalType& AccessibilityDoGestureS
   return GetControlImplementation(control).mAccessibilityDoGestureSignal;
 }
 
   return GetControlImplementation(control).mAccessibilityDoGestureSignal;
 }
 
+Toolkit::DevelControl::AccessibilityActionSignalType& AccessibilityActionSignal(Toolkit::Control control)
+{
+  return GetControlImplementation(control).mAccessibilityActionSignal;
+}
+
 void AppendAccessibilityRelation(Toolkit::Control control, Dali::Actor destination, Dali::Accessibility::RelationType relation)
 {
   if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
   {
 void AppendAccessibilityRelation(Toolkit::Control control, Dali::Actor destination, Dali::Accessibility::RelationType relation)
 {
   if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
   {
-    GetControlImplementation(control).mAccessibilityRelations[relation].insert(destinationAccessible);
+    GetControlImplementation(control).mAccessibilityProps.relations[relation].insert(destinationAccessible);
   }
 }
 
   }
 }
 
@@ -190,7 +202,7 @@ void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destinati
 {
   if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
   {
 {
   if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
   {
-    auto& relations = GetControlImplementation(control).mAccessibilityRelations;
+    auto& relations = GetControlImplementation(control).mAccessibilityProps.relations;
 
     relations[relation].erase(destinationAccessible);
 
 
     relations[relation].erase(destinationAccessible);
 
@@ -201,19 +213,17 @@ void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destinati
   }
 }
 
   }
 }
 
-std::vector<std::vector<Accessibility::Address>> GetAccessibilityRelations(Toolkit::Control control)
+std::vector<Accessibility::Relation> GetAccessibilityRelations(Toolkit::Control control)
 {
 {
-  std::vector<std::vector<Accessibility::Address>> result(static_cast<std::size_t>(Accessibility::RelationType::MAX_COUNT));
+  const auto&                          relations = GetControlImplementation(control).mAccessibilityProps.relations;
+  std::vector<Accessibility::Relation> result;
 
 
-  // Map every Accessible* to its Address
-  for(auto& relation : GetControlImplementation(control).mAccessibilityRelations)
+  for(auto& relation : relations)
   {
   {
-    auto  index   = static_cast<std::size_t>(relation.first);
     auto& targets = relation.second;
 
     auto& targets = relation.second;
 
-    std::transform(targets.begin(), targets.end(), std::back_inserter(result[index]), [](auto* x) {
-      return x->GetAddress();
-    });
+    result.emplace_back(Accessibility::Relation{relation.first, {}});
+    std::copy(targets.begin(), targets.end(), std::back_inserter(result.back().mTargets));
   }
 
   return result;
   }
 
   return result;
@@ -221,7 +231,7 @@ std::vector<std::vector<Accessibility::Address>> GetAccessibilityRelations(Toolk
 
 void ClearAccessibilityRelations(Toolkit::Control control)
 {
 
 void ClearAccessibilityRelations(Toolkit::Control control)
 {
-  GetControlImplementation(control).mAccessibilityRelations.clear();
+  GetControlImplementation(control).mAccessibilityProps.relations.clear();
 }
 
 void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value)
 }
 
 void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value)
@@ -251,22 +261,85 @@ Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType(Toolkit::C
 
 bool ClearAccessibilityHighlight(Toolkit::Control control)
 {
 
 bool ClearAccessibilityHighlight(Toolkit::Control control)
 {
-  return GetControlImplementation(control).GetAccessibleObject()->ClearHighlight();
+  auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+  if(DALI_LIKELY(controlAccessible))
+  {
+    return controlAccessible->ClearHighlight();
+  }
+  return false;
 }
 
 bool GrabAccessibilityHighlight(Toolkit::Control control)
 {
 }
 
 bool GrabAccessibilityHighlight(Toolkit::Control control)
 {
-  return GetControlImplementation(control).GetAccessibleObject()->GrabHighlight();
+  auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+  if(DALI_LIKELY(controlAccessible))
+  {
+    return controlAccessible->GrabHighlight();
+  }
+  return false;
 }
 
 Dali::Accessibility::States GetAccessibilityStates(Toolkit::Control control)
 {
 }
 
 Dali::Accessibility::States GetAccessibilityStates(Toolkit::Control control)
 {
-  return GetControlImplementation(control).GetAccessibleObject()->GetStates();
+  auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+  if(DALI_LIKELY(controlAccessible))
+  {
+    return controlAccessible->GetStates();
+  }
+  return Dali::Accessibility::States{};
 }
 
 void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse)
 {
 }
 
 void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse)
 {
-  GetControlImplementation(control).GetAccessibleObject()->NotifyAccessibilityStateChange(std::move(states), recurse);
+  auto controlAccessible = GetControlImplementation(control).GetAccessibleObject();
+  if(DALI_LIKELY(controlAccessible))
+  {
+    controlAccessible->NotifyAccessibilityStateChange(std::move(states), recurse);
+  }
+}
+
+bool IsAccessibleCreated(Toolkit::Control control)
+{
+  return GetControlImplementation(control).IsAccessibleCreated();
+}
+
+void EnableCreateAccessible(Toolkit::Control control, bool enable)
+{
+  GetControlImplementation(control).EnableCreateAccessible(enable);
+}
+
+bool IsCreateAccessibleEnabled(Toolkit::Control control)
+{
+  return GetControlImplementation(control).IsCreateAccessibleEnabled();
+}
+
+void EmitAccessibilityStateChanged(Dali::Actor actor, Accessibility::State state, int newValue)
+{
+  auto accessible = Accessibility::Accessible::GetOwningPtr(actor);
+  if(DALI_LIKELY(accessible))
+  {
+    auto control = Toolkit::Control::DownCast(actor);
+    if(DALI_LIKELY(control))
+    {
+      if(state == Accessibility::State::SHOWING)
+      {
+        bool isModal = ControlAccessible::IsModal(control);
+        if(isModal)
+        {
+          if(newValue == 1)
+          {
+            Accessibility::Bridge::GetCurrentBridge()->RegisterDefaultLabel(accessible);
+          }
+          else
+          {
+            Accessibility::Bridge::GetCurrentBridge()->UnregisterDefaultLabel(accessible);
+          }
+        }
+      }
+    }
+
+    accessible->EmitStateChanged(state, newValue, 0);
+  }
 }
 
 } // namespace DevelControl
 }
 
 } // namespace DevelControl