X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fcontrol%2Fcontrol-data-impl.h;h=45430c53df3f99cd20baa6c896cc4616c39378cd;hp=370cf2e9896947ad2ff440207410d8e8a48f434c;hb=d34f98e1c0829e76b142607743488fe54d43ee3a;hpb=7905fad84d11d97b652937f6641350c537c8dd77 diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h old mode 100755 new mode 100644 index 370cf2e..45430c5 --- a/dali-toolkit/internal/controls/control/control-data-impl.h +++ b/dali-toolkit/internal/controls/control/control-data-impl.h @@ -2,7 +2,7 @@ #define DALI_TOOLKIT_CONTROL_DATA_IMPL_H /* - * Copyright (c) 2019 Samsung Electronics Co., Ltd. + * Copyright (c) 2021 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,73 +19,76 @@ */ // EXTERNAL INCLUDES -#include #include +#include +#include +#include #include // INTERNAL INCLUDES -#include -#include -#include #include -#include -#include #include +#include +#include +#include +#include #include +#include +#include +#include namespace Dali { - namespace Toolkit { - namespace Internal { - - /** +/** * Struct used to store Visual within the control, index is a unique key for each visual. */ struct RegisteredVisual { - Property::Index index; + Property::Index index; Toolkit::Visual::Base visual; - bool enabled : 1; - bool pending : 1; - - RegisteredVisual( Property::Index aIndex, Toolkit::Visual::Base &aVisual, bool aEnabled, bool aPendingReplacement ) - : index(aIndex), visual(aVisual), enabled(aEnabled), pending( aPendingReplacement ) + bool enabled : 1; + bool pending : 1; + + RegisteredVisual(Property::Index aIndex, Toolkit::Visual::Base& aVisual, bool aEnabled, bool aPendingReplacement) + : index(aIndex), + visual(aVisual), + enabled(aEnabled), + pending(aPendingReplacement) { } }; -typedef Dali::OwnerContainer< RegisteredVisual* > RegisteredVisualContainer; - +typedef Dali::OwnerContainer RegisteredVisualContainer; /** * @brief Holds the Implementation for the internal control class */ class Control::Impl : public ConnectionTracker, public Visual::EventObserver { + friend class Toolkit::DevelControl::AccessibleImpl; public: - /** * @brief Retrieves the implementation of the internal control class. * @param[in] internalControl A ref to the control whose internal implementation is required * @return The internal implementation */ - static Control::Impl& Get( Internal::Control& internalControl ); + static Control::Impl& Get(Internal::Control& internalControl); /** * @copydoc Get( Internal::Control& ) */ - static const Control::Impl& Get( const Internal::Control& internalControl ); + static const Control::Impl& Get(const Internal::Control& internalControl); /** * @brief Constructor. * @param[in] controlImpl The control which owns this implementation */ - Impl( Control& controlImpl ); + Impl(Control& controlImpl); /** * @brief Destructor. @@ -125,7 +128,7 @@ public: * @param[in] object The visual whose resources are ready * @note Overriding method in Visual::EventObserver. */ - virtual void ResourceReady( Visual::Base& object ) override; + void ResourceReady(Visual::Base& object) override; /** * @brief Called when an event occurs. @@ -133,64 +136,64 @@ public: * @param[in] signalId The signal to emit. See Visual to find supported signals * @note Overriding method in Visual::EventObserver. */ - virtual void NotifyVisualEvent( Visual::Base& object, Property::Index signalId ) override; + void NotifyVisualEvent(Visual::Base& object, Property::Index signalId) override; /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual); /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, int depthIndex ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, int depthIndex); /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, bool enabled ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, bool enabled); /** * @copydoc Dali::Toolkit::DevelControl::RegisterVisual() */ - void RegisterVisual( Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, bool enabled, int depthIndex); /** * @copydoc Dali::Toolkit::DevelControl::UnregisterVisual() */ - void UnregisterVisual( Property::Index index ); + void UnregisterVisual(Property::Index index); /** * @copydoc Dali::Toolkit::DevelControl::GetVisual() */ - Toolkit::Visual::Base GetVisual( Property::Index index ) const; + Toolkit::Visual::Base GetVisual(Property::Index index) const; /** * @copydoc Dali::Toolkit::DevelControl::EnableVisual() */ - void EnableVisual( Property::Index index, bool enable ); + void EnableVisual(Property::Index index, bool enable); /** * @copydoc Dali::Toolkit::DevelControl::IsVisualEnabled() */ - bool IsVisualEnabled( Property::Index index ) const; + bool IsVisualEnabled(Property::Index index) const; /** * @brief Stops observing the given visual. * @param[in] visual The visual to stop observing */ - void StopObservingVisual( Toolkit::Visual::Base& visual ); + void StopObservingVisual(Toolkit::Visual::Base& visual); /** * @brief Starts observing the given visual. * @param[in] visual The visual to start observing */ - void StartObservingVisual( Toolkit::Visual::Base& visual); + void StartObservingVisual(Toolkit::Visual::Base& visual); /** * @copydoc Dali::Toolkit::DevelControl::GetVisualResourceStatus() */ - Toolkit::Visual::ResourceStatus GetVisualResourceStatus( Property::Index index ) const; + Toolkit::Visual::ResourceStatus GetVisualResourceStatus(Property::Index index) const; /** * @param[in,out] animation Handle to existing animation, or an empty handle that @@ -198,19 +201,19 @@ public: * @param[in] transitionData The transition data describing the animation * @param[in] createAnimation True if the animation should be created */ - void AddTransitions( Dali::Animation& animation, - const Toolkit::TransitionData& transitionData, - bool createAnimation = false ); + void AddTransitions(Dali::Animation& animation, + const Toolkit::TransitionData& transitionData, + bool createAnimation = false); /** * @copydoc Dali::Toolkit::DevelControl::CreateTransition() */ - Dali::Animation CreateTransition( const Toolkit::TransitionData& transitionData ); + Dali::Animation CreateTransition(const Toolkit::TransitionData& transitionData); /** * @copydoc Dali::Toolkit::DevelControl::DoAction() */ - void DoAction( Dali::Property::Index visualIndex, Dali::Property::Index actionId, const Dali::Property::Value attributes ); + void DoAction(Dali::Property::Index visualIndex, Dali::Property::Index actionId, const Dali::Property::Value attributes); /** * @brief Function used to set control properties. @@ -218,7 +221,7 @@ public: * @param[in] index The index of the property to set * @param[in] value The value of the property to set */ - static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ); + static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value); /** * @brief Function used to retrieve the value of control properties. @@ -226,21 +229,21 @@ public: * @param[in] index The index of the property to get * @return The value of the property */ - static Property::Value GetProperty( BaseObject* object, Property::Index index ); + static Property::Value GetProperty(BaseObject* object, Property::Index index); /** * @brief Sets the state of the control. * @param[in] newState The state to set * @param[in] withTransitions Whether to show a transition when changing to the new state */ - void SetState( DevelControl::State newState, bool withTransitions=true ); + void SetState(DevelControl::State newState, bool withTransitions = true); /** * @brief Sets the sub-state of the control. * @param[in] newState The sub-state to set * @param[in] withTransitions Whether to show a transition when changing to the new sub-state */ - void SetSubState( const std::string& subStateName, bool withTransitions=true ); + void SetSubState(const std::string& subStateName, bool withTransitions = true); /** * @brief Replaces visuals and properties from the old state to the new state. @@ -248,28 +251,28 @@ public: * @param[in] newState The new state * @param[in] subState The current sub state */ - void ReplaceStateVisualsAndProperties( const StylePtr oldState, const StylePtr newState, const std::string& subState ); + void ReplaceStateVisualsAndProperties(const StylePtr oldState, const StylePtr newState, const std::string& subState); /** * @brief Removes a visual from the control's container. * @param[in] visuals The container of visuals * @param[in] visualName The name of the visual to remove */ - void RemoveVisual( RegisteredVisualContainer& visuals, const std::string& visualName ); + void RemoveVisual(RegisteredVisualContainer& visuals, const std::string& visualName); /** * @brief Removes several visuals from the control's container. * @param[in] visuals The container of visuals * @param[in] removeVisuals The visuals to remove */ - void RemoveVisuals( RegisteredVisualContainer& visuals, DictionaryKeys& removeVisuals ); + void RemoveVisuals(RegisteredVisualContainer& visuals, DictionaryKeys& removeVisuals); /** * @brief Copies the visual properties that are specific to the control instance into the instancedProperties container. * @param[in] visuals The control's visual container * @param[out] instancedProperties The instanced properties are added to this container */ - void CopyInstancedProperties( RegisteredVisualContainer& visuals, Dictionary& instancedProperties ); + void CopyInstancedProperties(RegisteredVisualContainer& visuals, Dictionary& instancedProperties); /** * @brief On state change, ensures visuals are moved or created appropriately. @@ -281,7 +284,7 @@ public: * @param[in] stateVisualsToChange The visuals to change * @param[in] instancedProperties The instanced properties @see CopyInstancedProperties */ - void RecreateChangedVisuals( Dictionary& stateVisualsToChange, Dictionary& instancedProperties ); + void RecreateChangedVisuals(Dictionary& stateVisualsToChange, Dictionary& instancedProperties); /** * @brief Whether the resource is ready @@ -290,15 +293,15 @@ public: bool IsResourceReady() const; /** - * @copydoc CustomActorImpl::OnStageDisconnection() + * @copydoc CustomActorImpl::OnSceneDisconnection() */ - void OnStageDisconnection(); + void OnSceneDisconnection(); /** * @brief Sets the margin. * @param[in] margin Margin is a collections of extent ( start, end, top, bottom ) */ - void SetMargin( Extents margin ); + void SetMargin(Extents margin); /** * @brief Returns the value of margin @@ -310,7 +313,7 @@ public: * @brief Sets the padding. * @param[in] padding Padding is a collections of extent ( start, end, top, bottom ). */ - void SetPadding( Extents padding ); + void SetPadding(Extents padding); /** * @brief Returns the value of padding @@ -322,22 +325,75 @@ public: * @brief Set the input method context. * @param[in] inputMethodContext The input method context. */ - void SetInputMethodContext( InputMethodContext& inputMethodContext ); + void SetInputMethodContext(InputMethodContext& inputMethodContext); /** * @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 ); + 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(); -private: + /** + * @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. */ @@ -346,7 +402,7 @@ private: enum Type { DISABLED = 0, ///< Visual disabled. - ENABLED = 1 ///< Visual enabled. + ENABLED = 1 ///< Visual enabled. }; }; @@ -358,7 +414,7 @@ private: enum Type { NOT_SET = 0, ///< Visual depth value not set by caller. - SET = 1 ///< Visual depth value set by caller. + SET = 1 ///< Visual depth value set by caller. }; }; @@ -373,48 +429,86 @@ private: * @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 ); + void RegisterVisual(Property::Index index, Toolkit::Visual::Base& visual, VisualState::Type enabled, DepthIndexValue::Type depthIndexValueSet, int depthIndex = 0); -public: + /** + * @brief Emits the resource ready signal. + */ + void EmitResourceReadySignal(); + + /** + * @brief Callbacks called on idle. + */ + void OnIdleCallback(); - Control& mControlImpl; +public: + Control& mControlImpl; DevelControl::State mState; - std::string mSubStateName; - - 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; + 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> mAccessibilityRelations; // Gesture Detection - PinchGestureDetector mPinchGestureDetector; - PanGestureDetector mPanGestureDetector; - TapGestureDetector mTapGestureDetector; + PinchGestureDetector mPinchGestureDetector; + PanGestureDetector mPanGestureDetector; + TapGestureDetector mTapGestureDetector; LongPressGestureDetector mLongPressGestureDetector; // Tooltip TooltipPtr mTooltip; InputMethodContext mInputMethodContext; + CallbackBase* mIdleCallback; ///< The idle callback to emit the resource ready signal. - ControlBehaviour mFlags : CONTROL_BEHAVIOUR_FLAG_COUNT; ///< Flags passed in from constructor. - bool mIsKeyboardNavigationSupported :1; ///< Stores whether keyboard navigation is supported by the control. - bool mIsKeyboardFocusGroup :1; ///< Stores whether the control is a focus group. - - RegisteredVisualContainer mRemoveVisuals; ///< List of visuals that are being replaced by another visual once ready + ControlBehaviour mFlags : CONTROL_BEHAVIOUR_FLAG_COUNT; ///< Flags passed in from constructor. + bool mIsKeyboardNavigationSupported : 1; ///< Stores whether keyboard navigation is supported by the control. + bool mIsKeyboardFocusGroup : 1; ///< Stores whether the control is a focus group. + bool mIsEmittingResourceReadySignal : 1; ///< True during ResourceReady(). + bool mNeedToEmitResourceReady : 1; ///< True if need to emit the resource ready signal again. + RegisteredVisualContainer mRemoveVisuals; ///< List of visuals that are being replaced by another visual once ready // Properties - these need to be members of Internal::Control::Impl as they access private methods/data of Internal::Control and Internal::Control::Impl. static const PropertyRegistration PROPERTY_1; @@ -432,8 +526,25 @@ public: static const PropertyRegistration PROPERTY_13; static const PropertyRegistration PROPERTY_14; static const PropertyRegistration PROPERTY_15; -}; + static const PropertyRegistration PROPERTY_16; + static const PropertyRegistration PROPERTY_17; + static const PropertyRegistration PROPERTY_18; + static const PropertyRegistration PROPERTY_19; + static const PropertyRegistration PROPERTY_20; + static const PropertyRegistration PROPERTY_21; + static const PropertyRegistration PROPERTY_22; + /** + * The method acquires Accessible handle from Actor object + * @param actor Actor object + * @return handle to Accessible object + */ + static Dali::Accessibility::Accessible* GetAccessibilityObject(Dali::Actor actor); + Dali::Accessibility::Accessible* GetAccessibilityObject(); + + std::function(Actor)> accessibilityConstructor; + std::unique_ptr accessibilityObject; +}; } // namespace Internal