-//
-// 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.
-//
-
+/*
+ * Copyright (c) 2014 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.
+ *
+ */
+
+// CLASS HEADER
#include <dali-toolkit/internal/controls/slider/slider-impl.h>
-#include <dali-toolkit/public-api/controls/control-impl.h>
+// EXTERNAL INCLUDES
+#include <cstring> // for strcmp
#include <sstream>
+#include <limits>
+#include <dali/public-api/events/touch-event.h>
+#include <dali/public-api/object/type-registry.h>
+#include <dali/devel-api/object/type-registry-helper.h>
+#include <dali/public-api/images/resource-image.h>
+
+// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/control-impl.h>
using namespace Dali;
-using namespace std;
namespace Dali
{
namespace Internal
{
-namespace
+namespace // Unnamed namespace
{
+
+BaseHandle Create()
+{
+ return Dali::Toolkit::Slider::New();
+}
+
+// Setup properties, signals and actions using the type-registry.
+DALI_TYPE_REGISTRATION_BEGIN( Toolkit::Slider, Toolkit::Control, Create )
+
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "lower-bound", FLOAT, LOWER_BOUND )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "upper-bound", FLOAT, UPPER_BOUND )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "value", FLOAT, VALUE )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "hit-region", VECTOR2, HIT_REGION )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "backing-region", VECTOR2, BACKING_REGION )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "handle-region", VECTOR2, HANDLE_REGION )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "backing-image-name", STRING, BACKING_IMAGE_NAME )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "handle-image-name", STRING, HANDLE_IMAGE_NAME )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "progress-image-name", STRING, PROGRESS_IMAGE_NAME )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popup-image-name", STRING, POPUP_IMAGE_NAME )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popup-arrow-image-name", STRING, POPUP_ARROW_IMAGE_NAME )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "disable-color", VECTOR4, DISABLE_COLOR )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popup-text-color", VECTOR4, POPUP_TEXT_COLOR )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "value-precision", INTEGER, VALUE_PRECISION )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "show-popup", BOOLEAN, SHOW_POPUP )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "show-value", BOOLEAN, SHOW_VALUE )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "enabled", BOOLEAN, ENABLED )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "marks", ARRAY, MARKS )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "snap-to-marks", BOOLEAN, SNAP_TO_MARKS )
+DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "mark-tolerance", FLOAT, MARK_TOLERANCE )
+
+DALI_SIGNAL_REGISTRATION( Toolkit, Slider, "value-changed", SIGNAL_VALUE_CHANGED )
+DALI_SIGNAL_REGISTRATION( Toolkit, Slider, "mark", SIGNAL_MARK )
+
+DALI_TYPE_REGISTRATION_END()
+
const float BACKING_Z = -0.1f;
const float PROGRESS_Z = 0.1f;
const float HANDLE_Z = 1.0f;
const float DEFAULT_HEIGHT = 27.0f;
const float DEFAULT_HIT_HEIGHT = 72.0f;
const float DEFAULT_HANDLE_HEIGHT = DEFAULT_HIT_HEIGHT;
+const float POPUP_TEXT_PADDING = 10.0f;
-const char* SKINNED_BACKING_IMAGE_NAME = DALI_IMAGE_DIR "slider-skin.png";
+const char* SKINNED_BACKING_IMAGE_NAME = DALI_IMAGE_DIR "slider-skin.9.png";
const char* SKINNED_HANDLE_IMAGE_NAME = DALI_IMAGE_DIR "slider-skin-handle.png";;
-const char* SKINNED_PROGRESS_IMAGE_NAME = DALI_IMAGE_DIR "slider-skin-progress.png";
-const char* SKINNED_POPUP_IMAGE_NAME = DALI_IMAGE_DIR "slider-popup.png";
+const char* SKINNED_PROGRESS_IMAGE_NAME = DALI_IMAGE_DIR "slider-skin-progress.9.png";
+const char* SKINNED_POPUP_IMAGE_NAME = DALI_IMAGE_DIR "slider-popup.9.png";
const char* SKINNED_POPUP_ARROW_IMAGE_NAME = DALI_IMAGE_DIR "slider-popup-arrow.png";
-const Vector4 SKINNED_BACKING_SCALE9_BORDER( 12.0f, 0.0f, 12.0f, 0.0f );
-const Vector4 SKINNED_PROGRESS_SCALE9_BORDER( 14.0f, 0.0f, 0.0f, 0.0f );
-const Vector4 SKINNED_POPUP_SCALE9_BORDER( 10.0f, 10.0f, 10.0f, 10.0f );
-
const Vector2 DEFAULT_HIT_REGION( DEFAULT_WIDTH, DEFAULT_HIT_HEIGHT );
const Vector2 DEFAULT_BACKING_REGION( DEFAULT_WIDTH, DEFAULT_HEIGHT );
const Vector2 DEFAULT_HANDLE_REGION( DEFAULT_HANDLE_HEIGHT, DEFAULT_HANDLE_HEIGHT );
const bool DEFAULT_SHOW_POPUP = false;
const bool DEFAULT_SHOW_VALUE = true;
const bool DEFAULT_ENABLED = true;
+const bool DEFAULT_SNAP_TO_MARKS = false;
-
-BaseHandle Create()
-{
- return Dali::Toolkit::Slider::New();
-}
-
-TypeRegistration typeRegistration( typeid(Dali::Toolkit::Slider), typeid(Dali::Toolkit::Control), Create );
-
-SignalConnectorType signalConnector1( typeRegistration, Toolkit::Slider::SIGNAL_VALUE_CHANGED, &Toolkit::Internal::Slider::DoConnectSignal );
-SignalConnectorType signalConnector2( typeRegistration, Toolkit::Slider::SIGNAL_MARK, &Toolkit::Internal::Slider::DoConnectSignal );
-
-} // namespace
+} // Unnamed namespace
///////////////////////////////////////////////////////////////////////////////////////////////////
// Slider
}
Slider::Slider()
-: ControlImpl( true ),
- mState( NORMAL )
+: Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ),
+ mState( NORMAL ),
+ mDisableColor( 0.0f, 0.0f, 0.0f, 0.0f ),
+ mPopupTextColor( 0.0f, 0.0f, 0.0f, 0.0f ),
+ mHitRegion( 0.0f, 0.0f ),
+ mBackingRegion( 0.0f, 0.0f ),
+ mHandleRegionSize( 0.0f, 0.0f ),
+ mLowerBound( 0.0f ),
+ mUpperBound( 0.0f ),
+ mValue( 0.0f ),
+ mMarkTolerance( 0.0f ),
+ mValuePrecision( 0 ),
+ mShowPopup( false ),
+ mShowValue( false ),
+ mSnapToMarks( false )
{
}
// Properties
Actor self = Self();
- // Register properties in a block so the properties are ready for the update functions
- mPropertyHitRegion = self.RegisterProperty( Dali::Toolkit::Slider::HIT_REGION_PROPERTY_NAME, DEFAULT_HIT_REGION, Property::READ_WRITE );
- mPropertyBackingRegion = self.RegisterProperty( Dali::Toolkit::Slider::BACKING_REGION_PROPERTY_NAME, DEFAULT_BACKING_REGION, Property::READ_WRITE );
- mPropertyHandleRegion = self.RegisterProperty( Dali::Toolkit::Slider::HANDLE_REGION_PROPERTY_NAME, DEFAULT_HANDLE_REGION, Property::READ_WRITE );
-
- mPropertyBackingImageName = self.RegisterProperty( Dali::Toolkit::Slider::BACKING_IMAGE_NAME_PROPERTY_NAME, SKINNED_BACKING_IMAGE_NAME, Property::READ_WRITE );
- mPropertyHandleImageName = self.RegisterProperty( Dali::Toolkit::Slider::HANDLE_IMAGE_NAME_PROPERTY_NAME, SKINNED_HANDLE_IMAGE_NAME, Property::READ_WRITE );
-
- mPropertyProgressImageName = self.RegisterProperty( Dali::Toolkit::Slider::PROGRESS_IMAGE_NAME_PROPERTY_NAME, SKINNED_PROGRESS_IMAGE_NAME, Property::READ_WRITE );
- mPropertyPopupImageName = self.RegisterProperty( Dali::Toolkit::Slider::POPUP_IMAGE_NAME_PROPERTY_NAME, SKINNED_POPUP_IMAGE_NAME, Property::READ_WRITE );
- mPropertyPopupArrowImageName = self.RegisterProperty( Dali::Toolkit::Slider::POPUP_ARROW_IMAGE_NAME_PROPERTY_NAME, SKINNED_POPUP_ARROW_IMAGE_NAME, Property::READ_WRITE );
-
- mPropertyBackingScale9Border = self.RegisterProperty( Dali::Toolkit::Slider::BACKING_SCALE9_BORDER_PROPERTY_NAME, SKINNED_BACKING_SCALE9_BORDER, Property::READ_WRITE );
- mPropertyProgressScale9Border = self.RegisterProperty( Dali::Toolkit::Slider::PROGRESS_SCALE9_BORDER_PROPERTY_NAME, SKINNED_PROGRESS_SCALE9_BORDER, Property::READ_WRITE );
- mPropertyPopupScale9Border = self.RegisterProperty( Dali::Toolkit::Slider::POPUP_SCALE9_BORDER_PROPERTY_NAME, SKINNED_POPUP_SCALE9_BORDER, Property::READ_WRITE );
+ SetHitRegion( DEFAULT_HIT_REGION );
+ SetBackingRegion( DEFAULT_BACKING_REGION );
+ SetHandleRegion( DEFAULT_HANDLE_REGION );
- mPropertyDisableColor = self.RegisterProperty( Dali::Toolkit::Slider::DISABLE_COLOR_PROPERTY_NAME, DEFAULT_DISABLE_COLOR, Property::READ_WRITE );
- mPropertyPopupTextColor = self.RegisterProperty( Dali::Toolkit::Slider::POPUP_TEXT_COLOR_PROPERTY_NAME, DEFAULT_POPUP_TEXT_COLOR, Property::READ_WRITE );
+ SetBackingImageName( SKINNED_BACKING_IMAGE_NAME );
+ SetHandleImageName( SKINNED_HANDLE_IMAGE_NAME );
+ SetProgressImageName( SKINNED_PROGRESS_IMAGE_NAME );
+ SetPopupImageName( SKINNED_POPUP_IMAGE_NAME );
+ SetPopupArrowImageName( SKINNED_POPUP_ARROW_IMAGE_NAME );
- mPropertyValuePrecision = self.RegisterProperty( Dali::Toolkit::Slider::VALUE_PRECISION_PROPERTY_NAME, DEFAULT_VALUE_PRECISION, Property::READ_WRITE );
- mPropertyShowPopup = self.RegisterProperty( Dali::Toolkit::Slider::SHOW_POPUP_PROPERTY_NAME, DEFAULT_SHOW_POPUP, Property::READ_WRITE );
- mPropertyShowValue = self.RegisterProperty( Dali::Toolkit::Slider::SHOW_VALUE_PROPERTY_NAME, DEFAULT_SHOW_VALUE, Property::READ_WRITE );
+ SetPopupTextColor( DEFAULT_POPUP_TEXT_COLOR );
- mPropertyEnabled = self.RegisterProperty( Dali::Toolkit::Slider::ENABLED_PROPERTY_NAME, DEFAULT_ENABLED, Property::READ_WRITE );
+ SetShowPopup( DEFAULT_SHOW_POPUP );
+ SetShowValue( DEFAULT_SHOW_VALUE );
- mPropertyMarks = self.RegisterProperty( Dali::Toolkit::Slider::MARKS_PROPERTY_NAME, mMarks, Property::READ_WRITE );
- mPropertySnapToMarks = self.RegisterProperty( Dali::Toolkit::Slider::SNAP_TO_MARKS_PROPERTY_NAME, false, Property::READ_WRITE );
- mPropertyMarkTolerance = self.RegisterProperty( Dali::Toolkit::Slider::MARK_TOLERANCE_PROPERTY_NAME, MARK_SNAP_TOLERANCE, Property::READ_WRITE );
+ SetEnabled( DEFAULT_ENABLED );
+ SetDisableColor( DEFAULT_DISABLE_COLOR );
- mPropertyLowerBound = self.RegisterProperty( Dali::Toolkit::Slider::LOWER_BOUND_PROPERTY_NAME, DEFAULT_LOWER_BOUND, Property::READ_WRITE );
- mPropertyUpperBound = self.RegisterProperty( Dali::Toolkit::Slider::UPPER_BOUND_PROPERTY_NAME, DEFAULT_UPPER_BOUND, Property::READ_WRITE );
- mPropertyValue = self.RegisterProperty( Dali::Toolkit::Slider::VALUE_PROPERTY_NAME, DEFAULT_VALUE, Property::READ_WRITE );
+ SetSnapToMarks( DEFAULT_SNAP_TO_MARKS );
+ SetMarkTolerance( MARK_SNAP_TOLERANCE );
- ResizeHitRegion( DEFAULT_HIT_REGION );
- SetBackingRegion( DEFAULT_BACKING_REGION );
- UpdateHandleRegion( DEFAULT_HANDLE_REGION );
- CreateBackingImage( SKINNED_BACKING_IMAGE_NAME );
- CreateHandleImage( SKINNED_HANDLE_IMAGE_NAME );
- CreateProgressImage( SKINNED_PROGRESS_IMAGE_NAME );
- CreatePopupImage( SKINNED_POPUP_IMAGE_NAME );
- CreatePopupArrowImage( SKINNED_POPUP_ARROW_IMAGE_NAME );
- SetBackingScale9( SKINNED_BACKING_SCALE9_BORDER );
- SetProgressScale9( SKINNED_PROGRESS_SCALE9_BORDER );
- SetPopupScale9( SKINNED_POPUP_SCALE9_BORDER );
- UpdatePopupTextColor( DEFAULT_POPUP_TEXT_COLOR );
- ShowPopup( DEFAULT_SHOW_POPUP );
- ShowValue( DEFAULT_SHOW_VALUE );
- SetEnabled( DEFAULT_ENABLED );
- UpdateLowerBound( DEFAULT_LOWER_BOUND );
- UpdateUpperBound( DEFAULT_UPPER_BOUND );
+ SetLowerBound( DEFAULT_LOWER_BOUND );
+ SetUpperBound( DEFAULT_UPPER_BOUND );
UpdateSkin();
- DisplayValue( DEFAULT_VALUE, false ); // Run this last to display the correct value
+ SetValuePrecision( DEFAULT_VALUE_PRECISION );
+ mValue = DEFAULT_VALUE;
+ DisplayValue( mValue, false ); // Run this last to display the correct value
// Size the Slider actor to a default
self.SetSize( DEFAULT_HIT_REGION.x, DEFAULT_HIT_REGION.y );
if( mState == PRESSED )
{
mState = NORMAL;
- mSlidingFinishedSignal.Emit( Toolkit::Slider::DownCast( Self() ), Self().GetProperty( mPropertyValue ).Get<float>());
+ mSlidingFinishedSignal.Emit( Toolkit::Slider::DownCast( Self() ), GetValue() );
}
}
}
return true;
}
-void Slider::OnPan( Actor actor, PanGesture gesture )
+void Slider::OnPan( Actor actor, const PanGesture& gesture )
{
// gesture.position is in local actor coordinates
if( mState != DISABLED )
SetValue( value );
DisplayPopup( value );
}
- mSlidingFinishedSignal.Emit( Toolkit::Slider::DownCast( Self() ), Self().GetProperty( mPropertyValue ).Get<float>());
+ mSlidingFinishedSignal.Emit( Toolkit::Slider::DownCast( Self() ), GetValue() );
}
mState = NORMAL;
// Progress bar
if( mProgress )
{
- if( clampledValue > 0.0f )
- {
- mProgress.SetVisible( true ); // Deliberately set this in case multiple SetValues are fired at once
- mProgress.SetSize( x, GetBackingRegion().y );
- }
- else
- {
- mProgress.SetVisible( false );
- }
+ mProgress.SetSize( x, GetBackingRegion().y );
}
// Signals
}
}
- if( mHandleValueTextView )
+ if( mHandleValueTextLabel )
{
std::stringstream ss;
ss.precision( GetValuePrecision() );
- ss << fixed << clampledValue;
- mHandleValueTextView.SetText( ss.str() );
+ ss << std::fixed << clampledValue;
+
+ mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, ss.str() );
}
}
void Slider::SetMarks( const MarkList& marks )
{
- float value;
- for( MarkList::const_iterator it = marks.begin(), itEnd = marks.end(); it != itEnd; ++it )
- {
- const Property::Value& propertyValue = *it;
- propertyValue.Get( value );
-
- mMarks.push_back( value );
- }
+ mMarks = marks;
}
const Slider::MarkList& Slider::GetMarks() const
return mMarks;
}
+void Slider::SetSnapToMarks( bool snap )
+{
+ mSnapToMarks = snap;
+}
+
bool Slider::GetSnapToMarks() const
{
- return Self().GetProperty<bool>( mPropertySnapToMarks );
+ return mSnapToMarks;
}
Actor Slider::CreateHitRegion()
return backing;
}
-void Slider::CreateBackingImage( const std::string& imageName )
+void Slider::SetBackingImageName( const std::string& imageName )
{
- if( mBacking && imageName != String::EMPTY )
+ if( mBacking && ( imageName.size() > 0 ) )
{
- Image image = Image::New( imageName );
+ Image image = ResourceImage::New( imageName );
mBacking.SetImage( image );
}
}
-void Slider::SetBackingScale9( const Vector4& border )
+std::string Slider::GetBackingImageName()
{
if( mBacking )
{
- mBacking.SetStyle( ImageActor::STYLE_NINE_PATCH );
- mBacking.SetNinePatchBorder( border );
+ return ResourceImage::DownCast( mBacking.GetImage() ).GetUrl();
}
-}
-void Slider::SetBackingRegionSize( const Vector2& region )
-{
- if( mBacking )
- {
- mBacking.SetSize( region );
- }
+ return std::string( "" );
}
ImageActor Slider::CreateProgress()
return progress;
}
-void Slider::CreateProgressImage( const std::string& imageName )
+void Slider::SetProgressImageName( const std::string& imageName )
{
- if( mProgress && imageName != String::EMPTY )
+ if( mProgress && ( imageName.size() > 0 ) )
{
- Image image = Image::New( imageName );
+ Image image = ResourceImage::New( imageName );
mProgress.SetImage( image );
}
}
-void Slider::CreatePopupImage( const std::string& imageName )
+std::string Slider::GetProgressImageName()
{
- if( mPopup && imageName != String::EMPTY )
+ if( mProgress )
{
- Image image = Image::New( imageName );
- mPopup.SetImage( image );
+ return ResourceImage::DownCast( mProgress.GetImage()).GetUrl();
}
+
+ return std::string( "" );
}
-void Slider::CreatePopupArrowImage( const std::string& imageName )
+void Slider::SetPopupImageName( const std::string& imageName )
{
- if( mPopupArrow && imageName != String::EMPTY )
- {
- Image image = Image::New( imageName );
- mPopupArrow.SetImage( image );
- }
+ mPopupImageName = imageName;
}
-void Slider::SetProgressScale9( const Vector4& border )
+std::string Slider::GetPopupImageName()
{
- if( mProgress )
+ return mPopupImageName;
+}
+
+void Slider::CreatePopupImage( const std::string& imageName )
+{
+ if( mPopup && ( imageName.size() > 0 ) )
{
- mProgress.SetStyle( ImageActor::STYLE_NINE_PATCH );
- mProgress.SetNinePatchBorder( border );
+ Image image = ResourceImage::New( imageName );
+ mPopup.SetImage( image );
}
}
-void Slider::SetPopupScale9( const Vector4& border )
+void Slider::SetPopupArrowImageName( const std::string& imageName )
+{
+ mPopupArrowImageName = imageName;
+}
+
+std::string Slider::GetPopupArrowImageName()
+{
+ return mPopupArrowImageName;
+}
+
+void Slider::CreatePopupArrowImage( const std::string& imageName )
{
- if( mPopup )
+ if( mPopupArrow && ( imageName.size() > 0 ) )
{
- mPopup.SetStyle( ImageActor::STYLE_NINE_PATCH );
- mPopup.SetNinePatchBorder( border );
+ Image image = ResourceImage::New( imageName );
+ mPopupArrow.SetImage( image );
}
}
return arrow;
}
-Toolkit::TextView Slider::CreatePopupText()
+Toolkit::TextLabel Slider::CreatePopupText()
{
- Toolkit::TextView textView = Toolkit::TextView::New();
- textView.SetParentOrigin( ParentOrigin::CENTER );
- textView.SetAnchorPoint( AnchorPoint::CENTER );
- textView.SetSizePolicy( Control::Flexible, Control::Flexible );
- textView.SetZ( VALUE_DISPLAY_TEXT_Z );
- return textView;
+ Toolkit::TextLabel textLabel = Toolkit::TextLabel::New();
+ textLabel.SetParentOrigin( ParentOrigin::CENTER );
+ textLabel.SetAnchorPoint( AnchorPoint::CENTER );
+ textLabel.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS );
+ textLabel.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+ textLabel.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+ textLabel.SetProperty( Toolkit::TextLabel::Property::TEXT_COLOR, DEFAULT_POPUP_TEXT_COLOR );
+ textLabel.SetZ( VALUE_DISPLAY_TEXT_Z );
+ textLabel.SetPadding( Padding( POPUP_TEXT_PADDING, POPUP_TEXT_PADDING, 0.0f, 0.0f ) );
+ return textLabel;
}
ImageActor Slider::CreatePopup()
ImageActor popup = ImageActor::New();
popup.SetParentOrigin( ParentOrigin::TOP_CENTER );
popup.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER );
+ popup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::WIDTH );
- mValueTextView = CreatePopupText();
- popup.Add( mValueTextView );
+ mValueTextLabel = CreatePopupText();
+ popup.Add( mValueTextLabel );
return popup;
}
-void Slider::CreateHandleImage( const std::string& imageName )
+void Slider::SetHandleImageName( const std::string& imageName )
{
- if( mHandle && imageName != String::EMPTY )
+ if( mHandle && ( imageName.size() > 0 ) )
{
- Image image = Image::New( imageName );
+ Image image = ResourceImage::New( imageName );
mHandle.SetImage( image );
}
}
+std::string Slider::GetHandleImageName()
+{
+ if( mHandle )
+ {
+ return ResourceImage::DownCast( mHandle.GetImage() ).GetUrl();
+ }
+
+ return std::string( "" );
+}
+
void Slider::ResizeHandleRegion( const Vector2& region )
{
if( mHandle )
void Slider::CreateHandleValueDisplay()
{
- if( mHandle && !mHandleValueTextView )
+ if( mHandle && !mHandleValueTextLabel )
{
- mHandleValueTextView = Toolkit::TextView::New();
- mHandleValueTextView.SetParentOrigin( ParentOrigin::CENTER );
- mHandleValueTextView.SetAnchorPoint( AnchorPoint::CENTER );
- mHandleValueTextView.SetSize( GetHandleRegion() );
- mHandleValueTextView.SetZ( HANDLE_VALUE_DISPLAY_TEXT_Z );
- mHandle.Add( mHandleValueTextView );
+ mHandleValueTextLabel = Toolkit::TextLabel::New();
+ mHandleValueTextLabel.SetParentOrigin( ParentOrigin::CENTER );
+ mHandleValueTextLabel.SetAnchorPoint( AnchorPoint::CENTER );
+ mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+ mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" );
+ mHandleValueTextLabel.SetDrawMode( DrawMode::OVERLAY );
+ mHandle.Add( mHandleValueTextLabel );
}
}
void Slider::DestroyHandleValueDisplay()
{
- if(mHandleValueTextView)
- {
- mHandleValueTextView.Unparent();
- mHandleValueTextView.Reset();
- }
+ UnparentAndReset(mHandleValueTextLabel);
}
-void Slider::UpdatePopupTextColor( const Vector4& color )
+void Slider::SetPopupTextColor( const Vector4& color )
{
- if( mValueTextView )
- {
- mValueTextView.SetColor( color );
- }
+ mPopupTextColor = color;
}
Actor Slider::CreateValueDisplay()
mBacking.Add( mHandle );
}
-void Slider::ResizeHitRegion( const Vector2& size )
+void Slider::SetHitRegion( const Vector2& size )
{
+ mHitRegion = size;
+
if( mHitArea )
{
- mHitArea.SetSize( size );
+ mHitArea.SetSize( mHitRegion );
}
}
+const Vector2& Slider::GetHitRegion() const
+{
+ return mHitRegion;
+}
+
void Slider::AddPopup()
{
if( !mValueDisplay )
mValueDisplay.SetVisible( false );
mHandle.Add( mValueDisplay );
- Actor self = Self();
- CreatePopupImage( self.GetProperty<std::string>( mPropertyPopupImageName ) );
- SetPopupScale9( GetPopupScale9Border() );
- CreatePopupArrowImage( self.GetProperty<std::string>( mPropertyPopupArrowImageName ) );
+ CreatePopupImage( GetPopupImageName() );
+ CreatePopupArrowImage( GetPopupArrowImageName() );
mValueTimer = Timer::New( VALUE_VIEW_SHOW_DURATION );
mValueTimer.TickSignal().Connect( this, &Slider::HideValueView );
const float MARK_TOLERANCE = GetMarkTolerance();
float mark;
- for( MarkList::iterator it = mMarks.begin(), itEnd = mMarks.end(); it != itEnd; ++it )
+ for( std::size_t i = 0; i < mMarks.Size(); ++i)
{
- const Property::Value& propertyValue = *it;
+ const Property::Value& propertyValue = mMarks[i];
propertyValue.Get( mark );
mark = MapValuePercentage( mark );
float closestDist = std::numeric_limits<float>::max();
float mark;
- for( MarkList::iterator it = mMarks.begin(), itEnd = mMarks.end(); it != itEnd; ++it )
+ for( std::size_t i = 0; i < mMarks.Size(); ++i)
{
- const Property::Value& propertyValue = *it;
+ const Property::Value& propertyValue = mMarks[i];
propertyValue.Get( mark );
mark = MapValuePercentage( mark );
// Binary search
int head = 0,
- tail = mMarks.size() - 1;
+ tail = mMarks.Size() - 1;
int current;
float mark;
outIndex = current;
return true;
}
+
+ if( value < mark )
+ {
+ tail = current - 1;
+ }
else
{
- if( value < mark )
- {
- tail = current - 1;
- }
- else
- {
- head = current + 1;
- }
+ head = current + 1;
}
}
return false;
}
-void Slider::OnPropertySet( Property::Index index, Property::Value propertyValue )
-{
- if( index == mPropertyLowerBound )
- {
- UpdateLowerBound( propertyValue.Get<float>() );
- }
- else if( index == mPropertyUpperBound )
- {
- UpdateUpperBound( propertyValue.Get<float>() );
- }
- else if( index == mPropertyValue )
- {
- DisplayValue( propertyValue.Get<float>(), true );
- }
- else if( index == mPropertyHitRegion )
- {
- ResizeHitRegion( propertyValue.Get<Vector2>() );
- }
- else if( index == mPropertyBackingRegion )
- {
- ResizeBackingRegion( propertyValue.Get<Vector2>() );
- }
- else if( index == mPropertyHandleRegion )
- {
- UpdateHandleRegion( propertyValue.Get<Vector2>() );
- }
- else if( index == mPropertyBackingImageName )
- {
- CreateBackingImage( propertyValue.Get<std::string>() );
- }
- else if( index == mPropertyHandleImageName )
- {
- CreateHandleImage( propertyValue.Get<std::string>() );
- }
- else if( index == mPropertyProgressImageName )
- {
- CreateProgressImage( propertyValue.Get<std::string>() );
- }
- else if( index == mPropertyPopupImageName )
- {
- CreatePopupImage( propertyValue.Get<std::string>() );
- }
- else if( index == mPropertyPopupArrowImageName )
- {
- CreatePopupArrowImage( propertyValue.Get<std::string>() );
- }
- else if( index == mPropertyBackingScale9Border )
- {
- SetBackingScale9( propertyValue.Get<Vector4>() );
- }
- else if( index == mPropertyProgressScale9Border )
- {
- SetProgressScale9( propertyValue.Get<Vector4>() );
- }
- else if( index == mPropertyPopupScale9Border )
- {
- SetPopupScale9( propertyValue.Get<Vector4>() );
- }
- else if( index == mPropertyDisableColor )
- {
- UpdateSkin();
- }
- else if( index == mPropertyPopupTextColor )
- {
- UpdatePopupTextColor( propertyValue.Get<Vector4>() );
- }
- else if( index == mPropertyValuePrecision )
- {
- DisplayValue( GetValue(), false );
- }
- else if( index == mPropertyShowPopup )
- {
- ShowPopup( propertyValue.Get<bool>() );
- }
- else if( index == mPropertyShowValue )
- {
- ShowValue( propertyValue.Get<bool>() );
- }
- else if( index == mPropertyEnabled )
- {
- SetEnabled( propertyValue.Get<bool>() );
- }
- else if( index == mPropertyMarks )
- {
- SetMarks( propertyValue.Get<Property::Array>() );
- }
- else if( index == mPropertySnapToMarks )
- {
- // Nothing
- }
- else if( index == mPropertyMarkTolerance )
- {
- // Nothing
- }
-}
-
-void Slider::UpdateLowerBound( float bound )
+void Slider::SetLowerBound( float bound )
{
+ mLowerBound = bound;
DisplayValue( GetValue(), false );
}
float Slider::GetLowerBound() const
{
- return Self().GetProperty<float>( mPropertyLowerBound );
+ return mLowerBound;
}
-void Slider::UpdateUpperBound( float bound )
+void Slider::SetUpperBound( float bound )
{
+ mUpperBound = bound;
DisplayValue( GetValue(), false );
}
float Slider::GetUpperBound() const
{
- return Self().GetProperty<float>( mPropertyUpperBound );
+ return mUpperBound;
}
void Slider::SetValue( float value )
{
- Self().SetProperty( mPropertyValue, value );
+ mValue = value;
+ DisplayValue( mValue, true );
}
float Slider::GetValue() const
{
- return Self().GetProperty<float>( mPropertyValue );
-}
-
-void Slider::SetHitRegion( const Vector2& region )
-{
- Self().SetProperty( mPropertyHitRegion, region );
-}
-
-Vector2 Slider::GetHitRegion() const
-{
- return Self().GetProperty<Vector2>( mPropertyHitRegion );
+ return mValue;
}
void Slider::SetBackingRegion( const Vector2& region )
{
- Self().SetProperty( mPropertyBackingRegion, region );
-}
+ mBackingRegion = region;
-void Slider::ResizeBackingRegion( const Vector2& region )
-{
- SetBackingRegionSize( region );
- ResizeProgressRegion( Vector2( 0.0f, region.y ) );
+ if( mBacking )
+ {
+ mBacking.SetSize( mBackingRegion );
+ }
+
+ ResizeProgressRegion( Vector2( 0.0f, mBackingRegion.y ) );
- mDomain = CalcDomain( region );
+ mDomain = CalcDomain( mBackingRegion );
DisplayValue( GetValue(), false ); // Set the progress bar to correct width
}
-Vector2 Slider::GetBackingRegion() const
+const Vector2& Slider::GetBackingRegion() const
{
- return Self().GetProperty<Vector2>( mPropertyBackingRegion );
+ return mBackingRegion;
}
-void Slider::UpdateHandleRegion( const Vector2& region )
+void Slider::SetHandleRegion( const Vector2& region )
{
- ResizeHandleRegion( region );
+ mHandleRegionSize = region;
+
+ ResizeHandleRegion( mHandleRegionSize );
Vector2 hitRegion = GetHitRegion();
- hitRegion.x += region.x;
+ hitRegion.x += mHandleRegionSize.x;
SetHitRegion( hitRegion );
}
-Vector2 Slider::GetHandleRegion() const
+const Vector2& Slider::GetHandleRegion() const
{
- return Self().GetProperty<Vector2>( mPropertyHandleRegion );
+ return mHandleRegionSize;
}
-Vector4 Slider::GetBackingScale9Border() const
+void Slider::SetDisableColor( const Vector4& color )
{
- return Self().GetProperty<Vector4>( mPropertyBackingScale9Border );
-}
+ mDisableColor = color;
-Vector4 Slider::GetPopupScale9Border() const
-{
- return Self().GetProperty<Vector4>( mPropertyPopupScale9Border );
+ UpdateSkin();
}
Vector4 Slider::GetDisableColor() const
{
- return Self().GetProperty<Vector4>( mPropertyDisableColor );
+ return mDisableColor;
}
Vector4 Slider::GetPopupTextColor() const
{
- return Self().GetProperty<Vector4>( mPropertyPopupTextColor );
+ return mPopupTextColor;
+}
+
+void Slider::SetValuePrecision( int precision )
+{
+ mValuePrecision = precision;
}
int Slider::GetValuePrecision() const
{
- return Self().GetProperty<int>( mPropertyValuePrecision );
+ return mValuePrecision;
}
-void Slider::ShowPopup( bool showPopup )
+void Slider::SetShowPopup( bool showPopup )
{
+ mShowPopup = showPopup;
+
// Value display
- if( showPopup )
+ if( mShowPopup )
{
AddPopup();
}
bool Slider::GetShowPopup() const
{
- return Self().GetProperty<bool>( mPropertyShowPopup );
+ return mShowPopup;
}
-void Slider::ShowValue( bool showValue )
+void Slider::SetShowValue( bool showValue )
{
- if( showValue )
+ mShowValue = showValue;
+
+ if( mShowValue )
{
CreateHandleValueDisplay();
}
bool Slider::GetShowValue() const
{
- return Self().GetProperty<bool>( mPropertyShowValue );
+ return mShowValue;
}
void Slider::SetEnabled( bool enabled )
return mState != DISABLED;
}
-float Slider::GetMarkTolerance() const
+void Slider::SetMarkTolerance( float tolerance )
{
- return Self().GetProperty<float>( mPropertyMarkTolerance );
+ mMarkTolerance = tolerance;
}
-// static class method to support script connecting signals
+float Slider::GetMarkTolerance() const
+{
+ return mMarkTolerance;
+}
+// Static class method to support script connecting signals
bool Slider::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor )
{
Dali::BaseHandle handle( object );
bool connected = true;
Toolkit::Slider slider = Toolkit::Slider::DownCast( handle );
- if( signalName == Dali::Toolkit::Slider::SIGNAL_VALUE_CHANGED )
+ if( 0 == strcmp( signalName.c_str(), SIGNAL_VALUE_CHANGED ) )
{
slider.ValueChangedSignal().Connect( tracker, functor );
}
- else if( signalName == Dali::Toolkit::Slider::SIGNAL_MARK )
+ else if( 0 == strcmp( signalName.c_str(), SIGNAL_MARK ) )
{
slider.MarkSignal().Connect( tracker, functor );
}
- else
+ else
{
// signalName does not match any signal
connected = false;
void Slider::DisplayPopup( float value )
{
- // Value display
- if( mValueTextView )
+ // Value displayDoConnectSignal
+ if( mValueTextLabel )
{
std::stringstream ss;
ss.precision( GetValuePrecision() );
- ss << fixed << value;
- mValueTextView.SetText( ss.str() );
- TextStyle style;
- style.SetTextColor( GetPopupTextColor() );
- mValueTextView.SetStyleToCurrentText( style, TextStyle::COLOR);
+ ss << std::fixed << value;
+ mValueTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, ss.str() );
if( mValueDisplay )
{
- Font font = Font::New();
- float popupWidth = font.MeasureText( ss.str() ).x + VALUE_POPUP_MARGIN * 2.0f;
- if( popupWidth < VALUE_POPUP_MIN_WIDTH )
+ mValueDisplay.SetVisible( true );
+
+ mValueTimer.SetInterval( VALUE_VIEW_SHOW_DURATION );
+ }
+ }
+}
+
+void Slider::SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value )
+{
+ Toolkit::Slider slider = Toolkit::Slider::DownCast( Dali::BaseHandle( object ) );
+
+ if ( slider )
+ {
+ Slider& sliderImpl( GetImpl( slider ) );
+
+ switch ( propertyIndex )
+ {
+ case Toolkit::Slider::Property::LOWER_BOUND:
{
- popupWidth = VALUE_POPUP_MIN_WIDTH;
+ sliderImpl.SetLowerBound( value.Get< float >() );
+ break;
}
- mPopup.SetSize( popupWidth, VALUE_POPUP_HEIGHT );
- mValueDisplay.SetVisible( true );
+ case Toolkit::Slider::Property::UPPER_BOUND:
+ {
+ sliderImpl.SetUpperBound( value.Get< float >() );
+ break;
+ }
- mValueTimer.SetInterval( VALUE_VIEW_SHOW_DURATION );
+ case Toolkit::Slider::Property::VALUE:
+ {
+ sliderImpl.SetValue( value.Get< float >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::HIT_REGION:
+ {
+ sliderImpl.SetHitRegion( value.Get< Vector2 >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::BACKING_REGION:
+ {
+ sliderImpl.SetBackingRegion( value.Get< Vector2 >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::HANDLE_REGION:
+ {
+ sliderImpl.SetHandleRegion( value.Get< Vector2 >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::BACKING_IMAGE_NAME:
+ {
+ sliderImpl.SetBackingImageName( value.Get< std::string >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::HANDLE_IMAGE_NAME:
+ {
+ sliderImpl.SetHandleImageName( value.Get< std::string >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::PROGRESS_IMAGE_NAME:
+ {
+ sliderImpl.SetProgressImageName( value.Get< std::string >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::POPUP_IMAGE_NAME:
+ {
+ sliderImpl.SetPopupImageName( value.Get< std::string >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::POPUP_ARROW_IMAGE_NAME:
+ {
+ sliderImpl.SetPopupArrowImageName( value.Get< std::string >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::DISABLE_COLOR:
+ {
+ sliderImpl.SetDisableColor( value.Get< Vector4 >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::POPUP_TEXT_COLOR:
+ {
+ sliderImpl.SetPopupTextColor( value.Get< Vector4 >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::VALUE_PRECISION:
+ {
+ sliderImpl.SetValuePrecision( value.Get< int >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::SHOW_POPUP:
+ {
+ sliderImpl.SetShowPopup( value.Get< bool >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::SHOW_VALUE:
+ {
+ sliderImpl.SetShowValue( value.Get< bool >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::ENABLED:
+ {
+ sliderImpl.SetEnabled( value.Get< bool >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::MARKS:
+ {
+ sliderImpl.SetMarks( value.Get< Property::Array >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::SNAP_TO_MARKS:
+ {
+ sliderImpl.SetSnapToMarks( value.Get< bool >() );
+ break;
+ }
+
+ case Toolkit::Slider::Property::MARK_TOLERANCE:
+ {
+ sliderImpl.SetMarkTolerance( value.Get< float >() );
+ break;
+ }
}
}
}
+Property::Value Slider::GetProperty( BaseObject* object, Property::Index propertyIndex )
+{
+ Property::Value value;
+
+ Toolkit::Slider slider = Toolkit::Slider::DownCast( Dali::BaseHandle( object ) );
+
+ if ( slider )
+ {
+ Slider& sliderImpl( GetImpl( slider ) );
+
+ switch ( propertyIndex )
+ {
+ case Toolkit::Slider::Property::LOWER_BOUND:
+ {
+ value = sliderImpl.GetLowerBound();
+ break;
+ }
+
+ case Toolkit::Slider::Property::UPPER_BOUND:
+ {
+ value = sliderImpl.GetUpperBound();
+ break;
+ }
+
+ case Toolkit::Slider::Property::VALUE:
+ {
+ value = sliderImpl.GetValue();
+ break;
+ }
+
+ case Toolkit::Slider::Property::HIT_REGION:
+ {
+ value = sliderImpl.GetHitRegion();
+ break;
+ }
+
+ case Toolkit::Slider::Property::BACKING_REGION:
+ {
+ value = sliderImpl.GetBackingRegion();
+ break;
+ }
+
+ case Toolkit::Slider::Property::HANDLE_REGION:
+ {
+ value = sliderImpl.GetHandleRegion();
+ break;
+ }
+
+ case Toolkit::Slider::Property::BACKING_IMAGE_NAME:
+ {
+ value = sliderImpl.GetBackingImageName();
+ break;
+ }
+
+ case Toolkit::Slider::Property::HANDLE_IMAGE_NAME:
+ {
+ value = sliderImpl.GetHandleImageName();
+ break;
+ }
+
+ case Toolkit::Slider::Property::PROGRESS_IMAGE_NAME:
+ {
+ value = sliderImpl.GetProgressImageName();
+ break;
+ }
+
+ case Toolkit::Slider::Property::POPUP_IMAGE_NAME:
+ {
+ value = sliderImpl.GetPopupImageName();
+ break;
+ }
+
+ case Toolkit::Slider::Property::POPUP_ARROW_IMAGE_NAME:
+ {
+ value = sliderImpl.GetPopupArrowImageName();
+ break;
+ }
+
+ case Toolkit::Slider::Property::DISABLE_COLOR:
+ {
+ value = sliderImpl.GetDisableColor();
+ break;
+ }
+
+ case Toolkit::Slider::Property::POPUP_TEXT_COLOR:
+ {
+ value = sliderImpl.GetPopupTextColor();
+ break;
+ }
+
+ case Toolkit::Slider::Property::VALUE_PRECISION:
+ {
+ value = sliderImpl.GetValuePrecision();
+ break;
+ }
+
+ case Toolkit::Slider::Property::SHOW_POPUP:
+ {
+ value = sliderImpl.GetShowPopup();
+ break;
+ }
+
+ case Toolkit::Slider::Property::SHOW_VALUE:
+ {
+ value = sliderImpl.GetShowValue();
+ break;
+ }
+
+ case Toolkit::Slider::Property::ENABLED:
+ {
+ value = sliderImpl.IsEnabled();
+ break;
+ }
+
+ case Toolkit::Slider::Property::MARKS:
+ {
+ // TODO: Need to be able to return a PropertyArray
+ // value = sliderImpl.GetMarks();
+ break;
+ }
+
+ case Toolkit::Slider::Property::SNAP_TO_MARKS:
+ {
+ value = sliderImpl.GetSnapToMarks();
+ break;
+ }
+
+ case Toolkit::Slider::Property::MARK_TOLERANCE:
+ {
+ value = sliderImpl.GetMarkTolerance();
+ break;
+ }
+ }
+ }
+
+ return value;
+}
} // namespace Internal