+ // Keyboard Navigation
+
+ /**
+ * @brief Sets whether this control supports two dimensional
+ * keyboard navigation (i.e. whether it knows how to handle the
+ * keyboardn focus movement between its child actors).
+ *
+ * The control doesn't support it by default.
+ * @param[in] isSupported Whether this control supports two dimensional keyboard navigation.
+ */
+ void SetKeyboardNavigationSupport(bool isSupported);
+
+ /**
+ * @brief Gets whether this control supports two dimensional keyboard navigation.
+ *
+ * @return true if this control supports two dimensional keyboard navigation.
+ */
+ bool IsKeyboardNavigationSupported();
+
+ // Called by Focus Managers
+
+ /**
+ * @brief Called by the focus manager and keyboard focus manager to Activate the Control
+ */
+ DALI_INTERNAL void Activate();
+
+ /**
+ * @brief This method should be overridden by deriving classes when they wish to respond the accessibility
+ * pan gesture.
+ *
+ * @param[in] gesture The pan gesture.
+ * @return true if the pan gesture has been consumed by this control
+ */
+ virtual bool OnAccessibilityPan(PanGesture gesture);
+
+ /**
+ * @brief This method should be overridden by deriving classes when they wish to respond the accessibility
+ * touch event.
+ *
+ * @param[in] touchEvent The touch event.
+ * @return true if the touch event has been consumed by this control
+ */
+ virtual bool OnAccessibilityTouch(const TouchEvent& touchEvent);
+
+ /**
+ * @brief This method should be overridden by deriving classes when they wish to respond
+ * the accessibility up and down action (i.e. value change of slider control).
+ *
+ * @param[in] isIncrease Whether the value should be increased or decreased
+ * @return true if the value changed action has been consumed by this control
+ */
+ virtual bool OnAccessibilityValueChange(bool isIncrease);
+
+ // Called by the RelayoutController
+
+ /**
+ * @brief Called by the RelayoutController to negotiate the size of a control.
+ *
+ * The size allocated by the the algorithm is passed in which the
+ * control must adhere to. A container is passed in as well which
+ * the control should populate with actors it has not / or does not
+ * need to handle in its size negotiation.
+ *
+ * @param[in] size The allocated size.
+ * @param[in,out] container The container that holds actors that are fed back into the
+ * RelayoutController algorithm.
+ */
+ DALI_INTERNAL void NegotiateSize( const Vector2& size, ActorSizeContainer& container );
+
+ // Keyboard Focus
+
+ /**
+ * @brief Sets whether this control is a focus group for keyboard navigation.
+ *
+ * (i.e. the scope of keyboard focus movement
+ * can be limitied to its child actors). The control is not a focus group by default.
+ * @param[in] isFocusGroup Whether this control is set as a focus group for keyboard navigation.
+ */
+ void SetAsKeyboardFocusGroup(bool isFocusGroup);
+
+ /**
+ * @brief Gets whether this control is a focus group for keyboard navigation.
+ *
+ * @return true if this control is set as a focus group for keyboard navigation.
+ */
+ bool IsKeyboardFocusGroup();
+
+ /**
+ * @brief Gets the next keyboard focusable actor in this control towards the given direction.
+ *
+ * A control needs to override this function in order to support two dimensional keyboard navigation.
+ * @param[in] currentFocusedActor The current focused actor.
+ * @param[in] direction The direction to move the focus towards.
+ * @param[in] loopEnabled Whether the focus movement should be looped within the control.
+ * @return the next keyboard focusable actor in this control or an empty handle if no actor can be focused.
+ */
+ virtual Actor GetNextKeyboardFocusableActor(Actor currentFocusedActor, Toolkit::Control::KeyboardFocusNavigationDirection direction, bool loopEnabled);
+
+ /**
+ * @brief Informs this control that its chosen focusable actor will be focused.
+ *
+ * This allows the application to preform any actions if wishes
+ * before the focus is actually moved to the chosen actor.
+ *
+ * @param[in] commitedFocusableActor The commited focusable actor.
+ */
+ virtual void OnKeyboardFocusChangeCommitted(Actor commitedFocusableActor);
+
+ // Actions & Signals
+
+ /**
+ * @brief Performs actions as requested using the action name.
+ *
+ * @param[in] object The object on which to perform the action.
+ * @param[in] actionName The action to perform.
+ * @param[in] attributes The attributes with which to perfrom this action.
+ * @return true if action has been accepted by this control
+ */
+ static bool DoAction(BaseObject* object, const std::string& actionName, const PropertyValueContainer& attributes);
+
+ /**
+ * Connects a callback function with the object's signals.
+ * @param[in] object The object providing the signal.
+ * @param[in] tracker Used to disconnect the signal.
+ * @param[in] signalName The signal to connect to.
+ * @param[in] functor A newly allocated FunctorDelegate.
+ * @return True if the signal was connected.
+ * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor.
+ */
+ static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor );