X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fprogress-bar%2Fprogress-bar-impl.cpp;h=3d18ddb3a0cf77e8a2300288a4ffbbad021c61cc;hp=cddfa3537835273a2b7beca853db056b7b771e1a;hb=b1e8521ad77e7b4e62b59613b2edef64429130e9;hpb=a41e7c198d4b694ce2f5af2e5a6b2ca255ed5819 diff --git a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp index cddfa35..3d18ddb 100755 --- a/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp +++ b/dali-toolkit/internal/controls/progress-bar/progress-bar-impl.cpp @@ -25,12 +25,16 @@ #include #include #include -#include +#include +#include #include +#include +#include +#include #include #include -#include -#include +#include +#include #include #include @@ -85,6 +89,35 @@ float DEFAULT_VALUE = 0.0f; float DEFAULT_LOWER_BOUND = 0.0f; float DEFAULT_UPPER_BOUND = 1.0f; float DEFAULT_FONT_SIZE = 12.0f; +const char* CIRCULAR_PROGRESS_BAR_STYLE_NAME = "CircularProgressBar"; + + +void BackupVisualProperties( const Control* control, Property::Index index, Property::Map& map ) +{ + Toolkit::Visual::Base visual = DevelControl::GetVisual( *control, index ); + + if( visual ) + { + map.Clear(); + visual.CreatePropertyMap( map ); + } +} + +void RestoreVisualProperties( Control* control, Property::Index index, Property::Map& map, int depth ) +{ + if( !map.Empty() ) + { + Toolkit::Visual::Base visual = DevelControl::GetVisual( *control, index ); + + Visual::Base& visualImpl = Toolkit::GetImplementation( visual ); + + visualImpl.SetProperties( map ); + + DevelControl::UnregisterVisual( *control, index ); + + DevelControl::RegisterVisual( *control, index, visual, true, depth ); + } +} } // Unnamed namespace @@ -92,14 +125,26 @@ float DEFAULT_FONT_SIZE = 12.0f; // ProgressBar /////////////////////////////////////////////////////////////////////////////////////////////////// -Dali::Toolkit::ProgressBar ProgressBar::New() +Dali::Toolkit::ProgressBar ProgressBar::New( DevelProgressBar::Style progressBarStyle ) { // Create the implementation ProgressBarPtr progressBar( new ProgressBar() ); - // Pass ownership to CustomActor via derived handle Dali::Toolkit::ProgressBar handle( *progressBar ); + switch( progressBarStyle ) + { + case DevelProgressBar::Style::CIRCULAR: + { + progressBar->SetStyleName( CIRCULAR_PROGRESS_BAR_STYLE_NAME ); + break; + } + default: + { + break; + } + } + // Second-phase init of the implementation // This can only be done after the CustomActor connection has been made... progressBar->Initialize(); @@ -131,54 +176,32 @@ void ProgressBar::OnRelayout( const Vector2& size, RelayoutContainer& container trackSize.width = std::max( 0.0f, size.width ); // Ensure we don't go negative - Toolkit::Visual::Base trackVisual = GetVisual( Toolkit::ProgressBar::Property::TRACK_VISUAL ); - Toolkit::Visual::Base secondProgressVisual = GetVisual( Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL ); - Toolkit::Visual::Base progressVisual = GetVisual( Toolkit::ProgressBar::Property::PROGRESS_VISUAL ); - Toolkit::Visual::Base labelVisual = GetVisual( Toolkit::ProgressBar::Property::LABEL_VISUAL ); - Toolkit::Visual::Base indeterminateVisual = GetVisual( Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL ); + Toolkit::Visual::Base trackVisual = DevelControl::GetVisual( *this, Toolkit::ProgressBar::Property::TRACK_VISUAL ); + Toolkit::Visual::Base labelVisual = DevelControl::GetVisual( *this, Toolkit::ProgressBar::Property::LABEL_VISUAL ); + Toolkit::Visual::Base indeterminateVisual = DevelControl::GetVisual( *this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL ); if( trackVisual ) { Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, trackSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ); + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, trackSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); trackVisual.SetTransformAndSize( visualTransform, trackSize ); } - if( secondProgressVisual ) - { - Property::Map visualTransform; + ApplyProgressToVisualTransform( mSecondaryProgressValue, trackSize, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL ); - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, Vector2( mDomain.from.x + mSecondaryProgressValue * ( mDomain.to.x - mDomain.from.x ), trackSize.height ) ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) - .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN ); - secondProgressVisual.SetTransformAndSize( visualTransform, trackSize ); - } - - if( progressVisual ) - { - Property::Map visualTransform; - - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, Vector2( mDomain.from.x + mProgressValue * ( mDomain.to.x - mDomain.from.x ), trackSize.height ) ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) - .Add( Toolkit::DevelVisual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN ); - progressVisual.SetTransformAndSize( visualTransform, trackSize ); - } + ApplyProgressToVisualTransform( mProgressValue, trackSize, Toolkit::ProgressBar::Property::PROGRESS_VISUAL ); if( labelVisual ) { Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, trackSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ); + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, trackSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); labelVisual.SetTransformAndSize( visualTransform, trackSize ); } @@ -186,9 +209,9 @@ void ProgressBar::OnRelayout( const Vector2& size, RelayoutContainer& container { Property::Map visualTransform; - visualTransform.Add( Toolkit::DevelVisual::Transform::Property::SIZE, trackSize ) - .Add( Toolkit::DevelVisual::Transform::Property::OFFSET_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ) - .Add( Toolkit::DevelVisual::Transform::Property::SIZE_POLICY, Vector2( DevelVisual::Transform::Policy::ABSOLUTE, DevelVisual::Transform::Policy::ABSOLUTE ) ); + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, trackSize ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ); indeterminateVisual.SetTransformAndSize( visualTransform, trackSize ); } @@ -197,8 +220,8 @@ void ProgressBar::OnRelayout( const Vector2& size, RelayoutContainer& container Vector3 ProgressBar::GetNaturalSize() { // Return the bigger size after comparing trackVisual naturalSize and labelVisual naturalSize - Toolkit::Visual::Base trackVisual = GetVisual( Toolkit::ProgressBar::Property::TRACK_VISUAL ); - Toolkit::Visual::Base labelVisual = GetVisual( Toolkit::ProgressBar::Property::LABEL_VISUAL ); + Toolkit::Visual::Base trackVisual = DevelControl::GetVisual( *this, Toolkit::ProgressBar::Property::TRACK_VISUAL ); + Toolkit::Visual::Base labelVisual = DevelControl::GetVisual( *this, Toolkit::ProgressBar::Property::LABEL_VISUAL ); Size trackSize; Size labelSize; @@ -239,6 +262,8 @@ void ProgressBar::SetProgressValue( float value ) { mProgressValue = Clamp( value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND ); + ApplyProgressToVisual( mProgressValue, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, ProgressDepthIndex::PROGRESS_VISUAL ); + Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast( Self() ); mValueChangedSignal.Emit( self, mProgressValue, mSecondaryProgressValue ); RelayoutRequest(); @@ -260,6 +285,8 @@ void ProgressBar::SetSecondaryProgressValue( float value ) { mSecondaryProgressValue = Clamp( value, DEFAULT_LOWER_BOUND, DEFAULT_UPPER_BOUND ); + ApplyProgressToVisual( mSecondaryProgressValue, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL ); + Toolkit::ProgressBar self = Toolkit::ProgressBar::DownCast( Self() ); mValueChangedSignal.Emit( self, mProgressValue, mSecondaryProgressValue ); @@ -275,7 +302,7 @@ float ProgressBar::GetSecondaryProgressValue() const void ProgressBar::SetIndeterminate( bool value ) { mIndeterminate = value; - EnableVisual( Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL, mIndeterminate ); + DevelControl::EnableVisual( *this, Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL, mIndeterminate ); if( mIndeterminate ) { @@ -291,6 +318,13 @@ void ProgressBar::SetIndeterminate( bool value ) { mIndeterminateVisualAni.Stop(); } + + // Restore previous visual data after animation finished. + RestoreVisualProperties( this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap, ProgressDepthIndex::TRACK_VISUAL ); + RestoreVisualProperties( this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL ); + RestoreVisualProperties( this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap, ProgressDepthIndex::PROGRESS_VISUAL ); + + RelayoutRequest(); } } @@ -310,13 +344,18 @@ void ProgressBar::SetIndeterminateVisualTransition( Toolkit::TransitionData tran void ProgressBar::PlayIndeterminateVisualTransition() { + // Store current visual data before animation changes it. + BackupVisualProperties( this, Toolkit::ProgressBar::Property::TRACK_VISUAL, mTrackVisualMap ); + BackupVisualProperties( this, Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL, mSecondaryProgressVisualMap ); + BackupVisualProperties( this, Toolkit::ProgressBar::Property::PROGRESS_VISUAL, mProgressVisualMap ); + if( mIndeterminateVisualAni ) { mIndeterminateVisualAni.Stop(); mIndeterminateVisualAni.Clear(); } - mIndeterminateVisualAni = CreateTransition( mIndeterminateVisualTransition ); + mIndeterminateVisualAni = DevelControl::CreateTransition( *this, mIndeterminateVisualTransition ); if( mIndeterminate && mIndeterminateVisualAni ) { @@ -349,7 +388,7 @@ Toolkit::TransitionData ProgressBar::ConvertPropertyToTransition( const Property * 4) Unregister visual if empty map was provided. This is the method to remove a visual */ -void ProgressBar::CreateVisualsForComponent( Property::Index index, const Property::Value& value, const float visualDepth ) +void ProgressBar::CreateVisualsForComponent( Property::Index index, const Property::Value& value, const int visualDepth ) { Toolkit::VisualFactory visualFactory = Toolkit::VisualFactory::Get(); Toolkit::Visual::Base progressVisual; @@ -374,26 +413,25 @@ void ProgressBar::CreateVisualsForComponent( Property::Index index, const Proper if ( progressVisual ) { - progressVisual.SetDepthIndex( visualDepth ); if( index == Toolkit::ProgressBar::Property::INDETERMINATE_VISUAL ) { - RegisterVisual( index, progressVisual, mIndeterminate ); + DevelControl::RegisterVisual( *this, index, progressVisual, mIndeterminate, visualDepth ); } else { - RegisterVisual( index, progressVisual, true ); + DevelControl::RegisterVisual( *this, index, progressVisual, true, visualDepth ); } } else { - UnregisterVisual( index ); + DevelControl::UnregisterVisual( *this, index ); } } bool ProgressBar::GetPropertyMapForVisual( Property::Index visualIndex, Property::Map& retreivedMap ) const { bool success = false; - Toolkit::Visual::Base visual = GetVisual( visualIndex ); + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, visualIndex ); if ( visual ) { @@ -404,6 +442,47 @@ bool ProgressBar::GetPropertyMapForVisual( Property::Index visualIndex, Property return success; } + +void ProgressBar::ApplyProgressToVisual( float progress, Property::Index index, int depth ) +{ + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, index ); + + if( visual && static_cast( visual.GetType() ) == DevelVisual::ARC && !mIndeterminate ) + { + Visual::Base& visualImpl = Toolkit::GetImplementation( visual ); + + Property::Map map; + + map[ Toolkit::DevelArcVisual::Property::SWEEP_ANGLE ] = Property::Value( 360.0f * progress ); + + visualImpl.SetProperties( map ); + + DevelControl::UnregisterVisual( *this, index ); + DevelControl::RegisterVisual( *this, index, visual, true, depth ); + } +} + +void ProgressBar::ApplyProgressToVisualTransform( float progress, Vector2 trackSize, Property::Index index ) +{ + Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, index ); + + if( visual ) + { + Property::Map visualTransform; + + if( static_cast( visual.GetType() ) != DevelVisual::ARC ) + { + visualTransform.Add( Toolkit::Visual::Transform::Property::SIZE, Vector2( mDomain.from.x + progress * ( mDomain.to.x - mDomain.from.x ), trackSize.height ) ) + .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) ) + .Add( Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN ) + .Add( Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN ); + } + + visual.SetTransformAndSize( visualTransform, trackSize ); + } +} + // Static class method to support script connecting signals bool ProgressBar::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) { @@ -444,12 +523,14 @@ void ProgressBar::SetProperty( BaseObject* object, Property::Index propertyIndex case Toolkit::ProgressBar::Property::SECONDARY_PROGRESS_VISUAL: { progressBarImpl.CreateVisualsForComponent( propertyIndex, value, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL ); + progressBarImpl.ApplyProgressToVisual( progressBarImpl.mSecondaryProgressValue, propertyIndex, ProgressDepthIndex::SECONDARY_PROGRESS_VISUAL ); break; } case Toolkit::ProgressBar::Property::PROGRESS_VISUAL: { progressBarImpl.CreateVisualsForComponent( propertyIndex, value, ProgressDepthIndex::PROGRESS_VISUAL ); + progressBarImpl.ApplyProgressToVisual( progressBarImpl.mProgressValue, propertyIndex, ProgressDepthIndex::PROGRESS_VISUAL ); break; } @@ -468,7 +549,7 @@ void ProgressBar::SetProperty( BaseObject* object, Property::Index propertyIndex { // set new text string as TEXT property Property::Map newTextMap; - Toolkit::Visual::Base label = progressBarImpl.GetVisual( Toolkit::ProgressBar::Property::LABEL_VISUAL ); + Toolkit::Visual::Base label = DevelControl::GetVisual( progressBarImpl, Toolkit::ProgressBar::Property::LABEL_VISUAL ); if( label ) { @@ -478,7 +559,7 @@ void ProgressBar::SetProperty( BaseObject* object, Property::Index propertyIndex // if LABEL_VISUAL doesn't set before, add Visual property "TYPE" to create new text Visual if( map.Empty() ) { - newTextMap.Add( Toolkit::Visual::Property::TYPE, Toolkit::DevelVisual::TEXT ); + newTextMap.Add( Toolkit::Visual::Property::TYPE, Toolkit::Visual::TEXT ); newTextMap.Add( Toolkit::TextVisual::Property::POINT_SIZE, DEFAULT_FONT_SIZE ); } newTextMap.Add( Toolkit::TextVisual::Property::TEXT, textString ); @@ -578,10 +659,10 @@ Property::Value ProgressBar::GetProperty( BaseObject* object, Property::Index pr return value; } -void ProgressBar::OnStageConnection( int depth ) +void ProgressBar::OnSceneConnection( int depth ) { // Chain up first (ensures visuals are ready to draw) - Control::OnStageConnection( depth ); + Control::OnSceneConnection( depth ); if( mIndeterminate ) {