{
if(auto controlDataImpl = GetControlImplementation(control))
{
- auto index = static_cast<Dali::Property::Array::SizeType>(relation);
- if(index >= controlDataImpl->mAccessibilityRelations.size())
- {
- DALI_LOG_ERROR("Relation index exceeds vector size.");
- return;
- }
-
auto object = controlDataImpl->GetAccessibilityObject(destination);
if(object)
{
- controlDataImpl->mAccessibilityRelations[index].push_back(object->GetAddress());
+ controlDataImpl->mAccessibilityRelations[relation].insert(object);
}
}
}
{
if(auto controlDataImpl = GetControlImplementation(control))
{
- auto index = static_cast<Dali::Property::Array::SizeType>(relation);
- if(index >= controlDataImpl->mAccessibilityRelations.size())
- {
- DALI_LOG_ERROR("Relation index exceeds vector size.");
- return;
- }
-
auto object = controlDataImpl->GetAccessibilityObject(destination);
- if(!object)
+ if(object)
{
- return;
- }
+ auto& relations = controlDataImpl->mAccessibilityRelations;
- auto address = object->GetAddress();
+ relations[relation].erase(object);
- auto& targets = controlDataImpl->mAccessibilityRelations[index];
- for(auto i = 0u; i < targets.size(); ++i)
- {
- if(targets[i].ToString() == address.ToString())
+ if(relations[relation].empty())
{
- targets[i] = targets.back();
- targets.erase(targets.end() - 1);
+ relations.erase(relation);
}
}
}
{
if(auto controlDataImpl = GetControlImplementation(control))
{
- return controlDataImpl->mAccessibilityRelations;
+ std::vector<std::vector<Accessibility::Address>> result(static_cast<std::size_t>(Accessibility::RelationType::MAX_COUNT));
+
+ // Map every Accessible* to its Address
+ for(auto& relation : controlDataImpl->mAccessibilityRelations)
+ {
+ auto index = static_cast<std::size_t>(relation.first);
+ auto& targets = relation.second;
+
+ std::transform(targets.begin(), targets.end(), std::back_inserter(result[index]), [](auto* x) {
+ return x->GetAddress();
+ });
+ }
+
+ return result;
}
+
return {};
}
{
if(auto controlDataImpl = GetControlImplementation(control))
{
- for(auto& it : controlDataImpl->mAccessibilityRelations)
- {
- it.clear();
- }
+ controlDataImpl->mAccessibilityRelations.clear();
}
}