Replace Selection when text is entered 42/42142/8
authorAgnelo Vaz <agnelo.vaz@samsung.com>
Tue, 23 Jun 2015 14:18:12 +0000 (15:18 +0100)
committerPaul Wisbey <p.wisbey@samsung.com>
Wed, 24 Jun 2015 15:45:53 +0000 (08:45 -0700)
Change-Id: Iddf2076234919504e7304b18328c268401cb9115
Signed-off-by: Agnelo Vaz <agnelo.vaz@samsung.com>
dali-toolkit/internal/text/text-controller-impl.cpp
dali-toolkit/internal/text/text-controller-impl.h
dali-toolkit/internal/text/text-controller.cpp
dali-toolkit/internal/text/text-controller.h

index 982b8d1..7a51b86 100644 (file)
@@ -787,7 +787,7 @@ void Controller::Impl::OnSelectAllEvent()
   }
 }
 
   }
 }
 
-void Controller::Impl::RetreiveSelection( std::string& selectedText, bool deleteAfterRetreival )
+void Controller::Impl::RetrieveSelection( std::string& selectedText, bool deleteAfterRetreival )
 {
   if( mEventData->mLeftSelectionPosition ==  mEventData->mRightSelectionPosition )
   {
 {
   if( mEventData->mLeftSelectionPosition ==  mEventData->mRightSelectionPosition )
   {
@@ -832,7 +832,7 @@ bool Controller::Impl::CopyStringToClipboard( std::string& source )
 void Controller::Impl::SendSelectionToClipboard( bool deleteAfterSending )
 {
   std::string selectedText;
 void Controller::Impl::SendSelectionToClipboard( bool deleteAfterSending )
 {
   std::string selectedText;
-  RetreiveSelection( selectedText, deleteAfterSending );
+  RetrieveSelection( selectedText, deleteAfterSending );
   CopyStringToClipboard( selectedText );
   ChangeState( EventData::EDITING );
 }
   CopyStringToClipboard( selectedText );
   ChangeState( EventData::EDITING );
 }
index 8e84d3c..880004a 100644 (file)
@@ -339,7 +339,7 @@ struct Controller::Impl
 
   void OnSelectAllEvent();
 
 
   void OnSelectAllEvent();
 
-  void RetreiveSelection( std::string& selectedText, bool deleteAfterRetreival );
+  void RetrieveSelection( std::string& selectedText, bool deleteAfterRetreival );
 
   bool CopyStringToClipboard( std::string& source );
 
 
   bool CopyStringToClipboard( std::string& source );
 
index f1ee352..8a42bcb 100644 (file)
@@ -1121,9 +1121,6 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent )
     int keyCode = keyEvent.keyCode;
     const std::string& keyString = keyEvent.keyPressed;
 
     int keyCode = keyEvent.keyCode;
     const std::string& keyString = keyEvent.keyPressed;
 
-    // Hide the grab handle.
-    mImpl->mEventData->mDecorator->SetHandleActive( GRAB_HANDLE, false );
-
     // Pre-process to separate modifying events from non-modifying input events.
     if( Dali::DALI_KEY_ESCAPE == keyCode )
     {
     // Pre-process to separate modifying events from non-modifying input events.
     if( Dali::DALI_KEY_ESCAPE == keyCode )
     {
@@ -1146,8 +1143,18 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent )
       // IMF manager is no longer handling key-events
       mImpl->ClearPreEditFlag();
 
       // IMF manager is no longer handling key-events
       mImpl->ClearPreEditFlag();
 
-      // Remove the character before the current cursor position
-      bool removed = RemoveText( -1, 1 );
+      bool removed( false );
+
+      if ( EventData::SELECTING         == mImpl->mEventData->mState ||
+           EventData::SELECTION_CHANGED == mImpl->mEventData->mState )
+      {
+        removed = RemoveSelectedText();
+      }
+      else
+      {
+        // Remove the character before the current cursor position
+        removed = RemoveText( -1, 1 );
+      }
 
       if( removed )
       {
 
       if( removed )
       {
@@ -1173,7 +1180,6 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent )
       mImpl->ClearPreEditFlag();
 
       InsertText( keyString, COMMIT );
       mImpl->ClearPreEditFlag();
 
       InsertText( keyString, COMMIT );
-
       textChanged = true;
     }
 
       textChanged = true;
     }
 
@@ -1193,7 +1199,7 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent )
 
 void Controller::InsertText( const std::string& text, Controller::InsertType type )
 {
 
 void Controller::InsertText( const std::string& text, Controller::InsertType type )
 {
-  bool removedPreEdit( false );
+  bool removedPrevious( false );
   bool maxLengthReached( false );
 
   DALI_ASSERT_DEBUG( NULL != mImpl->mEventData && "Unexpected InsertText" )
   bool maxLengthReached( false );
 
   DALI_ASSERT_DEBUG( NULL != mImpl->mEventData && "Unexpected InsertText" )
@@ -1210,11 +1216,16 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ
       0 != mImpl->mEventData->mPreEditLength )
   {
     CharacterIndex offset = mImpl->mEventData->mPrimaryCursorPosition - mImpl->mEventData->mPreEditStartPosition;
       0 != mImpl->mEventData->mPreEditLength )
   {
     CharacterIndex offset = mImpl->mEventData->mPrimaryCursorPosition - mImpl->mEventData->mPreEditStartPosition;
-    removedPreEdit = RemoveText( -static_cast<int>(offset), mImpl->mEventData->mPreEditLength );
+    removedPrevious = RemoveText( -static_cast<int>(offset), mImpl->mEventData->mPreEditLength );
 
     mImpl->mEventData->mPrimaryCursorPosition = mImpl->mEventData->mPreEditStartPosition;
     mImpl->mEventData->mPreEditLength = 0;
   }
 
     mImpl->mEventData->mPrimaryCursorPosition = mImpl->mEventData->mPreEditStartPosition;
     mImpl->mEventData->mPreEditLength = 0;
   }
+  else
+  {
+    // Remove the previous Selection
+    removedPrevious = RemoveSelectedText();
+  }
 
   if( ! text.empty() )
   {
 
   if( ! text.empty() )
   {
@@ -1299,7 +1310,7 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ
     mImpl->mEventData->mUpdateCursorPosition = true;
     mImpl->ClearPreEditFlag();
   }
     mImpl->mEventData->mUpdateCursorPosition = true;
     mImpl->ClearPreEditFlag();
   }
-  else if( removedPreEdit ||
+  else if( removedPrevious ||
            0 != utf32Characters.Count() )
   {
     // Queue an inserted event
            0 != utf32Characters.Count() )
   {
     // Queue an inserted event
@@ -1317,6 +1328,26 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ
   }
 }
 
   }
 }
 
+bool Controller::RemoveSelectedText()
+{
+  bool textRemoved( false );
+
+  if ( EventData::SELECTING         == mImpl->mEventData->mState ||
+       EventData::SELECTION_CHANGED == mImpl->mEventData->mState )
+  {
+    std::string removedString;
+    mImpl->RetrieveSelection( removedString, true );
+
+    if( !removedString.empty() )
+    {
+      textRemoved = true;
+      mImpl->ChangeState( EventData::EDITING );
+    }
+  }
+
+  return textRemoved;
+}
+
 void Controller::TapEvent( unsigned int tapCount, float x, float y )
 {
   DALI_ASSERT_DEBUG( mImpl->mEventData && "Unexpected TapEvent" );
 void Controller::TapEvent( unsigned int tapCount, float x, float y )
 {
   DALI_ASSERT_DEBUG( mImpl->mEventData && "Unexpected TapEvent" );
index f1e1d28..8699edd 100644 (file)
@@ -504,6 +504,12 @@ public:
   void InsertText( const std::string& text, InsertType type );
 
   /**
   void InsertText( const std::string& text, InsertType type );
 
   /**
+   * @brief Checks if text is selected and if so removes it.
+   * @return true if text was removed
+   */
+  bool RemoveSelectedText();
+
+  /**
    * @brief Called by editable UI controls when a tap gesture occurs.
    * @param[in] tapCount The number of taps.
    * @param[in] x The x position relative to the top-left of the parent control.
    * @brief Called by editable UI controls when a tap gesture occurs.
    * @param[in] tapCount The number of taps.
    * @param[in] x The x position relative to the top-left of the parent control.