[Tizen](ATSPI) squashed implementation
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / controls / control-devel.h
index 879c767..d13bcb0 100755 (executable)
@@ -2,7 +2,7 @@
 #define DALI_TOOLKIT_CONTROL_DEVEL_H
 
 /*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -23,7 +23,6 @@
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control.h>
 #include <dali-toolkit/devel-api/visual-factory/visual-base.h>
-#include <dali-toolkit/devel-api/layouting/layout-item.h>
 
 namespace Dali
 {
@@ -53,22 +52,22 @@ namespace Property
 
 enum
 {
-  STYLE_NAME        = Control::Property::STYLE_NAME,
-  BACKGROUND_COLOR  = Control::Property::BACKGROUND_COLOR,
-  BACKGROUND_IMAGE  = Control::Property::BACKGROUND_IMAGE,
-  KEY_INPUT_FOCUS   = Control::Property::KEY_INPUT_FOCUS,
-  BACKGROUND        = Control::Property::BACKGROUND,
-  MARGIN            = Control::Property::MARGIN,
-  PADDING           = Control::Property::PADDING,
+  STYLE_NAME            = Control::Property::STYLE_NAME,
+  RESERVED_PROPERTY_01  = Control::Property::RESERVED_PROPERTY_01,
+  RESERVED_PROPERTY_02  = Control::Property::RESERVED_PROPERTY_02,
+  KEY_INPUT_FOCUS       = Control::Property::KEY_INPUT_FOCUS,
+  BACKGROUND            = Control::Property::BACKGROUND,
+  MARGIN                = Control::Property::MARGIN,
+  PADDING               = Control::Property::PADDING,
 
   /**
    * @brief Displays a tooltip when the control is hovered over.
    * @details Name "tooltip", type Property::STRING, Property::ARRAY or Property::MAP.
-   *          If Property::STRING, then the style specified in the stylesheet is used.
-   *          If Property::ARRAY of Visuals then all are displayed in one row.
-   *          If Property::MAP, then it should be a map of Tooltip properties.
+   *         If Property::STRING, then the style specified in the stylesheet is used.
+   *         If Property::ARRAY of Visuals then all are displayed in one row.
+   *         If Property::MAP, then it should be a map of Tooltip properties.
    * @note The tooltip is only activated if display content is received, i.e. a string (text) or visual to show.
-   *       The rest is used to just build up the style of the tooltip (i.e. background, text color/point-size etc.)
+   *         The rest is used to just build up the style of the tooltip (i.e. background, text color/point-size etc.)
    * @note When retrieved, a Property::MAP is returned.
    * @see Toolkit::Tooltip
    */
@@ -84,7 +83,7 @@ enum
 
   /**
    * @brief The current sub state of the control.
-   * @details Name "subState", type Property::INTEGER or Property::STRING. The enumeration used is dependent on the derived control.
+   * @details Name "subState", type Property::INTEGER or Property::STRING. The numeration used is dependent on the derived control.
    *
    * @see DevelControl::State
    */
@@ -116,7 +115,52 @@ enum
    * @details Name "downFocusableActorId", type Property::INTEGER.
    *
    */
-  DOWN_FOCUSABLE_ACTOR_ID = PADDING + 7
+  DOWN_FOCUSABLE_ACTOR_ID = PADDING + 7,
+
+  /**
+   * @brief The name of object visible in accessibility tree.
+   * @details Name "accessibilityName", type Property::STRING.
+   */
+  ACCESSIBILITY_NAME,
+
+  /**
+   * @brief The description of object visible in accessibility tree.
+   * @details Name "accessibilityDescription", type Property::STRING.
+   */
+  ACCESSIBILITY_DESCRIPTON,
+
+  /**
+   * @brief Current translation domain for accessibility clients.
+   * @details Name "accessibilityTranslationDomain", type Property::STRING.
+   */
+  ACCESSIBILITY_TRANSLATION_DOMAIN,
+
+  /**
+   * @brief Role being performed in accessibility hierarchy.
+   * @details Name "accessibilityRole", type Property::INTEGER.
+   * @note Property is stored as INTEGER, however its interpretaton
+   * depend on enumeration Dali::Accessibility::Role and should be read and written
+   * with usage of enumerated values.
+   * @see Dali::Accessibility::Role
+   */
+  ACCESSIBILITY_ROLE,
+  /**
+   * @brief Mark of able to highlight object.
+   * @details Name "accessibilityHighlightable", type Property::BOOLEAN.
+   */
+  ACCESSIBILITY_HIGHLIGHTABLE,
+  /**
+   * @brief Set of accessibility attributes describing object in accessibility hierarchy
+   * @details Name "accessibilityAttributes", type Property::MAP
+   */
+  ACCESSIBILITY_ATTRIBUTES,
+
+  /**
+   * @brief Boolean flag describing object as animated
+   * @details Name "accessibilityAnimated", type Property::BOOLEAN
+   * @note Flag set to true will prevent BoundChanged accessibility signal from emiting
+   */
+  ACCESSIBILITY_ANIMATED
 };
 
 } // namespace Property
@@ -270,42 +314,215 @@ DALI_TOOLKIT_API void DoAction( Control& control, Dali::Property::Index visualIn
  */
 DALI_TOOLKIT_API void SetInputMethodContext( Internal::Control& control, InputMethodContext& inputMethodContext );
 
-/*
- * @brief Get the layout associated with this control, if any.
+/**
+ * @brief Visual Event signal type
+ */
+using VisualEventSignalType = Signal< void ( Control, Dali::Property::Index, Dali::Property::Index ) >;
+
+/**
+ * @brief This signal is emitted when a visual has an event to notify.
  *
- * @return A handle to the layout, or empty.
+ * A callback of the following type may be connected:
+ * @code
+ *   void YourCallbackName( Control control, Dali::Property::Index visualIndex, Dali::Property::Index signalId );
+ * @endcode
+ * @return The signal to connect to
  */
-DALI_TOOLKIT_API Toolkit::LayoutItem GetLayout( Internal::Control& control );
+DALI_TOOLKIT_API VisualEventSignalType& VisualEventSignal( Control control );
 
-/*
- * @brief Get the layout associated with a control, if any.
+/**
+ * @brief The signal is emmited as a succession of "activate" signal send by accessibility client.
+ * @return The signal to connect to
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityActivateSignalType &AccessibilityActivateSignal( Toolkit::Control control );
+
+/**
+ * @brief The signal is emmited when text send via Dali::Accessibility::Bridge::Say
+ * was placed in TTS queue but other text with higher priority prevented it from being read.
+ *
+ * @return The signal to connect to
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityReadingSkippedSignalType &AccessibilityReadingSkippedSignal( Toolkit::Control control );
+
+/**
+ * @brief The signal is emmited when text send via Dali::Accessibility::Bridge::Say
+ * was placed in TTS queue and reading was started but other text with higher priority cancelled it.
+ *
+ * @return The signal to connect to
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityReadingCancelledSignalType &AccessibilityReadingCancelledSignal( Toolkit::Control control );
+
+/**
+ * @brief The signal is emmited when text send via Dali::Accessibility::Bridge::Say
+ * was fully read by TTS module.
+ *
+ * @return The signal to connect to
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityReadingStoppedSignalType &AccessibilityReadingStoppedSignal( Toolkit::Control control );
+
+/**
+ * @brief The signal is emmited when accessibility client asks for object's name.
+ *
+ * Connected callback should assign name to std::string call parameter.
+ * Accessibility name can be stored in two ways:
+ *     this signal,
+ *     ACCESSIBILITY_NAME property,
+ * Priority is as above. If none is used, default implementation is provided.
+ * @return [description]
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityGetNameSignalType &AccessibilityGetNameSignal( Toolkit::Control control );
+
+/**
+ * @brief The signal is emmited when accessibility client asks for object's description.
+ *
+ * Connected callback should assign description to std::string call parameter.
+ * Accessibility description can be stored in two ways:
+ *     this signal,
+ *     ACCESSIBILITY_DESCRIPTON property,
+ * Priority is as above. If none is used, default implementation is provided.
+ * @return signal handler
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityGetDescriptionSignalType &AccessibilityGetDescriptionSignal( Toolkit::Control control );
+
+/**
+ * @brief The signal is emitted when accessibility client call "DoGesture" method via IPC mechanism.
+ *
+ * This signal allows developers to serve incoming gesture in specific way.
+ * @return signal handler
+ */
+DALI_TOOLKIT_API Toolkit::Control::AccessibilityDoGestureSignalType &AccessibilityDoGestureSignal( Toolkit::Control control );
+
+/**
+ * @brief The method allows connection with other actor with usage of concrete accessibility relation type.
+ *
+ * @param control object to append attribute to
+ * @param destination Actor object
+ * @param relation    enumerated value describing relation
+ */
+DALI_TOOLKIT_API void AppendAccessibilityRelation( Dali::Actor control, Actor destination, Dali::Accessibility::RelationType relation );
+
+/**
+ * @brief The method allows removing relation
+ *
+ * @param control object to append attribute to
+ * @param destination Actor object
+ * @param relation    enumerated value describing relation
+ */
+DALI_TOOLKIT_API void RemoveAccessibilityRelation( Dali::Actor control, Actor destination, Dali::Accessibility::RelationType relation );
+
+/**
+ * @brief The method returns collection accessibility addresses representing objects connected with current object
+ *
+ * @param control object to append attribute to
+ * @return std::vector, where index is casted value of Accessibility::RelationType and value is std::vector of type Accessibility::Address
+ */
+DALI_TOOLKIT_API std::vector<std::vector<Accessibility::Address>> GetAccessibilityRelations( Dali::Actor control );
+
+/**
+ * @brief The method removes all previously appended relations
+ *
+ * @param control object to append attribute to
+ */
+DALI_TOOLKIT_API void ClearAccessibilityRelations( Dali::Actor control );
+
+/**
+ * @brief The method allows to add or modify value matched with given key.
+ * Modification take place if key was previously set.
+ *
+ * @param control object to append attribute to
+ * @param key   std::string value
+ * @param value std::string value
+ */
+DALI_TOOLKIT_API void AppendAccessibilityAttribute( Dali::Actor control, const std::string& key, const std::string value );
+
+/**
+ * @brief The method erases key with its value from accessibility attributes
+ * @param control object to append attribute to
+ * @param key std::string value
+ */
+DALI_TOOLKIT_API void RemoveAccessibilityAttribute( Dali::Actor control, const std::string& key );
+
+/**
+ * @brief The method clears accessibility attributes
+ *
+ * @param control object to append attribute to
+ */
+DALI_TOOLKIT_API void ClearAccessibilityAttributes( Dali::Actor control );
+
+/**
+ * @brief The method inserts reading information of an accessible object into attributes
+ *
+ * @param control object to append attribute to
+ * @param types Reading information types
+ */
+DALI_TOOLKIT_API void SetAccessibilityReadingInfoType( Dali::Actor control, const Dali::Accessibility::ReadingInfoTypes types );
+
+/**
+ * @brief The method returns reading information of an accessible object
  *
- * @return A handle to the layout, or empty.
+ * @param control object to append attribute to
+ * @return Reading information types
  */
-DALI_TOOLKIT_API Toolkit::LayoutItem GetLayout( Control control );
+DALI_TOOLKIT_API Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType( Dali::Actor control );
 
 /**
- * @brief Set the layout on this control.
+ * @brief The method erases highlight.
  *
- * @param[in] control The internal Control to set the layout on
- * @param[in] layout Pointer to the layout
+ * @param control object to append attribute to
+ * @return bool value, false when it is not possible or something went wrong, at the other way true.
  */
-DALI_TOOLKIT_API void SetLayout( Internal::Control& control, Toolkit::LayoutItem layout );
+DALI_TOOLKIT_API bool ClearAccessibilityHighlight( Dali::Actor control );
 
 /**
- * @brief Set the layout on a control.
+ * @brief The method grabs highlight.
  *
- * @param[in] control The Control to set the layout on
- * @param[in] layout Pointer to the layout
+ * @param control object to append attribute to
+ * @return bool value, false when it is not possible or something went wrong, at the other way true.
  */
-DALI_TOOLKIT_API void SetLayout( Control control, Toolkit::LayoutItem layout );
+DALI_TOOLKIT_API bool GrabAccessibilityHighlight( Dali::Actor control );
+
+/**
+ * @brief The metod presents bitset of control's states.
+ *
+ * @param control object to append attribute to
+ * @return Dali::Accessibility::States is vector of enumerated State.
+ */
+DALI_TOOLKIT_API Dali::Accessibility::States GetAccessibilityStates( Dali::Actor control );
+
+/**
+ * @brief The method force sending notifications about current states to accessibility clients
+ *
+ * @param control object to append attribute to
+ * @param states      mask with states expected to broadcast
+ * @param doRecursive flag pointing if notifications of children's state would be sent
+ */
+DALI_TOOLKIT_API void NotifyAccessibilityStateChange( Dali::Actor control, Dali::Accessibility::States states, bool doRecursive );
+
+/**
+ * The method allows to set specific constructor for creating accessibility structure
+ *
+ * Thank to this method hierarchy of accessibility objects can be based on internal hierarchy of Actors.
+ * It prevents from necessity of keeping two trees synchronized.
+ * The method should be called inside constructors of all classes inheriting from Control.
+ *
+ * Possible usage can be as follows:
+ * @code
+ *   SetAccessibilityConstructor( []( Dali::Actor actor ) {
+       return std::unique_ptr< Dali::Accessibility::Accessible >(
+       new AccessibleImpl( actor, Dali::Accessibility::Role::DIALOG, true ) );
+      } );
+  * @endcode
+  *
+  * param constructor callback creating Accessible object
+  */
+DALI_TOOLKIT_API void SetAccessibilityConstructor( Dali::Actor control, std::function<std::unique_ptr<Dali::Accessibility::Accessible>(Dali::Actor)> constructor);
 
 /**
- * @brief Request the control layout.
+ * Returns accessibility object bound to actor, if any
  *
- * @param[in] control The internal Control to request the layout of
+ * This method won't bound new accessibility object. Use Dali::Accessibility::Accessible::Get in that case.
  */
-DALI_TOOLKIT_API void RequestLayout( Internal::Control& control );
+DALI_TOOLKIT_API Dali::Accessibility::Accessible *GetBoundAccessibilityObject( Dali::Actor control );
 
 } // namespace DevelControl