X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fpush-button-impl.cpp;h=1b7f4950d2af6dd109c2d35ec31ab8123184424a;hb=57afbf908526aa7e2bb721caef152342cc92c248;hp=628fe67a3be0b7ba8f9bc626b1e007dec03f794f;hpb=1db0a8becea3dbdebaa942d934d91824a92434e7;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index 628fe67..1b7f495 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -19,14 +19,22 @@ #include "push-button-impl.h" // EXTERNAL INCLUDES -#include -#include #include +#include +#include +#include +#include // INTERNAL INCLUDES -#include "push-button-default-painter-impl.h" +#include +#include +#include +#include +#include -#include +#if defined(DEBUG_ENABLED) + extern Debug::Filter* gLogButtonFilter; +#endif namespace Dali { @@ -45,36 +53,32 @@ BaseHandle Create() return Toolkit::PushButton::New(); } -TypeRegistration typeRegistration( typeid(Toolkit::PushButton), typeid(Toolkit::Button), Create ); +// Properties -} // unnamed namespace +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PushButton, Toolkit::Button, Create ) -namespace -{ +DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "unselectedIcon", STRING, UNSELECTED_ICON ) +DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "selectedIcon", STRING, SELECTED_ICON ) +DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "iconAlignment", STRING, ICON_ALIGNMENT ) +DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "labelPadding", STRING, LABEL_PADDING ) +DALI_PROPERTY_REGISTRATION( Toolkit, PushButton, "iconPadding", STRING, ICON_PADDING ) -const float TEXT_PADDING = 12.0f; +DALI_TYPE_REGISTRATION_END() -/** - * Find the first image actor in the actor hierarchy +/* + * Table to define Text-to-enum conversions for IconAlignment. */ -ImageActor FindImageActor( Actor root ) -{ - ImageActor imageActor = ImageActor::DownCast( root ); - if( !imageActor && root ) - { - for( unsigned int i = 0, numChildren = root.GetChildCount(); i < numChildren; ++i ) - { - ImageActor childImageActor = FindImageActor( root.GetChildAt( i ) ); - if( childImageActor ) - { - return childImageActor; - } - } - } +const Dali::Scripting::StringEnum IconAlignmentTable[] = { + { "LEFT", Toolkit::Internal::PushButton::LEFT }, + { "RIGHT", Toolkit::Internal::PushButton::RIGHT }, + { "TOP", Toolkit::Internal::PushButton::TOP }, + { "BOTTOM", Toolkit::Internal::PushButton::BOTTOM }, +}; const unsigned int IconAlignmentTableCount = sizeof( IconAlignmentTable ) / sizeof( IconAlignmentTable[0] ); - return imageActor; -} +} // unnamed namespace +namespace +{ } // unnamed namespace @@ -93,70 +97,248 @@ Dali::Toolkit::PushButton PushButton::New() return pushButton; } -void PushButton::OnButtonInitialize() +PushButton::PushButton() +: Button(), + mIconAlignment( RIGHT ) { - // Push button requires the Leave event. - Actor root = Self(); - root.SetLeaveRequired( true ); } -PushButton::PushButton() -: Button() +PushButton::~PushButton() { - // Creates specific painter.GetBu - ButtonPainterPtr painter = PushButtonDefaultPainterPtr( new PushButtonDefaultPainter() ); - SetPainter( painter ); } -PushButton::~PushButton() +void PushButton::OnInitialize() { - SetPainter( NULL ); + Button::OnInitialize(); + + // Push button requires the Leave event. + Actor self = Self(); + self.SetLeaveRequired( true ); } -Vector3 PushButton::GetNaturalSize() +void PushButton::SetIconAlignment( const PushButton::IconAlignment iconAlignment ) { - Vector3 size = Control::GetNaturalSize(); + mIconAlignment = iconAlignment; + Button::Align labelAlignment; + switch ( iconAlignment ) + { + case RIGHT: + { + labelAlignment = Button::BEGIN; + break; + } + case TOP: + { + labelAlignment = Button::BOTTOM; + break; + } + case BOTTOM: + { + labelAlignment = Button::TOP; + break; + } + case LEFT: + default: + labelAlignment = Button::END; + break; + } - const bool widthIsZero = EqualsZero( size.width ); - const bool heightIsZero = EqualsZero( size.height ); + Button::SetLabelAlignment( labelAlignment ); +} + +const PushButton::IconAlignment PushButton::GetIconAlignment() const +{ + return mIconAlignment; +} - if( widthIsZero || heightIsZero ) +void PushButton::SetProperty( BaseObject* object, Property::Index propertyIndex, const Property::Value& value ) +{ + Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) ); + + if ( pushButton ) { - // If background and background not scale9 try get size from that - ImageActor imageActor = FindImageActor( GetButtonImage() ); - if( imageActor && imageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH ) - { - Vector3 imageSize = RelayoutHelper::GetNaturalSize( imageActor ); + PushButton& pushButtonImpl( GetImplementation( pushButton ) ); + + // Properties remain here for Tizen 3.0 legacy requirements. Are now in Button base class - if( widthIsZero ) + switch ( propertyIndex ) + { + case Toolkit::PushButton::Property::UNSELECTED_ICON: { - size.width = imageSize.width; + pushButtonImpl.CreateVisualsForComponent( Toolkit::DevelButton::Property::UNSELECTED_VISUAL, value, DepthIndex::CONTENT ); + break; } - - if( heightIsZero ) + case Toolkit::PushButton::Property::SELECTED_ICON: + { + pushButtonImpl.CreateVisualsForComponent( Toolkit::DevelButton::Property::SELECTED_VISUAL, value, DepthIndex::CONTENT ); + break; + } + case Toolkit::PushButton::Property::ICON_ALIGNMENT: { - size.height = imageSize.height; + IconAlignment iconAlignment; + if( Scripting::GetEnumeration< IconAlignment >( value.Get< std::string >().c_str(), IconAlignmentTable, IconAlignmentTableCount, iconAlignment ) ) + { + pushButtonImpl.SetIconAlignment( iconAlignment ); + } + break; + } + case Toolkit::PushButton::Property::LABEL_PADDING: + { + Vector4 padding ( value.Get< Vector4 >() ); + pushButtonImpl.Button::SetLabelPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); + break; + } + case Toolkit::PushButton::Property::ICON_PADDING: + { + Vector4 padding ( value.Get< Vector4 >() ); + pushButtonImpl.Button::SetForegroundPadding( Padding( padding.x, padding.y, padding.z, padding.w ) ); + break; } } + } +} - ImageActor backgroundImageActor = FindImageActor( GetBackgroundImage() ); - if( backgroundImageActor && backgroundImageActor.GetStyle() != ImageActor::STYLE_NINE_PATCH ) - { - Vector3 imageSize = RelayoutHelper::GetNaturalSize( backgroundImageActor ); +Property::Value PushButton::GetProperty( BaseObject* object, Property::Index propertyIndex ) +{ + Property::Value value; + + Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) ); + + if ( pushButton ) + { + PushButton& pushButtonImpl( GetImplementation( pushButton ) ); - if( widthIsZero ) + switch ( propertyIndex ) + { + case Toolkit::PushButton::Property::UNSELECTED_ICON: { - size.width = std::max( size.width, imageSize.width ); + //value = pushButtonImpl.GetIcon( UNSELECTED_DECORATION ); + break; } - - if( heightIsZero ) + case Toolkit::PushButton::Property::SELECTED_ICON: + { + //value = pushButtonImpl.GetIcon( UNSELECTED_DECORATION ); + break; + } + case Toolkit::PushButton::Property::ICON_ALIGNMENT: + { + value = Scripting::GetLinearEnumerationName< IconAlignment >( pushButtonImpl.GetIconAlignment(), IconAlignmentTable, IconAlignmentTableCount ); + break; + } + case Toolkit::PushButton::Property::LABEL_PADDING: { - size.height = std::max( size.height, imageSize.height ); + Padding padding = pushButtonImpl.Button::GetLabelPadding(); + value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + break; } + case Toolkit::PushButton::Property::ICON_PADDING: + { + Padding padding = pushButtonImpl.Button::GetForegroundPadding(); + value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + break; + } + } + } + + return value; +} + +// Deprecated API using Actor to set images + +void PushButton::SetButtonImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetButtonImage() is deprecated and will be removed from next release. Use Button.SetProperty UNSELECTED_STATE_IMAGE or Styling file instead.\n" ); + + Image retreivedButtonImage = Toolkit::ImageView::DownCast( image ).GetImage(); + if ( retreivedButtonImage ) + { + ResourceImage resourceImage = ResourceImage::DownCast( retreivedButtonImage ); + + if ( resourceImage ) + { + Self().SetProperty( Toolkit::DevelButton::Property::UNSELECTED_BACKGROUND_VISUAL, resourceImage.GetUrl() ); + + } + } +} + +void PushButton::SetBackgroundImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetBackgroundImage() is deprecated and will be removed from next release.\n" ); + + SetButtonImage( image ); + +} + +void PushButton::SetSelectedImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetSelectedImage() is deprecated and will be removed from next release. Use Button.SetProperty SELECTED_STATE_IMAGE or Styling file instead.\n" ); + + Image retreivedButtonImage = Toolkit::ImageView::DownCast( image ).GetImage(); + if ( retreivedButtonImage ) + { + ResourceImage resourceImage = ResourceImage::DownCast( retreivedButtonImage ); + + if ( resourceImage ) + { + Self().SetProperty( Toolkit::DevelButton::Property::SELECTED_BACKGROUND_VISUAL, resourceImage.GetUrl() ); + } + } +} + +void PushButton::SetSelectedBackgroundImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetSelectedBackgroundImage() is deprecated and will be removed from next release.\n" ); + + SetSelectedImage( image ); +} + +void PushButton::SetDisabledBackgroundImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetDisabledBackgroundImage() is deprecated and will be removed from next release.\n" ); + + Image retreivedButtonImage = Toolkit::ImageView::DownCast( image ).GetImage(); + if ( retreivedButtonImage ) + { + ResourceImage resourceImage = ResourceImage::DownCast( retreivedButtonImage ); + + if ( resourceImage ) + { + Self().SetProperty( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, resourceImage.GetUrl() ); } } +} + +void PushButton::SetDisabledImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetDisabledImage() is deprecated and will be removed from next release. Use Button.SetProperty DISABLED_STATE_IMAGE or Styling file instead.\n" ); - return size; + Image retreivedButtonImage = Toolkit::ImageView::DownCast( image ).GetImage(); + if ( retreivedButtonImage ) + { + ResourceImage resourceImage = ResourceImage::DownCast( retreivedButtonImage ); + + if ( resourceImage ) + { + Self().SetProperty( Toolkit::DevelButton::Property::DISABLED_UNSELECTED_BACKGROUND_VISUAL, resourceImage.GetUrl() ); + } + } +} + +void PushButton::SetDisabledSelectedImage( Actor image ) +{ + DALI_LOG_WARNING_NOFN("DEPRECATION WARNING: SetDisabledSelectedImage() is deprecated and will be removed from next release.\n" ); + + Image retreivedButtonImage = Toolkit::ImageView::DownCast( image ).GetImage(); + if ( retreivedButtonImage ) + { + ResourceImage resourceImage = ResourceImage::DownCast( retreivedButtonImage ); + + if ( resourceImage ) + { + Self().SetProperty( Toolkit::DevelButton::Property::DISABLED_SELECTED_BACKGROUND_VISUAL, resourceImage.GetUrl() ); + } + } } } // namespace Internal