X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-selection-popup-impl.cpp;h=199c8ef0b1f98f200c3a98700cc01a69f873b474;hb=5419ef62a5e3ee36785444083e914804268ea488;hp=ee0d95013678bdee91cca8063581cf54d093854c;hpb=ccb1140dd671a9ed76a62177285c4119182478d2;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git 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 ee0d950..199c8ef 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,6 +19,8 @@ #include // INTERNAL INCLUDES +#include +#include #include #include @@ -45,9 +47,9 @@ namespace // todo Move this to adaptor?? #define GET_LOCALE_TEXT(string) dgettext("elementary", string) -const Dali::Vector4 DEFAULT_POPUP_LINE_COLOR( Dali::Vector4( 0.69f, 0.93f, 0.93f, 1.0f ) ); +const Dali::Vector4 DEFAULT_POPUP_DIVIDER_COLOR( Dali::Vector4( 0.23f, 0.72f, 0.8f, 0.11f ) ); 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( 0.12f, 0.56f, 1.0f, 1.0f ) ); +const Dali::Vector4 DEFAULT_OPTION_PRESSED_COLOR( Dali::Vector4( 0.24f, 0.72f, 0.8f, 0.11f ) ); const std::string DEFAULT_POPUP_BACKGROUND_IMAGE( DALI_IMAGE_DIR "selection-popup-bg#.png" ); const std::string OPTION_ICON_CLIPBOARD( DALI_IMAGE_DIR "copy_paste_icon_clipboard.png" ); @@ -88,7 +90,7 @@ const char* const OPTION_CLIPBOARD("option-clipboard"); BaseHandle Create() { - return Toolkit::TextSelectionPopup::New( Toolkit::TextSelectionPopup::NONE ); + return Toolkit::TextSelectionPopup::New( Toolkit::TextSelectionPopup::NONE, NULL ); } // Setup properties, signals and actions using the type-registry. @@ -112,10 +114,11 @@ DALI_TYPE_REGISTRATION_END() } // namespace -Dali::Toolkit::TextSelectionPopup TextSelectionPopup::New( Toolkit::TextSelectionPopup::Buttons buttonsToEnable ) +Dali::Toolkit::TextSelectionPopup TextSelectionPopup::New( Toolkit::TextSelectionPopup::Buttons buttonsToEnable, + TextSelectionPopupCallbackInterface* callbackInterface ) { // Create the implementation, temporarily owned by this handle on stack - IntrusivePtr< TextSelectionPopup > impl = new TextSelectionPopup(); + IntrusivePtr< TextSelectionPopup > impl = new TextSelectionPopup( callbackInterface ); // Pass ownership to CustomActor handle Dali::Toolkit::TextSelectionPopup handle( *impl ); @@ -128,6 +131,7 @@ Dali::Toolkit::TextSelectionPopup TextSelectionPopup::New( Toolkit::TextSelectio return handle; } + void TextSelectionPopup::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ) { Toolkit::TextSelectionPopup selectionPopup = Toolkit::TextSelectionPopup::DownCast( Dali::BaseHandle( object ) ); @@ -294,13 +298,84 @@ Property::Value TextSelectionPopup::GetProperty( BaseObject* object, Property::I return value; } +void TextSelectionPopup::RaiseAbove( Layer target ) +{ + if( mToolbar ) + { + mToolbar.RaiseAbove( target ); + } +} + void TextSelectionPopup::OnInitialize() { CreatePopup(); } -bool TextSelectionPopup::OnButtonPressed( Toolkit::Button button ) +void TextSelectionPopup::OnStageConnection( int depth ) +{ + // 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. +} + +bool TextSelectionPopup::OnCutButtonPressed( Toolkit::Button button ) +{ + if( mCallbackInterface ) + { + mCallbackInterface->TextPopupButtonTouched( Toolkit::TextSelectionPopup::CUT ); + } + + return true; +} + +bool TextSelectionPopup::OnCopyButtonPressed( Toolkit::Button button ) +{ + 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; } @@ -467,6 +542,7 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But void TextSelectionPopup::CreateOrderedListOfPopupOptions() { mOrderListOfButtons.clear(); + mOrderListOfButtons.reserve( 8u ); // Create button for each possible option using Option priority if ( !mCutIconImage ) @@ -507,18 +583,20 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But std::sort( mOrderListOfButtons.begin(), mOrderListOfButtons.end(), TextSelectionPopup::ButtonPriorityCompare() ); } - void TextSelectionPopup::AddOption( const std::string& name, const std::string& caption, const Image iconImage, bool showDivider, bool showIcons, bool showCaption ) + void TextSelectionPopup::AddOption( const ButtonRequirement& button, bool showDivider, bool showIcons, bool showCaption ) { + const std::string& name = button.name; + const std::string& caption = button.caption; + Image iconImage = button.icon; + // 1. Create the backgrounds for the popup option both normal and pressed. // Both containers will be added to a button. Toolkit::TableView optionContainer = Toolkit::TableView::New( (showIcons&showCaption)?2:1 , 1 ); - optionContainer.SetDrawMode( DrawMode::OVERLAY ); optionContainer.SetFitHeight( 0 ); optionContainer.SetFitWidth( 0 ); Toolkit::TableView optionPressedContainer = Toolkit::TableView::New( (showIcons&showCaption)?2:1 , 1 ); - optionPressedContainer.SetDrawMode( DrawMode::OVERLAY ); optionPressedContainer.SetFitHeight( 0 ); optionPressedContainer.SetFitWidth( 0 ); optionPressedContainer.SetBackgroundColor( mPressedColor ); @@ -551,11 +629,14 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But optionPressedContainer.AddChild( pressedCaptionTextLabel, Toolkit::TableView::CellPosition(( showIcons&showCaption)?1:0, 0 ) ); } + int depth = Self().GetHierarchyDepth(); // 3. Create the icons if ( showIcons ) { ImageActor pressedIcon = ImageActor::New( iconImage ); ImageActor icon = ImageActor::New( iconImage ); + icon.SetSortModifier( DECORATION_DEPTH_INDEX + depth - 1 ); + pressedIcon.SetSortModifier( DECORATION_DEPTH_INDEX + depth - 1 ); icon.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); pressedIcon.SetResizePolicy( ResizePolicy::USE_NATURAL_SIZE, Dimension::ALL_DIMENSIONS ); @@ -581,7 +662,45 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But option.SetName( name ); option.SetAnimationTime( 0.0f ); option.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); - option.ClickedSignal().Connect( this, &TextSelectionPopup::OnButtonPressed ); + + switch( button.id ) + { + 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; + } + } // 5. Set the normal option image. option.SetButtonImage( optionContainer ); @@ -598,9 +717,13 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But const Size size( mOptionDividerSize.width, 0.0f ); // Height FILL_TO_PARENT ImageActor divider = Toolkit::CreateSolidColorActor( Color::WHITE ); +#ifdef DECORATOR_DEBUG + divider.SetName("Text's popup divider"); +#endif divider.SetSize( size ); divider.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT ); - divider.SetColor( mLineColor ); + divider.SetColor( mDividerColor ); + divider.SetSortModifier( DECORATION_DEPTH_INDEX + depth ); mToolbar.AddDivider( divider ); } } @@ -631,7 +754,7 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But if ( button.enabled ) { numberOfOptionsAdded++; - AddOption( button.name, button.caption, button.icon, ( numberOfOptionsAdded < numberOfOptionsRequired ) , showIcons, showCaptions ); + AddOption( button, ( numberOfOptionsAdded < numberOfOptionsRequired ) , showIcons, showCaptions ); } } } @@ -643,7 +766,7 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But self.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); SetBackgroundImage( NinePatchImage::New( DEFAULT_POPUP_BACKGROUND_IMAGE ) ); - if ( !mToolbar ) + if( !mToolbar ) { mToolbar = Toolkit::TextSelectionToolbar::New(); mToolbar.SetParentOrigin( ParentOrigin::CENTER ); @@ -653,20 +776,21 @@ Dali::Image TextSelectionPopup::GetButtonImage( Toolkit::TextSelectionPopup::But } } -TextSelectionPopup::TextSelectionPopup() +TextSelectionPopup::TextSelectionPopup( TextSelectionPopupCallbackInterface* callbackInterface ) : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), mToolbar(), mMaxSize(), mMinSize(), mOptionDividerSize( Size( 2.0f, 0.0f) ), mEnabledButtons( Toolkit::TextSelectionPopup::NONE ), - mLineColor( DEFAULT_POPUP_LINE_COLOR ), + mCallbackInterface( callbackInterface ), + mDividerColor( DEFAULT_POPUP_DIVIDER_COLOR ), mIconColor( DEFAULT_OPTION_ICON ), - mPressedColor( DEFAULT_OPTION_ICON_PRESSED ), + mPressedColor( DEFAULT_OPTION_PRESSED_COLOR ), mSelectOptionPriority( 1 ), mSelectAllOptionPriority ( 2 ), - mCutOptionPriority ( 3 ), - mCopyOptionPriority ( 4 ), + mCutOptionPriority ( 4 ), + mCopyOptionPriority ( 3 ), mPasteOptionPriority ( 5 ), mClipboardOptionPriority( 6 ), mShowIcons( false ),