mController->EnableTextInput( mDecorator );
// Forward input events to controller
- EnableGestureDetection(Gesture::Tap);
+ EnableGestureDetection( static_cast<Gesture::Type>( Gesture::Tap | Gesture::Pan |Gesture::LongPress ) );
GetTapGestureDetector().SetMaximumTapsRequired( 2 );
- EnableGestureDetection(Gesture::Pan);
self.TouchedSignal().Connect( this, &TextField::OnTouched );
mController->PanEvent( gesture.state, gesture.displacement );
}
+void TextField::OnLongPress( const LongPressGesture& gesture )
+{
+ mController->LongPressEvent( gesture.state, gesture.localPoint.x, gesture.localPoint.y );
+}
+
bool TextField::OnKeyEvent( const KeyEvent& event )
{
DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField::OnKeyEvent %p keyCode %d\n", mController.Get(), event.keyCode );
virtual void OnPan( const PanGesture& gesture );
/**
+ * @copydoc Control::OnLongPress()
+ */
+ virtual void OnLongPress( const LongPressGesture& gesture );
+
+ /**
* @copydoc Control::OnStageConnection()
*/
virtual void OnStageConnection( unsigned int depth );
OnTapEvent( *iter );
break;
}
+ case Event::LONG_PRESS_EVENT:
+ {
+ OnLongPressEvent( *iter );
+ break;
+ }
case Event::PAN_EVENT:
{
OnPanEvent( *iter );
}
}
+void Controller::Impl::OnLongPressEvent( const Event& event )
+{
+ if ( EventData::EDITING == mEventData->mState )
+ {
+ ChangeState ( EventData::EDITING_WITH_POPUP );
+ mEventData->mDecoratorUpdated = true;
+ }
+}
+
void Controller::Impl::OnHandleEvent( const Event& event )
{
if( NULL == mEventData )
}
else if ( EventData::EDITING_WITH_POPUP == mEventData->mState )
{
- buttonsToShow = TextSelectionPopup::Buttons( TextSelectionPopup::SELECT | TextSelectionPopup::SELECT_ALL );
+ if ( mLogicalModel->mText.Count() && !IsShowingPlaceholderText())
+ {
+ buttonsToShow = TextSelectionPopup::Buttons( TextSelectionPopup::SELECT | TextSelectionPopup::SELECT_ALL );
+ }
if ( !IsClipboardEmpty() )
{
CURSOR_KEY_EVENT,
TAP_EVENT,
PAN_EVENT,
+ LONG_PRESS_EVENT,
GRAB_HANDLE_EVENT,
LEFT_SELECTION_HANDLE_EVENT,
RIGHT_SELECTION_HANDLE_EVENT,
void OnPanEvent( const Event& event );
+ void OnLongPressEvent( const Event& event );
+
void OnHandleEvent( const Event& event );
void OnSelectEvent( const Event& event );
}
}
+void Controller::LongPressEvent( Gesture::State state, float x, float y )
+{
+ DALI_ASSERT_DEBUG( mImpl->mEventData && "Unexpected PanEvent" );
+
+ if ( mImpl->IsShowingPlaceholderText() || mImpl->mLogicalModel->mText.Count() == 0u )
+ {
+ if ( mImpl->mEventData )
+ {
+ Event event( Event::LONG_PRESS_EVENT );
+ event.p1.mInt = state;
+ mImpl->mEventData->mEventQueue.push_back( event );
+ mImpl->RequestRelayout();
+ }
+ }
+ else if( mImpl->mEventData )
+ {
+ SelectEvent( x, y, false );
+ }
+}
+
void Controller::SelectEvent( float x, float y, bool selectAll )
{
if( mImpl->mEventData )
void PanEvent( Gesture::State state, const Vector2& displacement );
/**
+ * @brief Called by editable UI controls when a long press gesture occurs.
+ *
+ * @param[in] state The state of the gesture.
+ * @param[in] x The x position relative to the top-left of the parent control.
+ * @param[in] y The y position relative to the top-left of the parent control.
+ */
+ void LongPressEvent( Gesture::State state, float x, float y );
+
+ /**
* @brief Creates a selection event.
*
* It could be called from the TapEvent (double tap) or when the text selection popup's sellect all button is pressed.