#include <dali-toolkit/internal/controls/text-controls/text-selection-toolbar-impl.h>
// INTERNAL INCLUDES
+#include <dali-toolkit/public-api/controls/control-depth-index-ranges.h>
#include <dali-toolkit/public-api/controls/default-controls/solid-color-actor.h>
// EXTERNAL INCLUDES
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()
impl.SetPopupMaxSize( value.Get< Vector2 >() );
break;
}
-
+ case Toolkit::TextSelectionToolbar::Property::ENABLE_OVERSHOOT:
+ {
+ impl.mScrollView.SetOvershootEnabled( value.Get< bool >() );
+ break;
+ }
} // switch
} // TextSelectionToolbar
}
value = impl.GetPopupMaxSize();
break;
}
+ case Toolkit::TextSelectionToolbar::Property::ENABLE_OVERSHOOT:
+ {
+ value = impl.mScrollView.IsOvershootEnabled();
+ break;
+ }
} // switch
}
return value;
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
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()
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 );
stencil.SetDrawMode( DrawMode::STENCIL );
stencil.SetParentOrigin( ParentOrigin::CENTER );
mScrollView = Toolkit::ScrollView::New();
- SetUpScrollView( mScrollView );
+ SetUpScrollView();
// Toolbar must start with at least one option, adding further options with increase it's size
mTableOfButtons = Dali::Toolkit::TableView::New( 1, 1 );
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 )
void TextSelectionToolbar::AddDivider( Actor& divider )
{
AddOption( divider );
- mDividerIndexes.PushBack( mIndexInTable );
+ mDividerIndexes.PushBack( mIndexInTable - 1u );
}
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()
{
mRulerX.Reset();
}
-
} // namespace Internal
} // namespace Toolkit