X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fradio-button-impl.cpp;h=d1ccebd87f79b6fb7ef2ccf193c0067157b28a6b;hp=4ef25d95bc6cdd9477f6e70854ece32732933068;hb=6b7d48695715c6f2292338fccbeeb02873d1f89d;hpb=1db0a8becea3dbdebaa942d934d91824a92434e7 diff --git a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp index 4ef25d9..d1ccebd 100644 --- a/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/radio-button-impl.cpp @@ -23,8 +23,14 @@ #include #include -using namespace Dali; -using namespace Dali::Toolkit::Internal; +namespace Dali +{ + +namespace Toolkit +{ + +namespace Internal +{ namespace { @@ -59,82 +65,171 @@ Dali::Toolkit::RadioButton RadioButton::New() RadioButton::RadioButton() { - mUnselectedImage = Dali::ResourceImage::New( UNSELECTED_BUTTON_IMAGE_DIR ); - mSelectedImage = Dali::ResourceImage::New( SELECTED_BUTTON_IMAGE_DIR ); - - mRadioIcon = Dali::ImageActor::New( mUnselectedImage ); - -// SetTogglableButton(true); - mTogglableButton = true; // TODO: Use SetTogglableButton() after refactoring painter + SetTogglableButton(true); } RadioButton::~RadioButton() { } -void RadioButton::SetLabel( Actor label ) +void RadioButton::SetButtonImage( Actor image ) { - if( mLabel != label ) + Actor& buttonImage = GetButtonImage(); + + if( !IsSelected() ) { - if( mLabel ) + if( buttonImage && buttonImage.GetParent() ) { - mRadioIcon.Remove( mLabel ); + buttonImage.GetParent().Remove( buttonImage ); + buttonImage.Reset(); } + Self().Add( image ); + + Actor& label = GetLabel(); + if( label ) { - label.SetParentOrigin( ParentOrigin::CENTER_RIGHT ); - label.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - label.MoveBy( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); - mRadioIcon.Add( label ); + buttonImage.Remove( label ); + image.Add( label ); } + } - mLabel = label; + buttonImage = image; - RelayoutRequest(); + buttonImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + buttonImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); +} + +void RadioButton::SetSelectedImage( Actor image ) +{ + Actor& selectedImage = GetSelectedImage(); + + if( IsSelected() ) + { + if( selectedImage && selectedImage.GetParent() ) + { + selectedImage.GetParent().Remove( selectedImage ); + selectedImage.Reset(); + } + + Self().Add( image ); + + Actor& label = GetLabel(); + + if( label ) + { + selectedImage.Remove( label ); + image.Add( label ); + } } + + selectedImage = image; + + selectedImage.SetAnchorPoint( AnchorPoint::TOP_LEFT ); + selectedImage.SetParentOrigin( ParentOrigin::TOP_LEFT ); +} + +void RadioButton::OnButtonInitialize() +{ + Image buttonImage = Dali::ResourceImage::New( UNSELECTED_BUTTON_IMAGE_DIR ); + Image selectedImage = Dali::ResourceImage::New( SELECTED_BUTTON_IMAGE_DIR ); + + SetButtonImage( ImageActor::New( buttonImage ) ); + SetSelectedImage( ImageActor::New( selectedImage ) ); + + RelayoutRequest(); } -void RadioButton::SetSelected( bool selected ) +void RadioButton::OnButtonUp() { - if( IsSelected() != selected ) + if( ButtonDown == GetState() ) { - if( selected ) + // Don't allow selection on an already selected radio button + if( !IsSelected() ) { - Actor parent = Self().GetParent(); - if( parent ) - { - for( unsigned int i = 0; i < parent.GetChildCount(); ++i ) - { - Dali::Toolkit::RadioButton rbChild = Dali::Toolkit::RadioButton::DownCast(parent.GetChildAt(i)); + SetSelected(!IsSelected()); + } + } +} - if( rbChild ) - { - rbChild.SetSelected(false); - } - } - } +void RadioButton::OnLabelSet() +{ + Actor& label = GetLabel(); - mSelected = true; - mRadioIcon.SetImage(mSelectedImage); + if( label ) + { + label.SetParentOrigin( ParentOrigin::CENTER_RIGHT ); + label.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); + label.TranslateBy( DISTANCE_BETWEEN_IMAGE_AND_LABEL ); + + if( IsSelected() ) + { + GetSelectedImage().Add( label ); } else { - mSelected = false; - mRadioIcon.SetImage(mUnselectedImage); + GetButtonImage().Add( label ); } + } +} - // Raise state changed signal - Toolkit::RadioButton handle( GetOwner() ); - StateChangedSignal().Emit( handle ); +void RadioButton::OnSelected( bool selected ) +{ + Actor& buttonImage = GetButtonImage(); + Actor& selectedImage = GetSelectedImage(); + Actor& label = GetLabel(); + + if( selected ) + { + Actor parent = Self().GetParent(); + if( parent ) + { + for( unsigned int i = 0; i < parent.GetChildCount(); ++i ) + { + Dali::Toolkit::RadioButton rbChild = Dali::Toolkit::RadioButton::DownCast(parent.GetChildAt(i)); + + if( rbChild ) + { + rbChild.SetSelected(false); + } + } + } + + buttonImage.GetParent().Remove( buttonImage ); + Self().Add( selectedImage ); + + if( label ) + { + label.GetParent().Remove( label ); + selectedImage.Add( label ); + } + } + else + { + selectedImage.GetParent().Remove( selectedImage ); + Self().Add( buttonImage ); - RelayoutRequest(); + if( label ) + { + label.GetParent().Remove( label ); + buttonImage.Add( label ); + } } } void RadioButton::OnRelayout( const Vector2& /*size*/, ActorSizeContainer& container ) { - Vector3 newSize( mRadioIcon.GetNaturalSize() ); + Vector3 newSize; + + if( IsSelected() ) + { + newSize = GetSelectedImage().GetNaturalSize(); + } + else + { + newSize = GetButtonImage().GetNaturalSize(); + } Actor& label = GetLabel(); @@ -155,23 +250,8 @@ void RadioButton::OnRelayout( const Vector2& /*size*/, ActorSizeContainer& conta Self().SetSize( newSize ); } -void RadioButton::OnInitialize() -{ - mRadioIcon.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - mRadioIcon.SetParentOrigin( ParentOrigin::CENTER_LEFT ); - Self().Add( mRadioIcon ); +} // namespace Internal - RelayoutRequest(); -} +} // namespace Toolkit -void RadioButton::OnButtonUp() -{ - if( ButtonDown == GetState() ) - { - // Don't allow selection on an already selected radio button - if( !IsSelected() ) - { - SetSelected(!IsSelected()); - } - } -} +} // namespace Dali