X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fslider%2Fslider-impl.cpp;h=88795492885f09b7ca12e5d26bf891c9eadb1461;hp=cbbd16666312614d962d005e8e743d041fa30855;hb=b1e8521ad77e7b4e62b59613b2edef64429130e9;hpb=5282fc7a0098ccab2a8b467c1cc02ca009c4cb4c diff --git a/dali-toolkit/internal/controls/slider/slider-impl.cpp b/dali-toolkit/internal/controls/slider/slider-impl.cpp old mode 100755 new mode 100644 index cbbd166..8879549 --- a/dali-toolkit/internal/controls/slider/slider-impl.cpp +++ b/dali-toolkit/internal/controls/slider/slider-impl.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * 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. @@ -24,10 +24,11 @@ #include #include #include -#include -#include +#include // INTERNAL INCLUDES +#include +#include #include #include @@ -56,20 +57,15 @@ DALI_TYPE_REGISTRATION_BEGIN( Toolkit::Slider, Toolkit::Control, Create ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "lowerBound", FLOAT, LOWER_BOUND ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "upperBound", FLOAT, UPPER_BOUND ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "value", FLOAT, VALUE ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "hitRegion", VECTOR2, HIT_REGION ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "backingRegion", VECTOR2, BACKING_REGION ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "handleRegion", VECTOR2, HANDLE_REGION ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "backingImageName", STRING, BACKING_IMAGE_NAME ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "handleImageName", STRING, HANDLE_IMAGE_NAME ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "progressImageName", STRING, PROGRESS_IMAGE_NAME ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popupImageName", STRING, POPUP_IMAGE_NAME ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popupArrowImageName", STRING, POPUP_ARROW_IMAGE_NAME ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "disableColor", VECTOR4, DISABLE_COLOR ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popupTextColor", VECTOR4, POPUP_TEXT_COLOR ) +DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "trackVisual", MAP, TRACK_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "handleVisual", MAP, HANDLE_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "progressVisual", MAP, PROGRESS_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popupVisual", MAP, POPUP_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "popupArrowVisual", MAP, POPUP_ARROW_VISUAL ) +DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "disabledColor", VECTOR4, DISABLED_COLOR ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "valuePrecision", INTEGER, VALUE_PRECISION ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "showPopup", BOOLEAN, SHOW_POPUP ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "showValue", BOOLEAN, SHOW_VALUE ) -DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "enabled", BOOLEAN, ENABLED ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "marks", ARRAY, MARKS ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "snapToMarks", BOOLEAN, SNAP_TO_MARKS ) DALI_PROPERTY_REGISTRATION( Toolkit, Slider, "markTolerance", FLOAT, MARK_TOLERANCE ) @@ -92,23 +88,21 @@ 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.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.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 char* SKINNED_TRACK_VISUAL_FILE_NAME = "slider-skin.9.png"; +const char* SKINNED_HANDLE_VISUAL_FILE_NAME = "slider-skin-handle.png"; +const char* SKINNED_PROGRESS_VISUAL_FILE_NAME = "slider-skin-progress.9.png"; +const char* SKINNED_POPUP_VISUAL_FILE_NAME = "slider-popup.9.png"; +const char* SKINNED_POPUP_ARROW_VISUAL_FILE_NAME = "slider-popup-arrow.png"; 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 Vector2 DEFAULT_TRACK_REGION( DEFAULT_WIDTH, DEFAULT_HEIGHT ); +const Vector2 DEFAULT_HANDLE_SIZE( DEFAULT_HANDLE_HEIGHT, DEFAULT_HANDLE_HEIGHT ); -const Vector4 DEFAULT_DISABLE_COLOR( 0.5f, 0.5f, 0.5f, 1.0f ); -const Vector4 DEFAULT_POPUP_TEXT_COLOR( 0.5f, 0.5f, 0.5f, 1.0f ); +const Vector4 DEFAULT_DISABLED_COLOR( 0.5f, 0.5f, 0.5f, 1.0f ); const float VALUE_POPUP_MARGIN = 10.0f; const float VALUE_POPUP_HEIGHT = 81.0f; const float VALUE_POPUP_MIN_WIDTH = 54.0f; -const Vector2 VALUE_POPUP_ARROW_SIZE( 18.0f, 18.0f ); const float DEFAULT_LOWER_BOUND = 0.0f; const float DEFAULT_UPPER_BOUND = 1.0f; @@ -141,18 +135,21 @@ Dali::Toolkit::Slider Slider::New() } Slider::Slider() -: Control( ControlBehaviour( REQUIRES_TOUCH_EVENTS | REQUIRES_STYLE_CHANGE_SIGNALS ) ), +: Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ), mState( NORMAL ), - mPopupImageName(""), - mPopupArrowImageName(""), - mBackingImageName(""), - mHandleImageName(""), - mProgressImageName(""), - mDisableColor( 0.0f, 0.0f, 0.0f, 0.0f ), - mPopupTextColor( 0.0f, 0.0f, 0.0f, 0.0f ), + mPopupVisual(""), + mPopupArrowVisual(""), + mTrackVisual(""), + mHandleVisual(""), + mProgressVisual(""), + mPopupMap(), + mTrackMap(), + mHandleMap(), + mPopupArrowMap(), + mDisabledColor( 0.0f, 0.0f, 0.0f, 0.0f ), mHitRegion( 0.0f, 0.0f ), - mBackingRegion( 0.0f, 0.0f ), - mHandleRegionSize( 0.0f, 0.0f ), + mTrackRegion( 0.0f, 0.0f ), + mHandleSize( 0.0f, 0.0f ), mLowerBound( 0.0f ), mUpperBound( 0.0f ), mValue( 0.0f ), @@ -177,22 +174,21 @@ void Slider::OnInitialize() Actor self = Self(); SetHitRegion( DEFAULT_HIT_REGION ); - SetBackingRegion( DEFAULT_BACKING_REGION ); - SetHandleRegion( DEFAULT_HANDLE_REGION ); + SetTrackRegion( DEFAULT_TRACK_REGION ); + SetHandleSize( DEFAULT_HANDLE_SIZE ); - 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 ); - - SetPopupTextColor( DEFAULT_POPUP_TEXT_COLOR ); + const std::string imageDirPath = AssetManager::GetDaliImagePath(); + SetTrackVisual( imageDirPath + SKINNED_TRACK_VISUAL_FILE_NAME ); + SetHandleVisual( imageDirPath + SKINNED_HANDLE_VISUAL_FILE_NAME ); + SetProgressVisual( imageDirPath + SKINNED_PROGRESS_VISUAL_FILE_NAME ); + SetPopupVisual( imageDirPath + SKINNED_POPUP_VISUAL_FILE_NAME ); + SetPopupArrowVisual( imageDirPath + SKINNED_POPUP_ARROW_VISUAL_FILE_NAME ); SetShowPopup( DEFAULT_SHOW_POPUP ); SetShowValue( DEFAULT_SHOW_VALUE ); SetEnabled( DEFAULT_ENABLED ); - SetDisableColor( DEFAULT_DISABLE_COLOR ); + SetDisabledColor( DEFAULT_DISABLED_COLOR ); SetSnapToMarks( DEFAULT_SNAP_TO_MARKS ); SetMarkTolerance( MARK_SNAP_TOLERANCE ); @@ -205,32 +201,36 @@ void Slider::OnInitialize() 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 ); + self.SetProperty( Actor::Property::SIZE, Vector2( DEFAULT_HIT_REGION.x, DEFAULT_HIT_REGION.y ) ); + + // Connect to the touch signal + self.TouchSignal().Connect( this, &Slider::OnTouch ); } -void Slider::OnSizeSet( const Vector3& size ) +void Slider::OnRelayout( const Vector2& size, RelayoutContainer& container ) { - // Factor in handle overshoot into size of backing SetHitRegion( Vector2( size.x, GetHitRegion().y ) ); - SetBackingRegion( Vector2( size.x - GetHandleRegion().x, GetBackingRegion().y ) ); + // Factor in handle overshoot into size of backing + SetTrackRegion( Vector2( size.x - GetHandleSize().x, GetTrackRegion().y ) ); + Control::OnRelayout( size, container ); } -bool Slider::OnTouchEvent(Actor actor, const TouchEvent& event) +bool Slider::OnTouch(Actor actor, const TouchEvent& touch) { if( mState != DISABLED ) { - TouchPoint::State touchState = event.GetPoint(0).state; + const PointState::Type touchState = touch.GetState(0); - if( touchState == TouchPoint::Down ) + if( touchState == PointState::DOWN ) { mState = PRESSED; - float percentage = MapPercentage( event.GetPoint(0).local ); + float percentage = MapPercentage( touch.GetLocalPosition( 0 ) ); float value = MapBounds( ( GetSnapToMarks() ) ? SnapToMark( percentage ) : MarkFilter( percentage ), GetLowerBound(), GetUpperBound() ); SetValue( value ); DisplayPopup( value ); } - else if( touchState == TouchPoint::Up) + else if( touchState == PointState::UP ) { if( mState == PRESSED ) { @@ -240,7 +240,7 @@ bool Slider::OnTouchEvent(Actor actor, const TouchEvent& event) } } - return true; + return false; } void Slider::OnPan( Actor actor, const PanGesture& gesture ) @@ -248,13 +248,13 @@ void Slider::OnPan( Actor actor, const PanGesture& gesture ) // gesture.position is in local actor coordinates if( mState != DISABLED ) { - switch( gesture.state ) + switch( gesture.GetState() ) { case Gesture::Continuing: { if( mState == PRESSED ) { - float value = MapBounds( MarkFilter ( MapPercentage( gesture.position ) ), GetLowerBound(), GetUpperBound() ); + float value = MapBounds( MarkFilter ( MapPercentage( gesture.GetPosition() ) ), GetLowerBound(), GetUpperBound() ); SetValue( value ); DisplayPopup( value ); } @@ -266,7 +266,7 @@ void Slider::OnPan( Actor actor, const PanGesture& gesture ) { if( GetSnapToMarks() ) { - float value = MapBounds( SnapToMark( MapPercentage( gesture.position ) ), GetLowerBound(), GetUpperBound() ); + float value = MapBounds( SnapToMark( MapPercentage( gesture.GetPosition() ) ), GetLowerBound(), GetUpperBound() ); SetValue( value ); DisplayPopup( value ); } @@ -315,30 +315,30 @@ Slider::Domain Slider::CalcDomain( const Vector2& currentSize ) void Slider::DisplayValue( float value, bool raiseSignals ) { - float clampledValue = Clamp( value, GetLowerBound(), GetUpperBound() ); + float clampedValue = Clamp( value, GetLowerBound(), GetUpperBound() ); - float percent = MapValuePercentage( clampledValue ); + float percent = MapValuePercentage( clampedValue ); float x = mDomain.from.x + percent * ( mDomain.to.x - mDomain.from.x ); - mHandle.SetX( x ); + mHandle.SetProperty( Actor::Property::POSITION_X, x ); // Progress bar if( mProgress ) { - mProgress.SetSize( x, GetBackingRegion().y ); + mProgress.SetProperty( Actor::Property::SIZE, Vector2( x, GetTrackRegion().y ) ); } // Signals if( raiseSignals ) { Toolkit::Slider self = Toolkit::Slider::DownCast( Self() ); - mValueChangedSignal.Emit( self, clampledValue ); + mValueChangedSignal.Emit( self, clampedValue ); int markIndex; if( MarkReached( percent, markIndex ) ) { - mMarkSignal.Emit( self, markIndex ); + mMarkReachedSignal.Emit( self, markIndex ); } } @@ -346,9 +346,13 @@ void Slider::DisplayValue( float value, bool raiseSignals ) { std::stringstream ss; ss.precision( GetValuePrecision() ); - ss << std::fixed << clampledValue; + ss << std::fixed << clampedValue; - mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, ss.str() ); + std::string label = mHandleValueTextLabel.GetProperty( Toolkit::TextLabel::Property::TEXT ); + if( label.compare(ss.str()) ) + { + mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, ss.str() ); + } } } @@ -375,94 +379,190 @@ bool Slider::GetSnapToMarks() const Actor Slider::CreateHitRegion() { Actor hitRegion = Actor::New(); - hitRegion.SetParentOrigin( ParentOrigin::CENTER ); - hitRegion.SetAnchorPoint( AnchorPoint::CENTER ); - hitRegion.TouchedSignal().Connect( this, &Slider::OnTouchEvent ); + hitRegion.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + hitRegion.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER ); + hitRegion.TouchSignal().Connect( this, &Slider::OnTouch ); return hitRegion; } -Toolkit::ImageView Slider::CreateBacking() +Toolkit::ImageView Slider::CreateTrack() { - Toolkit::ImageView backing = Toolkit::ImageView::New(); - backing.SetParentOrigin( ParentOrigin::CENTER ); - backing.SetAnchorPoint( AnchorPoint::CENTER ); + Toolkit::ImageView track = Toolkit::ImageView::New(); + track.SetProperty( Dali::Actor::Property::NAME,"SliderTrack"); + track.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + track.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER ); + return track; +} - return backing; +void Slider::SetTrackVisual( const std::string& filename ) +{ + if( mHandle && ( filename.size() > 0 ) ) + { + mTrack.SetImage( filename ); + mTrackVisual = filename; + } } -void Slider::SetBackingImageName( const std::string& imageName ) +void Slider::SetTrackVisual( Property::Map map ) { - if( mBacking && ( imageName.size() > 0 ) ) + Property::Value* imageValue = map.Find( "url" ); + if( imageValue ) { - mBacking.SetImage( imageName ); - mBackingImageName = imageName; + mTrackVisual.clear(); + std::string filename; + if( imageValue->Get( filename ) ) + { + if( mTrack && ( filename.size() > 0 ) ) + { + mTrack.SetImage( filename ); + mTrackMap = map; + } + } + } + + Property::Value* sizeValue = map.Find( "size" ); + if( sizeValue ) + { + Vector2 size; + if( sizeValue->Get( size ) ) + { + mTrackRegion = size; + if( mTrack ) + { + mTrack.SetProperty( Actor::Property::SIZE, mTrackRegion ); + } + + ResizeProgressRegion( Vector2( 0.0f, mTrackRegion.y ) ); + + mDomain = CalcDomain( mTrackRegion ); + + // Set the progress bar to correct width + DisplayValue( GetValue(), false ); + } } } -std::string Slider::GetBackingImageName() +std::string Slider::GetTrackVisual() { - return mBackingImageName; + return mTrackVisual; } Toolkit::ImageView Slider::CreateProgress() { Toolkit::ImageView progress = Toolkit::ImageView::New(); - progress.SetParentOrigin( ParentOrigin::CENTER_LEFT ); - progress.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); + progress.SetProperty( Dali::Actor::Property::NAME,"SliderProgress"); + progress.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT ); + progress.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT ); return progress; } -void Slider::SetProgressImageName( const std::string& imageName ) +void Slider::SetProgressVisual( const std::string& filename ) +{ + if( mProgress && ( filename.size() > 0 ) ) + { + mProgress.SetImage( filename ); + mProgressVisual = filename; + } +} + +void Slider::SetProgressVisual( Property::Map map ) { - if( mProgress && ( imageName.size() > 0 ) ) + Property::Value* imageValue = map.Find( "url" ); + if( imageValue ) { - mProgress.SetImage( imageName ); - mProgressImageName = imageName; + mProgressVisual.clear(); + std::string filename; + if( imageValue->Get( filename ) ) + { + if( mProgress && ( filename.size() > 0 ) ) + { + mProgress.SetImage( filename ); + mProgressMap = map; + } + } } } -std::string Slider::GetProgressImageName() +std::string Slider::GetProgressVisual() +{ + return mProgressVisual; +} + +void Slider::SetPopupVisual( const std::string& filename ) { - return mProgressImageName; + mPopupVisual = filename; } -void Slider::SetPopupImageName( const std::string& imageName ) +void Slider::SetPopupVisual( Property::Map map ) { - mPopupImageName = imageName; + Property::Value* imageValue = map.Find( "url" ); + if( imageValue ) + { + mPopupVisual.clear(); + std::string filename; + if( imageValue->Get( filename ) ) + { + if( mPopup && ( filename.size() > 0 ) ) + { + mPopup.SetImage( filename ); + mPopupMap = map; + } + } + } } -std::string Slider::GetPopupImageName() +std::string Slider::GetPopupVisual() { - return mPopupImageName; + return mPopupVisual; } -void Slider::CreatePopupImage( const std::string& imageName ) +void Slider::CreatePopupImage( const std::string& filename ) { - if( mPopup && ( imageName.size() > 0 ) ) + if( mPopup && ( filename.size() > 0 ) ) { - Image image = ResourceImage::New( imageName ); - mPopup.SetImage( image ); + Property::Map map; + map[Toolkit::ImageVisual::Property::URL] = filename; + mPopup.SetProperty( Toolkit::ImageView::Property::IMAGE, map ); } } -void Slider::SetPopupArrowImageName( const std::string& imageName ) +void Slider::SetPopupArrowVisual( const std::string& filename ) { - mPopupArrowImageName = imageName; + mPopupArrowVisual = filename; } -std::string Slider::GetPopupArrowImageName() +void Slider::SetPopupArrowVisual( Property::Map map ) { - return mPopupArrowImageName; + Property::Value* imageValue = map.Find( "url" ); + if( imageValue ) + { + mPopupArrowVisual.clear(); + std::string filename; + if( imageValue->Get( filename ) ) + { + if( mPopupArrow && ( filename.size() > 0 ) ) + { + mPopupArrow.SetImage( filename ); + mPopupArrowMap = map; + } + } + } +} + +std::string Slider::GetPopupArrowVisual() +{ + return mPopupArrowVisual; } -void Slider::CreatePopupArrowImage( const std::string& imageName ) +void Slider::CreatePopupArrowImage( const std::string& filename ) { - if( mPopupArrow && ( imageName.size() > 0 ) ) + if( mPopupArrow && ( filename.size() > 0 ) ) { - Image image = ResourceImage::New( imageName ); - mPopupArrow.SetImage( image ); + Property::Map map; + map[Toolkit::ImageVisual::Property::URL] = filename; + mPopupArrow.SetProperty( Toolkit::ImageView::Property::IMAGE, map ); } } @@ -470,15 +570,16 @@ void Slider::ResizeProgressRegion( const Vector2& region ) { if( mProgress ) { - mProgress.SetSize( region ); + mProgress.SetProperty( Actor::Property::SIZE, region ); } } Toolkit::ImageView Slider::CreateHandle() { Toolkit::ImageView handle = Toolkit::ImageView::New(); - handle.SetParentOrigin( ParentOrigin::CENTER_LEFT ); - handle.SetAnchorPoint( AnchorPoint::CENTER ); + handle.SetProperty( Dali::Actor::Property::NAME,"SliderHandle"); + handle.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT ); + handle.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER ); return handle; } @@ -486,8 +587,10 @@ Toolkit::ImageView Slider::CreateHandle() Toolkit::ImageView Slider::CreatePopupArrow() { Toolkit::ImageView arrow = Toolkit::ImageView::New(); - arrow.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - arrow.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + arrow.SetStyleName("SliderPopupArrow"); + arrow.SetProperty( Dali::Actor::Property::NAME,"SliderPopupArrow"); + arrow.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::BOTTOM_CENTER ); + arrow.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER ); return arrow; } @@ -495,21 +598,23 @@ Toolkit::ImageView Slider::CreatePopupArrow() Toolkit::TextLabel Slider::CreatePopupText() { Toolkit::TextLabel textLabel = Toolkit::TextLabel::New(); - textLabel.SetParentOrigin( ParentOrigin::CENTER ); - textLabel.SetAnchorPoint( AnchorPoint::CENTER ); + textLabel.SetProperty( Dali::Actor::Property::NAME, "SliderPopupTextLabel" ); + textLabel.SetStyleName( "SliderPopupTextLabel" ); + textLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + textLabel.SetProperty( Actor::Property::ANCHOR_POINT, 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.SetPadding( Padding( POPUP_TEXT_PADDING, POPUP_TEXT_PADDING, 0.0f, 0.0f ) ); + textLabel.SetProperty( Actor::Property::PADDING, Padding( POPUP_TEXT_PADDING, POPUP_TEXT_PADDING, 0.0f, 0.0f ) ); return textLabel; } Toolkit::ImageView Slider::CreatePopup() { Toolkit::ImageView popup = Toolkit::ImageView::New(); - popup.SetParentOrigin( ParentOrigin::TOP_CENTER ); - popup.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + popup.SetProperty( Dali::Actor::Property::NAME, "SliderPopup" ); + popup.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER ); + popup.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER ); popup.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::WIDTH ); mValueTextLabel = CreatePopupText(); @@ -518,25 +623,58 @@ Toolkit::ImageView Slider::CreatePopup() return popup; } -void Slider::SetHandleImageName( const std::string& imageName ) +void Slider::SetHandleVisual( const std::string& filename ) { - if( mHandle && ( imageName.size() > 0 ) ) + if( mHandle && ( filename.size() > 0 ) ) { - mHandle.SetImage( imageName ); - mHandleImageName = imageName; + mHandle.SetImage( filename ); + mHandleVisual = filename; } } -std::string Slider::GetHandleImageName() +void Slider::SetHandleVisual( Property::Map map ) { - return mHandleImageName; + Property::Value* imageValue = map.Find( "url" ); + if( imageValue ) + { + mHandleVisual.clear(); + std::string filename; + if( imageValue->Get( filename ) ) + { + if( mHandle && ( filename.size() > 0 ) ) + { + mHandle.SetImage( filename ); + mHandleMap = map; + } + } + } + + Property::Value* sizeValue = map.Find( "size" ); + if( sizeValue ) + { + Vector2 size; + if( sizeValue->Get( size ) ) + { + mHandleSize = size; + ResizeHandleSize( mHandleSize ); + + Vector2 hitRegion = GetHitRegion(); + hitRegion.x += mHandleSize.x; + SetHitRegion( hitRegion ); + } + } +} + +std::string Slider::GetHandleVisual() +{ + return mHandleVisual; } -void Slider::ResizeHandleRegion( const Vector2& region ) +void Slider::ResizeHandleSize( const Vector2& size ) { if( mHandle ) { - mHandle.SetSize( region ); + mHandle.SetProperty( Actor::Property::SIZE, size ); } } @@ -545,8 +683,10 @@ void Slider::CreateHandleValueDisplay() if( mHandle && !mHandleValueTextLabel ) { mHandleValueTextLabel = Toolkit::TextLabel::New(); - mHandleValueTextLabel.SetParentOrigin( ParentOrigin::CENTER ); - mHandleValueTextLabel.SetAnchorPoint( AnchorPoint::CENTER ); + mHandleValueTextLabel.SetProperty( Dali::Actor::Property::NAME,"SliderHandleTextLabel"); + mHandleValueTextLabel.SetStyleName("SliderHandleTextLabel"); + mHandleValueTextLabel.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER ); + mHandleValueTextLabel.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER ); mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" ); mHandleValueTextLabel.SetProperty( Toolkit::TextLabel::Property::VERTICAL_ALIGNMENT, "CENTER" ); mHandle.Add( mHandleValueTextLabel ); @@ -558,22 +698,17 @@ void Slider::DestroyHandleValueDisplay() UnparentAndReset(mHandleValueTextLabel); } -void Slider::SetPopupTextColor( const Vector4& color ) -{ - mPopupTextColor = color; -} - Actor Slider::CreateValueDisplay() { Actor popup = Actor::New(); - popup.SetParentOrigin( ParentOrigin::TOP_CENTER ); - popup.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); + popup.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_CENTER ); + popup.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::BOTTOM_CENTER ); mPopupArrow = CreatePopupArrow(); popup.Add( mPopupArrow ); mPopup = CreatePopup(); - mPopup.SetSize( 0.0f, VALUE_POPUP_HEIGHT ); + mPopup.SetProperty( Actor::Property::SIZE, Vector2( 0.0f, VALUE_POPUP_HEIGHT ) ); mPopupArrow.Add( mPopup ); return popup; @@ -589,9 +724,9 @@ Toolkit::Slider::ValueChangedSignalType& Slider::SlidingFinishedSignal() return mSlidingFinishedSignal; } -Toolkit::Slider::MarkSignalType& Slider::MarkSignal() +Toolkit::Slider::MarkReachedSignalType& Slider::MarkReachedSignal() { - return mMarkSignal; + return mMarkReachedSignal; } void Slider::UpdateSkin() @@ -600,17 +735,17 @@ void Slider::UpdateSkin() { case NORMAL: { - mBacking.SetColor( Color::WHITE ); - mHandle.SetColor( Color::WHITE ); - mProgress.SetColor( Color::WHITE ); + mTrack.SetProperty( Actor::Property::COLOR, Color::WHITE ); + mHandle.SetProperty( Actor::Property::COLOR, Color::WHITE ); + mProgress.SetProperty( Actor::Property::COLOR, Color::WHITE ); break; } case DISABLED: { - Vector4 disableColor = GetDisableColor(); - mBacking.SetColor( disableColor ); - mHandle.SetColor( disableColor ); - mProgress.SetColor( disableColor ); + Vector4 disabledColor = GetDisabledColor(); + mTrack.SetProperty( Actor::Property::COLOR, disabledColor ); + mHandle.SetProperty( Actor::Property::COLOR, disabledColor ); + mProgress.SetProperty( Actor::Property::COLOR, disabledColor ); break; } case PRESSED: @@ -635,13 +770,13 @@ void Slider::CreateChildren() mPanDetector.DetectedSignal().Connect( this, &Slider::OnPan ); self.Add( mHitArea ); - // Background - mBacking = CreateBacking(); - self.Add( mBacking ); + // Track + mTrack = CreateTrack(); + self.Add( mTrack ); // Progress bar mProgress = CreateProgress(); - mBacking.Add( mProgress ); + mTrack.Add( mProgress ); // Handle mHandle = CreateHandle(); @@ -654,7 +789,7 @@ void Slider::SetHitRegion( const Vector2& size ) if( mHitArea ) { - mHitArea.SetSize( mHitRegion ); + mHitArea.SetProperty( Actor::Property::SIZE, mHitRegion ); } } @@ -668,11 +803,11 @@ void Slider::AddPopup() if( !mValueDisplay ) { mValueDisplay = CreateValueDisplay(); - mValueDisplay.SetVisible( false ); + mValueDisplay.SetProperty( Actor::Property::VISIBLE, false ); mHandle.Add( mValueDisplay ); - CreatePopupImage( GetPopupImageName() ); - CreatePopupArrowImage( GetPopupArrowImageName() ); + CreatePopupImage( GetPopupVisual() ); + CreatePopupArrowImage( GetPopupArrowVisual() ); mValueTimer = Timer::New( VALUE_VIEW_SHOW_DURATION ); mValueTimer.TickSignal().Connect( this, &Slider::HideValueView ); @@ -783,7 +918,7 @@ bool Slider::HideValueView() { if( mValueDisplay ) { - mValueDisplay.SetVisible( false ); + mValueDisplay.SetProperty( Actor::Property::VISIBLE, false ); } return false; @@ -822,58 +957,53 @@ float Slider::GetValue() const return mValue; } -void Slider::SetBackingRegion( const Vector2& region ) +void Slider::SetTrackRegion( const Vector2& region ) { - mBackingRegion = region; + mTrackRegion = region; - if( mBacking ) + if( mTrack ) { - mBacking.SetSize( mBackingRegion ); + mTrack.SetProperty( Actor::Property::SIZE, mTrackRegion ); } - ResizeProgressRegion( Vector2( 0.0f, mBackingRegion.y ) ); + ResizeProgressRegion( Vector2( 0.0f, mTrackRegion.y ) ); - mDomain = CalcDomain( mBackingRegion ); + mDomain = CalcDomain( mTrackRegion ); DisplayValue( GetValue(), false ); // Set the progress bar to correct width } -const Vector2& Slider::GetBackingRegion() const +const Vector2& Slider::GetTrackRegion() const { - return mBackingRegion; + return mTrackRegion; } -void Slider::SetHandleRegion( const Vector2& region ) +void Slider::SetHandleSize( const Vector2& size ) { - mHandleRegionSize = region; + mHandleSize = size; - ResizeHandleRegion( mHandleRegionSize ); + ResizeHandleSize( mHandleSize ); Vector2 hitRegion = GetHitRegion(); - hitRegion.x += mHandleRegionSize.x; + hitRegion.x += mHandleSize.x; SetHitRegion( hitRegion ); } -const Vector2& Slider::GetHandleRegion() const +const Vector2& Slider::GetHandleSize() const { - return mHandleRegionSize; + return mHandleSize; } -void Slider::SetDisableColor( const Vector4& color ) +void Slider::SetDisabledColor( const Vector4& color ) { - mDisableColor = color; + mDisabledColor = color; UpdateSkin(); } -Vector4 Slider::GetDisableColor() const +Vector4 Slider::GetDisabledColor() const { - return mDisableColor; -} - -Vector4 Slider::GetPopupTextColor() const -{ - return mPopupTextColor; + return mDisabledColor; } void Slider::SetValuePrecision( int precision ) @@ -968,7 +1098,7 @@ bool Slider::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tr } else if( 0 == strcmp( signalName.c_str(), SIGNAL_MARK ) ) { - slider.MarkSignal().Connect( tracker, functor ); + slider.MarkReachedSignal().Connect( tracker, functor ); } else { @@ -991,7 +1121,7 @@ void Slider::DisplayPopup( float value ) if( mValueDisplay ) { - mValueDisplay.SetVisible( true ); + mValueDisplay.SetProperty( Actor::Property::VISIBLE, true ); mValueTimer.SetInterval( VALUE_VIEW_SHOW_DURATION ); } @@ -1026,63 +1156,67 @@ void Slider::SetProperty( BaseObject* object, Property::Index propertyIndex, con break; } - case Toolkit::Slider::Property::HIT_REGION: + case Toolkit::Slider::Property::TRACK_VISUAL: { - 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 >() ); + Property::Map map; + if( value.Get( map ) ) + { + sliderImpl.SetTrackVisual( map ); + } break; } - case Toolkit::Slider::Property::BACKING_IMAGE_NAME: + case Toolkit::Slider::Property::HANDLE_VISUAL: { - sliderImpl.SetBackingImageName( value.Get< std::string >() ); + Property::Map map; + if( value.Get( map ) ) + { + sliderImpl.SetHandleVisual( map ); + } break; } - case Toolkit::Slider::Property::HANDLE_IMAGE_NAME: + case Toolkit::Slider::Property::PROGRESS_VISUAL: { - sliderImpl.SetHandleImageName( value.Get< std::string >() ); + Property::Map map; + if( value.Get( map ) ) + { + sliderImpl.SetProgressVisual( map ); + } break; } - case Toolkit::Slider::Property::PROGRESS_IMAGE_NAME: + case Toolkit::Slider::Property::POPUP_VISUAL: { - sliderImpl.SetProgressImageName( value.Get< std::string >() ); - break; - } + std::string imageUrl; + if( value.Get( imageUrl ) ) + { + sliderImpl.SetPopupVisual( imageUrl ); + } - case Toolkit::Slider::Property::POPUP_IMAGE_NAME: - { - sliderImpl.SetPopupImageName( value.Get< std::string >() ); - break; - } + // If it is not a string, then get a Property::Map from the property if possible. + Property::Map map; + if( value.Get( map ) ) + { + sliderImpl.SetPopupVisual( map ); + } - case Toolkit::Slider::Property::POPUP_ARROW_IMAGE_NAME: - { - sliderImpl.SetPopupArrowImageName( value.Get< std::string >() ); break; } - case Toolkit::Slider::Property::DISABLE_COLOR: + case Toolkit::Slider::Property::POPUP_ARROW_VISUAL: { - sliderImpl.SetDisableColor( value.Get< Vector4 >() ); + Property::Map map; + if( value.Get( map ) ) + { + sliderImpl.SetPopupArrowVisual( map ); + } break; } - case Toolkit::Slider::Property::POPUP_TEXT_COLOR: + case Toolkit::Slider::Property::DISABLED_COLOR: { - sliderImpl.SetPopupTextColor( value.Get< Vector4 >() ); + sliderImpl.SetDisabledColor( value.Get< Vector4 >() ); break; } @@ -1104,12 +1238,6 @@ void Slider::SetProperty( BaseObject* object, Property::Index propertyIndex, con break; } - case Toolkit::Slider::Property::ENABLED: - { - sliderImpl.SetEnabled( value.Get< bool >() ); - break; - } - case Toolkit::Slider::Property::MARKS: { sliderImpl.SetMarks( value.Get< Property::Array >() ); @@ -1161,63 +1289,74 @@ Property::Value Slider::GetProperty( BaseObject* object, Property::Index propert 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: + case Toolkit::Slider::Property::TRACK_VISUAL: { - 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(); + if( !sliderImpl.mTrackVisual.empty() ) + { + value = sliderImpl.GetTrackVisual(); + } + else if( !sliderImpl.mTrackMap.Empty() ) + { + value = sliderImpl.mTrackMap; + } break; } - case Toolkit::Slider::Property::PROGRESS_IMAGE_NAME: + case Toolkit::Slider::Property::HANDLE_VISUAL: { - value = sliderImpl.GetProgressImageName(); + if( !sliderImpl.mHandleVisual.empty() ) + { + value = sliderImpl.GetHandleVisual(); + } + else if( !sliderImpl.mHandleMap.Empty() ) + { + value = sliderImpl.mHandleMap; + } break; } - case Toolkit::Slider::Property::POPUP_IMAGE_NAME: + case Toolkit::Slider::Property::PROGRESS_VISUAL: { - value = sliderImpl.GetPopupImageName(); + if( !sliderImpl.mProgressVisual.empty() ) + { + value = sliderImpl.GetProgressVisual(); + } + else if( !sliderImpl.mProgressMap.Empty() ) + { + value = sliderImpl.mProgressMap; + } break; } - case Toolkit::Slider::Property::POPUP_ARROW_IMAGE_NAME: + case Toolkit::Slider::Property::POPUP_VISUAL: { - value = sliderImpl.GetPopupArrowImageName(); + if( !sliderImpl.mPopupVisual.empty() ) + { + value = sliderImpl.GetPopupVisual(); + } + else if( !sliderImpl.mPopupMap.Empty() ) + { + value = sliderImpl.mPopupMap; + } break; } - case Toolkit::Slider::Property::DISABLE_COLOR: + case Toolkit::Slider::Property::POPUP_ARROW_VISUAL: { - value = sliderImpl.GetDisableColor(); + if( !sliderImpl.mPopupArrowVisual.empty() ) + { + value = sliderImpl.GetPopupArrowVisual(); + } + else if( !sliderImpl.mPopupArrowMap.Empty() ) + { + value = sliderImpl.mPopupArrowMap; + } break; } - case Toolkit::Slider::Property::POPUP_TEXT_COLOR: + case Toolkit::Slider::Property::DISABLED_COLOR: { - value = sliderImpl.GetPopupTextColor(); + value = sliderImpl.GetDisabledColor(); break; } @@ -1239,16 +1378,17 @@ Property::Value Slider::GetProperty( BaseObject* object, Property::Index propert 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(); + Property::Value value1( Property::ARRAY ); + Property::Array* markArray = value1.GetArray(); + + if( markArray ) + { + *markArray = sliderImpl.GetMarks(); + } + + value = value1; break; }