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-toolbar-impl.cpp;h=b87dab268fcaa2596cbf3cbec6df7a9c98e7cb57;hp=cb1e205a8da9bd6704e4723a3d72eeb621ac1370;hb=3d485e1b28628f0c6e1c5489c2dc31a65ac7ec52;hpb=4d0611f4911028b53905712013e1034d42531e5f diff --git a/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp index cb1e205..b87dab2 100644 --- a/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.cpp @@ -18,15 +18,17 @@ // CLASS HEADER #include -// INTERNAL INCLUDES -#include - // EXTERNAL INCLUDES -#include +#include +#include #include #include -#include -#include +#include +#include + +// INTERNAL INCLUDES +#include +#include namespace Dali { @@ -39,7 +41,6 @@ namespace Internal namespace { -const Dali::Vector2 DEFAULT_MAX_SIZE( 400.0f, 65.0f ); ///< The maximum size of the Toolbar. BaseHandle Create() { @@ -50,7 +51,9 @@ BaseHandle Create() DALI_TYPE_REGISTRATION_BEGIN( Toolkit::TextSelectionToolbar, Toolkit::Control, Create ); -DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionToolbar, "max-size", VECTOR2, MAX_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionToolbar, "maxSize", VECTOR2, MAX_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionToolbar, "enableOvershoot", BOOLEAN, ENABLE_OVERSHOOT ) +DALI_PROPERTY_REGISTRATION( Toolkit, TextSelectionToolbar, "scrollView", MAP, SCROLL_VIEW ) DALI_TYPE_REGISTRATION_END() @@ -86,7 +89,25 @@ void TextSelectionToolbar::SetProperty( BaseObject* object, Property::Index inde impl.SetPopupMaxSize( value.Get< Vector2 >() ); break; } - + case Toolkit::TextSelectionToolbar::Property::ENABLE_OVERSHOOT: + { + if( !impl.mScrollView ) + { + impl.mScrollView = Toolkit::ScrollView::New(); + } + impl.mScrollView.SetOvershootEnabled( value.Get< bool >() ); + break; + } + case Toolkit::TextSelectionToolbar::Property::SCROLL_VIEW: + { + // Get a Property::Map from the property if possible. + Property::Map setPropertyMap; + if( value.Get( setPropertyMap ) ) + { + impl.ConfigureScrollview( setPropertyMap ); + } + break; + } } // switch } // TextSelectionToolbar } @@ -108,6 +129,11 @@ Property::Value TextSelectionToolbar::GetProperty( BaseObject* object, Property: value = impl.GetPopupMaxSize(); break; } + case Toolkit::TextSelectionToolbar::Property::ENABLE_OVERSHOOT: + { + value = impl.mScrollView.IsOvershootEnabled(); + break; + } } // switch } return value; @@ -125,9 +151,23 @@ void TextSelectionToolbar::OnRelayout( const Vector2& size, RelayoutContainer& c mScrollView.SetRulerX( mRulerX ); } +void TextSelectionToolbar::OnStageConnection( int depth ) +{ + // Call the Control::OnStageConnection() to set the depth of the background. + Control::OnStageConnection( depth ); + + // Texts are controls, they have their own OnStageConnection() implementation. + // Icons are inside a TableView. It has it's own OnStageConnection() implementation. +} + void TextSelectionToolbar::SetPopupMaxSize( const Size& maxSize ) { mMaxSize = maxSize; + if (mScrollView && mStencilLayer ) + { + mScrollView.SetMaximumSize( mMaxSize ); + mStencilLayer.SetMaximumSize( mMaxSize ); + } } const Dali::Vector2& TextSelectionToolbar::GetPopupMaxSize() const @@ -135,23 +175,24 @@ const Dali::Vector2& TextSelectionToolbar::GetPopupMaxSize() const return mMaxSize; } -void TextSelectionToolbar::SetUpScrollView( Toolkit::ScrollView& scrollView ) +void TextSelectionToolbar::SetUpScrollView() { - scrollView.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); - scrollView.SetParentOrigin( ParentOrigin::CENTER_LEFT ); - scrollView.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - scrollView.SetMaximumSize( mMaxSize ); + mScrollView.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + mScrollView.SetParentOrigin( ParentOrigin::CENTER_LEFT ); + mScrollView.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - scrollView.SetScrollingDirection( PanGestureDetector::DIRECTION_HORIZONTAL, Degree( 40.0f ) ); - scrollView.SetAxisAutoLock( true ); - scrollView.ScrollStartedSignal().Connect( this, &TextSelectionToolbar::OnScrollStarted ); - scrollView.ScrollCompletedSignal().Connect( this, &TextSelectionToolbar::OnScrollCompleted ); + mScrollView.SetScrollingDirection( PanGestureDetector::DIRECTION_HORIZONTAL, Degree( 40.0f ) ); + mScrollView.SetAxisAutoLock( true ); + mScrollView.ScrollStartedSignal().Connect( this, &TextSelectionToolbar::OnScrollStarted ); + mScrollView.ScrollCompletedSignal().Connect( this, &TextSelectionToolbar::OnScrollCompleted ); mRulerX = new DefaultRuler(); // IntrusivePtr which is unreferenced when ScrollView is destroyed. RulerPtr rulerY = new DefaultRuler(); // IntrusivePtr which is unreferenced when ScrollView is destroyed. rulerY->Disable(); - scrollView.SetRulerY( rulerY ); + mScrollView.SetRulerY( rulerY ); + + mScrollView.SetOvershootEnabled( true ); } void TextSelectionToolbar::SetUp() @@ -160,19 +201,22 @@ void TextSelectionToolbar::SetUp() self.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); // Create Layer and Stencil. Layer enable's clipping when content exceed maximum defined width. - Layer stencilLayer = Layer::New(); - stencilLayer.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); - stencilLayer.SetParentOrigin( ParentOrigin::CENTER ); - stencilLayer.SetMaximumSize( mMaxSize ); + mStencilLayer = Layer::New(); + mStencilLayer.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + mStencilLayer.SetParentOrigin( ParentOrigin::CENTER ); - ImageActor stencil = CreateSolidColorActor( Color::RED ); + BufferImage stencilImage = BufferImage::WHITE(); // ImageView needs an Image or does nothing + Toolkit::ImageView stencil = Toolkit::ImageView::New(stencilImage); stencil.SetDrawMode( DrawMode::STENCIL ); stencil.SetVisible( true ); stencil.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); stencil.SetParentOrigin( ParentOrigin::CENTER ); - mScrollView = Toolkit::ScrollView::New(); - SetUpScrollView( mScrollView ); + if ( !mScrollView ) + { + mScrollView = Toolkit::ScrollView::New(); + } + SetUpScrollView(); // Toolbar must start with at least one option, adding further options with increase it's size mTableOfButtons = Dali::Toolkit::TableView::New( 1, 1 ); @@ -180,13 +224,10 @@ void TextSelectionToolbar::SetUp() mTableOfButtons.SetParentOrigin( ParentOrigin::CENTER_LEFT ); mTableOfButtons.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - - stencilLayer.Add( stencil ); - stencilLayer.Add( mScrollView ); + mStencilLayer.Add( stencil ); + mStencilLayer.Add( mScrollView ); mScrollView.Add( mTableOfButtons ); - self.Add( stencilLayer ); - - stencilLayer.RaiseToTop(); + self.Add( mStencilLayer ); } void TextSelectionToolbar::OnScrollStarted( const Vector2& position ) @@ -209,7 +250,7 @@ void TextSelectionToolbar::AddOption( Actor& option ) void TextSelectionToolbar::AddDivider( Actor& divider ) { AddOption( divider ); - mDividerIndexes.PushBack( mIndexInTable ); + mDividerIndexes.PushBack( mIndexInTable - 1u ); } void TextSelectionToolbar::ResizeDividers( Size& size ) @@ -222,9 +263,35 @@ void TextSelectionToolbar::ResizeDividers( Size& size ) RelayoutRequest(); } +void TextSelectionToolbar::RaiseAbove( Layer target ) +{ + mStencilLayer.RaiseAbove( target ); +} + +void TextSelectionToolbar::ConfigureScrollview( const Property::Map& properties ) +{ + // Set any properties specified for the label by iterating through all property key-value pairs. + for( unsigned int i = 0, mapCount = properties.Count(); i < mapCount; ++i ) + { + const StringValuePair& propertyPair( properties.GetPair( i ) ); + + // Convert the property string to a property index. + Property::Index setPropertyIndex = mScrollView.GetPropertyIndex( propertyPair.first ); + if( setPropertyIndex != Property::INVALID_INDEX ) + { + // If the conversion worked, we have a valid property index, + // Set the property to the new value. + mScrollView.SetProperty( setPropertyIndex, propertyPair.second ); + } + } + + RelayoutRequest(); +} + + TextSelectionToolbar::TextSelectionToolbar() -: Control( ControlBehaviour( ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ) ), - mMaxSize ( DEFAULT_MAX_SIZE ), +: Control( ControlBehaviour( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ) ), + mMaxSize (), mIndexInTable( 0 ), mDividerIndexes() { @@ -235,7 +302,6 @@ TextSelectionToolbar::~TextSelectionToolbar() mRulerX.Reset(); } - } // namespace Internal } // namespace Toolkit