1 #ifndef DALI_INTERNAL_ATSPI_ACCESSIBILITY_IMPL_H
2 #define DALI_INTERNAL_ATSPI_ACCESSIBILITY_IMPL_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/public-api/actors/actor.h>
23 #include <dali/public-api/math/rect.h>
24 #include <dali/public-api/object/object-registry.h>
32 #include <unordered_map>
33 #include <unordered_set>
37 #include <dali/devel-api/adaptor-framework/accessibility.h>
38 #include <dali/integration-api/debug.h>
42 namespace Accessibility
44 class DALI_ADAPTOR_API Accessible;
45 class DALI_ADAPTOR_API Text;
46 class DALI_ADAPTOR_API Value;
47 class DALI_ADAPTOR_API Component;
48 class DALI_ADAPTOR_API Collection;
49 class DALI_ADAPTOR_API Action;
52 * @brief Base class for different accessibility bridges
54 * Bridge is resposible for initializing and managing connection on accessibility bus.
55 * Accessibility clients will not get any information about UI without initialized and upraised bridge.
56 * Concrete implementation depends on the accessibility technology available on the platform.
58 * @note This class is singleton.
60 struct DALI_ADAPTOR_API Bridge
62 enum class ForceUpResult
71 virtual ~Bridge() = default;
74 * @brief Get bus name which bridge is initialized on
76 virtual const std::string& GetBusName() const = 0;
79 * @brief Registers top level window
81 * Hierarchy of objects visible for accessibility clients is based on tree-like
82 * structure created from Actors objects. This method allows to connect chosen
83 * object as direct ancestor of application and therefore make it visible for
84 * accessibility clients.
86 virtual void AddTopLevelWindow(Accessible*) = 0;
89 * @brief Removes top level window
91 * Hierarchy of objects visible for accessibility clients is based on tree-like
92 * structure created from Actors objects. This method removes previously added
93 * window from visible accessibility objects.
95 virtual void RemoveTopLevelWindow(Accessible*) = 0;
98 * @brief Adds popup window
100 * Hierarchy of objects visible for accessibility clients is based on tree-like
101 * structure created from Actors objects. This method adds new popup to the tree.
103 virtual void AddPopup(Accessible*) = 0;
106 * @brief Removes popup window
108 * Hierarchy of objects visible for accessibility clients is based on tree-like
109 * structure created from Actors objects. This method removes previously added
112 virtual void RemovePopup(Accessible*) = 0;
115 * @brief Set name of current application which will be visible on accessibility bus
117 virtual void SetApplicationName(std::string) = 0;
120 * @brief Get object being root of accessibility tree
122 * @return handler to accessibility object
124 virtual Accessible* GetApplication() const = 0;
127 * @brief Find an object in accessibility tree
129 * @param[in] s path to object
131 * @return handler to accessibility object
133 virtual Accessible* FindByPath(const std::string& s) const = 0;
136 * @brief Show application on accessibility bus
138 virtual void ApplicationShown() = 0;
141 * @brief Hide application on accessibility bus
143 virtual void ApplicationHidden() = 0;
146 * @brief Initialize accessibility bus
148 virtual void Initialize() = 0;
151 * @brief Terminate accessibility bus
153 virtual void Terminate() = 0;
156 * @brief This method is called, when bridge is being activated.
158 virtual ForceUpResult ForceUp()
162 return ForceUpResult::ALREADY_UP;
164 data = std::make_shared<Data>();
166 return ForceUpResult::JUST_STARTED;
170 * @brief This method is called, when bridge is being deactivated.
172 virtual void ForceDown() = 0;
175 * @brief Check if bridge is activated or not.
176 * @return True if brige is activated.
184 * @brief Emits caret-moved event on at-spi bus.
186 virtual void EmitCaretMoved(Accessible* obj, unsigned int cursorPosition) = 0;
189 * @brief Emits active-descendant-changed event on at-spi bus.
191 virtual void EmitActiveDescendantChanged(Accessible* obj, Accessible* child) = 0;
194 * @brief Emits text-changed event on at-spi bus.
196 virtual void EmitTextChanged(Accessible* obj, TextChangedState state, unsigned int position, unsigned int length, const std::string& content) = 0;
199 * @brief Emits state-changed event on at-spi bus.
201 virtual void EmitStateChanged(Accessible* obj, State state, int val1, int val2 = 0) = 0;
204 * @brief Emits window event on at-spi bus.
206 virtual void Emit(Accessible* obj, WindowEvent we, unsigned int detail1 = 0) = 0;
209 * @brief Emits property-changed event on at-spi bus.
211 virtual void Emit(Accessible* obj, ObjectPropertyChangeEvent event) = 0;
214 * @brief Emits bounds-changed event on at-spi bus.
216 virtual void EmitBoundsChanged(Accessible* obj, Rect<> rect) = 0;
219 * @brief Emits key event on at-spi bus.
221 * Screen-reader might receive this event and reply, that given keycode is consumed. In that case
222 * further processing of the keycode should be ignored.
224 virtual Consumed Emit(KeyEventType type, unsigned int keyCode, const std::string& keyName, unsigned int timeStamp, bool isText) = 0;
227 * @brief Reads given text by screen reader
229 * @param text The text to read
230 * @param discardable If TRUE, reading can be discarded by subsequent reading requests,
231 * if FALSE the reading must finish before next reading request can be started
232 * @param callback the callback function that is called on reading signals emitted
233 * during processing of this reading request.
234 * Callback can be one of the following signals:
235 * ReadingCancelled, ReadingStopped, ReadingSkipped
237 virtual void Say(const std::string& text, bool discardable, std::function<void(std::string)> callback) = 0;
240 * @brief Force accessibility client to pause.
242 virtual void Pause() = 0;
245 * @brief Force accessibility client to resume.
247 virtual void Resume() = 0;
250 * @brief Cancels anything screen-reader is reading / has queued to read
252 * @param alsoNonDiscardable whether to cancel non-discardable readings as well
254 virtual void StopReading(bool alsoNonDiscardable) = 0;
257 * @brief Suppresses reading of screen-reader
259 * @param suppress whether to suppress reading of screen-reader
261 virtual void SuppressScreenReader(bool suppress) = 0;
264 * @brief Get screen reader status.
266 virtual bool GetScreenReaderEnabled() = 0;
269 * @brief Get ATSPI status.
271 virtual bool GetIsEnabled() = 0;
274 * @brief Returns instance of bridge singleton object.
276 static Bridge* GetCurrentBridge();
279 * @brief Blocks auto-initialization of AT-SPI bridge
281 * Use this only if your application starts before DBus does, and call it early in main()
282 * (before GetCurrentBridge() is called by anyone). GetCurrentBridge() will then return an
283 * instance of DummyBridge.
285 * When DBus is ready, call EnableAutoInit(). Please note that GetCurrentBridge() may still
286 * return an instance of DummyBridge if AT-SPI was disabled at compile time or using an
287 * environment variable, or if creating the real bridge failed.
289 * @see Dali::Accessibility::DummyBridge
290 * @see Dali::Accessibility::Bridge::EnableAutoInit
292 static void DisableAutoInit();
295 * @brief Re-enables auto-initialization of AT-SPI bridge
297 * Normal applications do not have to call this function. GetCurrentBridge() tries to
298 * initialize the AT-SPI bridge when it is called for the first time.
300 * @see Dali::Accessibility::Bridge::DisableAutoInit
301 * @see Dali::Accessibility::Bridge::AddTopLevelWindow
302 * @see Dali::Accessibility::Bridge::SetApplicationName
304 static void EnableAutoInit();
309 std::unordered_set<Accessible*> knownObjects;
311 Bridge* bridge = nullptr;
312 Actor highlightActor, currentlyHighlightedActor;
314 std::shared_ptr<Data> data;
315 friend class Accessible;
317 enum class AutoInitState
322 inline static AutoInitState autoInitState = AutoInitState::ENABLED;
325 * @brief Registers accessible object to be known in bridge object
327 * Bridge must known about all currently alive accessible objects, as some requst
328 * might come and object will be identified by number id (it's memory address).
329 * To avoid memory corruption number id is checked against set of known objects.
331 void RegisterOnBridge(Accessible*);
334 * @brief Tells bridge, that given object is considered root (doesn't have any parents).
336 * All root objects will have the same parent - application object. Application object
337 * is controlled by bridge and private.
339 void SetIsOnRootLevel(Accessible*);
343 * @brief Check if ATSPI is activated or not.
344 * @return True if ATSPI is activated.
348 if(Bridge::GetCurrentBridge() == nullptr)
352 if(Bridge::GetCurrentBridge()->GetIsEnabled() == false)
356 return Bridge::GetCurrentBridge()->IsUp();
360 * @brief Basic interface implemented by all accessibility objects
365 virtual ~Accessible();
367 using utf8_t = unsigned char;
370 * @brief Calculaties word boundaries in given utf8 text.
372 * s and length represents source text pointer and it's length respectively. langauge represents
373 * language to use. Word boundaries are returned as non-zero values in table breaks, which
374 * must be of size at least length.
376 void FindWordSeparationsUtf8(const utf8_t* s, size_t length, const char* language, char* breaks);
379 * @brief Calculaties line boundaries in given utf8 text.
381 * s and length represents source text pointer and it's length respectively. langauge represents
382 * language to use. Line boundaries are returned as non-zero values in table breaks, which
383 * must be of size at least length.
385 void FindLineSeparationsUtf8(const utf8_t* s, size_t length, const char* language, char* breaks);
388 * @brief Helper function for emiting active-descendant-changed event
390 void EmitActiveDescendantChanged(Accessible* obj, Accessible* child);
393 * @brief Helper function for emiting state-changed event
395 void EmitStateChanged(State state, int newValue1, int newValue2 = 0);
398 * @brief Helper function for emiting bounds-changed event
400 void EmitBoundsChanged(Rect<> rect);
403 * @brief Emit "showing" event.
404 * The method inform accessibility clients about "showing" state
406 * @param[in] showing flag pointing if object is showing
408 void EmitShowing(bool showing);
411 * @brief Emit "visible" event.
412 * The method inform accessibility clients about "visible" state
414 * @param[in] visible flag pointing if object is visible
416 void EmitVisible(bool visible);
419 * @brief Emit "highlighted" event.
420 * The method inform accessibility clients about "highlighted" state
422 * @param[in] set flag pointing if object is highlighted
424 void EmitHighlighted(bool set);
427 * @brief Emit "focused" event.
428 * The method inform accessibility clients about "focused" state
430 * @param[in] set flag pointing if object is focused
432 void EmitFocused(bool set);
435 * @brief Emit "text inserted" event
437 * @param[in] position caret position
438 * @param[in] length text length
439 * @param[in] content inserted text
441 void EmitTextInserted(unsigned int position, unsigned int length, const std::string& content);
444 * @brief Emit "text deleted" event
446 * @param[in] position caret position
447 * @param[in] length text length
448 * @param[in] content deleted text
450 void EmitTextDeleted(unsigned int position, unsigned int length, const std::string& content);
453 * @brief Emit "caret moved" event
455 * @param[in] cursorPosition new caret position
457 void EmitTextCaretMoved(unsigned int cursorPosition);
460 * @brief Emit "highlighted" event
462 * @param[in] we enumerated window event
463 * @param[in] detail1 additional parameter which interpretation depends on chosen event
465 void Emit(WindowEvent we, unsigned int detail1 = 0);
468 * @brief Emits property-changed event
469 * @param[in] event Property changed event
471 void Emit(ObjectPropertyChangeEvent event);
474 * @brief Get accessibility name
476 * @return string with name
478 virtual std::string GetName() = 0;
481 * @brief Get accessibility description
483 * @return string with description
485 virtual std::string GetDescription() = 0;
490 * @return handler to accessibility object
492 virtual Accessible* GetParent() = 0;
495 * @brief Get count of children
497 * @return unsigned integer value
499 virtual size_t GetChildCount() = 0;
502 * @brief Get collection with all children
504 * @return collection of accessibility objects
506 virtual std::vector<Accessible*> GetChildren();
509 * @brief Get nth child
511 * @return accessibility object
513 virtual Accessible* GetChildAtIndex(size_t index) = 0;
516 * @brief Get index that current object has in its parent's children collection
518 * @return unsigned integer index
520 virtual size_t GetIndexInParent() = 0;
523 * @brief Get accessibility role
525 * @return Role enumeration
527 * @see Dali::Accessibility::Role
529 virtual Role GetRole() = 0;
532 * @brief Get name of accessibility role
534 * @return string with human readable role converted from enumeration
536 * @see Dali::Accessibility::Role
537 * @see Accessibility::Accessible::GetRole
539 virtual std::string GetRoleName();
542 * @brief Get localized name of accessibility role
544 * @return string with human readable role translated according to current
547 * @see Dali::Accessibility::Role
548 * @see Accessibility::Accessible::GetRole
549 * @see Accessibility::Accessible::GetRoleName
551 * @note translation is not supported in this version
553 virtual std::string GetLocalizedRoleName();
556 * @brief Get accessibility states
558 * @return collection of states
560 * @note States class is instatation of ArrayBitset template class
562 * @see Dali::Accessibility::State
563 * @see Dali::Accessibility::ArrayBitset
565 virtual States GetStates() = 0;
568 * @brief Get accessibility attributes
570 * @return map of attributes and their values
572 virtual Attributes GetAttributes() = 0;
575 * @brief Check if this is proxy
577 * @return True if this is proxy
579 virtual bool IsProxy();
582 * @brief Get unique address on accessibility bus
584 * @return class containing address
586 * @see Dali::Accessibility::Address
588 virtual Address GetAddress();
591 * @brief Get accessibility object, which is "default label" for this object
593 virtual Accessible* GetDefaultLabel();
596 * @brief Depute an object to perform provided gesture
598 * @param[in] gestureInfo structure describing the gesture
600 * @return true on success, false otherwise
602 * @see Dali::Accessibility::GestureInfo
604 virtual bool DoGesture(const GestureInfo& gestureInfo) = 0;
607 * @brief Re-emits selected states of an Accessibility Object
609 * @param[in] states chosen states to re-emit
610 * @param[in] doRecursive if true all children of the Accessibility Object will also re-emit the states
612 void NotifyAccessibilityStateChange(Dali::Accessibility::States states, bool doRecursive);
615 * @brief Get information about current object and all relations that connects
616 * it with other accessibility objects
618 * @return iterable collection of Relation objects
620 * @see Dali::Accessibility::Relation
622 virtual std::vector<Relation> GetRelationSet() = 0;
625 * @brief Get all implemented interfaces
627 * @return collection of strings with implemented interfaces
629 std::vector<std::string> GetInterfaces();
632 * @brief Check if object is on root level
634 bool GetIsOnRootLevel() const
636 return isOnRootLevel;
640 * @brief The method registers functor resposible for converting Actor into Accessible
641 * @param functor returning Accessible handle from Actor object
643 static void RegisterControlAccessibilityGetter(std::function<Accessible*(Dali::Actor)> functor);
646 * @brief Acquire Accessible object from Actor object
648 * @param[in] actor Actor object
649 * @param[in] root true, if it's top level object (window)
651 * @return handle to Accessible object
653 static Accessible* Get(Dali::Actor actor, bool root = false);
657 Accessible(const Accessible&) = delete;
658 Accessible(Accessible&&) = delete;
659 Accessible& operator=(const Accessible&) = delete;
660 Accessible& operator=(Accessible&&) = delete;
661 std::shared_ptr<Bridge::Data> GetBridgeData();
664 static Dali::Actor GetHighlightActor();
665 static void SetHighlightActor(Dali::Actor actor);
666 static Dali::Actor GetCurrentlyHighlightedActor();
667 static void SetCurrentlyHighlightedActor(Dali::Actor);
668 static void SetObjectRegistry(ObjectRegistry registry);
673 std::weak_ptr<Bridge::Data> bridgeData;
674 bool isOnRootLevel = false;
678 * @brief Interface enabling to perform provided actions
680 class Action : public virtual Accessible
684 * @brief Get name of action with given index
686 * @param[in] index index of action
688 * @return string with name of action
690 virtual std::string GetActionName(size_t index) = 0;
693 * @brief Get translated name of action with given index
695 * @param[in] index index of action
697 * @return string with name of action translated according to current translation domain
699 * @note translation is not supported in this version
701 virtual std::string GetLocalizedActionName(size_t index) = 0;
704 * @brief Get description of action with given index
706 * @param[in] index index of action
708 * @return string with description of action
710 virtual std::string GetActionDescription(size_t index) = 0;
713 * @brief Get key code binded to action with given index
715 * @param[in] index index of action
717 * @return string with key name
719 virtual std::string GetActionKeyBinding(size_t index) = 0;
722 * @brief Get number of provided actions
724 * @return unsigned integer with number of actions
726 virtual size_t GetActionCount() = 0;
729 * @brief Perform an action with given index
731 * @param index index of action
733 * @return true on success, false otherwise
735 virtual bool DoAction(size_t index) = 0;
738 * @brief Perform an action with given name
740 * @param name name of action
742 * @return true on success, false otherwise
744 virtual bool DoAction(const std::string& name) = 0;
748 * @brief Interface enabling advanced quering of accessibility objects
750 * @note since all mathods can be implemented inside bridge,
751 * none methods have to be overrided
753 class Collection : public virtual Accessible
759 * @brief Interface representing objects having screen coordinates
761 class Component : public virtual Accessible
765 * @brief Get rectangle describing size
767 * @param[in] ctype enumeration with type of coordinate systems
769 * @return Rect<> object
773 virtual Rect<> GetExtents(CoordType ctype) = 0;
776 * @brief Get layer current object is localized on
778 * @return enumeration pointing layer
780 * @see Dali::Accessibility::ComponentLayer
782 virtual ComponentLayer GetLayer() = 0;
785 * @brief Get value of z-order
787 * @return value of z-order
789 virtual int16_t GetMdiZOrder() = 0;
792 * @brief Set current object as "focused"
794 * @return true on success, false otherwise
796 virtual bool GrabFocus() = 0;
799 * @brief Get value of alpha channel
801 * @return alpha channel value in range [0.0, 1.0]
803 virtual double GetAlpha() = 0;
806 * @brief Set current object as "highlighted"
808 * The method assings "highlighted" state, simultaneously removing it
809 * from currently highlighted object.
811 * @return true on success, false otherwise
813 virtual bool GrabHighlight() = 0;
816 * @brief Set current object as "unhighlighted"
818 * The method removes "highlighted" state from object.
820 * @return true on success, false otherwise
822 * @see Dali:Accessibility::State
824 virtual bool ClearHighlight() = 0;
827 * @brief Check whether object can be scrolled
829 * @return true if object is scrollable, false otherwise
831 * @see Dali:Accessibility::State
833 virtual bool IsScrollable();
836 * @brief Get Accessible object containing given point
838 * @param[in] p two-dimensional point
839 * @param[in] ctype enumeration with type of coordinate system
841 * @return handle to last child of current object which contains given point
843 * @see Dali::Accessibility::Point
845 virtual Accessible* GetAccessibleAtPoint(Point p, CoordType ctype);
848 * @brief Check if current object contains given point
850 * @param[in] p two-dimensional point
851 * @param[in] ctype enumeration with type of coordinate system
853 * @return handle to Accessible object
855 * @see Dali::Accessibility::Point
857 virtual bool Contains(Point p, CoordType ctype);
861 * @brief Interface representing objects which can store numeric value
863 class Value : public virtual Accessible
867 * @brief Get the lowest possible value
869 * @return double value
871 virtual double GetMinimum() = 0;
874 * @brief Get current value
876 * @return double value
878 virtual double GetCurrent() = 0;
881 * @brief Get the highest possible value
883 * @return double value
885 virtual double GetMaximum() = 0;
890 * @param[in] val double value
892 * @return true if value could have been assigned, false otherwise
894 virtual bool SetCurrent(double val) = 0;
897 * @brief Get the lowest increment that can be distinguished
899 * @return double value
901 virtual double GetMinimumIncrement() = 0;
905 * @brief Interface representing objects which can store immutable texts
907 * @see Dali::Accessibility::EditableText
909 class DALI_ADAPTOR_API Text : public virtual Accessible
913 * @brief Get stored text in given range
915 * @param[in] startOffset index of first character
916 * @param[in] endOffset index of first character after the last one expected
918 * @return substring of stored text
920 virtual std::string GetText(size_t startOffset, size_t endOffset) = 0;
923 * @brief Get number of all stored characters
925 * @return number of characters
927 virtual size_t GetCharacterCount() = 0;
930 * @brief Get caret offset
932 * @return Value of caret offset
934 virtual size_t GetCaretOffset() = 0;
937 * @brief Set caret offset
939 * @param[in] offset Caret offset
941 * @return True if successful
943 virtual bool SetCaretOffset(size_t offset) = 0;
946 * @brief Get substring of stored text truncated in concrete gradation
948 * @param[in] offset position in stored text
949 * @param[in] boundary enumeration describing text gradation
951 * @return Range structure containing acquired text and offsets in original string
953 * @see Dali::Accessibility::Range
955 virtual Range GetTextAtOffset(size_t offset, TextBoundary boundary) = 0;
958 * @brief Get selected text
960 * @param[in] selectionNum selection index
961 * @note Currently only one selection (i.e. with index = 0) is supported
963 * @return Range structure containing acquired text and offsets in original string
965 * @see Dali::Accessibility::Range
967 virtual Range GetSelection(size_t selectionNum) = 0;
970 * @brief Remove selection
972 * @param[in] selectionNum selection index
973 * @note Currently only one selection (i.e. with index = 0) is supported
975 * @return bool on success, false otherwise
977 virtual bool RemoveSelection(size_t selectionNum) = 0;
980 * @brief Get selected text
982 * @param[in] selectionNum selection index
983 * @param[in] startOffset index of first character
984 * @param[in] endOffset index of first character after the last one expected
986 * @note Currently only one selection (i.e. with index = 0) is supported
988 * @return true on success, false otherwise
990 virtual bool SetSelection(size_t selectionNum, size_t startOffset, size_t endOffset) = 0;
994 * @brief Interface representing objects which can store editable texts
996 * @note Paste method is entirely implemented inside bridge
998 * @see Dali::Accessibility::EditableText
1000 class DALI_ADAPTOR_API EditableText : public virtual Accessible
1004 * @brief Copy text in range to system clipboard
1006 * @param[in] startPosition index of first character
1007 * @param[in] endPosition index of first character after the last one expected
1009 * @return true on success, false otherwise
1011 virtual bool CopyText(size_t startPosition, size_t endPosition) = 0;
1014 * @brief Cut text in range to system clipboard
1016 * @param[in] startPosition index of first character
1017 * @param[in] endPosition index of first character after the last one expected
1019 * @return true on success, false otherwise
1021 virtual bool CutText(size_t startPosition, size_t endPosition) = 0;
1024 * @brief Delete text in range
1026 * @param[in] startPosition index of first character
1027 * @param[in] endPosition index of first character after the last one expected
1029 * @return true on success, false otherwise
1031 virtual bool DeleteText(size_t startPosition, size_t endPosition) = 0;
1034 * @brief Insert text at startPosition
1036 * @param[in] startPosition index of first character
1037 * @param[in] text text content
1039 * @return true on success, false otherwise
1041 virtual bool InsertText(size_t startPosition, std::string text) = 0;
1044 * @brief Replace text with content
1046 * @param[in] newContents text content
1048 * @return true on success, false otherwise
1050 virtual bool SetTextContents(std::string newContents) = 0;
1054 * @brief minimalistic, always empty Accessible object with settable address
1056 * For those situations, where you want to return address in different bridge
1057 * (embedding for example), but the object itself ain't planned to be used otherwise.
1058 * This object has null parent, no children, empty name and so on
1060 class DALI_ADAPTOR_API EmptyAccessibleWithAddress : public virtual Accessible
1063 EmptyAccessibleWithAddress() = default;
1064 EmptyAccessibleWithAddress(Address address)
1065 : address(std::move(address))
1069 void SetAddress(Address address)
1071 this->address = std::move(address);
1074 std::string GetName() override
1078 std::string GetDescription() override
1082 Accessible* GetParent() override
1086 size_t GetChildCount() override
1090 std::vector<Accessible*> GetChildren() override
1094 Accessible* GetChildAtIndex(size_t index) override
1096 throw std::domain_error{"out of bounds index (" + std::to_string(index) + ") - no children"};
1098 size_t GetIndexInParent() override
1100 return static_cast<size_t>(-1);
1102 Role GetRole() override
1106 std::string GetRoleName() override;
1107 States GetStates() override
1111 Attributes GetAttributes() override
1115 Address GetAddress() override
1119 bool DoGesture(const GestureInfo& gestureInfo) override
1123 std::vector<Relation> GetRelationSet() override
1132 } // namespace Accessibility
1135 #endif // DALI_INTERNAL_ATSPI_ACCESSIBILITY_IMPL_H