+ /**
+ * @brief Filter an key event.
+ * @param[in] event The key to be filtered.
+ * @return True if the key handled, otherwise false.
+ */
+ bool FilterKeyEvent(const KeyEvent& event);
+
+ /**
+ * @brief Adds accessibility attribute
+ * @param[in] key Attribute name to set
+ * @param[in] value Attribute value to set
+ *
+ * Attribute is added if not existed previously or updated
+ * if existed.
+ */
+ void AppendAccessibilityAttribute(const std::string& key,
+ const std::string value);
+
+ /**
+ * @brief Removes accessibility attribute
+ * @param[in] key Attribute name to remove
+ *
+ * Function does nothing if attribute doesn't exist.
+ */
+ void RemoveAccessibilityAttribute(const std::string& key);
+
+ /**
+ * @brief Removes all accessibility attributes
+ */
+ void ClearAccessibilityAttributes();
+
+ /**
+ * @brief Sets reading info type attributes
+ * @param[in] types info type attributes to set
+ *
+ * This function sets, which part of object will be read out
+ * by screen-reader.
+ */
+ void SetAccessibilityReadingInfoType(const Dali::Accessibility::ReadingInfoTypes types);
+
+ /**
+ * @brief Gets currently active reading info type attributes
+ */
+ Dali::Accessibility::ReadingInfoTypes GetAccessibilityReadingInfoType() const;
+
+ /**
+ * @copydoc DevelControl::VisualEventSignal()
+ */
+ DevelControl::VisualEventSignalType& VisualEventSignal();
+
+ /**
+ * @brief Sets the shadow with a property map.
+ * @param[in] map The shadow property map
+ */
+ void SetShadow(const Property::Map& map);
+
+ /**
+ * @brief Clear the shadow.
+ */
+ void ClearShadow();
+
+ /**
+ * @copydoc DevelControl::GetVisualProperty()
+ */
+ Dali::Property GetVisualProperty(Dali::Property::Index index, Dali::Property::Key visualPropertyKey);
+
+private:
+ /**
+ * Used as an alternative to boolean so that it is obvious whether a visual is enabled/disabled.
+ */
+ struct VisualState
+ {
+ enum Type
+ {
+ DISABLED = 0, ///< Visual disabled.
+ ENABLED = 1 ///< Visual enabled.
+ };
+ };
+
+ /**
+ * Used as an alternative to boolean so that it is obvious whether a visual's depth value has been set or not by the caller.
+ */
+ struct DepthIndexValue
+ {
+ enum Type
+ {
+ NOT_SET = 0, ///< Visual depth value not set by caller.
+ SET = 1 ///< Visual depth value set by caller.
+ };
+ };
+
+ /**
+ * @brief Adds the visual to the list of registered visuals.
+ * @param[in] index The Property index of the visual, used to reference visual
+ * @param[in,out] visual The visual to register, which can be altered in this function
+ * @param[in] enabled false if derived class wants to control when visual is set on stage
+ * @param[in] depthIndexValueSet Set to true if the depthIndex has actually been set manually
+ * @param[in] depthIndex The visual's depth-index is set to this
+ *
+ * @note Registering a visual with an index that already has a registered visual will replace it. The replacement will
+ * occur once the replacement visual is ready (loaded).
+ */
+ void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, VisualState::Type enabled, DepthIndexValue::Type depthIndexValueSet, int depthIndex = 0);
+
+ /**
+ * @brief Emits the resource ready signal.
+ */
+ void EmitResourceReadySignal();
+
+ /**
+ * @brief Callbacks called on idle.
+ */
+ void OnIdleCallback();
+
+public:
+ Control& mControlImpl;
+ DevelControl::State mState;
+ std::string mSubStateName;
+ Property::Map mAccessibilityAttributes;
+
+ int mLeftFocusableActorId; ///< Actor ID of Left focusable control.
+ int mRightFocusableActorId; ///< Actor ID of Right focusable control.
+ int mUpFocusableActorId; ///< Actor ID of Up focusable control.
+ int mDownFocusableActorId; ///< Actor ID of Down focusable control.
+
+ RegisteredVisualContainer mVisuals; ///< Stores visuals needed by the control, non trivial type so std::vector used.
+ std::string mStyleName;
+ Vector4 mBackgroundColor; ///< The color of the background visual
+ Vector3* mStartingPinchScale; ///< The scale when a pinch gesture starts, TODO: consider removing this
+ Extents mMargin; ///< The margin values
+ Extents mPadding; ///< The padding values
+ Toolkit::Control::KeyEventSignalType mKeyEventSignal;
+ Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusGainedSignal;
+ Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusLostSignal;
+ Toolkit::Control::ResourceReadySignalType mResourceReadySignal;
+ DevelControl::VisualEventSignalType mVisualEventSignal;
+ Toolkit::DevelControl::AccessibilityActivateSignalType mAccessibilityActivateSignal;
+ Toolkit::DevelControl::AccessibilityReadingSkippedSignalType mAccessibilityReadingSkippedSignal;
+ Toolkit::DevelControl::AccessibilityReadingPausedSignalType mAccessibilityReadingPausedSignal;
+ Toolkit::DevelControl::AccessibilityReadingResumedSignalType mAccessibilityReadingResumedSignal;
+ Toolkit::DevelControl::AccessibilityReadingCancelledSignalType mAccessibilityReadingCancelledSignal;
+ Toolkit::DevelControl::AccessibilityReadingStoppedSignalType mAccessibilityReadingStoppedSignal;
+
+ Toolkit::DevelControl::AccessibilityGetNameSignalType mAccessibilityGetNameSignal;
+ Toolkit::DevelControl::AccessibilityGetDescriptionSignalType mAccessibilityGetDescriptionSignal;
+ Toolkit::DevelControl::AccessibilityDoGestureSignalType mAccessibilityDoGestureSignal;
+
+ std::string mAccessibilityName;
+ bool mAccessibilityNameSet = false;
+
+ std::string mAccessibilityDescription;
+ bool mAccessibilityDescriptionSet = false;
+
+ std::string mAccessibilityTranslationDomain;
+ bool mAccessibilityTranslationDomainSet = false;
+
+ bool mAccessibilityHighlightable = false;
+ bool mAccessibilityHighlightableSet = false;
+
+ Dali::Accessibility::Role mAccessibilityRole = Dali::Accessibility::Role::UNKNOWN;
+
+ std::vector<std::vector<Accessibility::Address>> mAccessibilityRelations;
+ bool mAccessibilityAnimated = false;