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=e26614d15158747d6f9e0fec429fe464e6b5c3fa;hp=4b25f773f8c1f488f6f99c589a0e207f781fe040;hb=172678a60aceeb2a60e5d4e5a3c613f8f3c492a9;hpb=f348038a5e190e62e11c027ecfe45ee909619997 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 4b25f77..e26614d 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 @@ -19,6 +19,7 @@ #include // INTERNAL INCLUDES +#include #include // EXTERNAL INCLUDES @@ -26,8 +27,6 @@ #include #include #include -#include -#include #include namespace Dali @@ -43,8 +42,6 @@ namespace { const Dali::Vector2 DEFAULT_MAX_SIZE( 400.0f, 65.0f ); ///< The maximum size of the Toolbar. -} // namespace - BaseHandle Create() { return Toolkit::TextSelectionToolbar::New(); @@ -55,9 +52,12 @@ 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, "enable-overshoot", BOOLEAN, ENABLE_OVERSHOOT ) DALI_TYPE_REGISTRATION_END() +} // namespace + Dali::Toolkit::TextSelectionToolbar TextSelectionToolbar::New() { // Create the implementation, temporarily owned by this handle on stack @@ -88,7 +88,11 @@ void TextSelectionToolbar::SetProperty( BaseObject* object, Property::Index inde impl.SetPopupMaxSize( value.Get< Vector2 >() ); break; } - + case Toolkit::TextSelectionToolbar::Property::ENABLE_OVERSHOOT: + { + impl.mScrollView.SetOvershootEnabled( value.Get< bool >() ); + break; + } } // switch } // TextSelectionToolbar } @@ -110,6 +114,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; @@ -120,9 +129,46 @@ void TextSelectionToolbar::OnInitialize() SetUp(); } +void TextSelectionToolbar::OnRelayout( const Vector2& size, RelayoutContainer& container ) +{ + float width = std::max ( mTableOfButtons.GetNaturalSize().width, size.width ); + mRulerX->SetDomain( RulerDomain( 0.0, width, true ) ); + mScrollView.SetRulerX( mRulerX ); +} + +void TextSelectionToolbar::OnStageConnection( int depth ) +{ + // Call the Control::OnStageConnection() to set the depth of the background. + Control::OnStageConnection( depth ); + + // Traverse the dividers and set the depth. + for( unsigned int i = 0; i < mDividerIndexes.Count(); ++i ) + { + Actor divider = mTableOfButtons.GetChildAt( Toolkit::TableView::CellPosition( 0, mDividerIndexes[ i ] ) ); + + ImageActor dividerImageActor = ImageActor::DownCast( divider ); + if( dividerImageActor ) + { + dividerImageActor.SetSortModifier( DECORATION_DEPTH_INDEX + depth ); + } + else + { + // TODO at the moment divider are image actors. + } + } + + // 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 @@ -130,16 +176,35 @@ const Dali::Vector2& TextSelectionToolbar::GetPopupMaxSize() const return mMaxSize; } +void TextSelectionToolbar::SetUpScrollView() +{ + mScrollView.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); + mScrollView.SetParentOrigin( ParentOrigin::CENTER_LEFT ); + mScrollView.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); + + 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(); + mScrollView.SetRulerY( rulerY ); + + mScrollView.SetOvershootEnabled( true ); +} + void TextSelectionToolbar::SetUp() { Actor self = Self(); self.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); - // Create Layer and Stencil. + // Create Layer and Stencil. Layer enable's clipping when content exceed maximum defined width. mStencilLayer = Layer::New(); mStencilLayer.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); mStencilLayer.SetParentOrigin( ParentOrigin::CENTER ); - mStencilLayer.SetMaximumSize( mMaxSize ); ImageActor stencil = CreateSolidColorActor( Color::RED ); stencil.SetDrawMode( DrawMode::STENCIL ); @@ -147,21 +212,30 @@ void TextSelectionToolbar::SetUp() stencil.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); stencil.SetParentOrigin( ParentOrigin::CENTER ); - Actor scrollview = Actor::New(); //todo make a scrollview - scrollview.SetResizePolicy( ResizePolicy::FIT_TO_CHILDREN, Dimension::ALL_DIMENSIONS ); - scrollview.SetParentOrigin( ParentOrigin::CENTER ); + mScrollView = Toolkit::ScrollView::New(); + SetUpScrollView(); - // Toolbar needs at least one option, adding further options with increase it's size + // Toolbar must start with at least one option, adding further options with increase it's size mTableOfButtons = Dali::Toolkit::TableView::New( 1, 1 ); mTableOfButtons.SetFitHeight( 0 ); - mTableOfButtons.SetParentOrigin( ParentOrigin::CENTER ); + mTableOfButtons.SetParentOrigin( ParentOrigin::CENTER_LEFT ); + mTableOfButtons.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); + mStencilLayer.Add( stencil ); - mStencilLayer.Add( scrollview ); - scrollview.Add( mTableOfButtons ); + mStencilLayer.Add( mScrollView ); + mScrollView.Add( mTableOfButtons ); self.Add( mStencilLayer ); +} - mStencilLayer.RaiseToTop(); +void TextSelectionToolbar::OnScrollStarted( const Vector2& position ) +{ + mTableOfButtons.SetSensitive( false ); +} + +void TextSelectionToolbar::OnScrollCompleted( const Vector2& position ) +{ + mTableOfButtons.SetSensitive( true ); } void TextSelectionToolbar::AddOption( Actor& option ) @@ -174,7 +248,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 ) @@ -187,9 +261,14 @@ void TextSelectionToolbar::ResizeDividers( Size& size ) RelayoutRequest(); } +void TextSelectionToolbar::RaiseAbove( Layer target ) +{ + mStencilLayer.RaiseAbove( target ); +} + TextSelectionToolbar::TextSelectionToolbar() -: Control( ControlBehaviour( ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ) ), - mMaxSize ( DEFAULT_MAX_SIZE ), +: Control( ControlBehaviour( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ) ), + mMaxSize (), mIndexInTable( 0 ), mDividerIndexes() { @@ -197,9 +276,9 @@ TextSelectionToolbar::TextSelectionToolbar() TextSelectionToolbar::~TextSelectionToolbar() { + mRulerX.Reset(); } - } // namespace Internal } // namespace Toolkit