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.h>
21 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
22 #include <dali/devel-api/atspi-interfaces/accessible.h>
23 #include <dali/devel-api/atspi-interfaces/action.h>
24 #include <dali/devel-api/atspi-interfaces/collection.h>
25 #include <dali/devel-api/atspi-interfaces/component.h>
26 #include <dali/public-api/object/weak-handle.h>
29 #include <dali-toolkit/public-api/dali-toolkit-common.h>
31 namespace Dali::Toolkit::DevelControl {
34 * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
36 * You can create a derived class (and register it using SetAccessibilityConstructor)
37 * in order to customize Accessibility for a given control.
39 * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
40 * @see Dali::Accessibility::Accessible
41 * @see Dali::Accessibility::Component
42 * @see Dali::Accessibility::Collection
43 * @see Dali::Accessibility::Action
44 * @see Dali::Accessibility::Value
45 * @see Dali::Accessibility::Text
46 * @see Dali::Accessibility::EditableText
48 struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible,
49 public virtual Dali::Accessibility::Component,
50 public virtual Dali::Accessibility::Collection,
51 public virtual Dali::Accessibility::Action
54 Vector2 mLastPosition{0.0f, 0.0f};
55 Dali::WeakHandle<Dali::Actor> mSelf;
56 Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
57 bool mIsModal = false;
60 Dali::Actor Self() const
62 auto handle = mSelf.GetHandle();
64 // Control::Impl holds a std::unique_ptr to the Accessible object,
65 // so that one does not outlive the other.
66 DALI_ASSERT_ALWAYS(handle);
74 * @brief Register property notification to check highlighted object position
76 void RegisterPositionPropertyNotification();
79 * @brief Remove property notification added by RegisterPropertyNotification
81 void UnregisterPositionPropertyNotification();
84 * @brief Check if the actor is showing
85 * @return True if the actor is showing
90 AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
93 * @copydoc Dali::Accessibility::Accessible::GetName()
95 std::string GetName() override;
98 * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
100 virtual std::string GetNameRaw();
103 * @copydoc Dali::Accessibility::Accessible::GetDescription()
105 std::string GetDescription() override;
108 * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
110 virtual std::string GetDescriptionRaw();
113 * @copydoc Dali::Accessibility::Accessible::GetParent()
115 Dali::Accessibility::Accessible* GetParent() override;
118 * @copydoc Dali::Accessibility::Accessible::GetChildCount()
120 size_t GetChildCount() override;
123 * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
125 Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
128 * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
130 size_t GetIndexInParent() override;
133 * @copydoc Dali::Accessibility::Accessible::GetRole()
135 Dali::Accessibility::Role GetRole() override;
138 * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
140 std::string GetLocalizedRoleName() override;
143 * @copydoc Dali::Accessibility::Accessible::GetStates()
145 Dali::Accessibility::States GetStates() override;
148 * @copydoc Dali::Accessibility::Accessible::GetAttributes()
150 Dali::Accessibility::Attributes GetAttributes() override;
153 * @copydoc Dali::Accessibility::Component::GetExtents()
155 Dali::Rect<> GetExtents(Accessibility::CoordinateType type) override;
158 * @copydoc Dali::Accessibility::Component::GetLayer()
160 Dali::Accessibility::ComponentLayer GetLayer() override;
163 * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
165 int16_t GetMdiZOrder() override;
168 * @copydoc Dali::Accessibility::Component::GrabFocus()
170 bool GrabFocus() override;
173 * @copydoc Dali::Accessibility::Component::GetAlpha()
175 double GetAlpha() override;
178 * @copydoc Dali::Accessibility::Component::GrabHighlight()
180 bool GrabHighlight() override;
183 * @copydoc Dali::Accessibility::Component::ClearHighlight()
185 bool ClearHighlight() override;
188 * @copydoc Dali::Accessibility::Action::GetActionName()
190 std::string GetActionName(size_t index) override;
193 * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
195 std::string GetLocalizedActionName(size_t index) override;
198 * @copydoc Dali::Accessibility::Action::GetActionDescription()
200 std::string GetActionDescription(size_t index) override;
203 * @copydoc Dali::Accessibility::Action::GetActionCount()
205 size_t GetActionCount() override;
208 * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
210 std::string GetActionKeyBinding(size_t index) override;
213 * @copydoc Dali::Accessibility::Action::DoAction(size_t)
215 bool DoAction(size_t index) override;
218 * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
220 bool DoAction(const std::string& name) override;
223 * @copydoc Dali::Accessibility::Accessible::DoGesture()
225 bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
228 * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
230 std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
233 * @copydoc Dali::Accessibility::Accessible::GetInternalActor()
235 Dali::Actor GetInternalActor() override;
238 * @copydoc Dali::Accessibility::Accessible::GetStates()
240 virtual Dali::Accessibility::States CalculateStates();
243 * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible
244 * @return false if scrolling is not supported or child is already visible
246 virtual bool ScrollToChild(Actor child);
249 * @brief Returns the index of the property that represents this actor's name
251 virtual Dali::Property::Index GetNamePropertyIndex();
254 * @brief Returns the index of the property that represents this actor's description
256 virtual Dali::Property::Index GetDescriptionPropertyIndex();
259 * @brief Sets last object position
260 * @param[in] position Last object position
262 void SetLastPosition(Vector2 position);
265 * @brief Gets last object position
266 * @return The Last object position
268 Vector2 GetLastPosition() const;
271 } // namespace Dali::Toolkit::DevelControl
273 #endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H