-#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) 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.
+ * 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 <dali/public-api/adaptor-framework/timer.h>
+#include <dali/public-api/object/property-array.h>
+#include <dali/public-api/object/property-map.h>
// INTERNAL INCLUDES
-#include <dali/dali.h>
#include <dali-toolkit/public-api/controls/control-impl.h>
#include <dali-toolkit/public-api/controls/slider/slider.h>
-#include <dali-toolkit/public-api/controls/text-view/text-view.h>
+#include <dali-toolkit/public-api/controls/text-controls/text-label.h>
+#include <dali-toolkit/public-api/controls/image-view/image-view.h>
namespace Dali
{
/**
* @copydoc Toolkit::Slider
*/
-class Slider : public ControlImpl
+class Slider : public Control
{
public:
*
* @return The hit region
*/
- Vector2 GetHitRegion() const;
+ const Vector2& GetHitRegion() const;
/**
- * Set backing region
+ * Set the track region
*
- * @param[in] region The backing region
+ * @param[in] region The track region
*/
- void SetBackingRegion( const Vector2& region );
+ void SetTrackRegion( const Vector2& region );
/**
- * Get backing region
+ * Get the track region
*
- * @return The backing region
+ * @return The track region
*/
- Vector2 GetBackingRegion() const;
+ const Vector2& GetTrackRegion() const;
/**
- * Get backing scale9 border
+ * @brief Set the disabled color.
*
- * @return The backing scale9 border
+ * @param[in] color The disabled color.
*/
- Vector4 GetBackingScale9Border() const;
+ void SetDisabledColor( const Vector4& color );
/**
- * Get popup scale9 border
+ * @brief Get disabled color
*
- * @return The popup scale9 border
+ * @return The disabled color
*/
- Vector4 GetPopupScale9Border() const;
+ Vector4 GetDisabledColor() const;
/**
- * Get disable color
+ * Set the value precision to be used for numbers in the slider
*
- * @return The disable color
+ * @param[in] precision The number of decimal places to use for printing numbers
*/
- Vector4 GetDisableColor() const;
-
- /**
- * Get popup text color
- *
- * @return The popup text color
- */
- Vector4 GetPopupTextColor() const;
+ void SetValuePrecision( int precision );
/**
* Get value precision
*
* @param[in] showPopup The show popup flag
*/
- void ShowPopup( bool showPopup );
+ void SetShowPopup( bool showPopup );
/**
* Get show value in popup
*
* @param[in] showValue The show value flag
*/
- void ShowValue( bool showValue );
+ void SetShowValue( bool showValue );
/**
* Get show value on handle
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
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.
static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName,
FunctorDelegate* functor );
+ // 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:
/**
virtual ~Slider();
/**
- * @copydoc Toolkit::ControlImpl::OnControlSizeSet( const Vector3& size )
+ * @copydoc CustomActorImpl::OnRelayout
*/
- virtual void OnControlSizeSet( const Vector3& size );
+ virtual void OnRelayout( const Vector2& size, RelayoutContainer& container );
+
private:
virtual void OnInitialize();
/**
- * 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 TouchData& touch );
/**
* Pan gesture event
* @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
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
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();
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] imageName The name of the image to load and set
+ * @param[in] filename The popup image
*/
- void CreatePopupArrowImage( const std::string& imageName );
+ void CreatePopupImage( const std::string& filename );
/**
- * Set the progress image to be a scale-9 image
+ * @brief Set the popup image
*
- * @param[in] border The scale-9 border to use
+ * @param[in] filename The popup image to set
*/
- void SetProgressScale9( const Vector4& border );
+ void SetPopupVisual( const std::string& filename );
/**
- * Set the popup image to be a scale-9 image
+ * @brief Set the popup 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 SetPopupScale9( const Vector4& border );
+ 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] filename The popup arrow image to set
+ */
+ void SetPopupArrowVisual( const std::string& filename );
+
+ /**
+ * @brief Set the popup arrow from an Dali::Property::Map
+ *
+ * @param[in] map The Dali::Property::Map to use for to display
+ */
+ void SetPopupArrowVisual( Dali::Property::Map map );
+
+ /**
+ * @brief Return the popup arrow image.
+ *
+ * @return The popup arrow image if it exists.
+ */
+ 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
/**
* 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 ResizeHandleRegion( const Vector2& region );
+ void SetHandleVisual( Property::Map map );
+
+ /**
+ * @brief Return the handle image.
+ *
+ * @return The handle image if it exists.
+ */
+ 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
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
*
* @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
float GetUpperBound() const;
private:
- // From ControlImpl
-
- /**
- * @copydoc Dali::CustomActorImpl::OnPropertySet()
- */
- virtual void OnPropertySet( Property::Index index, Property::Value propertyValue );
-
-private:
// Undefined
Slider( const Slider& );
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
-
- Toolkit::TextView mValueTextView; //< The text value in popup
- Toolkit::TextView mHandleValueTextView; ///< The text value on handle
+ 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::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 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::MarkReachedSignalType mMarkReachedSignal; ///< Signal emitted when a mark is reached
SliderState mState; ///< The state of the slider
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;
-
- Property::Index mPropertyBackingImageName;
- Property::Index mPropertyHandleImageName;
- Property::Index mPropertyProgressImageName;
- Property::Index mPropertyPopupImageName;
- Property::Index mPropertyPopupArrowImageName;
+ 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 mPropertyBackingScale9Border;
- Property::Index mPropertyProgressScale9Border;
- Property::Index mPropertyPopupScale9Border;
+ 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 mPropertyDisableColor;
- Property::Index mPropertyPopupTextColor;
+ Vector4 mDisabledColor; ///< The color to tint the slider when disabled
- Property::Index mPropertyValuePrecision;
+ Vector2 mHitRegion; ///< Size of hit region
+ Vector2 mTrackRegion; ///< Size of track region
+ Vector2 mHandleSize; ///< Size of the handle
- Property::Index mPropertyShowPopup;
- Property::Index mPropertyShowValue;
+ float mLowerBound; ///< Lower bound on value
+ float mUpperBound; ///< Upper bound on value
+ float mValue; ///< Current value of slider
- Property::Index mPropertyEnabled;
+ float mMarkTolerance; ///< Tolerance in percentage of slider width for which to snap to marks
- Property::Index mPropertyMarks;
- Property::Index mPropertySnapToMarks;
- Property::Index mPropertyMarkTolerance;
+ int mValuePrecision; ///< The precision to use for outputting the value
+ 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
};
} // namespace Internal
} // namespace Dali
-#endif // __DALI_TOOLKIT_INTERNAL_SLIDER_H__
+#endif // DALI_TOOLKIT_INTERNAL_SLIDER_H