1 #ifndef DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
2 #define DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
5 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
22 #include <dali/devel-api/adaptor-framework/accessibility.h>
23 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
24 #include <dali/devel-api/atspi-interfaces/accessible.h>
25 #include <dali/devel-api/atspi-interfaces/action.h>
26 #include <dali/devel-api/atspi-interfaces/collection.h>
27 #include <dali/devel-api/atspi-interfaces/component.h>
28 #include <dali/public-api/object/weak-handle.h>
31 #include <dali-toolkit/public-api/dali-toolkit-common.h>
33 namespace Dali::Toolkit::DevelControl {
36 * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
38 * You can create a derived class (and register it using SetAccessibilityConstructor)
39 * in order to customize Accessibility for a given control.
41 * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
42 * @see Dali::Accessibility::Accessible
43 * @see Dali::Accessibility::Component
44 * @see Dali::Accessibility::Collection
45 * @see Dali::Accessibility::Action
46 * @see Dali::Accessibility::Value
47 * @see Dali::Accessibility::Text
48 * @see Dali::Accessibility::EditableText
50 struct DALI_TOOLKIT_API ControlAccessible : public virtual Dali::Accessibility::Accessible,
51 public virtual Dali::Accessibility::Component,
52 public virtual Dali::Accessibility::Collection,
53 public virtual Dali::Accessibility::Action
56 Vector2 mLastPosition{0.0f, 0.0f};
57 Dali::WeakHandle<Dali::Actor> mSelf;
58 Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
59 bool mIsModal = false;
62 Dali::Actor Self() const
64 auto handle = mSelf.GetHandle();
66 // Control::Impl holds a std::unique_ptr to the Accessible object,
67 // so that one does not outlive the other.
68 DALI_ASSERT_ALWAYS(handle);
76 * @brief Register property notification to check highlighted object position
78 void RegisterPositionPropertyNotification();
81 * @brief Remove property notification added by RegisterPropertyNotification
83 void UnregisterPositionPropertyNotification();
86 * @brief Check if the actor is showing
87 * @return True if the actor is showing
92 ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
95 * @copydoc Dali::Accessibility::Accessible::GetName()
97 std::string GetName() const override;
100 * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
102 virtual std::string GetNameRaw() const;
105 * @copydoc Dali::Accessibility::Accessible::GetDescription()
107 std::string GetDescription() const override;
110 * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
112 virtual std::string GetDescriptionRaw() const;
115 * @copydoc Dali::Accessibility::Accessible::GetParent()
117 Dali::Accessibility::Accessible* GetParent() override;
120 * @copydoc Dali::Accessibility::Accessible::GetChildCount()
122 size_t GetChildCount() const override;
125 * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
127 Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
130 * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
132 size_t GetIndexInParent() override;
135 * @copydoc Dali::Accessibility::Accessible::GetRole()
137 Dali::Accessibility::Role GetRole() const override;
140 * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
142 std::string GetLocalizedRoleName() const override;
145 * @copydoc Dali::Accessibility::Accessible::GetStates()
147 Dali::Accessibility::States GetStates() override;
150 * @copydoc Dali::Accessibility::Accessible::GetAttributes()
152 Dali::Accessibility::Attributes GetAttributes() const override;
155 * @copydoc Dali::Accessibility::Component::GetExtents()
157 Dali::Rect<> GetExtents(Accessibility::CoordinateType type) const override;
160 * @copydoc Dali::Accessibility::Component::GetLayer()
162 Dali::Accessibility::ComponentLayer GetLayer() const override;
165 * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
167 int16_t GetMdiZOrder() const override;
170 * @copydoc Dali::Accessibility::Component::GrabFocus()
172 bool GrabFocus() override;
175 * @copydoc Dali::Accessibility::Component::GetAlpha()
177 double GetAlpha() const override;
180 * @copydoc Dali::Accessibility::Component::GrabHighlight()
182 bool GrabHighlight() override;
185 * @copydoc Dali::Accessibility::Component::ClearHighlight()
187 bool ClearHighlight() override;
190 * @copydoc Dali::Accessibility::Action::GetActionName()
192 std::string GetActionName(size_t index) const override;
195 * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
197 std::string GetLocalizedActionName(size_t index) const override;
200 * @copydoc Dali::Accessibility::Action::GetActionDescription()
202 std::string GetActionDescription(size_t index) const override;
205 * @copydoc Dali::Accessibility::Action::GetActionCount()
207 size_t GetActionCount() const override;
210 * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
212 std::string GetActionKeyBinding(size_t index) const override;
215 * @copydoc Dali::Accessibility::Action::DoAction(std::size_t)
217 bool DoAction(size_t index) override;
220 * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
222 bool DoAction(const std::string& name) override;
225 * @copydoc Dali::Accessibility::Accessible::DoGesture()
227 bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
230 * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
232 std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
235 * @copydoc Dali::Accessibility::Accessible::GetInternalActor()
237 Dali::Actor GetInternalActor() override;
240 * @copydoc Dali::Accessibility::Accessible::GetStates()
242 virtual Dali::Accessibility::States CalculateStates();
245 * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible
246 * @return false if scrolling is not supported or child is already visible
248 virtual bool ScrollToChild(Actor child);
251 * @brief Returns the index of the property that represents this actor's name
253 virtual Dali::Property::Index GetNamePropertyIndex();
256 * @brief Returns the index of the property that represents this actor's description
258 virtual Dali::Property::Index GetDescriptionPropertyIndex();
261 * @brief Sets last object position
262 * @param[in] position Last object position
264 void SetLastPosition(Vector2 position);
267 * @brief Gets last object position
268 * @return The Last object position
270 Vector2 GetLastPosition() const;
273 } // namespace Dali::Toolkit::DevelControl
275 #endif // DALI_TOOLKIT_CONTROL_ACCESSIBLE_H