X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fslider%2Fslider-impl.h;h=73859532cca52d43a9cf683591b2d63caab1b34e;hp=d97da6748ea31d5cdf26fc5b31f7700332c5c6e6;hb=980728a7e35b8ddd28f70c090243e8076e21536e;hpb=2f39909cd5a858fe940936258ee6f558073d33f0 diff --git a/dali-toolkit/internal/controls/slider/slider-impl.h b/dali-toolkit/internal/controls/slider/slider-impl.h old mode 100755 new mode 100644 index d97da67..7385953 --- a/dali-toolkit/internal/controls/slider/slider-impl.h +++ b/dali-toolkit/internal/controls/slider/slider-impl.h @@ -1,50 +1,55 @@ -#ifndef __DALI_TOOLKIT_INTERNAL_SLIDER_H__ -#define __DALI_TOOLKIT_INTERNAL_SLIDER_H__ - -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// +#ifndef DALI_TOOLKIT_INTERNAL_SLIDER_H +#define DALI_TOOLKIT_INTERNAL_SLIDER_H + +/* + * 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +// EXTERNAL INCLUDES +#include +#include +#include +#include // INTERNAL INCLUDES -#include +#include +#include #include +#include #include -#include +#include namespace Dali { - namespace Toolkit { - class Button; namespace Internal { - class Slider; -typedef Dali::IntrusivePtr< Slider > SliderPtr; +typedef Dali::IntrusivePtr SliderPtr; /** * @copydoc Toolkit::Slider */ -class Slider : public ControlImpl +class Slider : public Control { public: - typedef Property::Array MarkList; /** @@ -55,7 +60,6 @@ public: static Dali::Toolkit::Slider New(); public: - // Properties /** @@ -63,7 +67,7 @@ public: * * @param[in] marks The list of marks to set */ - void SetMarks( const MarkList& marks ); + void SetMarks(const MarkList& marks); /** * Get the list of marks @@ -77,7 +81,7 @@ public: * * @param[in] snap Flag to snap to marks or not */ - void SetSnapToMarks( bool snap ); + void SetSnapToMarks(bool snap); /** * Return if snap to marks is set or not @@ -91,7 +95,7 @@ public: * * @param[in] value The value to set. Will be clamped to [lowerBound .. upperBound] */ - void SetValue( float value ); + void SetValue(float value); /** * Get the value of the slider @@ -105,56 +109,49 @@ public: * * @param[in] region The hit region */ - void SetHitRegion( const Vector2& region ); + void SetHitRegion(const Vector2& region); /** * Get hit region * * @return The hit region */ - Vector2 GetHitRegion() const; - - /** - * Set backing region - * - * @param[in] region The backing region - */ - void SetBackingRegion( const Vector2& region ); + const Vector2& GetHitRegion() const; /** - * Get backing region + * Set the track region * - * @return The backing region + * @param[in] region The track region */ - Vector2 GetBackingRegion() const; + void SetTrackRegion(const Vector2& region); /** - * Get backing scale9 border + * Get the track region * - * @return The backing scale9 border + * @return The track region */ - Vector4 GetBackingScale9Border() const; + const Vector2& GetTrackRegion() const; /** - * Get popup scale9 border + * @brief Set the disabled color. * - * @return The popup scale9 border + * @param[in] color The disabled color. */ - Vector4 GetPopupScale9Border() const; + void SetDisabledColor(const Vector4& color); /** - * Get disable color + * @brief Get disabled color * - * @return The disable color + * @return The disabled color */ - Vector4 GetDisableColor() const; + Vector4 GetDisabledColor() const; /** - * Get popup text color + * Set the value precision to be used for numbers in the slider * - * @return The popup text color + * @param[in] precision The number of decimal places to use for printing numbers */ - Vector4 GetPopupTextColor() const; + void SetValuePrecision(int precision); /** * Get value precision @@ -168,7 +165,7 @@ public: * * @param[in] showPopup The show popup flag */ - void ShowPopup( bool showPopup ); + void SetShowPopup(bool showPopup); /** * Get show value in popup @@ -182,7 +179,7 @@ public: * * @param[in] showValue The show value flag */ - void ShowValue( bool showValue ); + void SetShowValue(bool showValue); /** * Get show value on handle @@ -196,7 +193,7 @@ public: * * param[in] enabled Set the enabled flag */ - void SetEnabled( bool enabled ); + void SetEnabled(bool enabled); /** * Return if enabled or not @@ -206,6 +203,16 @@ public: bool IsEnabled() const; /** + * @brief Set the mark tolerance + * + * The tolerance is the percentage of the slider width for which snapping to + * marks occurs + * + * @param[in] tolerance The percentage of width for which to snap + */ + void SetMarkTolerance(float tolerance); + + /** * Return the mark tolerance * * @return The tolerance set for snapping to marks @@ -226,9 +233,9 @@ public: Toolkit::Slider::ValueChangedSignalType& SlidingFinishedSignal(); /** - * @copydoc Toolkit::Slider::MarkSignal() + * @copydoc Toolkit::Slider::MarkReachedSignal() */ - Toolkit::Slider::MarkSignalType& MarkSignal(); + Toolkit::Slider::MarkReachedSignalType& MarkReachedSignal(); /** * Connects a callback function with the object's signals. @@ -239,12 +246,28 @@ public: * @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 ); + static bool DoConnectSignal(BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor); -protected: + // Properties + + /** + * Called when a property of an object of this type is set. + * @param[in] object The object whose property is set. + * @param[in] index The property index. + * @param[in] value The new property value. + */ + static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value); /** + * Called to retrieve a property of an object of this type. + * @param[in] object The object whose property is to be retrieved. + * @param[in] index The property index. + * @return The current value of the property. + */ + static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex); + +protected: + /** * Construct a new Slider. */ Slider(); @@ -255,12 +278,11 @@ protected: virtual ~Slider(); /** - * @copydoc Toolkit::ControlImpl::OnControlSizeSet( const Vector3& size ) + * @copydoc CustomActorImpl::OnRelayout */ - virtual void OnControlSizeSet( const Vector3& size ); + void OnRelayout(const Vector2& size, RelayoutContainer& container) override; private: - /** * Domain is a from/to pair */ @@ -272,8 +294,9 @@ private: Domain() { } - Domain( Vector2 fromVal, Vector2 toVal ) - : from( fromVal ), to( toVal ) + Domain(Vector2 fromVal, Vector2 toVal) + : from(fromVal), + to(toVal) { } }; @@ -290,20 +313,19 @@ private: }; private: - /** * @copydoc Toolkit::Control::OnInitialize() */ - virtual void OnInitialize(); + void OnInitialize() override; /** - * Hit region touch event + * Hit region touch * * @param[in] actor The actor the event is raised for - * @param[in] event The touch event info - * @return If the event is handled or not + * @param[in] touch The touch info + * @return If touch is handled or not */ - bool OnTouchEvent( Actor actor, const TouchEvent& event ); + bool OnTouch(Actor actor, const TouchEvent& touch); /** * Pan gesture event @@ -311,7 +333,7 @@ private: * @param[in] actor The actor the event is raised for * @param[in] gesture The pan event info */ - void OnPan( Actor actor, PanGesture gestur ); + void OnPan(Actor actor, const PanGesture& gesture); /** * Map a position onto a domain and return the result as a percentage @@ -319,7 +341,7 @@ private: * @param[in] point The point to map onto the domain * @return The result as a percentage [0..1] */ - float MapPercentage( const Vector2& point ); + float MapPercentage(const Vector2& point); /** * Map a value in the range to a percentage @@ -327,7 +349,7 @@ private: * @param[in] point The value in range [lowerBound..upperBound] * @return The result as a percentage [0..1] */ - float MapValuePercentage( float value ); + float MapValuePercentage(float value); /** * Convert a point in local hit space into domain space @@ -335,7 +357,7 @@ private: * @param[in] x The x position to convert * @return The x position in domain space */ - float HitSpaceToDomain( float x ); + float HitSpaceToDomain(float x); /** * Map a percentage onto the slider's bounds @@ -345,7 +367,7 @@ private: * @param[in] upperBound The upper bound to map onto * @return The value of percent mapped from lowerBound to upperBound */ - float MapBounds( float percent, float lowerBound, float upperBound ); + float MapBounds(float percent, float lowerBound, float upperBound); /** * Get the range of the valid values the slider handle can move between @@ -353,7 +375,7 @@ private: * @param[in] currentSize The current size of the slider * @return The range as a domain pair */ - Domain CalcDomain( const Vector2& currentSize ); + Domain CalcDomain(const Vector2& currentSize); /** * Create the hit region @@ -363,46 +385,46 @@ private: Actor CreateHitRegion(); /** - * Create the backing for the slider + * Create the track for the slider * - * @return The backing actor + * @return The track actor */ - ImageActor CreateBacking(); + Toolkit::ImageView CreateTrack(); /** - * Create the progress backing for the slider + * Create the progress track for the slider * - * @return The backing actor + * @return The track actor */ - ImageActor CreateProgress(); + Toolkit::ImageView CreateProgress(); /** * Create the handle for the slider * * @return The created image handle */ - ImageActor CreateHandle(); + Toolkit::ImageView CreateHandle(); /** * Create the popup arrow * * @return The created image handle */ - ImageActor CreatePopupArrow(); + Toolkit::ImageView CreatePopupArrow(); /** * Create the popup * * @return The created image handle */ - ImageActor CreatePopup(); + Toolkit::ImageView CreatePopup(); /** * Create the textview for the popup * * @return The textview created for the popup */ - Toolkit::TextView CreatePopupText(); + Toolkit::TextLabel CreatePopupText(); /** * Create the value display for the slider @@ -422,13 +444,6 @@ private: void CreateChildren(); /** - * Resize the hit area - * - * @param[in] size The new size of the hit area - */ - void ResizeHitRegion( const Vector2& size ); - - /** * Create value popup */ void AddPopup(); @@ -443,7 +458,7 @@ private: * * @param[in] value The value to display in the popup */ - void DisplayPopup( float value ); + void DisplayPopup(float value); /** * If there are marks present, filter the incoming percent based on snapping to any nearby marks @@ -451,7 +466,7 @@ private: * @param[in] value The incoming value on the slider to filter * @return The filtered percentage snapped to any nearby marks */ - float MarkFilter( float value ); + float MarkFilter(float value); /** * If there are marks present, snap the incoming percent to the nearest mark @@ -459,7 +474,7 @@ private: * @param[in] value The incoming value on the slider to snap * @return The filtered percentage snapped to the nearest mark */ - float SnapToMark( float value ); + float SnapToMark(float value); /** * Search for if a mark has been reached @@ -468,7 +483,7 @@ private: * @param[out] outIndex The index of the mark if found * @return If a mark has been found to match percent */ - bool MarkReached( float value, int& outIndex ); + bool MarkReached(float value, int& outIndex); /** * Handler for when the value view needs to be hidden @@ -483,91 +498,140 @@ private: * @paramp[in] value The value to set * @param[in] raiseSignals Configure signals to be raised or not. */ - void DisplayValue( float value, bool raiseSignals ); + void DisplayValue(float value, bool raiseSignals); /** - * Create the image for the backing + * Create the image for the track * - * @param[in] imageName The name of the image to load and set + * @param[in] filename The track image */ - void CreateBackingImage( const std::string& imageName ); + void SetTrackVisual(const std::string& filename); /** - * Set the backing image to be a scale-9 image + * @brief Set the track visual from an Dali::Property::Map * - * @param[in] border The scale-9 border to use + * @param[in] map The Dali::Property::Map to use for to display */ - void SetBackingScale9( const Vector4& border ); + void SetTrackVisual(Dali::Property::Map map); /** - * Resize the backing region + * @brief Return the track image. * - * @param[in] region The size of the region to set + * @return The track image. */ - void ResizeBackingRegion( const Vector2& region ); + std::string GetTrackVisual(); /** - * Size the backing region + * Create the image for the progress bar * - * @param[in] region The size of the region to set + * @param[in] filename The progress bar image */ - void SetBackingRegionSize( const Vector2& region ); + void SetProgressVisual(const std::string& filename); /** - * Create the image for the progress bar + * @brief Set the progress visual from an Dali::Property::Map * - * @param[in] imageName The name of the image to load and set + * @param[in] map The Dali::Property::Map to use for to display */ - void CreateProgressImage( const std::string& imageName ); + void SetProgressVisual(Dali::Property::Map map); /** - * Create the image for the popup + * @brief Return the progress bar image. * - * @param[in] imageName The name of the image to load and set + * @return The progress bar image if it exists. */ - void CreatePopupImage( const std::string& imageName ); + std::string GetProgressVisual(); /** - * Create the image for the popup arrow + * @brief Create the image for the popup + * + * @param[in] filename The popup image + */ + void CreatePopupImage(const std::string& filename); + + /** + * @brief Set the popup image + * + * @param[in] filename The popup image to set + */ + void SetPopupVisual(const std::string& filename); + + /** + * @brief Set the popup from an Dali::Property::Map + * + * @param[in] map The Dali::Property::Map to use for to display + */ + void SetPopupVisual(Dali::Property::Map map); + + /** + * @brief Return the popup image. + * + * @return The popup image if it exists. + */ + std::string GetPopupVisual(); + + /** + * @brief Set the popup arrow image * - * @param[in] imageName The name of the image to load and set + * @param[in] filename The popup arrow image to set */ - void CreatePopupArrowImage( const std::string& imageName ); + void SetPopupArrowVisual(const std::string& filename); /** - * Set the progress image to be a scale-9 image + * @brief Set the popup arrow from an Dali::Property::Map * - * @param[in] border The scale-9 border to use + * @param[in] map The Dali::Property::Map to use for to display */ - void SetProgressScale9( const Vector4& border ); + void SetPopupArrowVisual(Dali::Property::Map map); /** - * Set the popup image to be a scale-9 image + * @brief Return the popup arrow image. * - * @param[in] border The scale-9 border to use + * @return The popup arrow image if it exists. */ - void SetPopupScale9( const Vector4& border ); + std::string GetPopupArrowVisual(); + + /** + * Create the image for the popup arrow + * + * @param[in] filename The popup arrow image to load and set + */ + void CreatePopupArrowImage(const std::string& filename); /** * Set the size of the progress bar region * * @param[in] region The size of the region to set */ - void ResizeProgressRegion( const Vector2& region ); + void ResizeProgressRegion(const Vector2& region); /** * Create the image for the handle * - * @param[in] imageName The name of the image to load and set + * @param[in] filename The handle image */ - void CreateHandleImage( const std::string& imageName ); + void SetHandleVisual(const std::string& filename); /** - * Set the size of the handle region + * @brief Set the handle visual from an Dali::Property::Map * - * @param[in] region The size of the region to set + * @param[in] map The Dali::Property::Map to use for to display + */ + void SetHandleVisual(Property::Map map); + + /** + * @brief Return the handle image. + * + * @return The handle image if it exists. */ - void ResizeHandleRegion( const Vector2& region ); + std::string GetHandleVisual(); + + /** + * Reset the size of the handle + * + * @param[in] size The size of the handle to set + */ + void ResizeHandleSize(const Vector2& size); /** * Create and display the value on the handle @@ -580,32 +644,25 @@ private: void DestroyHandleValueDisplay(); /** - * Update the color of the popup text - * - * @param[in] color The new color - */ - void UpdatePopupTextColor( const Vector4& color ); - - /** - * Set handle region + * Set the size of the handle * - * @param[in] region The handle region + * @param[in] size The handle size */ - void UpdateHandleRegion( const Vector2& region ); + void SetHandleSize(const Vector2& size); /** - * Get handle region + * Get the size of the handle * - * @return The handle region + * @return The handle size */ - Vector2 GetHandleRegion() const; + const Vector2& GetHandleSize() const; /** * Set the lower bound of the slider's value * * @param[in] bound The value to set for the lower bound */ - void UpdateLowerBound( float bound ); + void SetLowerBound(float bound); /** * Get the lower bound of the slider's value @@ -619,7 +676,7 @@ private: * * @param[in] bound The value to set for the upper bound */ - void UpdateUpperBound( float bound ); + void SetUpperBound(float bound); /** * Get the upper bound of the slider's value @@ -629,106 +686,106 @@ private: float GetUpperBound() const; private: - // From ControlImpl - - /** - * @copydoc Dali::CustomActorImpl::OnPropertySet() - */ - virtual void OnPropertySet( Property::Index index, Property::Value propertyValue ); - -private: - // Undefined - Slider( const Slider& ); + Slider(const Slider&); // Undefined - Slider& operator=( const Slider& rhs ); + Slider& operator=(const Slider& rhs); private: + Domain mDomain; ///< Current domain of the handle - Domain mDomain; ///< Current domain of the handle - - Actor mHitArea; ///< The input handler - ImageActor mBacking; ///< Backing image - ImageActor mHandle; ///< Slider handle - ImageActor mProgress; ///< Progress backing - Actor mValueDisplay; ///< Display of the value - ImageActor mPopup; ///< Popup backing - ImageActor mPopupArrow; ///< Popup arrow backing + Actor mHitArea; ///< The input handler + Actor mValueDisplay; ///< Display of the value + Toolkit::ImageView mTrack; ///< Track image + Toolkit::ImageView mHandle; ///< Slider handle + Toolkit::ImageView mProgress; ///< Progress bar + Toolkit::ImageView mPopup; ///< Popup backing + Toolkit::ImageView mPopupArrow; ///< Popup arrow backing - Toolkit::TextView mValueTextView; //< The text value in popup - Toolkit::TextView mHandleValueTextView; ///< The text value on handle - Vector2 mHandleLastTouchPoint; ///< The last touch point for the handle - Timer mValueTimer; ///< Timer used to hide value view + Toolkit::TextLabel mValueTextLabel; //< The text value in popup + Toolkit::TextLabel mHandleValueTextLabel; ///< The text value on handle + Vector2 mHandleLastTouchPoint; ///< The last touch point for the handle + Timer mValueTimer; ///< Timer used to hide value view Toolkit::Slider::ValueChangedSignalType mValueChangedSignal; ///< Signal emitted when the value is changed - Toolkit::Slider::ValueChangedSignalType mSlidingFinishedSignal; ///< Signal emitted when a sliding is finished - Toolkit::Slider::MarkSignalType mMarkSignal; ///< Signal emitted when a mark is reached + Toolkit::Slider::ValueChangedSignalType mSlidingFinishedSignal; ///< Signal emitted when a sliding is finished + Toolkit::Slider::MarkReachedSignalType mMarkReachedSignal; ///< Signal emitted when a mark is reached - SliderState mState; ///< The state of the slider + SliderState mState; ///< The state of the slider - PanGestureDetector mPanDetector; ///< Hit region pan detector + PanGestureDetector mPanDetector; ///< Hit region pan detector - MarkList mMarks; ///< List of discreet marks + MarkList mMarks; ///< List of discreet marks - // Properties - Property::Index mPropertyLowerBound; - Property::Index mPropertyUpperBound; - Property::Index mPropertyValue; - Property::Index mPropertyHitRegion; - Property::Index mPropertyBackingRegion; - Property::Index mPropertyHandleRegion; + std::string mPopupVisual; ///< Image for popup image + std::string mPopupArrowVisual; ///< Image for popup arrow image + std::string mTrackVisual; ///< Image for track image + std::string mHandleVisual; ///< Image for handle image + std::string mProgressVisual; ///< Image for progress bar image - Property::Index mPropertyBackingImageName; - Property::Index mPropertyHandleImageName; - Property::Index mPropertyProgressImageName; - Property::Index mPropertyPopupImageName; - Property::Index mPropertyPopupArrowImageName; + Property::Map mPopupMap; ///< the Property::Map if the image came from a Property::Map, empty otherwise + Property::Map mTrackMap; ///< the Property::Map if the image came from a Property::Map, empty otherwise + Property::Map mHandleMap; ///< the Property::Map if the image came from a Property::Map, empty otherwise + Property::Map mProgressMap; ///< the Property::Map if the image came from a Property::Map, empty otherwise + Property::Map mPopupArrowMap; ///< the Property::Map if the image came from a Property::Map, empty otherwise - Property::Index mPropertyBackingScale9Border; - Property::Index mPropertyProgressScale9Border; - Property::Index mPropertyPopupScale9Border; + Vector4 mDisabledColor; ///< The color to tint the slider when disabled - Property::Index mPropertyDisableColor; - Property::Index mPropertyPopupTextColor; + Vector2 mHitRegion; ///< Size of hit region + Vector2 mTrackRegion; ///< Size of track region + Vector2 mHandleSize; ///< Size of the handle - Property::Index mPropertyValuePrecision; + float mLowerBound = 0.0f; ///< Lower bound on value + float mUpperBound = 1.0f; ///< Upper bound on value + float mValue = 0.0f; ///< Current value of slider - Property::Index mPropertyShowPopup; - Property::Index mPropertyShowValue; + float mMarkTolerance = 0.05f; ///< Tolerance in percentage of slider width for which to snap to marks - Property::Index mPropertyEnabled; + int mValuePrecision; ///< The precision to use for outputting the value - Property::Index mPropertyMarks; - Property::Index mPropertySnapToMarks; - Property::Index mPropertyMarkTolerance; + bool mShowPopup : 1, ///< Show the popup or not + mShowValue : 1, ///< Whether to display the value number or not on the handle + mSnapToMarks : 1; ///< Turn on or off snapping to marks +protected: + struct AccessibleImpl : public DevelControl::ControlAccessible, + public virtual Dali::Accessibility::Value + { + using DevelControl::ControlAccessible::ControlAccessible; + + double GetMinimum() const override; + double GetCurrent() const override; + double GetMaximum() const override; + bool SetCurrent(double) override; + double GetMinimumIncrement() const override; + }; }; } // namespace Internal // Helpers for public-api forwarding methods -inline Toolkit::Internal::Slider& GetImpl( Toolkit::Slider& pub ) +inline Toolkit::Internal::Slider& GetImpl(Toolkit::Slider& pub) { - DALI_ASSERT_ALWAYS( pub ); + DALI_ASSERT_ALWAYS(pub); Dali::RefObject& handle = pub.GetImplementation(); - return static_cast< Toolkit::Internal::Slider& >( handle ); + return static_cast(handle); } -inline const Toolkit::Internal::Slider& GetImpl( const Toolkit::Slider& pub ) +inline const Toolkit::Internal::Slider& GetImpl(const Toolkit::Slider& pub) { - DALI_ASSERT_ALWAYS( pub ); + DALI_ASSERT_ALWAYS(pub); const Dali::RefObject& handle = pub.GetImplementation(); - return static_cast< const Toolkit::Internal::Slider& >( handle ); + return static_cast(handle); } } // namespace Toolkit } // namespace Dali -#endif // __DALI_TOOLKIT_INTERNAL_SLIDER_H__ +#endif // DALI_TOOLKIT_INTERNAL_SLIDER_H