2 * Copyright (c) 2023 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 #include "control-devel.h"
22 #include <dali/public-api/actors/actor.h>
23 #include <dali/public-api/animation/animation.h>
26 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
27 #include <dali-toolkit/internal/controls/control/control-data-impl.h>
28 #include <dali-toolkit/public-api/controls/control-impl.h>
29 #include <dali-toolkit/public-api/controls/control.h>
33 Dali::Toolkit::Internal::Control::Impl& GetControlImplementation(Dali::Toolkit::Control control)
35 auto& internalControl = Dali::Toolkit::Internal::GetImplementation(control);
37 return Dali::Toolkit::Internal::Control::Impl::Get(internalControl);
40 } // unnamed namespace
46 namespace DevelControl
48 void RegisterVisual(Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual)
50 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
51 controlDataImpl.RegisterVisual(index, visual);
54 void RegisterVisual(Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual, int depthIndex)
56 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
57 controlDataImpl.RegisterVisual(index, visual, depthIndex);
60 void RegisterVisual(Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual, bool enabled)
62 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
63 controlDataImpl.RegisterVisual(index, visual, enabled);
66 void RegisterVisual(Internal::Control& control, Dali::Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex)
68 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
69 controlDataImpl.RegisterVisual(index, visual, enabled, depthIndex);
72 void UnregisterVisual(Internal::Control& control, Dali::Property::Index index)
74 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
75 controlDataImpl.UnregisterVisual(index);
78 Toolkit::Visual::Base GetVisual(const Internal::Control& control, Dali::Property::Index index)
80 const Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
81 return controlDataImpl.GetVisual(index);
84 void EnableVisual(Internal::Control& control, Dali::Property::Index index, bool enable)
86 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
87 controlDataImpl.EnableVisual(index, enable);
90 bool IsVisualEnabled(const Internal::Control& control, Dali::Property::Index index)
92 const Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
93 return controlDataImpl.IsVisualEnabled(index);
96 Dali::Animation CreateTransition(Internal::Control& control, const Toolkit::TransitionData& handle)
98 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
99 return controlDataImpl.CreateTransition(handle);
102 void AddTransitions(Internal::Control& control,
103 Dali::Animation animation,
104 const Toolkit::TransitionData& transitionData)
106 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(control);
107 controlDataImpl.AddTransitions(animation, transitionData);
110 void DoAction(Control& control, Dali::Property::Index visualIndex, Dali::Property::Index actionId, const Dali::Property::Value attributes)
112 Internal::Control& controlInternal = Toolkit::Internal::GetImplementation(control);
113 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(controlInternal);
114 controlDataImpl.DoAction(visualIndex, actionId, attributes);
117 void DoActionExtension(Control& control, Dali::Property::Index visualIndex, Dali::Property::Index actionId, Dali::Any attributes)
119 Internal::Control& controlInternal = Toolkit::Internal::GetImplementation(control);
120 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(controlInternal);
121 controlDataImpl.DoActionExtension(visualIndex, actionId, attributes);
124 void SetInputMethodContext(Internal::Control& control, InputMethodContext& inputMethodContext)
126 Internal::Control::Impl::Get(control).SetInputMethodContext(inputMethodContext);
129 VisualEventSignalType& VisualEventSignal(Control control)
131 Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control);
132 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(internalControl);
133 return controlDataImpl.VisualEventSignal();
136 Dali::Property GetVisualProperty(Control control, Dali::Property::Index index, Dali::Property::Key visualPropertyKey)
138 Internal::Control& internalControl = Toolkit::Internal::GetImplementation(control);
139 Internal::Control::Impl& controlDataImpl = Internal::Control::Impl::Get(internalControl);
140 return controlDataImpl.GetVisualProperty(index, visualPropertyKey);
143 Toolkit::DevelControl::AccessibilityActivateSignalType& AccessibilityActivateSignal(Toolkit::Control control)
145 return GetControlImplementation(control).mAccessibilityActivateSignal;
148 Toolkit::DevelControl::AccessibilityReadingSkippedSignalType& AccessibilityReadingSkippedSignal(Toolkit::Control control)
150 return GetControlImplementation(control).mAccessibilityReadingSkippedSignal;
153 Toolkit::DevelControl::AccessibilityReadingPausedSignalType& AccessibilityReadingPausedSignal(Toolkit::Control control)
155 return GetControlImplementation(control).mAccessibilityReadingPausedSignal;
158 Toolkit::DevelControl::AccessibilityReadingResumedSignalType& AccessibilityReadingResumedSignal(Toolkit::Control control)
160 return GetControlImplementation(control).mAccessibilityReadingResumedSignal;
163 Toolkit::DevelControl::AccessibilityReadingCancelledSignalType& AccessibilityReadingCancelledSignal(Toolkit::Control control)
165 return GetControlImplementation(control).mAccessibilityReadingCancelledSignal;
168 Toolkit::DevelControl::AccessibilityReadingStoppedSignalType& AccessibilityReadingStoppedSignal(Toolkit::Control control)
170 return GetControlImplementation(control).mAccessibilityReadingStoppedSignal;
173 Toolkit::DevelControl::AccessibilityGetNameSignalType& AccessibilityGetNameSignal(Toolkit::Control control)
175 return GetControlImplementation(control).mAccessibilityGetNameSignal;
178 Toolkit::DevelControl::AccessibilityGetDescriptionSignalType& AccessibilityGetDescriptionSignal(Toolkit::Control control)
180 return GetControlImplementation(control).mAccessibilityGetDescriptionSignal;
183 Toolkit::DevelControl::AccessibilityDoGestureSignalType& AccessibilityDoGestureSignal(Toolkit::Control control)
185 return GetControlImplementation(control).mAccessibilityDoGestureSignal;
188 void AppendAccessibilityRelation(Toolkit::Control control, Dali::Actor destination, Dali::Accessibility::RelationType relation)
190 if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
192 GetControlImplementation(control).mAccessibilityRelations[relation].insert(destinationAccessible);
196 void RemoveAccessibilityRelation(Toolkit::Control control, Dali::Actor destination, Dali::Accessibility::RelationType relation)
198 if(auto destinationAccessible = Accessibility::Accessible::Get(destination))
200 auto& relations = GetControlImplementation(control).mAccessibilityRelations;
202 relations[relation].erase(destinationAccessible);
204 if(relations[relation].empty())
206 relations.erase(relation);
211 std::vector<Accessibility::Relation> GetAccessibilityRelations(Toolkit::Control control)
213 const auto& relations = GetControlImplementation(control).mAccessibilityRelations;
214 std::vector<Accessibility::Relation> result;
216 for(auto& relation : relations)
218 auto& targets = relation.second;
220 result.emplace_back(Accessibility::Relation{relation.first, {}});
221 std::copy(targets.begin(), targets.end(), std::back_inserter(result.back().mTargets));
227 void ClearAccessibilityRelations(Toolkit::Control control)
229 GetControlImplementation(control).mAccessibilityRelations.clear();
232 void AppendAccessibilityAttribute(Toolkit::Control control, const std::string& key, const std::string& value)
234 GetControlImplementation(control).AppendAccessibilityAttribute(key, value);
237 void RemoveAccessibilityAttribute(Toolkit::Control control, const std::string& key)
239 GetControlImplementation(control).RemoveAccessibilityAttribute(key);
242 void ClearAccessibilityAttributes(Toolkit::Control control)
244 GetControlImplementation(control).ClearAccessibilityAttributes();
247 void SetAccessibilityReadingInfoType(Toolkit::Control control, const Dali::Accessibility::ReadingInfoTypes types)
249 GetControlImplementation(control).SetAccessibilityReadingInfoType(types);
252 Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType(Toolkit::Control control)
254 return GetControlImplementation(control).GetAccessibilityReadingInfoType();
257 bool ClearAccessibilityHighlight(Toolkit::Control control)
259 return GetControlImplementation(control).GetAccessibleObject()->ClearHighlight();
262 bool GrabAccessibilityHighlight(Toolkit::Control control)
264 return GetControlImplementation(control).GetAccessibleObject()->GrabHighlight();
267 Dali::Accessibility::States GetAccessibilityStates(Toolkit::Control control)
269 return GetControlImplementation(control).GetAccessibleObject()->GetStates();
272 void NotifyAccessibilityStateChange(Toolkit::Control control, Dali::Accessibility::States states, bool recurse)
274 GetControlImplementation(control).GetAccessibleObject()->NotifyAccessibilityStateChange(std::move(states), recurse);
277 } // namespace DevelControl
279 } // namespace Toolkit