X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ffocus-manager%2Fkeyboard-focus-manager-impl.h;h=0e0f8673a5f734a48b4b662f882f689be6b000ed;hp=f61573125332dc870f583b366e3ec8baf2fcca54;hb=b694e7e2ae624e206e1548b1a863c554eb9cd4d7;hpb=283c6129b00dfdbc1badbf809b4257784820bb30 diff --git a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h index f615731..0e0f867 100644 --- a/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h +++ b/dali-toolkit/internal/focus-manager/keyboard-focus-manager-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H__ -#define __DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H__ +#ifndef DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H +#define DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H /* - * Copyright (c) 2014 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. @@ -19,12 +19,13 @@ */ // EXTERNAL INCLUDES -#include -#include #include +#include +#include // INTERNAL INCLUDES #include +#include namespace Dali { @@ -42,6 +43,8 @@ class KeyboardFocusManager : public Dali::BaseObject { public: + typedef Toolkit::DevelKeyboardFocusManager::CustomAlgorithmInterface CustomAlgorithmInterface; + /** * @copydoc Toolkit::KeyboardFocusManager::Get */ @@ -107,6 +110,26 @@ public: */ Actor GetFocusIndicatorActor(); + /** + * Move current focus to backward + */ + void MoveFocusBackward(); + + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::SetCustomAlgorithm + */ + void SetCustomAlgorithm(CustomAlgorithmInterface& interface); + + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::UseFocusIndicator + */ + void EnableFocusIndicator(bool enable); + + /** + * @copydoc Toolkit::DevelKeyboardFocusManager::UseFocusIndicator + */ + bool IsFocusIndicatorEnabled() const; + public: /** @@ -149,6 +172,14 @@ protected: private: + typedef std::vector< WeakHandle< Actor > > FocusStack; ///< Define Dali::Vector< Dali::BaseObject* > as FocusStack to contain focus history + typedef FocusStack::iterator FocusStackIterator; ///< Define FocusStack::Iterator as FocusStackIterator to navigate FocusStack + + /** + * Get configuration from StyleManager. + */ + void GetConfigurationFromStyleManger(); + /** * Get the focus group of current focused actor. * @pre The FocusManager has been initialized. @@ -159,10 +190,10 @@ private: /** * Move the focus to the specified actor and send notification for the focus change. - * @param actorID The ID of the actor to be queried + * @param actor The actor to be queried * @return Whether the focus is successful or not */ - bool DoSetCurrentFocusActor(const unsigned int actorID); + bool DoSetCurrentFocusActor(Actor actor); /** * Move the focus to the next actor towards the specified direction within the layout control @@ -190,11 +221,6 @@ private: void DoKeyboardEnter( Actor actor ); /** - * Create the default indicator actor to highlight the focused actor. - */ - void CreateDefaultFocusIndicatorActor(); - - /** * Check whether the actor is a layout control that supports two dimensional keyboard navigation. * The layout control needs to internally set the focus order for the child actor and be able to * tell KeyboardFocusmanager the next focusable actor in the given direction. @@ -225,12 +251,6 @@ private: */ void OnTouch( const TouchData& touch ); - /** - * Change the keyboard focus status when keyboard focus feature turned on or off. - * @return Whether the status is changed or not. - */ - void OnPhysicalKeyboardStatusChanged(PhysicalKeyboard keyboard); - private: // Undefined @@ -245,19 +265,28 @@ private: Toolkit::KeyboardFocusManager::FocusGroupChangedSignalType mFocusGroupChangedSignal; ///< The signal to notify the focus group change Toolkit::KeyboardFocusManager::FocusedActorEnterKeySignalType mFocusedActorEnterKeySignal; ///< The signal to notify that enter has been pressed on the focused actor - unsigned int mCurrentFocusActor; ///< The actor ID of current focused actor + WeakHandle< Actor > mCurrentFocusActor; ///< A weak handle to the current focused actor Actor mFocusIndicatorActor; ///< The focus indicator actor shared by all the keyboard focusable actors for highlight + int mIsFocusIndicatorShown; ///< Whether indicator should be shown / hidden when getting focus. It could be enabled when keyboard focus feature is enabled and navigation keys or 'Tab' key are pressed. + bool mFocusGroupLoopEnabled:1; ///< Whether the focus movement is looped within the same focus group - bool mIsKeyboardFocusEnabled:1; ///< Whether keyboard focus feature turned on/off + bool mIsWaitingKeyboardFocusChangeCommit:1; /// A flag to indicate PreFocusChangeSignal emitted but the proposed focus actor is not commited by the application yet. + + bool mClearFocusOnTouch:1; ///< Whether clear focus on touch. - bool mIsFocusIndicatorEnabled:1; ///< Whether indicator should be shown / hidden. It could be enabled when keyboard focus feature enabled and navigation keys or 'Tab' key pressed. + bool mEnableFocusIndicator; ///< Whether use focus indicator - bool mIsWaitingKeyboardFocusChangeCommit:1; /// A flag to indicate PreFocusChangeSignal emitted but the proposed focus actor is not commited by the application yet. + bool mAlwaysShowIndicator; ///< Whether always show indicator. If true, the indicator would be directly shown when focused. + + FocusStack mFocusHistory; ///< Stack to contain pre-focused actor's BaseObject* SlotDelegate< KeyboardFocusManager > mSlotDelegate; + + CustomAlgorithmInterface* mCustomAlgorithmInterface; ///< The user's (application / toolkit) implementation of CustomAlgorithmInterface + }; } // namespace Internal @@ -284,4 +313,4 @@ inline const Internal::KeyboardFocusManager& GetImpl(const Dali::Toolkit::Keyboa } // namespace Dali -#endif // __DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H__ +#endif // DALI_TOOLKIT_INTERNAL_KEYBOARD_FOCUS_MANAGER_H