Add a callback for navigation policy in web view.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / controls / control-accessible.h
1 #ifndef DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
2 #define DALI_TOOLKIT_CONTROL_ACCESSIBLE_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
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
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
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.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/devel-api/adaptor-framework/accessibility.h>
23 #include <dali/devel-api/adaptor-framework/accessibility-bridge.h>
24 #include <dali/devel-api/adaptor-framework/actor-accessible.h>
25 #include <dali/devel-api/atspi-interfaces/action.h>
26 #include <dali/public-api/object/weak-handle.h>
27
28 // INTERNAL INCLUDES
29 #include <dali-toolkit/public-api/dali-toolkit-common.h>
30
31 namespace Dali::Toolkit::DevelControl {
32
33 /**
34  * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
35  *
36  * You can create a derived class (and register it using SetAccessibilityConstructor)
37  * in order to customize Accessibility for a given control.
38  *
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
47  */
48 struct DALI_TOOLKIT_API ControlAccessible : public Dali::Accessibility::ActorAccessible,
49                                             public virtual Dali::Accessibility::Action
50 {
51 protected:
52   Vector2                       mLastPosition{0.0f, 0.0f};
53   Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
54   bool mIsModal = false;
55   bool mIsRoot = false;
56
57   void ScrollToSelf();
58
59   /**
60    * @brief Register property notification to check highlighted object position
61    */
62   void RegisterPositionPropertyNotification();
63
64   /**
65    * @brief Remove property notification added by RegisterPropertyNotification
66    */
67   void UnregisterPositionPropertyNotification();
68
69   /**
70    * @brief Check if the actor is showing
71    * @return True if the actor is showing
72    */
73   bool IsShowing();
74
75 public:
76   ControlAccessible(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
77
78   /**
79    * @copydoc Dali::Accessibility::Accessible::GetName()
80    */
81   std::string GetName() const override;
82
83   /**
84    * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
85    */
86   virtual std::string GetNameRaw() const;
87
88   /**
89    * @copydoc Dali::Accessibility::Accessible::GetDescription()
90    */
91   std::string GetDescription() const override;
92
93   /**
94    * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
95    */
96   virtual std::string GetDescriptionRaw() const;
97
98   /**
99    * @copydoc Dali::Accessibility::Accessible::GetRole()
100    */
101   Dali::Accessibility::Role GetRole() const override;
102
103   /**
104    * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
105    */
106   std::string GetLocalizedRoleName() const override;
107
108   /**
109    * @copydoc Dali::Accessibility::Accessible::GetStates()
110    */
111   Dali::Accessibility::States GetStates() override;
112
113   /**
114    * @copydoc Dali::Accessibility::Accessible::GetAttributes()
115    */
116   Dali::Accessibility::Attributes GetAttributes() const override;
117
118   /**
119    * @copydoc Dali::Accessibility::Accessible::IsHidden()
120    */
121   bool IsHidden() const override;
122
123   /**
124    * @copydoc Dali::Accessibility::Component::GrabFocus()
125    */
126   bool GrabFocus() override;
127
128   /**
129    * @copydoc Dali::Accessibility::Component::GrabHighlight()
130    */
131   bool GrabHighlight() override;
132
133   /**
134    * @copydoc Dali::Accessibility::Component::ClearHighlight()
135    */
136   bool ClearHighlight() override;
137
138   /**
139    * @copydoc Dali::Accessibility::Action::GetActionName()
140    */
141   std::string GetActionName(size_t index) const override;
142
143   /**
144    * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
145    */
146   std::string GetLocalizedActionName(size_t index) const override;
147
148   /**
149    * @copydoc Dali::Accessibility::Action::GetActionDescription()
150    */
151   std::string GetActionDescription(size_t index) const override;
152
153   /**
154    * @copydoc Dali::Accessibility::Action::GetActionCount()
155    */
156   size_t GetActionCount() const override;
157
158   /**
159    * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
160    */
161   std::string GetActionKeyBinding(size_t index) const override;
162
163   /**
164    * @copydoc Dali::Accessibility::Action::DoAction(std::size_t)
165    */
166   bool DoAction(size_t index) override;
167
168   /**
169    * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
170    */
171   bool DoAction(const std::string& name) override;
172
173   /**
174    * @copydoc Dali::Accessibility::Accessible::DoGesture()
175    */
176   bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
177
178   /**
179    * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
180    */
181   std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
182
183   /**
184    * @copydoc Dali::Accessibility::Accessible::GetStates()
185    */
186   virtual Dali::Accessibility::States CalculateStates();
187
188   /**
189    * @brief Makes sure that a given child (descendant) of this container (e.g. ItemView) is visible
190    * @return false if scrolling is not supported or child is already visible
191    */
192   virtual bool ScrollToChild(Actor child);
193
194   /**
195    * @brief Returns the index of the property that represents this actor's name
196    */
197   virtual Dali::Property::Index GetNamePropertyIndex();
198
199   /**
200    * @brief Returns the index of the property that represents this actor's description
201    */
202   virtual Dali::Property::Index GetDescriptionPropertyIndex();
203
204   /**
205    * @brief Sets last object position
206    * @param[in] position Last object position
207    */
208   void SetLastPosition(Vector2 position);
209
210   /**
211    * @brief Gets last object position
212    * @return The Last object position
213    */
214   Vector2 GetLastPosition() const;
215 };
216
217 } // namespace Dali::Toolkit::DevelControl
218
219 #endif // DALI_TOOLKIT_CONTROL_ACCESSIBLE_H