X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-selection-popup-impl.cpp;h=3a42d6a904a1cc1c3d0f5018807765d379aff357;hp=6db6845b1191e5fa81c31dc73105bff083d4a565;hb=a97820c064ff542c5c5e5151e976c1495af1235e;hpb=7aa9e3d716396348b89c913b306bbc1ce201db69 diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp index 6db6845..3a42d6a 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-selection-popup-impl.cpp @@ -19,19 +19,23 @@ #include // INTERNAL INCLUDES -#include +#include +#include #include #include // EXTERNAL INCLUDES +#include #include #include #include #include -#include +#include +#include +#include -// todo Move this to adaptor?? -#define GET_LOCALE_TEXT(string) dgettext("elementary", string) +#include +#include namespace Dali { @@ -44,39 +48,35 @@ namespace Internal namespace { -const Dali::Vector4 DEFAULT_POPUP_BACKGROUND( Dali::Vector4( .20f, 0.29f, 0.44f, 1.0f ) ); -const Dali::Vector4 DEFAULT_POPUP_BACKGROUND_PRESSED( Dali::Vector4( 0.07f, 0.10f, 0.17f, 1.0f ) ); -const Dali::Vector4 DEFAULT_POPUP_LINE_COLOR( Dali::Vector4( 0.36f, 0.45f, 0.59f, 1.0f ) ); -const Dali::Vector4 DEFAULT_OPTION_ICON( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) ); -const Dali::Vector4 DEFAULT_OPTION_ICON_PRESSED( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) ); -const Dali::Vector4 DEFAULT_OPTION_TEXT( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) ); -const Dali::Vector4 DEFAULT_OPTION_TEXT_PRESSED( Dali::Vector4( 1.0f, 1.0f, 1.0f, 1.0f ) ); - -const std::string DEFAULT_POPUP_BACKGROUND_IMAGE( DALI_IMAGE_DIR "popup_bubble_bg.#.png" ); -const std::string OPTION_ICON_CLIPBOARD( DALI_IMAGE_DIR "copy_paste_icon_clipboard.png" ); -const std::string OPTION_ICON_COPY( DALI_IMAGE_DIR "copy_paste_icon_copy.png" ); -const std::string OPTION_ICON_CUT( DALI_IMAGE_DIR "copy_paste_icon_cut.png" ); -const std::string OPTION_ICON_PASTE( DALI_IMAGE_DIR "copy_paste_icon_paste.png" ); -const std::string OPTION_ICON_SELECT( DALI_IMAGE_DIR "copy_paste_icon_select.png" ); -const std::string OPTION_ICON_SELECT_ALL( DALI_IMAGE_DIR "copy_paste_icon_select_all.png" ); - -const Dali::Vector2 DEFAULT_POPUP_MAX_SIZE( 470.0f, 120.0f ); ///< The maximum size of the popup. - -const float OPTION_TEXT_LINE_HEIGHT( 32.0f ); ///< The line height of the text. -const Dali::Vector2 OPTION_ICON_SIZE( 0.f, 0.f ); ///< The size of the icon. -const float OPTION_GAP_ICON_TEXT( 6.f ); ///< The gap between the icon and the text -const float OPTION_MARGIN_WIDTH( 10.f ); ///< The margin between the right or lefts edge and the text or icon. -const float OPTION_MAX_WIDTH( DEFAULT_POPUP_MAX_SIZE.width / 6 ); ///< The maximum width of the option (currently set to the max) -const float OPTION_MIN_WIDTH( 86.0f ); ///< The minimum width of the option. - -const float POPUP_DIVIDER_WIDTH( 1.f ); ///< The size of the divider. - -const Dali::Vector2 POPUP_TAIL_SIZE( 20.0f, 16.0f ); ///< The size of the tail. -const float POPUP_TAIL_Y_OFFSET( 5.f ); ///< The y offset of the tail (when its position is on the bottom). -const float POPUP_TAIL_TOP_Y_OFFSET( 3.f ); ///< The y offset of the tail (when its position is on the top). - -const float HIDE_POPUP_ANIMATION_DURATION( 0.2f ); ///< Duration of popup hide animation in seconds. -const float SHOW_POPUP_ANIMATION_DURATION( 0.2f ); ///< Duration of popup show animation in seconds. +// todo Move this to adaptor?? +#define GET_LOCALE_TEXT(string) dgettext("sys_string", string) + +const std::string TEXT_SELECTION_POPUP_BUTTON_STYLE_NAME( "textselectionpopupbutton" ); +const Dali::Vector4 DEFAULT_OPTION_PRESSED_COLOR( Dali::Vector4( 0.24f, 0.72f, 0.8f, 1.0f ) ); + +#if defined(DEBUG_ENABLED) + Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, true, "LOG_TEXT_CONTROLS"); +#endif + +#ifdef DGETTEXT_ENABLED + +#define POPUP_CUT_STRING GET_LOCALE_TEXT("IDS_COM_BODY_CUT") +#define POPUP_COPY_STRING GET_LOCALE_TEXT("IDS_COM_BODY_COPY") +#define POPUP_PASTE_STRING GET_LOCALE_TEXT("IDS_COM_BODY_PASTE") +#define POPUP_SELECT_STRING GET_LOCALE_TEXT("IDS_COM_SK_SELECT") +#define POPUP_SELECT_ALL_STRING GET_LOCALE_TEXT("IDS_COM_BODY_SELECT_ALL") +#define POPUP_CLIPBOARD_STRING GET_LOCALE_TEXT("IDS_COM_BODY_CLIPBOARD") + +#else + +#define POPUP_CUT_STRING "Cut" +#define POPUP_COPY_STRING "Copy" +#define POPUP_PASTE_STRING "Paste" +#define POPUP_SELECT_STRING "Select" +#define POPUP_SELECT_ALL_STRING "Select All" +#define POPUP_CLIPBOARD_STRING "Clipboard" + +#endif const char* const OPTION_SELECT_WORD = "option-select_word"; // "Select Word" popup option. const char* const OPTION_SELECT_ALL("option-select_all"); // "Select All" popup option. @@ -85,19 +85,44 @@ const char* const OPTION_COPY("option-copy"); const char* const OPTION_PASTE("option-paste"); // "Paste" popup option. const char* const OPTION_CLIPBOARD("option-clipboard"); // "Clipboard" popup option. -} // namespace +BaseHandle Create() +{ + return Toolkit::TextSelectionPopup::New( NULL ); +} -//// Comparison function for ButtonRequirement Priority -//bool TextSelectionPopup::PriorityCompare( ButtonRequirement const& a, ButtonRequirement const& b ) -//{ -// return a.priority < b.priority; -//} +// Setup properties, signals and actions using the type-registry. + +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::TextSelectionPopup, Toolkit::Control, Create ); + +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-max-size", VECTOR2, POPUP_MAX_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-min-size", VECTOR2, POPUP_MIN_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "option-max-size", VECTOR2, OPTION_MAX_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "option-min-size", VECTOR2, OPTION_MIN_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "option-divider-size", VECTOR2, OPTION_DIVIDER_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-clipboard-button-image", STRING, POPUP_CLIPBOARD_BUTTON_ICON_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-cut-button-image", STRING, POPUP_CUT_BUTTON_ICON_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-copy-button-image", STRING, POPUP_COPY_BUTTON_ICON_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-paste-button-image", STRING, POPUP_PASTE_BUTTON_ICON_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-select-button-image", STRING, POPUP_SELECT_BUTTON_ICON_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-select-all-button-image", STRING, POPUP_SELECT_ALL_BUTTON_ICON_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-divider-color", VECTOR4, POPUP_DIVIDER_COLOR ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-icon-color", VECTOR4, POPUP_ICON_COLOR ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-pressed-color", VECTOR4, POPUP_PRESSED_COLOR ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-pressed-image", STRING, POPUP_PRESSED_IMAGE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-fade-in-duration", FLOAT, POPUP_FADE_IN_DURATION ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionPopup, "popup-fade-out-duration", FLOAT, POPUP_FADE_OUT_DURATION ) + +DALI_TYPE_REGISTRATION_END() + +} // namespace -Dali::Toolkit::TextSelectionPopup TextSelectionPopup::New() +Dali::Toolkit::TextSelectionPopup TextSelectionPopup::New( TextSelectionPopupCallbackInterface* callbackInterface ) { - // Create the implementation, temporarily owned by this handle on stack - IntrusivePtr< TextSelectionPopup > impl = new TextSelectionPopup(); + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextSelectionPopup::New\n" ); + + // Create the implementation, temporarily owned by this handle on stack + IntrusivePtr< TextSelectionPopup > impl = new TextSelectionPopup( callbackInterface ); // Pass ownership to CustomActor handle Dali::Toolkit::TextSelectionPopup handle( *impl ); @@ -121,49 +146,88 @@ void TextSelectionPopup::SetProperty( BaseObject* object, Property::Index index, { case Toolkit::TextSelectionPopup::Property::POPUP_MAX_SIZE: { - impl.SetPopupMaxSize( value.Get< Vector2 >() ); + impl.SetDimensionToCustomise( POPUP_MAXIMUM_SIZE, value.Get< Vector2 >() ); break; } - case Toolkit::TextSelectionPopup::Property::POPUP_BACKGROUND_IMAGE: + case Toolkit::TextSelectionPopup::Property::OPTION_MAX_SIZE: { - ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_BACKGROUND, image ); + impl.SetDimensionToCustomise( OPTION_MAXIMUM_SIZE, value.Get< Vector2 >() ); + break; + } + case Toolkit::TextSelectionPopup::Property::OPTION_MIN_SIZE: + { + impl.SetDimensionToCustomise( OPTION_MINIMUM_SIZE, value.Get< Vector2>() ); + break; + } + case Toolkit::TextSelectionPopup::Property::OPTION_DIVIDER_SIZE: + { + impl.SetDimensionToCustomise( OPTION_DIVIDER_SIZE, value.Get< Vector2>() ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_CLIPBOARD_BUTTON_ICON_IMAGE: { ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_CLIPBOARD_BUTTON, image ); + impl.SetButtonImage( Toolkit::TextSelectionPopup::CLIPBOARD, image ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_CUT_BUTTON_ICON_IMAGE: { ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_CUT_BUTTON_ICON, image ); + impl.SetButtonImage( Toolkit::TextSelectionPopup::CUT, image ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_COPY_BUTTON_ICON_IMAGE: { ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_COPY_BUTTON_ICON, image ); + impl.SetButtonImage( Toolkit::TextSelectionPopup::COPY, image ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_PASTE_BUTTON_ICON_IMAGE: { ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_PASTE_BUTTON_ICON, image ); + impl.SetButtonImage( Toolkit::TextSelectionPopup::PASTE, image ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_BUTTON_ICON_IMAGE: { ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_SELECT_BUTTON_ICON, image ); + impl.SetButtonImage( Toolkit::TextSelectionPopup::SELECT, image ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_ALL_BUTTON_ICON_IMAGE: { ResourceImage image = ResourceImage::New( value.Get< std::string >() ); - impl.SetPopupImage( POPUP_SELECT_ALL_BUTTON_ICON, image ); + impl.SetButtonImage( Toolkit::TextSelectionPopup::SELECT_ALL, image ); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_DIVIDER_COLOR: + { + impl.mDividerColor = value.Get< Vector4 >(); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_ICON_COLOR: + { + impl.mIconColor = value.Get< Vector4 >(); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_PRESSED_COLOR: + { + impl.mPressedColor = value.Get< Vector4 >(); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_PRESSED_IMAGE: + { + impl.SetPressedImage( value.Get< std::string >() ); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_FADE_IN_DURATION: + { + impl.mFadeInDuration = value.Get < float >(); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_FADE_OUT_DURATION: + { + impl.mFadeOutDuration = value.Get < float >(); break; } } // switch @@ -184,21 +248,27 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I { case Toolkit::TextSelectionPopup::Property::POPUP_MAX_SIZE: { - value = impl.GetPopupMaxSize(); + value = impl.GetDimensionToCustomise( POPUP_MAXIMUM_SIZE ); break; } - case Toolkit::TextSelectionPopup::Property::POPUP_BACKGROUND_IMAGE: + case Toolkit::TextSelectionPopup::Property::OPTION_MAX_SIZE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_BACKGROUND ) ); - if( image ) - { - value = image.GetUrl(); - } + value = impl.GetDimensionToCustomise( OPTION_MAXIMUM_SIZE ); + break; + } + case Toolkit::TextSelectionPopup::Property::OPTION_MIN_SIZE: + { + value = impl.GetDimensionToCustomise( OPTION_MINIMUM_SIZE ); + break; + } + case Toolkit::TextSelectionPopup::Property::OPTION_DIVIDER_SIZE: + { + value = impl.GetDimensionToCustomise( OPTION_DIVIDER_SIZE ); break; } case Toolkit::TextSelectionPopup::Property::POPUP_CLIPBOARD_BUTTON_ICON_IMAGE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_CLIPBOARD_BUTTON ) ); + ResourceImage image = ResourceImage::DownCast( impl.GetButtonImage( Toolkit::TextSelectionPopup::CLIPBOARD ) ); if( image ) { value = image.GetUrl(); @@ -207,7 +277,7 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I } case Toolkit::TextSelectionPopup::Property::POPUP_CUT_BUTTON_ICON_IMAGE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_CUT_BUTTON_ICON ) ); + ResourceImage image = ResourceImage::DownCast( impl.GetButtonImage( Toolkit::TextSelectionPopup::CUT ) ); if( image ) { value = image.GetUrl(); @@ -216,7 +286,7 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I } case Toolkit::TextSelectionPopup::Property::POPUP_COPY_BUTTON_ICON_IMAGE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_COPY_BUTTON_ICON ) ); + ResourceImage image = ResourceImage::DownCast( impl.GetButtonImage( Toolkit::TextSelectionPopup::COPY ) ); if( image ) { value = image.GetUrl(); @@ -225,7 +295,7 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I } case Toolkit::TextSelectionPopup::Property::POPUP_PASTE_BUTTON_ICON_IMAGE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_PASTE_BUTTON_ICON ) ); + ResourceImage image = ResourceImage::DownCast( impl.GetButtonImage( Toolkit::TextSelectionPopup::PASTE ) ); if( image ) { value = image.GetUrl(); @@ -234,7 +304,7 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I } case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_BUTTON_ICON_IMAGE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_SELECT_BUTTON_ICON ) ); + ResourceImage image = ResourceImage::DownCast( impl.GetButtonImage( Toolkit::TextSelectionPopup::SELECT ) ); if( image ) { value = image.GetUrl(); @@ -243,423 +313,518 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I } case Toolkit::TextSelectionPopup::Property::POPUP_SELECT_ALL_BUTTON_ICON_IMAGE: { - ResourceImage image = ResourceImage::DownCast( impl.GetPopupImage( POPUP_SELECT_ALL_BUTTON_ICON ) ); + ResourceImage image = ResourceImage::DownCast( impl.GetButtonImage( Toolkit::TextSelectionPopup::SELECT_ALL ) ); if( image ) { value = image.GetUrl(); } break; } + case Toolkit::TextSelectionPopup::Property::POPUP_PRESSED_IMAGE: + { + value = impl.GetPressedImage(); + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_FADE_IN_DURATION: + { + value = impl.mFadeInDuration; + break; + } + case Toolkit::TextSelectionPopup::Property::POPUP_FADE_OUT_DURATION: + { + value = impl.mFadeOutDuration; + break; + } } // switch } return value; } +void TextSelectionPopup::EnableButtons( Toolkit::TextSelectionPopup::Buttons buttonsToEnable ) +{ + mEnabledButtons = buttonsToEnable; + mButtonsChanged = true; +} + +void TextSelectionPopup::RaiseAbove( Layer target ) +{ + if( mToolbar ) + { + mToolbar.RaiseAbove( target ); + } +} + +void TextSelectionPopup::ShowPopup() +{ + if ( !mPopupShowing || mButtonsChanged ) + { + Actor self = Self(); + AddPopupOptionsToToolbar( mShowIcons, mShowCaptions ); + + Animation animation = Animation::New( mFadeInDuration ); + animation.AnimateTo( Property(self, Actor::Property::COLOR_ALPHA), 1.0f ); + animation.Play(); + mPopupShowing = true; + } +} + +void TextSelectionPopup::HidePopup() +{ + if ( mPopupShowing ) + { + mPopupShowing = false; + Actor self = Self(); + Animation animation = Animation::New( mFadeOutDuration ); + animation.AnimateTo( Property(self, Actor::Property::COLOR_ALPHA), 0.0f ); + animation.FinishedSignal().Connect( this, &TextSelectionPopup::HideAnimationFinished ); + animation.Play(); + } +} + void TextSelectionPopup::OnInitialize() { - CreatePopup(); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextSelectionPopup::OnInitialize\n" ); + Actor self = Self(); + self.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + self.SetProperty( Actor::Property::COLOR_ALPHA, 0.0f ); } -void TextSelectionPopup::OnRelayout( const Vector2& size, RelayoutContainer& container ) +void TextSelectionPopup::OnStageConnection( int depth ) { + DALI_LOG_INFO( gLogFilter, Debug::General, "TextSelectionPopup::OnStageConnection\n" ); + // Call the Control::OnStageConnection() to set the depth of the background. + Control::OnStageConnection( depth ); + // TextSelectionToolbar::OnStageConnection() will set the depths of all the popup's components. } -void TextSelectionPopup::SetPopupMaxSize( const Size& maxSize ) +void TextSelectionPopup::HideAnimationFinished( Animation& animation ) { - mMaxSize = maxSize; + Actor self = Self(); + if ( !mPopupShowing ) // During the Hide/Fade animation there could be a call to Show the Popup again, mPopupShowing will be true in this case. + { + DALI_LOG_INFO( gLogFilter, Debug::General, "TextSelectionPopup::HideAnimationFinished\n" ); + UnparentAndReset( mToolbar ); + } } -const Dali::Vector2& TextSelectionPopup::GetPopupMaxSize() const +bool TextSelectionPopup::OnCutButtonPressed( Toolkit::Button button ) { - return mMaxSize; + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Toolkit::TextSelectionPopup::CUT ); + } + + return true; } -void TextSelectionPopup::SetPopupImage( PopupParts part, Dali::Image image ) +bool TextSelectionPopup::OnCopyButtonPressed( Toolkit::Button button ) { - switch ( part ) - { - case POPUP_BACKGROUND : + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Dali::Toolkit::TextSelectionPopup::COPY ); + } + + return true; +} + +bool TextSelectionPopup::OnPasteButtonPressed( Toolkit::Button button ) +{ + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Dali::Toolkit::TextSelectionPopup::PASTE ); + } + + return true; +} + +bool TextSelectionPopup::OnSelectButtonPressed( Toolkit::Button button ) +{ + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Dali::Toolkit::TextSelectionPopup::SELECT ); + } + + return true; +} + +bool TextSelectionPopup::OnSelectAllButtonPressed( Toolkit::Button button ) +{ + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Dali::Toolkit::TextSelectionPopup::SELECT_ALL ); + } + + return true; +} + +bool TextSelectionPopup::OnClipboardButtonPressed( Toolkit::Button button ) +{ + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Dali::Toolkit::TextSelectionPopup::CLIPBOARD ); + } + + return true; +} + +void TextSelectionPopup::SetDimensionToCustomise( const PopupCustomisations& settingToCustomise, const Size& dimension ) +{ + switch( settingToCustomise ) + { + case POPUP_MAXIMUM_SIZE : + { + mPopupMaxSize = dimension; + if ( mToolbar ) + { + mToolbar.SetProperty( Toolkit::TextSelectionToolbar::Property::MAX_SIZE, dimension ); + } + break; + } + case OPTION_MAXIMUM_SIZE : + { + mOptionMaxSize = dimension; + // Option max size not currently currently supported + break; + } + case OPTION_MINIMUM_SIZE : + { + mOptionMinSize = dimension; + // Option min size not currently currently supported + break; + } + case OPTION_DIVIDER_SIZE : + { + mOptionDividerSize = dimension; + if ( mToolbar ) + { + // Resize Dividers not currently supported + } + break; + } + } // switch +} + +Size TextSelectionPopup::GetDimensionToCustomise( const PopupCustomisations& settingToCustomise ) +{ + switch( settingToCustomise ) + { + case POPUP_MAXIMUM_SIZE : + { + if ( mToolbar ) + { + return mToolbar.GetProperty( Toolkit::TextSelectionToolbar::Property::MAX_SIZE ).Get< Vector2 >(); + } + else + { + return mPopupMaxSize; + } + } + case OPTION_MAXIMUM_SIZE : + { + return mOptionMaxSize; + } + case OPTION_MINIMUM_SIZE : + { + return mOptionMinSize; + } + case OPTION_DIVIDER_SIZE : + { + return mOptionDividerSize; + } + } // switch + + return Size::ZERO; +} + +void TextSelectionPopup::SetButtonImage( Toolkit::TextSelectionPopup::Buttons button, Dali::Image image ) +{ + switch ( button ) { - mBackgroundImage = image; - } break; - case POPUP_CLIPBOARD_BUTTON : + case Toolkit::TextSelectionPopup::CLIPBOARD: { mClipboardIconImage = image; } break; - case POPUP_CUT_BUTTON_ICON : + case Toolkit::TextSelectionPopup::CUT : { mCutIconImage = image; } break; - case POPUP_COPY_BUTTON_ICON : + case Toolkit::TextSelectionPopup::COPY : { mCopyIconImage = image; } break; - case POPUP_PASTE_BUTTON_ICON : + case Toolkit::TextSelectionPopup::PASTE : { mPasteIconImage = image; } break; - case POPUP_SELECT_BUTTON_ICON : + case Toolkit::TextSelectionPopup::SELECT : { mSelectIconImage = image; } break; - case POPUP_SELECT_ALL_BUTTON_ICON : + case Toolkit::TextSelectionPopup::SELECT_ALL : { mSelectAllIconImage = image; } break; - + default : + { + DALI_ASSERT_DEBUG( "TextSelectionPopup SetPopupImage Unknown Button" ); + } } // switch } -Dali::Image TextSelectionPopup::GetPopupImage( PopupParts part ) +Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::Buttons button ) { - switch ( part ) + switch ( button ) { - case POPUP_BACKGROUND : - { - return mBackgroundImage; - } - break; - case POPUP_CLIPBOARD_BUTTON : + case Toolkit::TextSelectionPopup::CLIPBOARD : { return mClipboardIconImage; } break; - case POPUP_CUT_BUTTON_ICON : + case Toolkit::TextSelectionPopup::CUT : { return mCutIconImage; } break; - case POPUP_COPY_BUTTON_ICON : + case Toolkit::TextSelectionPopup::COPY : { return mCopyIconImage; } break; - case POPUP_PASTE_BUTTON_ICON : + case Toolkit::TextSelectionPopup::PASTE : { return mPasteIconImage; } break; - case POPUP_SELECT_BUTTON_ICON : + case Toolkit::TextSelectionPopup::SELECT : { return mSelectIconImage; } break; - case POPUP_SELECT_ALL_BUTTON_ICON : + case Toolkit::TextSelectionPopup::SELECT_ALL : { return mSelectAllIconImage; } break; default : { - DALI_ASSERT_DEBUG( "Unknown Popup Part" ); + DALI_ASSERT_DEBUG( "TextSelectionPopup GetPopupImage Unknown Button" ); } } // switch return Dali::Image(); } +void TextSelectionPopup::SetPressedImage( const std::string& filename ) +{ + mPressedImage = filename; +} + +std::string TextSelectionPopup::GetPressedImage() const +{ + return mPressedImage; +} + void TextSelectionPopup::CreateOrderedListOfPopupOptions() { mOrderListOfButtons.clear(); + mOrderListOfButtons.reserve( 8u ); // Create button for each possible option using Option priority - if ( !mCutIconImage ) - { - mCutIconImage = ResourceImage::New( OPTION_ICON_CUT ); - } - mOrderListOfButtons.push_back( ButtonRequirement( ButtonsCut, mCutOptionPriority, OPTION_CUT, GET_LOCALE_TEXT("IDS_COM_BODY_CUT"), mCutIconImage, true ) ); - - if ( !mCopyIconImage ) - { - mCopyIconImage = ResourceImage::New( OPTION_ICON_COPY ); - } - mOrderListOfButtons.push_back( ButtonRequirement( ButtonsCopy, mCopyOptionPriority, OPTION_COPY, GET_LOCALE_TEXT("IDS_COM_BODY_COPY"), mCopyIconImage, true ) ); - - if ( !mPasteIconImage ) - { - mPasteIconImage = ResourceImage::New( OPTION_ICON_PASTE ); - } - mOrderListOfButtons.push_back( ButtonRequirement( ButtonsPaste, mPasteOptionPriority, OPTION_PASTE, GET_LOCALE_TEXT("IDS_COM_BODY_PASTE"), mPasteIconImage, true ) ); - - if ( !mSelectIconImage ) - mSelectIconImage = ResourceImage::New( OPTION_ICON_SELECT ); - mOrderListOfButtons.push_back( ButtonRequirement( ButtonsSelect, mSelectOptionPriority, OPTION_SELECT_WORD, GET_LOCALE_TEXT("IDS_COM_SK_SELECT"), mSelectIconImage, true ) ); - - if ( !mSelectAllIconImage ) - { - mSelectAllIconImage = ResourceImage::New( OPTION_ICON_SELECT_ALL ); - } - mOrderListOfButtons.push_back( ButtonRequirement( ButtonsSelectAll, mSelectAllOptionPriority, OPTION_SELECT_ALL, GET_LOCALE_TEXT("IDS_COM_BODY_SELECT_ALL"), mSelectAllIconImage, true ) ); - - if ( !mClipboardIconImage ) - { - mClipboardIconImage = ResourceImage::New( OPTION_ICON_CLIPBOARD ); - } - mOrderListOfButtons.push_back( ButtonRequirement( ButtonsClipboard, mClipboardOptionPriority, OPTION_CLIPBOARD, GET_LOCALE_TEXT("IDS_COM_BODY_CLIPBOARD"), mClipboardIconImage, true ) ); + mOrderListOfButtons.push_back( ButtonRequirement( Toolkit::TextSelectionPopup::CUT, mCutOptionPriority, OPTION_CUT, POPUP_CUT_STRING , mCutIconImage, ( mEnabledButtons & Toolkit::TextSelectionPopup::CUT) ) ); + mOrderListOfButtons.push_back( ButtonRequirement( Toolkit::TextSelectionPopup::COPY, mCopyOptionPriority, OPTION_COPY, POPUP_COPY_STRING, mCopyIconImage, ( mEnabledButtons & Toolkit::TextSelectionPopup::COPY) ) ); + mOrderListOfButtons.push_back( ButtonRequirement( Toolkit::TextSelectionPopup::PASTE, mPasteOptionPriority, OPTION_PASTE, POPUP_PASTE_STRING, mPasteIconImage, ( mEnabledButtons & Toolkit::TextSelectionPopup::PASTE) ) ); + mOrderListOfButtons.push_back( ButtonRequirement( Toolkit::TextSelectionPopup::SELECT, mSelectOptionPriority, OPTION_SELECT_WORD, POPUP_SELECT_STRING, mSelectIconImage, ( mEnabledButtons & Toolkit::TextSelectionPopup::SELECT) ) ); + mOrderListOfButtons.push_back( ButtonRequirement( Toolkit::TextSelectionPopup::SELECT_ALL, mSelectAllOptionPriority, OPTION_SELECT_ALL, POPUP_SELECT_ALL_STRING, mSelectAllIconImage, ( mEnabledButtons & Toolkit::TextSelectionPopup::SELECT_ALL) ) ); + mOrderListOfButtons.push_back( ButtonRequirement( Toolkit::TextSelectionPopup::CLIPBOARD, mClipboardOptionPriority, OPTION_CLIPBOARD, POPUP_CLIPBOARD_STRING, mClipboardIconImage, ( mEnabledButtons & Toolkit::TextSelectionPopup::CLIPBOARD) ) ); // Sort the buttons according their priorities. std::sort( mOrderListOfButtons.begin(), mOrderListOfButtons.end(), TextSelectionPopup::ButtonPriorityCompare() ); } - void TextSelectionPopup::CreateBackground() + void TextSelectionPopup::AddOption( const ButtonRequirement& button, bool showDivider, bool showIcons, bool showCaption ) { - if ( !mBackgroundImage ) - { - mBackgroundImage = ResourceImage::New( DEFAULT_POPUP_BACKGROUND_IMAGE ); - } + // 1. Create a option. + DALI_LOG_INFO( gLogFilter, Debug::General, "TextSelectionPopup::AddOption\n" ); - NinePatchImage backgroundImageNinePatch = NinePatchImage::DownCast( mBackgroundImage ); - if( backgroundImageNinePatch ) + Toolkit::PushButton option = Toolkit::PushButton::New(); + option.SetName( button.name ); + option.SetAnimationTime( 0.0f ); + option.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); + + switch( button.id ) { - const Size ninePatchImageSize = Size( static_cast( mBackgroundImage.GetWidth() ), static_cast( mBackgroundImage.GetHeight() ) ); - Rect childRect = backgroundImageNinePatch.GetChildRectangle(); - - // -1u because of the cropping. - mNinePatchMargins.x = childRect.x - 1u; - mNinePatchMargins.y = ninePatchImageSize.width - ( childRect.x + childRect.width ) - 1u; - mNinePatchMargins.z = childRect.y - 1u; - mNinePatchMargins.w = ninePatchImageSize.height - ( childRect.y + childRect.height ) - 1u; + case Toolkit::TextSelectionPopup::CUT: + { + option.ClickedSignal().Connect( this, &TextSelectionPopup::OnCutButtonPressed ); + break; + } + case Toolkit::TextSelectionPopup::COPY: + { + option.ClickedSignal().Connect( this, &TextSelectionPopup::OnCopyButtonPressed ); + break; + } + case Toolkit::TextSelectionPopup::PASTE: + { + option.ClickedSignal().Connect( this, &TextSelectionPopup::OnPasteButtonPressed ); + break; + } + case Toolkit::TextSelectionPopup::SELECT: + { + option.ClickedSignal().Connect( this, &TextSelectionPopup::OnSelectButtonPressed ); + break; + } + case Toolkit::TextSelectionPopup::SELECT_ALL: + { + option.ClickedSignal().Connect( this, &TextSelectionPopup::OnSelectAllButtonPressed ); + break; + } + case Toolkit::TextSelectionPopup::CLIPBOARD: + { + option.ClickedSignal().Connect( this, &TextSelectionPopup::OnClipboardButtonPressed ); + break; + } + case Toolkit::TextSelectionPopup::NONE: + { + // Nothing to do: + break; + } } - SetBackgroundImage( mBackgroundImage ); - SetBackgroundColor( mBackgroundColor ); - } - - void TextSelectionPopup::AddOption( Actor& parent, const std::string& name, const std::string& caption, const Image iconImage, bool finalOption, bool showIcons ) - { - // 1. Create the backgrounds for the popup option both normal and pressed. - // Both containers will be added to a button. - Actor optionContainer = Actor::New(); - optionContainer.SetRelayoutEnabled( true ); - optionContainer.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - optionContainer.SetDrawMode( DrawMode::OVERLAY ); - optionContainer.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - - ImageActor optionPressedContainer = Toolkit::CreateSolidColorActor( mBackgroundPressedColor ); - optionPressedContainer.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - optionPressedContainer.SetDrawMode( DrawMode::OVERLAY ); - optionPressedContainer.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - - // 2. Add text. - Toolkit::TextLabel captionTextLabel = Toolkit::TextLabel::New(); - captionTextLabel.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - captionTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, caption ); - // optionContainer.Add( captionTextLabel ); Temporary removed. - - Toolkit::TextLabel pressedCaptionTextLabel = Toolkit::TextLabel::New(); - pressedCaptionTextLabel.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - pressedCaptionTextLabel.SetProperty( Toolkit::TextLabel::Property::TEXT, caption ); - // optionPressedContainer.Add( pressedCaptionTextLabel ); Temporary removed. - - // Calculates the icon/text position. - float iconTextOffsetY = 0.0f; - - if ( showIcons ) + // 2. Set the options contents. + if( showCaption ) { - // 3. Create the icons - ImageActor pressedIcon = ImageActor::New( iconImage ); - ImageActor icon = ImageActor::New( iconImage ); - - optionContainer.Add( icon ); - optionPressedContainer.Add( pressedIcon ); - - iconTextOffsetY = 0.5f * ( ( DEFAULT_POPUP_MAX_SIZE.height - mNinePatchMargins.z - mNinePatchMargins.w ) - ( OPTION_ICON_SIZE.height + OPTION_GAP_ICON_TEXT + OPTION_TEXT_LINE_HEIGHT ) ); - - icon.SetParentOrigin( ParentOrigin::TOP_CENTER ); - icon.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - icon.SetY( iconTextOffsetY ); - - pressedIcon.SetParentOrigin( ParentOrigin::TOP_CENTER ); - pressedIcon.SetAnchorPoint( AnchorPoint::TOP_CENTER ); - pressedIcon.SetY( iconTextOffsetY ); - - // Layout icon + gap + text - captionTextLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - pressedCaptionTextLabel.SetAnchorPoint( AnchorPoint::BOTTOM_CENTER ); - pressedCaptionTextLabel.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - captionTextLabel.SetParentOrigin( ParentOrigin::BOTTOM_CENTER ); - pressedCaptionTextLabel.SetY( -iconTextOffsetY ); - captionTextLabel.SetY( -iconTextOffsetY ); + // PushButton layout properties. + option.SetProperty( Toolkit::PushButton::Property::LABEL_PADDING, Vector4( 24.0f, 24.0f, 14.0f, 14.0f ) ); + + // Label properties. + Property::Map buttonLabelProperties; + buttonLabelProperties.Insert( "text", button.caption ); + option.SetProperty( Toolkit::Button::Property::LABEL, buttonLabelProperties ); } - else + if( showIcons ) { - // Centre option text - captionTextLabel.SetAnchorPoint( AnchorPoint::CENTER ); - captionTextLabel.SetParentOrigin( ParentOrigin::CENTER ); - pressedCaptionTextLabel.SetAnchorPoint( AnchorPoint::CENTER ); - pressedCaptionTextLabel.SetParentOrigin( ParentOrigin::CENTER ); - } - - // Calculate the size of the text. - Vector3 textSize = captionTextLabel.GetNaturalSize(); - textSize.width = std::min( textSize.width, OPTION_MAX_WIDTH - 2.f * OPTION_MARGIN_WIDTH ); - - // Set the size to the text. Text will be ellipsized if exceeds the max width. - captionTextLabel.SetSize( textSize.GetVectorXY() ); - pressedCaptionTextLabel.SetSize( textSize.GetVectorXY() ); - - // 4. Calculate the size of option. + option.SetProperty( Toolkit::PushButton::Property::ICON_PADDING, Vector4( 10.0f, 10.0f, 10.0f, 10.0f ) ); + option.SetProperty( Toolkit::PushButton::Property::ICON_ALIGNMENT, "TOP" ); - // The width is the max size of the text or the icon plus the margins clamped between the option min and max size. - // The height is the whole popup height minus the ninepatch margins. - const Vector2 optionSize( std::min( OPTION_MAX_WIDTH, std::max( OPTION_MIN_WIDTH, std::max( textSize.width, OPTION_ICON_SIZE.width ) + 2.f * OPTION_MARGIN_WIDTH ) ), - DEFAULT_POPUP_MAX_SIZE.height - mNinePatchMargins.z - mNinePatchMargins.w ); - - optionContainer.SetSize( optionSize ); - optionPressedContainer.SetSize( optionSize ); - - // 5. Create a option. - Toolkit::PushButton option = Toolkit::PushButton::New(); - option.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - option.SetSize( optionSize ); - option.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - option.SetX( mContentSize.width ); - option.SetName( name ); - option.SetAnimationTime( 0.0f ); - //option.ClickedSignal().Connect( this, &TextInputPopup::OnButtonPressed ); - - parent.Add( option ); + // TODO: This is temporarily disabled until the text-selection-popup image API is changed to strings. + //option.SetProperty( Toolkit::PushButton::Property::SELECTED_ICON, button.icon ); + //option.SetProperty( Toolkit::PushButton::Property::UNSELECTED_ICON, button.icon ); + } - // 6. Set the normal option image. - option.SetButtonImage( optionContainer ); + // 3. Set the normal option image (blank / Transparent). + option.SetUnselectedImage( "" ); - // 7. Set the pressed option image - option.SetSelectedImage( optionPressedContainer ); + // 4. Set the pressed option image. + // The image can be blank, the color can be used regardless. + option.SetSelectedImage( mPressedImage ); + option.SetProperty( Toolkit::Button::Property::SELECTED_COLOR, mPressedColor ); + option.SetProperty( Toolkit::Control::Property::STYLE_NAME, TEXT_SELECTION_POPUP_BUTTON_STYLE_NAME ); - // 8. Update the content size. - mContentSize.width += optionSize.width; - mContentSize.height = std::max ( optionSize.height, mContentSize.height ); + // 5 Add option to tool bar + mToolbar.AddOption( option ); - // 9. Add the divider - if( !finalOption ) + // 6. Add the divider + if( showDivider ) { - const Size size( POPUP_DIVIDER_WIDTH, mContentSize.height ); + const Size size( mOptionDividerSize.width, 0.0f ); // Height FILL_TO_PARENT - ImageActor divider = Toolkit::CreateSolidColorActor( Color::WHITE ); - divider.SetResizePolicy( FIXED, ALL_DIMENSIONS ); + ImageActor divider = Toolkit::CreateSolidColorActor( Color::WHITE ); +#ifdef DECORATOR_DEBUG + divider.SetName("Text's popup divider"); +#endif divider.SetSize( size ); - divider.SetParentOrigin( ParentOrigin::TOP_LEFT ); - divider.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - divider.SetPosition( mContentSize.width - POPUP_DIVIDER_WIDTH, 0.0f ); - parent.Add( divider ); + divider.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT ); + divider.SetColor( mDividerColor ); + divider.SetSortModifier( DECORATION_DEPTH_INDEX ); + mToolbar.AddDivider( divider ); } } - void TextSelectionPopup::SetUpPopup( Size& size ) + std::size_t TextSelectionPopup::GetNumberOfEnabledOptions() { - Actor self = Self(); - - // Create Layer and Stencil. - mStencilLayer = Layer::New(); - ImageActor stencil = CreateSolidColorActor( Color::RED ); - stencil.SetDrawMode( DrawMode::STENCIL ); - stencil.SetVisible( true ); - Actor scrollview = Actor::New(); //todo make a scrollview - stencil.SetRelayoutEnabled( true ); - - self.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - self.SetSize( mRequiredPopUpSize ); // control matches stencil size - - mStencilLayer.SetResizePolicy( FIXED, ALL_DIMENSIONS ); - mStencilLayer.SetSize( size ); // matches stencil size - - stencil.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS ); - scrollview.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS ); - mButtons.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS ); - - mStencilLayer.SetAnchorPoint(AnchorPoint::TOP_LEFT); - scrollview.SetAnchorPoint(AnchorPoint::TOP_LEFT); - mButtons.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - - mStencilLayer.SetPosition( mNinePatchMargins.x, mNinePatchMargins.y ); + std::size_t numberOfOptions = 0u; + for( std::vector::const_iterator it = mOrderListOfButtons.begin(), endIt = mOrderListOfButtons.end(); ( it != endIt ); ++it ) + { + const ButtonRequirement& button( *it ); + if( button.enabled ) + { + ++numberOfOptions; + } + } - self.Add( mStencilLayer ); - mStencilLayer.Add( stencil ); - mStencilLayer.Add( scrollview ); - scrollview.Add( mButtons ); + return numberOfOptions; } - void TextSelectionPopup::AddPopupOptions( bool createTail, bool showIcons ) + void TextSelectionPopup::AddPopupOptionsToToolbar( bool showIcons, bool showCaptions ) { - mShowIcons = showIcons; - - mContentSize = Vector2::ZERO; + DALI_LOG_INFO( gLogFilter, Debug::General, "TextSelectionPopup::AddPopupOptionsToToolbar\n" ); - mButtons = Actor::New(); - mButtons.SetRelayoutEnabled( true ); + CreateOrderedListOfPopupOptions(); - // Add the options into the buttons container. + mButtonsChanged = false; + UnparentAndReset( mToolbar); - // 1. Determine how many buttons are active and should be added to container. - std::size_t numberOfOptions = 0u; - for( std::vector::const_iterator it = mOrderListOfButtons.begin(), endIt = mOrderListOfButtons.end(); ( it != endIt ); ++it ) + if( !mToolbar ) { - const ButtonRequirement& button( *it ); - if( button.enabled ) + Actor self = Self(); + mToolbar = Toolkit::TextSelectionToolbar::New(); + if ( mPopupMaxSize != Vector2::ZERO ) // If PopupMaxSize property set then apply to Toolbar. Toolbar currently is not retriving this from json { - ++numberOfOptions; + mToolbar.SetProperty( Toolkit::TextSelectionToolbar::Property::MAX_SIZE, mPopupMaxSize ); } + mToolbar.SetParentOrigin( ParentOrigin::CENTER ); +#ifdef DECORATOR_DEBUG + mToolbar.SetName("TextSelectionToolbar"); +#endif + self.Add( mToolbar ); } - // 2. Iterate list of buttons and add active ones. - std::size_t optionsAdded = 0u; + // Iterate list of buttons and add active ones to Toolbar + std::size_t numberOfOptionsRequired = GetNumberOfEnabledOptions(); + std::size_t numberOfOptionsAdded = 0u; for( std::vector::const_iterator it = mOrderListOfButtons.begin(), endIt = mOrderListOfButtons.end(); ( it != endIt ); ++it ) { const ButtonRequirement& button( *it ); if ( button.enabled ) { - ++optionsAdded; - AddOption( mButtons, button.name, button.caption, button.icon, optionsAdded == numberOfOptions, mShowIcons ); + numberOfOptionsAdded++; + AddOption( button, ( numberOfOptionsAdded < numberOfOptionsRequired ) , showIcons, showCaptions ); } } - - // Calculate the size of the whole popup which may not be all visible. - mRequiredPopUpSize = Size( std::min( mMaxSize.width, mContentSize.width + mNinePatchMargins.x + mNinePatchMargins.y ), DEFAULT_POPUP_MAX_SIZE.height ); - - // Size of the contents within the popup - mVisiblePopUpSize = Size( mRequiredPopUpSize.width - mNinePatchMargins.x - mNinePatchMargins.y, mRequiredPopUpSize.height - mNinePatchMargins.z - mNinePatchMargins.w ); } - void TextSelectionPopup::CreatePopup() - { - if ( !mStencilLayer ) - { - CreateOrderedListOfPopupOptions(); //todo Currently causes all options to be shown - CreateBackground(); - AddPopupOptions( true, true ); - SetUpPopup( mVisiblePopUpSize ); - } - - mStencilLayer.RaiseToTop(); - } - -TextSelectionPopup::TextSelectionPopup() -: Control( ControlBehaviour( CONTROL_BEHAVIOUR_NONE ) ), - mMaxSize ( DEFAULT_POPUP_MAX_SIZE ), - mVisiblePopUpSize( DEFAULT_POPUP_MAX_SIZE ), - mRequiredPopUpSize( DEFAULT_POPUP_MAX_SIZE ), - mBackgroundColor( DEFAULT_POPUP_BACKGROUND ), - mBackgroundPressedColor( DEFAULT_POPUP_BACKGROUND_PRESSED ), - mLineColor( DEFAULT_POPUP_LINE_COLOR ), - mIconColor( DEFAULT_OPTION_ICON ), - mIconPressedColor( DEFAULT_OPTION_ICON_PRESSED ), - mTextColor( DEFAULT_OPTION_TEXT ), - mTextPressedColor( DEFAULT_OPTION_TEXT_PRESSED ), +TextSelectionPopup::TextSelectionPopup( TextSelectionPopupCallbackInterface* callbackInterface ) +: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), + mToolbar(), + mPopupMaxSize(), + mOptionMaxSize(), + mOptionMinSize(), + mOptionDividerSize(), + mEnabledButtons( Toolkit::TextSelectionPopup::NONE ), + mCallbackInterface( callbackInterface ), + mPressedColor( DEFAULT_OPTION_PRESSED_COLOR ), + mDividerColor( Color::WHITE ), + mIconColor( Color::WHITE ), mSelectOptionPriority( 1 ), mSelectAllOptionPriority ( 2 ), - mCutOptionPriority ( 3 ), - mCopyOptionPriority ( 4 ), + mCutOptionPriority ( 4 ), + mCopyOptionPriority ( 3 ), mPasteOptionPriority ( 5 ), mClipboardOptionPriority( 6 ), - mShowIcons( true ) + mFadeInDuration(0.0f), + mFadeOutDuration(0.0f), + mShowIcons( false ), + mShowCaptions( true ), + mPopupShowing( false ), + mButtonsChanged( false ) { } @@ -673,3 +838,5 @@ TextSelectionPopup::~TextSelectionPopup() } // namespace Toolkit } // namespace Dali + +