Fix compile error. Non initialized variable.
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / slider / slider-impl.h
index d97da67..6092abd 100755 (executable)
@@ -1,27 +1,33 @@
-#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) 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.
+ * 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
 {
@@ -41,7 +47,7 @@ typedef Dali::IntrusivePtr< Slider > SliderPtr;
 /**
  * @copydoc Toolkit::Slider
  */
-class Slider : public ControlImpl
+class Slider : public Control
 {
 public:
 
@@ -112,49 +118,42 @@ 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
@@ -168,7 +167,7 @@ public:
    *
    * @param[in] showPopup The show popup flag
    */
-  void ShowPopup( bool showPopup );
+  void SetShowPopup( bool showPopup );
 
   /**
    * Get show value in popup
@@ -182,7 +181,7 @@ public:
    *
    * @param[in] showValue The show value flag
    */
-  void ShowValue( bool showValue );
+  void SetShowValue( bool showValue );
 
   /**
    * Get show value on handle
@@ -206,6 +205,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 +235,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.
@@ -242,6 +251,24 @@ public:
   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:
 
   /**
@@ -255,9 +282,10 @@ 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:
 
@@ -297,13 +325,13 @@ 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 TouchEvent& touch );
 
   /**
    * Pan gesture event
@@ -311,7 +339,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
@@ -363,46 +391,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 +450,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();
@@ -486,67 +507,102 @@ private:
   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
@@ -558,16 +614,30 @@ private:
   /**
    * 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
@@ -580,32 +650,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 +682,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,14 +692,6 @@ 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& );
@@ -649,21 +704,21 @@ private:
   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
 
@@ -671,38 +726,35 @@ private:
 
   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
@@ -731,4 +783,4 @@ inline const Toolkit::Internal::Slider& GetImpl( const Toolkit::Slider& pub )
 
 } // namespace Dali
 
-#endif // __DALI_TOOLKIT_INTERNAL_SLIDER_H__
+#endif // DALI_TOOLKIT_INTERNAL_SLIDER_H