X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fscroll-bar%2Fscroll-bar-impl.h;h=9bfe909656a56751be3aef209c69e7aa5476091e;hp=989ffa4f8116c07f397e69f7d32abb52ca73c64c;hb=8a647e87a01c5c78451653c1264a9eea81ac9b20;hpb=3b16ae16f01bd50a26e6c44e6e20ebb8499b4f91 diff --git a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h old mode 100755 new mode 100644 index 989ffa4..9bfe909 --- a/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h +++ b/dali-toolkit/internal/controls/scroll-bar/scroll-bar-impl.h @@ -1,8 +1,8 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_SCROLL_BAR_H__ -#define __DALI_TOOLKIT_INTERNAL_SCROLL_BAR_H__ +#ifndef DALI_TOOLKIT_INTERNAL_SCROLL_BAR_H +#define DALI_TOOLKIT_INTERNAL_SCROLL_BAR_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2020 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. @@ -20,14 +20,16 @@ // EXTERNAL INCLUDES #include -#include +#include #include +#include #include +#include // INTERNAL INCLUDES -#include -#include -#include +#include +#include +#include namespace Dali { @@ -46,57 +48,56 @@ typedef IntrusivePtr ScrollBarPtr; * ScrollBar is a UI component that can be added to the scrollable controls * indicating the current scroll position of the scrollable content. */ -class ScrollBar : public ScrollComponentImpl +class ScrollBar : public Control { public: - // Properties - enum - { - SCROLLBAR_PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1, - SCROLLBAR_PROPERTY_END_INDEX = SCROLLBAR_PROPERTY_START_INDEX + 1000 ///< Reserving 1000 property indices - }; - // Signals - typedef Toolkit::ScrollBar::ScrollPositionNotifiedSignalType ScrollPositionNotifiedSignalType; + typedef Toolkit::ScrollBar::PanFinishedSignalType PanFinishedSignalType; + typedef Toolkit::ScrollBar::ScrollPositionIntervalReachedSignalType ScrollPositionIntervalReachedSignalType; public: /** - * @copydoc Toolkit::ScrollBar::ScrollBar() + * @copydoc Toolkit::ScrollBar::New() */ - ScrollBar(); + static Toolkit::ScrollBar New(Toolkit::ScrollBar::Direction direction); /** - * @copydoc Toolkit::ScrollBar::~ScrollBar() + * @copydoc Toolkit::ScrollBar::SetScrollPropertySource() */ - virtual ~ScrollBar(); + void SetScrollPropertySource( Handle handle, Property::Index propertyScrollPosition, Property::Index propertyMinScrollPosition, Property::Index propertyMaxScrollPosition, Property::Index propertyScrollContentSize ); /** - * @copydoc Toolkit::ScrollBar::New() + * @copydoc Toolkit::ScrollBar::SetScrollIndicator() + */ + void SetScrollIndicator( Actor indicator ); + + /** + * @copydoc Toolkit::ScrollBar::GetScrollIndicator() */ - static Toolkit::ScrollBar New(); + Actor GetScrollIndicator(); /** - * @copydoc Toolkit::ScrollComponentImpl::OnScrollConnectorSet() + * @copydoc Toolkit::ScrollBar::SetScrollPositionIntervals() */ - void OnScrollConnectorSet( Toolkit::ScrollConnector connector ); + void SetScrollPositionIntervals( const Dali::Vector& positions ); /** - * @copydoc Toolkit::ScrollBar::SetIndicatorImage() + * @copydoc Toolkit::ScrollBar::GetScrollPositionIntervals() */ - void SetIndicatorImage( Image image ); + Dali::Vector GetScrollPositionIntervals() const; /** - * @copydoc Toolkit::ScrollBar::GetScrollIndicator() + * @copydoc Toolkit::ScrollBar::SetScrollDirection() */ - Actor GetScrollIndicator(); + void SetScrollDirection( Toolkit::ScrollBar::Direction direction ); /** - * @copydoc Toolkit::ScrollBar::SetPositionNotifications() + * @copydoc Toolkit::ScrollBar::GetScrollDirection() */ - void SetPositionNotifications( const std::vector& positions ); + Toolkit::ScrollBar::Direction GetScrollDirection() const; /** * @copydoc Toolkit::ScrollBar::SetIndicatorHeightPolicy() @@ -106,7 +107,7 @@ public: /** * @copydoc Toolkit::ScrollBar::GetIndicatorHeightPolicy() */ - Toolkit::ScrollBar::IndicatorHeightPolicy GetIndicatorHeightPolicy(); + Toolkit::ScrollBar::IndicatorHeightPolicy GetIndicatorHeightPolicy() const; /** * @copydoc Toolkit::ScrollBar::SetIndicatorFixedHeight() @@ -116,7 +117,7 @@ public: /** * @copydoc Toolkit::ScrollBar::GetIndicatorFixedHeight() */ - float GetIndicatorFixedHeight(); + float GetIndicatorFixedHeight() const; /** * @copydoc Toolkit::ScrollBar::SetIndicatorShowDuration() @@ -126,7 +127,7 @@ public: /** * @copydoc Toolkit::ScrollBar::GetIndicatorShowDuration() */ - float GetIndicatorShowDuration(); + float GetIndicatorShowDuration() const; /** * @copydoc Toolkit::ScrollBar::SetIndicatorHideDuration() @@ -136,26 +137,50 @@ public: /** * @copydoc Toolkit::ScrollBar::GetIndicatorHideDuration() */ - float GetIndicatorHideDuration(); + float GetIndicatorHideDuration() const; /** - * @copydoc Toolkit::ScrollBar::Show() + * @copydoc Toolkit::ScrollBar::ShowIndicator() */ - void Show(); + void ShowIndicator(); /** - * @copydoc Toolkit::ScrollBar::Hide() + * @copydoc Toolkit::ScrollBar::HideIndicator() */ - void Hide(); + void HideIndicator(); + + /** + * @brief Shows indicator until the transient duration has expired + */ + void ShowTransientIndicator(); + + /** + * @copydoc Toolkit::ScrollBar::PanFinishedSignal() + */ + PanFinishedSignalType& PanFinishedSignal() + { + return mPanFinishedSignal; + } /** - * Signal emitted after the SetScrollDomain() method has been called. + * @copydoc Toolkit::ScrollBar::ScrollPositionIntervalReachedSignal() */ - ScrollPositionNotifiedSignalType& ScrollPositionNotifiedSignal() + ScrollPositionIntervalReachedSignalType& ScrollPositionIntervalReachedSignal() { - return mScrollPositionNotifiedSignal; + return mScrollPositionIntervalReachedSignal; } + /** + * 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 ); + // Properties /** @@ -174,45 +199,51 @@ public: */ static Property::Value GetProperty( BaseObject* object, Property::Index index ); + /** + * 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 Property::Map& attributes ); + private: // from Control /** * @copydoc Toolkit::Control::OnInitialize */ - virtual void OnInitialize(); + void OnInitialize() override; /** * @copydoc Toolkit::Control::OnPan */ - virtual void OnPan( PanGesture gesture ); + void OnPan( const PanGesture& gesture ) override; /** - * @copydoc Toolkit::Control::OnControlSizeSet( const Vector3& size ) + * @copydoc CustomActorImpl::OnSizeSet( const Vector3& size ) */ - virtual void OnControlSizeSet( const Vector3& size ); + void OnSizeSet( const Vector3& size ) override; private: /** - * Apply constraints for background and indicator. - * These constraints are based on values from the scroll connector. + * Create the default indicator actor. */ - void ApplyConstraints(); + void CreateDefaultIndicatorActor(); /** - * Callback when the start & end position and size of the scrollable content are changed. - * @param[in] minPosition The minimum position. - * @param[in] maxPosition The maximum position. - * @param[in] contentSize The size of scrollable content. + * Apply constraints for background and indicator. + * These constraints are based on values from the scroll connector. */ - void OnScrollDomainChanged(float minPosition, float maxPosition, float contentSize); + void ApplyConstraints(); /** * Callback when the current scroll position of the scrollable content goes above or - * below the values specified by SetPositionNotifications(). + * below the values specified by SetScrollPositionIntervals(). * @param[in] source the property notification that triggered this callback */ - void OnScrollPositionNotified(PropertyNotification& source); + void OnScrollPositionIntervalReached(PropertyNotification& source); /** * Process the pan gesture per predefined timeout until the gesture is finished. @@ -221,6 +252,12 @@ private: bool OnPanGestureProcessTick(); /** + * Handle SetProperty for scroll direction. + * @param[in] propertyValue The new property value. + */ + void OnScrollDirectionPropertySet(Property::Value propertyValue); + + /** * Handle SetProperty for scroll indicator height policy. * @param[in] propertyValue The new property value. */ @@ -228,33 +265,73 @@ private: private: - Constrainable mScrollPositionObject; ///< From mScrollConnector + /** + * Constructor. + * It initializes ScrollBar members. + */ + ScrollBar( Toolkit::ScrollBar::Direction direction ); + + /** + * A reference counted object may only be deleted by calling Unreference() + */ + virtual ~ScrollBar(); - ImageActor mIndicator; ///< Image of scroll indicator. +private: + + Actor mIndicator; ///< Image of scroll indicator. + float mIndicatorShowAlpha; ///< The alpha value when the indicator is fully shown Animation mAnimation; ///< Scroll indicator Show/Hide Animation. - float mIndicatorShowDuration; ///< The duration of scroll indicator show animation - float mIndicatorHideDuration; ///< The duration of scroll indicator hide animation + Toolkit::ScrollBar::Direction mDirection; ///< The direction of scroll bar (vertical or horizontal) - float mScrollStart; ///< Scroll Start position (start of drag) - Vector3 mGestureDisplacement; ///< Gesture Displacement. + WeakHandle mScrollableObject; ///< Object to be scrolled - bool mIsPanning; ///< Whether the scroll bar is being panned. - float mCurrentScrollPosition; ///< The current scroll position updated by the pan gesture + Property::Index mPropertyScrollPosition = 0; ///< Index of scroll position property owned by the object to be scrolled + Property::Index mPropertyMinScrollPosition = 0; ///< Index of minimum scroll position property owned by the object to be scrolled + Property::Index mPropertyMaxScrollPosition = 1; ///< Index of maximum scroll position property owned by the object to be scrolled + Property::Index mPropertyScrollContentSize; ///< Index of scroll content size property owned by the object to be scrolled - Toolkit::ScrollBar::IndicatorHeightPolicy mIndicatorHeightPolicy; ///< The height policy of scroll indicator (variable or fixed) - float mIndicatorFixedHeight; ///< The fixed height of scroll indicator + float mIndicatorShowDuration; ///< The duration of scroll indicator show animation + float mIndicatorHideDuration; ///< The duration of scroll indicator hide animation + float mTransientIndicatorDuration; ///< The duration before hiding transient indicator - Timer mTimer; ///< The timer to process the pan gesture after the gesture is started. + float mScrollStart; ///< Scroll Start position (start of drag) + Vector2 mGestureDisplacement; ///< Gesture Displacement. - Property::Index mPropertyIndicatorPosition; ///< Indicatore Position ("indicator-position") + float mCurrentScrollPosition; ///< The current scroll position updated by the pan gesture + Toolkit::ScrollBar::IndicatorHeightPolicy mIndicatorHeightPolicy; ///< The height policy of scroll indicator (variable or fixed) + float mIndicatorFixedHeight; ///< The fixed height of scroll indicator + float mIndicatorMinimumHeight; ///< The minimum height for a variable size indicator + float mIndicatorStartPadding; ///< The padding at the start of the indicator + float mIndicatorEndPadding; ///< The padding at the end of the indicator + + Timer mContractDelayTimer; ///< Timer guarantee contract delay time. + Timer mPanProcessTimer; ///< The timer to process the pan gesture after the gesture is started. + + Dali::Vector mScrollPositionIntervals; ///< List of values to receive notification for when the current scroll position goes above or below them PropertyNotification mPositionNotification; ///< Stores the property notification used for scroll position changes - ScrollPositionNotifiedSignalType mScrollPositionNotifiedSignal; + PanFinishedSignalType mPanFinishedSignal; + ScrollPositionIntervalReachedSignalType mScrollPositionIntervalReachedSignal; + + Constraint mIndicatorPositionConstraint; + Constraint mIndicatorSizeConstraint; - ActiveConstraint mIndicatorSizeConstraint; - ActiveConstraint mIndicatorPositionConstraint; + bool mIsPanning : 1; ///< Whether the scroll bar is being panned. + bool mIndicatorFirstShow : 1; ///< True if the indicator has never been shown + +protected: + struct AccessibleImpl : public Control::Impl::AccessibleImpl, + public virtual Dali::Accessibility::Value + { + using Control::Impl::AccessibleImpl::AccessibleImpl; + double GetMinimum() override; + double GetCurrent() override; + double GetMaximum() override; + bool SetCurrent( double ) override; + double GetMinimumIncrement() override; + }; }; } // namespace Internal @@ -283,4 +360,4 @@ inline const Toolkit::Internal::ScrollBar& GetImpl(const Toolkit::ScrollBar& scr } // namespace Dali -#endif // __DALI_TOOLKIT_INTERNAL_SCROLL_BAR_H__ +#endif // DALI_TOOLKIT_INTERNAL_SCROLL_BAR_H