1 #ifndef DALI_TOOLKIT_ACCESSIBLE_IMPL_H
2 #define DALI_TOOLKIT_ACCESSIBLE_IMPL_H
4 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
20 #include <dali/devel-api/adaptor-framework/accessibility-impl.h>
21 #include <dali/devel-api/adaptor-framework/accessibility.h>
22 #include <dali/public-api/object/weak-handle.h>
25 #include <dali-toolkit/public-api/dali-toolkit-common.h>
27 namespace Dali::Toolkit::DevelControl {
30 * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
32 * You can create a derived class (and register it using SetAccessibilityConstructor)
33 * in order to customize Accessibility for a given control.
35 * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
36 * @see Dali::Accessibility::Accessible
37 * @see Dali::Accessibility::Component
38 * @see Dali::Accessibility::Collection
39 * @see Dali::Accessibility::Action
40 * @see Dali::Accessibility::Value
41 * @see Dali::Accessibility::Text
42 * @see Dali::Accessibility::EditableText
44 struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible,
45 public virtual Dali::Accessibility::Component,
46 public virtual Dali::Accessibility::Collection,
47 public virtual Dali::Accessibility::Action
50 Dali::WeakHandle<Dali::Actor> mSelf;
51 Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
52 bool mIsModal = false;
57 auto handle = mSelf.GetHandle();
59 // Control::Impl holds a std::unique_ptr to the Accessible object,
60 // so that one does not outlive the other.
61 DALI_ASSERT_ALWAYS(handle);
69 AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
72 * @copydoc Dali::Accessibility::Accessible::GetName()
74 std::string GetName() override;
77 * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
79 virtual std::string GetNameRaw();
82 * @copydoc Dali::Accessibility::Accessible::GetDescription()
84 std::string GetDescription() override;
87 * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
89 virtual std::string GetDescriptionRaw();
92 * @copydoc Dali::Accessibility::Accessible::GetParent()
94 Dali::Accessibility::Accessible* GetParent() override;
97 * @copydoc Dali::Accessibility::Accessible::GetChildCount()
99 size_t GetChildCount() override;
102 * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
104 Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
107 * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
109 size_t GetIndexInParent() override;
112 * @copydoc Dali::Accessibility::Accessible::GetRole()
114 Dali::Accessibility::Role GetRole() override;
117 * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
119 std::string GetLocalizedRoleName() override;
122 * @copydoc Dali::Accessibility::Accessible::GetStates()
124 Dali::Accessibility::States GetStates() override;
127 * @copydoc Dali::Accessibility::Accessible::GetAttributes()
129 Dali::Accessibility::Attributes GetAttributes() override;
132 * @copydoc Dali::Accessibility::Component::GetExtents()
134 Dali::Rect<> GetExtents(Accessibility::CoordinateType type) override;
137 * @copydoc Dali::Accessibility::Component::GetLayer()
139 Dali::Accessibility::ComponentLayer GetLayer() override;
142 * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
144 int16_t GetMdiZOrder() override;
147 * @copydoc Dali::Accessibility::Component::GrabFocus()
149 bool GrabFocus() override;
152 * @copydoc Dali::Accessibility::Component::GetAlpha()
154 double GetAlpha() override;
157 * @copydoc Dali::Accessibility::Component::GrabHighlight()
159 bool GrabHighlight() override;
162 * @copydoc Dali::Accessibility::Component::ClearHighlight()
164 bool ClearHighlight() override;
167 * @copydoc Dali::Accessibility::Action::GetActionName()
169 std::string GetActionName(size_t index) override;
172 * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
174 std::string GetLocalizedActionName(size_t index) override;
177 * @copydoc Dali::Accessibility::Action::GetActionDescription()
179 std::string GetActionDescription(size_t index) override;
182 * @copydoc Dali::Accessibility::Action::GetActionCount()
184 size_t GetActionCount() override;
187 * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
189 std::string GetActionKeyBinding(size_t index) override;
192 * @copydoc Dali::Accessibility::Action::DoAction(size_t)
194 bool DoAction(size_t index) override;
197 * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
199 bool DoAction(const std::string& name) override;
202 * @copydoc Dali::Accessibility::Accessible::DoGesture()
204 bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
207 * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
209 std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
212 * @copydoc Dali::Accessibility::Accessible::GetStates()
214 virtual Dali::Accessibility::States CalculateStates();
217 * @brief Makes sure that a given child of this container (e.g. ItemView) is visible
218 * @return false if scrolling is not supported or child is already visible
220 virtual bool ScrollToChild(Actor child);
223 * @brief Returns the index of the property that represents this actor's name
225 virtual Dali::Property::Index GetNamePropertyIndex();
228 * @brief Returns the index of the property that represents this actor's description
230 virtual Dali::Property::Index GetDescriptionPropertyIndex();
233 } // namespace Dali::Toolkit::DevelControl
235 #endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H