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=91b831486d4a3b00bfcd1c59b18ceb9059ecd079;hb=d34f98e1c0829e76b142607743488fe54d43ee3a;hpb=fb390b3f5e576e2fc11b3755f4dc9c3ff2150d90 diff --git a/dali-toolkit/internal/controls/control/control-data-impl.h b/dali-toolkit/internal/controls/control/control-data-impl.h index 91b8314..45430c5 100644 --- 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) 2017 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,71 +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; - Toolkit::Visual::Base visual; - bool enabled; - - RegisteredVisual( Property::Index aIndex, Toolkit::Visual::Base &aVisual, bool aEnabled) - : index(aIndex), visual(aVisual), enabled(aEnabled) - { - } - }; - -typedef Dali::OwnerContainer< RegisteredVisual* > RegisteredVisualContainer; +struct RegisteredVisual +{ + 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) + { + } +}; +typedef Dali::OwnerContainer RegisteredVisualContainer; /** * @brief Holds the Implementation for the internal control class */ -class Control::Impl : public ConnectionTracker, public Visual::ResourceObserver +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 own this implementation + * @param[in] controlImpl The control which owns this implementation */ - Impl( Control& controlImpl ); + Impl(Control& controlImpl); /** * @brief Destructor. @@ -121,66 +126,94 @@ public: /** * @brief Called when a resource is ready. * @param[in] object The visual whose resources are ready - * @note Overriding method in Visual::ResourceObserver. + * @note Overriding method in Visual::EventObserver. + */ + void ResourceReady(Visual::Base& object) override; + + /** + * @brief Called when an event occurs. + * @param[in] object The visual whose events occur + * @param[in] signalId The signal to emit. See Visual to find supported signals + * @note Overriding method in Visual::EventObserver. */ - virtual void ResourceReady( Visual::Base& object ); + 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; + + /** + * @param[in,out] animation Handle to existing animation, or an empty handle that + * can be set to a New animation if createAnimation is true + * @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); /** * @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); /** * @brief Function used to set control properties. @@ -188,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. @@ -196,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. @@ -218,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. @@ -251,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 @@ -259,9 +292,109 @@ public: */ bool IsResourceReady() const; -private: + /** + * @copydoc CustomActorImpl::OnSceneDisconnection() + */ + void OnSceneDisconnection(); + + /** + * @brief Sets the margin. + * @param[in] margin Margin is a collections of extent ( start, end, top, bottom ) + */ + void SetMargin(Extents margin); + + /** + * @brief Returns the value of margin + * @return The value of margin + */ + Extents GetMargin() const; + + /** + * @brief Sets the padding. + * @param[in] padding Padding is a collections of extent ( start, end, top, bottom ). + */ + void SetPadding(Extents padding); + + /** + * @brief Returns the value of padding + * @return The value of padding + */ + Extents GetPadding() const; /** + * @brief Set the input method context. + * @param[in] inputMethodContext The input method context. + */ + 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); + + /** + * @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 @@ -269,7 +402,7 @@ private: enum Type { DISABLED = 0, ///< Visual disabled. - ENABLED = 1 ///< Visual enabled. + ENABLED = 1 ///< Visual enabled. }; }; @@ -281,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. }; }; @@ -296,43 +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: - - 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. + /** + * @brief Emits the resource ready signal. + */ + void EmitResourceReadySignal(); - 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 - Toolkit::Control::KeyEventSignalType mKeyEventSignal; - Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusGainedSignal; - Toolkit::Control::KeyInputFocusSignalType mKeyInputFocusLostSignal; + /** + * @brief Callbacks called on idle. + */ + void OnIdleCallback(); - Toolkit::DevelControl::ResourceReadySignalType mResourceReadySignal; +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> mAccessibilityRelations; // Gesture Detection - PinchGestureDetector mPinchGestureDetector; - PanGestureDetector mPanGestureDetector; - TapGestureDetector mTapGestureDetector; + PinchGestureDetector mPinchGestureDetector; + PanGestureDetector mPanGestureDetector; + TapGestureDetector mTapGestureDetector; LongPressGestureDetector mLongPressGestureDetector; // Tooltip TooltipPtr mTooltip; - 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. + InputMethodContext mInputMethodContext; + CallbackBase* mIdleCallback; ///< The idle callback to emit the resource ready signal. - RegisteredVisualContainer mReplacementVisuals; ///< List of visuals that will be used for replacing current visuals. + 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; @@ -347,9 +523,29 @@ public: static const PropertyRegistration PROPERTY_10; static const PropertyRegistration PROPERTY_11; static const PropertyRegistration PROPERTY_12; + 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 } // namespace Toolkit