Text selection refactoring
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / text-controller-impl.cpp
old mode 100755 (executable)
new mode 100644 (file)
index dd59fc8..9144ae3
@@ -1601,17 +1601,16 @@ void Controller::Impl::OnPanEvent( const Event& event )
     return;
   }
 
-  const int state = event.p1.mInt;
-
+  const GestureState state = static_cast<GestureState>( event.p1.mInt );
   switch( state )
   {
-    case Gesture::Started:
+    case GestureState::STARTED:
     {
       // Will remove the cursor, handles or text's popup, ...
       ChangeState( EventData::TEXT_PANNING );
       break;
     }
-    case Gesture::Continuing:
+    case GestureState::CONTINUING:
     {
       const Vector2& layoutSize = mModel->mVisualModel->GetLayoutSize();
       const Vector2 currentScroll = mModel->mScrollPosition;
@@ -1635,8 +1634,8 @@ void Controller::Impl::OnPanEvent( const Event& event )
       mEventData->mDecorator->UpdatePositions( mModel->mScrollPosition - currentScroll );
       break;
     }
-    case Gesture::Finished:
-    case Gesture::Cancelled: // FALLTHROUGH
+    case GestureState::FINISHED:
+    case GestureState::CANCELLED: // FALLTHROUGH
     {
       // Will go back to the previous state to show the cursor, handles, the text's popup, ...
       ChangeState( mEventData->mPreviousState );
@@ -2041,6 +2040,54 @@ void Controller::Impl::OnSelectNoneEvent()
   }
 }
 
+void Controller::Impl::SetTextSelectionRange(const uint32_t *pStart, const uint32_t *pEnd)
+{
+  if( nullptr == mEventData )
+  {
+    // Nothing to do if there is no text.
+    return;
+  }
+
+  if( mEventData->mSelectionEnabled && (pStart || pEnd))
+  {
+    uint32_t length = static_cast<uint32_t>(mModel->mLogicalModel->mText.Count());
+
+    if (pStart)
+    {
+      mEventData->mLeftSelectionPosition = std::min(*pStart, length);
+    }
+    if (pEnd)
+    {
+      mEventData->mRightSelectionPosition = std::min(*pEnd, length);
+    }
+
+    if (mEventData->mLeftSelectionPosition == mEventData->mRightSelectionPosition)
+    {
+      ChangeState( EventData::EDITING );
+      mEventData->mPrimaryCursorPosition = mEventData->mLeftSelectionPosition = mEventData->mRightSelectionPosition;
+      mEventData->mUpdateCursorPosition = true;
+    }
+    else
+    {
+      ChangeState( EventData::SELECTING );
+      mEventData->mUpdateHighlightBox = true;
+    }
+  }
+}
+
+Uint32Pair Controller::Impl::GetTextSelectionRange() const
+{
+  Uint32Pair range;
+
+  if( mEventData )
+  {
+    range.first = mEventData->mLeftSelectionPosition;
+    range.second = mEventData->mRightSelectionPosition;
+  }
+
+  return range;
+}
+
 void Controller::Impl::RetrieveSelection( std::string& selectedText, bool deleteAfterRetrieval )
 {
   if( mEventData->mLeftSelectionPosition == mEventData->mRightSelectionPosition )