X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fbuttons%2Fpush-button-impl.cpp;h=4e96f14551499d6d3ccc83cf0e87c5fd44eaa3ef;hp=628fe67a3be0b7ba8f9bc626b1e007dec03f794f;hb=abbf60ed35112186269d2fe93b949eb8abd4283d;hpb=1db0a8becea3dbdebaa942d934d91824a92434e7 diff --git a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp index 628fe67..4e96f14 100644 --- a/dali-toolkit/internal/controls/buttons/push-button-impl.cpp +++ b/dali-toolkit/internal/controls/buttons/push-button-impl.cpp @@ -19,14 +19,21 @@ #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 +#if defined(DEBUG_ENABLED) + extern Debug::Filter* gLogButtonFilter; +#endif namespace Dali { @@ -45,36 +52,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 +96,150 @@ 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 ); +} - if( widthIsZero || heightIsZero ) +const PushButton::IconAlignment PushButton::GetIconAlignment() const +{ + return mIconAlignment; +} + +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 ) ); - if( widthIsZero ) + // Properties remain here for Tizen 3.0 legacy requirements. Are now in Button base class + + switch ( propertyIndex ) + { + case Toolkit::PushButton::Property::UNSELECTED_ICON: { - size.width = imageSize.width; + pushButtonImpl.CreateVisualsForComponent( Toolkit::Button::Property::UNSELECTED_VISUAL, value, DepthIndex::CONTENT ); + break; } - - if( heightIsZero ) + case Toolkit::PushButton::Property::SELECTED_ICON: + { + pushButtonImpl.CreateVisualsForComponent( Toolkit::Button::Property::SELECTED_VISUAL, value, DepthIndex::CONTENT ); + break; + } + case Toolkit::PushButton::Property::ICON_ALIGNMENT: + { + 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: { - size.height = imageSize.height; + 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; - if( widthIsZero ) + Toolkit::PushButton pushButton = Toolkit::PushButton::DownCast( Dali::BaseHandle( object ) ); + + if ( pushButton ) + { + PushButton& pushButtonImpl( GetImplementation( pushButton ) ); + + 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: + { + Padding padding = pushButtonImpl.Button::GetLabelPadding(); + value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + break; + } + case Toolkit::PushButton::Property::ICON_PADDING: { - size.height = std::max( size.height, imageSize.height ); + Padding padding = pushButtonImpl.Button::GetForegroundPadding(); + value = Vector4( padding.x, padding.y, padding.top, padding.bottom); + break; } } } - return size; + return value; } } // namespace Internal