[dali_2.3.21] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / slider / slider-impl.h
old mode 100755 (executable)
new mode 100644 (file)
index ea652fd..799bd2c
@@ -1,8 +1,8 @@
-#ifndef __DALI_TOOLKIT_INTERNAL_SLIDER_H__
-#define __DALI_TOOLKIT_INTERNAL_SLIDER_H__
+#ifndef DALI_TOOLKIT_INTERNAL_SLIDER_H
+#define DALI_TOOLKIT_INTERNAL_SLIDER_H
 
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2023 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.
  */
 
 // EXTERNAL INCLUDES
-#include <dali/public-api/actors/image-actor.h>
+#include <dali/devel-api/atspi-interfaces/value.h>
 #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-toolkit/devel-api/controls/control-devel.h>
+#include <dali-toolkit/internal/controls/control/control-data-impl.h>
 #include <dali-toolkit/public-api/controls/control-impl.h>
-#include <dali-toolkit/devel-api/controls/slider/slider.h>
+#include <dali-toolkit/public-api/controls/image-view/image-view.h>
+#include <dali-toolkit/public-api/controls/slider/slider.h>
 #include <dali-toolkit/public-api/controls/text-controls/text-label.h>
 
 namespace Dali
 {
-
 namespace Toolkit
 {
-
 class Button;
 
 namespace Internal
 {
-
 class Slider;
 
-typedef Dali::IntrusivePtr< Slider > SliderPtr;
+typedef Dali::IntrusivePtr<Slider> SliderPtr;
 
 /**
  * @copydoc Toolkit::Slider
@@ -49,7 +50,6 @@ typedef Dali::IntrusivePtr< Slider > SliderPtr;
 class Slider : public Control
 {
 public:
-
   typedef Property::Array MarkList;
 
   /**
@@ -60,7 +60,6 @@ public:
   static Dali::Toolkit::Slider New();
 
 public:
-
   // Properties
 
   /**
@@ -68,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
@@ -82,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
@@ -96,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
@@ -110,7 +109,7 @@ public:
    *
    * @param[in] region The hit region
    */
-  void SetHitRegion( const Vector2& region );
+  void SetHitRegion(const Vector2& region);
 
   /**
    * Get hit region
@@ -120,46 +119,39 @@ public:
   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
    */
-  const Vector2& GetBackingRegion() const;
+  const Vector2& GetTrackRegion() const;
 
   /**
-   * @brief Set the disable color.
+   * @brief Set the disabled color.
    *
-   * @param[in] color The disable color.
+   * @param[in] color The disabled color.
    */
-  void SetDisableColor( const Vector4& color );
+  void SetDisabledColor(const Vector4& color);
 
   /**
-   * @brief Get disable color
+   * @brief Get disabled color
    *
-   * @return The disable color
+   * @return The disabled color
    */
-  Vector4 GetDisableColor() const;
-
-  /**
-   * Get popup text color
-   *
-   * @return The popup text color
-   */
-  Vector4 GetPopupTextColor() const;
+  Vector4 GetDisabledColor() const;
 
   /**
    * Set the value precision to be used for numbers in the slider
    *
    * @param[in] precision The number of decimal places to use for printing numbers
    */
-  void SetValuePrecision( int precision );
+  void SetValuePrecision(int precision);
 
   /**
    * Get value precision
@@ -173,7 +165,7 @@ public:
    *
    * @param[in] showPopup The show popup flag
    */
-  void SetShowPopup( bool showPopup );
+  void SetShowPopup(bool showPopup);
 
   /**
    * Get show value in popup
@@ -187,7 +179,7 @@ public:
    *
    * @param[in] showValue The show value flag
    */
-  void SetShowValue( bool showValue );
+  void SetShowValue(bool showValue);
 
   /**
    * Get show value on handle
@@ -201,7 +193,7 @@ public:
    *
    * param[in] enabled Set the enabled flag
    */
-  void SetEnabled( bool enabled );
+  void SetEnabled(bool enabled);
 
   /**
    * Return if enabled or not
@@ -218,7 +210,7 @@ public:
    *
    * @param[in] tolerance The percentage of width for which to snap
    */
-  void SetMarkTolerance( float tolerance );
+  void SetMarkTolerance(float tolerance);
 
   /**
    * Return the mark tolerance
@@ -241,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.
@@ -254,8 +246,7 @@ 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);
 
   // Properties
 
@@ -265,7 +256,7 @@ public:
    * @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 );
+  static void SetProperty(BaseObject* object, Property::Index index, const Property::Value& value);
 
   /**
    * Called to retrieve a property of an object of this type.
@@ -273,10 +264,9 @@ public:
    * @param[in] index The property index.
    * @return The current value of the property.
    */
-  static Property::Value GetProperty( BaseObject* object, Property::Index propertyIndex );
+  static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex);
 
 protected:
-
   /**
    * Construct a new Slider.
    */
@@ -288,12 +278,11 @@ protected:
   virtual ~Slider();
 
   /**
-   * @copydoc CustomActorImpl::OnSizeSet( const Vector3& size )
+   * @copydoc CustomActorImpl::OnRelayout
    */
-  virtual void OnSizeSet( const Vector3& size );
+  void OnRelayout(const Vector2& size, RelayoutContainer& container) override;
 
 private:
-
   /**
    * Domain is a from/to pair
    */
@@ -305,8 +294,9 @@ private:
     Domain()
     {
     }
-    Domain( Vector2 fromVal, Vector2 toVal )
-        : from( fromVal ), to( toVal )
+    Domain(Vector2 fromVal, Vector2 toVal)
+    : from(fromVal),
+      to(toVal)
     {
     }
   };
@@ -323,20 +313,24 @@ private:
   };
 
 private:
-
   /**
    * @copydoc Toolkit::Control::OnInitialize()
    */
-  virtual void OnInitialize();
+  void OnInitialize() override;
 
   /**
-   * Hit region touch event
+   * @copydoc Toolkit::Internal::Control::CreateAccessibleObject()
+   */
+  DevelControl::ControlAccessible* CreateAccessibleObject() override;
+
+  /**
+   * 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
@@ -344,7 +338,12 @@ private:
    * @param[in] actor The actor the event is raised for
    * @param[in] gesture The pan event info
    */
-  void OnPan( Actor actor, const PanGesture& gesture );
+  void OnPan(Actor actor, const PanGesture& gesture);
+
+  /**
+   * @copydoc Control::OnPan
+   */
+  using Control::OnPan;
 
   /**
    * Map a position onto a domain and return the result as a percentage
@@ -352,7 +351,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
@@ -360,7 +359,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
@@ -368,7 +367,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
@@ -378,7 +377,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
@@ -386,7 +385,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
@@ -396,39 +395,39 @@ 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
@@ -469,7 +468,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
@@ -477,7 +476,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
@@ -485,7 +484,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
@@ -494,7 +493,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
@@ -509,105 +508,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 track
+   *
+   * @param[in] filename The track image
+   */
+  void SetTrackVisual(const std::string& filename);
 
   /**
-   * Create the image for the backing
+   * @brief Set the track 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 SetBackingImageName( const std::string& imageName );
+  void SetTrackVisual(Dali::Property::Map map);
 
   /**
-   * @brief Return the backing image file name.
+   * @brief Return the track image.
    *
-   * @return The backing image file name.
+   * @return The track image.
    */
-  std::string GetBackingImageName();
+  std::string GetTrackVisual();
 
   /**
    * Create the image for the progress bar
    *
-   * @param[in] imageName The name of the image to load and set
+   * @param[in] filename The progress bar image
+   */
+  void SetProgressVisual(const std::string& filename);
+
+  /**
+   * @brief Set the progress visual from an Dali::Property::Map
+   *
+   * @param[in] map The Dali::Property::Map to use for to display
    */
-  void SetProgressImageName( const std::string& imageName );
+  void SetProgressVisual(Dali::Property::Map map);
 
   /**
-   * @brief Return the progress image name.
+   * @brief Return the progress bar image.
    *
-   * @return The progress image name if it exists.
+   * @return The progress bar image if it exists.
    */
-  std::string GetProgressImageName();
+  std::string GetProgressVisual();
 
   /**
    * @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 CreatePopupImage( const std::string& imageName );
+  void CreatePopupImage(const std::string& filename);
 
   /**
-   * @brief Set the popup name
+   * @brief Set the popup image
    *
-   * @param[in] imageName The name of the image to set
+   * @param[in] filename The popup image to set
    */
-  void SetPopupImageName( const std::string& imageName );
+  void SetPopupVisual(const std::string& filename);
 
   /**
-   * @brief Return the popup image name.
+   * @brief Set the popup from an Dali::Property::Map
    *
-   * @return The name of the popup image if it exists.
+   * @param[in] map The Dali::Property::Map to use for to display
    */
-  std::string GetPopupImageName();
+  void SetPopupVisual(Dali::Property::Map map);
 
   /**
-   * @brief Set the popup arrow image name
+   * @brief Return the popup image.
    *
-   * @param[in] imageName The name of the image to set
+   * @return The popup image if it exists.
    */
-  void SetPopupArrowImageName( const std::string& imageName );
+  std::string GetPopupVisual();
 
   /**
-   * @brief Return the popup arrow image name.
+   * @brief Set the popup arrow image
    *
-   * @return The name of the popup image if it exists.
+   * @param[in] filename The popup arrow image to set
    */
-  std::string GetPopupArrowImageName();
+  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] imageName The name of the image to load and set
+   * @param[in] filename The popup arrow image to load and set
    */
-  void CreatePopupArrowImage( const std::string& imageName );
+  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 SetHandleImageName( const std::string& imageName );
+  void SetHandleVisual(const std::string& filename);
 
   /**
-   * @brief Return the handle image name.
+   * @brief Set the handle visual from an Dali::Property::Map
    *
-   * @return The name of the image handle if it exists.
+   * @param[in] map The Dali::Property::Map to use for to display
    */
-  std::string GetHandleImageName();
+  void SetHandleVisual(Property::Map map);
 
   /**
-   * Set the size of the handle region
+   * @brief Return the handle image.
    *
-   * @param[in] region The size of the region to set
+   * @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
@@ -620,32 +654,25 @@ private:
   void DestroyHandleValueDisplay();
 
   /**
-   * Update the color of the popup text
-   *
-   * @param[in] color The new color
-   */
-  void SetPopupTextColor( 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 SetHandleRegion( 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
    */
-  const 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 SetLowerBound( float bound );
+  void SetLowerBound(float bound);
 
   /**
    * Get the lower bound of the slider's value
@@ -659,7 +686,7 @@ private:
    *
    * @param[in] bound The value to set for the upper bound
    */
-  void SetUpperBound( float bound );
+  void SetUpperBound(float bound);
 
   /**
    * Get the upper bound of the slider's value
@@ -669,87 +696,131 @@ private:
   float GetUpperBound() const;
 
 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
+  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
 
-  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::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::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
+
+  PanGestureDetector mPanDetector; ///< Hit region pan detector
 
-  SliderState mState;                 ///< The state of the slider
+  MarkList mMarks; ///< List of discreet marks
 
-  PanGestureDetector mPanDetector;    ///< Hit region pan detector
+  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
 
-  MarkList mMarks;                    ///< List of discreet marks
+  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
 
-  std::string mPopupImageName;      ///< Image name for popup image
-  std::string mPopupArrowImageName; ///< Image name for popup arrow
+  Vector4 mDisabledColor; ///< The color to tint the slider when disabled
 
-  Vector4 mDisableColor;    ///< The color to tint the slider when disabled
-  Vector4 mPopupTextColor;  ///< The color of the popup text
+  Vector2 mHitRegion;   ///< Size of hit region
+  Vector2 mTrackRegion; ///< Size of track region
+  Vector2 mHandleSize;  ///< Size of the handle
 
-  Vector2 mHitRegion;     ///< Size of hit region
-  Vector2 mBackingRegion; ///< Size of backing region
-  Vector2 mHandleRegionSize;  ///< Size of the handle region
+  float mLowerBound = 0.0f; ///< Lower bound on value
+  float mUpperBound = 1.0f; ///< Upper bound on value
+  float mValue      = 0.0f; ///< Current value of slider
 
-  float mLowerBound;        ///< Lower bound on value
-  float mUpperBound;        ///< Upper bound on value
-  float mValue;             ///< Current value of slider
+  float mMarkTolerance = 0.05f; ///< Tolerance in percentage of slider width for which to snap to marks
 
-  float mMarkTolerance;     ///< Tolerance in percentage of slider width for which to snap to marks
+  int mValuePrecision; ///< The precision to use for outputting the value
 
-  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
 
-  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:
+  class SliderAccessible : public DevelControl::ControlAccessible,
+                           public virtual Dali::Accessibility::Value
+  {
+  public:
+    using DevelControl::ControlAccessible::ControlAccessible;
+
+    /**
+     * @copydoc Dali::Accessibility::Value::GetMinimum()
+     */
+    double GetMinimum() const override;
+
+    /**
+     * @copydoc Dali::Accessibility::Value::GetCurrent()
+     */
+    double GetCurrent() const override;
+
+    /**
+     * @copydoc Dali::Accessibility::Value::GetValueText()
+     */
+    std::string GetValueText() const override;
+
+    /**
+     * @copydoc Dali::Accessibility::Value::GetMaximum()
+     */
+    double GetMaximum() const override;
+
+    /**
+     * @copydoc Dali::Accessibility::Value::SetCurrent()
+     */
+    bool SetCurrent(double) override;
+
+    /**
+     * @copydoc Dali::Accessibility::Value::GetMinimumIncrement()
+     */
+    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<Toolkit::Internal::Slider&>(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<const Toolkit::Internal::Slider&>(handle);
 }
 
 } // namespace Toolkit
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_INTERNAL_SLIDER_H__
+#endif // DALI_TOOLKIT_INTERNAL_SLIDER_H