#include <dali-toolkit/internal/controls/popup/popup-impl.h>
// EXTERNAL INCLUDES
+#include <cstring> // for strcmp
#include <dali/public-api/adaptor-framework/key.h>
#include <dali/public-api/adaptor-framework/physical-keyboard.h>
#include <dali/public-api/animation/constraints.h>
// OnDialogTouched only consume the event. It prevents the touch event to be caught by the backing.
mBackgroundImage.TouchedSignal().Connect( this, &Popup::OnDialogTouched );
- mBackgroundImage.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+ mBackgroundImage.SetResizePolicy( SIZE_FIXED_OFFSET_FROM_PARENT, ALL_DIMENSIONS );
mBackgroundImage.SetAnchorPoint( AnchorPoint::CENTER );
mBackgroundImage.SetParentOrigin( ParentOrigin::CENTER );
- mBackgroundImage.SetSizeMode( SIZE_FIXED_OFFSET_FROM_PARENT );
Vector3 border( mPopupStyle->backgroundOuterBorder.x, mPopupStyle->backgroundOuterBorder.z, 0.0f );
mBackgroundImage.SetSizeModeFactor( border );
void Popup::SetTitle( const std::string& text )
{
-// TODO
+ // Replaces the current title actor.
+ if( mPopupLayout )
+ {
+ mPopupLayout.RemoveChildAt( Toolkit::TableView::CellPosition( 0, 0 ) );
+ }
+
+ mTitle = Toolkit::TextLabel::New( text );
+ mTitle.SetName( "POPUP_TITLE" );
+ mTitle.SetProperty( Toolkit::TextLabel::Property::MULTI_LINE, true );
+ mTitle.SetProperty( Toolkit::TextLabel::Property::HORIZONTAL_ALIGNMENT, "CENTER" );
+
+ if( mPopupLayout )
+ {
+ mTitle.SetPadding( Padding( 0.0f, 0.0f, mPopupStyle->margin, mPopupStyle->margin ) );
+ mTitle.SetResizePolicy( FILL_TO_PARENT, WIDTH );
+ mTitle.SetResizePolicy( DIMENSION_DEPENDENCY, HEIGHT );
+ mPopupLayout.AddChild( mTitle, Toolkit::TableView::CellPosition( 0, 0 ) );
+ }
+
+ RelayoutRequest();
}
-const std::string& Popup::GetTitle() const
+std::string Popup::GetTitle() const
{
- static std::string temp("");
- return temp;
+ if( mTitle )
+ {
+ return mTitle.GetProperty<std::string>( Toolkit::TextLabel::Property::TEXT );
+ }
+
+ return std::string();
}
void Popup::CreateFooter()
Vector3 naturalSize( 0.0f, 0.0f, 0.0f );
+ if ( mTitle )
+ {
+ Vector3 titleNaturalSize = mTitle.GetImplementation().GetNaturalSize();
+ // Buffer to avoid errors. The width of the popup could potentially be the width of the title text.
+ // It was observed in this case that text wrapping was then inconsistent when seen on device
+ const float titleBuffer = 0.5f;
+ titleNaturalSize.width += titleBuffer;
+
+ // As TextLabel GetNaturalSize does not take wrapping into account, limit the width
+ // to that of the stage
+ if( titleNaturalSize.width >= maxWidth)
+ {
+ naturalSize.width = maxWidth;
+ naturalSize.height = mTitle.GetImplementation().GetHeightForWidth( naturalSize.width );
+ }
+ else
+ {
+ naturalSize += titleNaturalSize;
+ }
+
+ naturalSize.height += mPopupStyle->margin;
+ }
+
if( mContent )
{
Vector3 contentSize = mContent.GetNaturalSize();
float height( 0.0f );
float popupWidth( width - 2.f * ( POPUP_OUT_MARGIN_WIDTH + mPopupStyle->margin ) );
+ if ( mTitle )
+ {
+ height += mTitle.GetImplementation().GetHeightForWidth( popupWidth );
+ height += mPopupStyle->margin;
+ }
+
if( mContent )
{
height += mContent.GetHeightForWidth( popupWidth ) + mPopupStyle->margin;