[Libreoffice-commits] core.git: Branch 'feature/gsoc-basic-ide-completion-and-other-bits' - basctl/source

Gergo Mocsi gmocsi91 at gmail.com
Wed Aug 21 06:03:11 PDT 2013


 basctl/source/basicide/baside2.hxx  |    2 -
 basctl/source/basicide/baside2b.cxx |   40 +++++++++++++++++++++++++++++-------
 2 files changed, 34 insertions(+), 8 deletions(-)

New commits:
commit 3c470ac7adda3ec8fdf4b6a421d2dfd4adf7a9f7
Author: Gergo Mocsi <gmocsi91 at gmail.com>
Date:   Wed Aug 21 14:53:41 2013 +0200

    GSOC work, arrow navigation+TextSelection problems fixed
    
    I've added a new function called EditorWindow::GetLastHighlightPortionTextSelection, which gets the last edited word (from the highlight portion), and creates a TextSelection from it. Later, this is used to remove/replace text in the listbox when pressing the tab key. The proble was, that is cleared the whole line, but now, it just clears the newly edited word.
    
    Change-Id: I61b6721696e89002705c9980579023b42ad1faaa

diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx
index df6b451..7e037f8 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -130,6 +130,7 @@ private:
     void HandleAutoCloseDoubleQuotes();
     void HandleCodeCompletition();
     void HandleProcedureCompletition();
+    TextSelection GetLastHighlightPortionTextSelection();
 
 protected:
     virtual void    Paint( const Rectangle& );
@@ -490,7 +491,6 @@ friend class CodeCompleteWindow;
 friend class EditorWindow;
 private:
     OUStringBuffer aFuncBuffer;
-    OUString aPrevStr;
     /* a buffer to build up function name when typing
      * a function name, used for showing/hiding listbox values
      * */
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index 61fc774..906e2cb 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -613,7 +613,7 @@ void EditorWindow::HandleAutoCorrect()
     //create the appropriate TextSelection, and update the cache
     TextPaM aStart( nLine, r.nBegin );
     TextPaM aEnd( nLine, r.nBegin + sStr.getLength() );
-    TextSelection sTextSelection(aStart, aEnd );
+    TextSelection sTextSelection( aStart, aEnd );
     rModulWindow.UpdateModule();
     rModulWindow.GetSbModule()->GetCodeCompleteDataFromParse( aCodeCompleteCache );
     // correct the last entered keyword
@@ -656,6 +656,36 @@ void EditorWindow::HandleAutoCorrect()
     }
 }
 
+TextSelection EditorWindow::GetLastHighlightPortionTextSelection()
+{//creates a text selection from the highlight portion on the cursor
+    sal_uLong nLine = GetEditView()->GetSelection().GetStart().GetPara();
+    sal_uLong nIndex = GetEditView()->GetSelection().GetStart().GetIndex();
+    OUString aLine( pEditEngine->GetText( nLine ) ); // the line being modified
+    HighlightPortions aPortions;
+    aHighlighter.getHighlightPortions( nLine, aLine, aPortions );
+
+    HighlightPortion& r = aPortions[aPortions.size()-1];
+    if( nIndex != aPortions.size()-1 )
+    {//cursor is not standing at the end of the line
+        for( size_t i = 0; i < aPortions.size(); i++ )
+        {
+            if( aPortions[i].nEnd == nIndex )
+            {
+                r = aPortions[i];
+                break;
+            }
+        }
+    }
+
+    if( aPortions.size() == 0 )
+        return TextSelection();
+
+    OUString sStr = aLine.copy( r.nBegin, r.nEnd - r.nBegin );
+    TextPaM aStart( nLine, r.nBegin );
+    TextPaM aEnd( nLine, r.nBegin + sStr.getLength() );
+    return TextSelection( aStart, aEnd );
+}
+
 void EditorWindow::HandleAutoCloseParen()
 {
     TextSelection aSel = GetEditView()->GetSelection();
@@ -2640,7 +2670,6 @@ void CodeCompleteListBox::SetMatchingEntries()
     }
 }
 
-
 void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
 {
     sal_Unicode aChar = rKeyEvt.GetKeyCode().GetCode();
@@ -2679,8 +2708,7 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
             }
             case KEY_TAB:
             {
-                TextPaM aTextEnd( GetParentEditView()->CursorEndOfLine(pCodeCompleteWindow->GetTextSelection().GetEnd()) );
-                TextSelection aTextSelection( pCodeCompleteWindow->GetTextSelection().GetStart(), aTextEnd );
+                TextSelection aTextSelection = pCodeCompleteWindow->pParent->GetLastHighlightPortionTextSelection();
                 OUString sTypedText = pCodeCompleteWindow->pParent->GetEditEngine()->GetText(aTextSelection);
                 if( !aFuncBuffer.isEmpty() )
                 {
@@ -2704,8 +2732,7 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
                         if( !bFound )
                             SetMatchingEntries();
 
-                        TextPaM aEnd( GetParentEditView()->CursorEndOfLine(pCodeCompleteWindow->GetTextSelection().GetEnd()) );
-                        GetParentEditView()->SetSelection(TextSelection(pCodeCompleteWindow->GetTextSelection().GetStart(), aEnd ) );
+                        GetParentEditView()->SetSelection( aTextSelection );
                         GetParentEditView()->DeleteSelected();
                         GetParentEditView()->InsertText( GetSelectEntry(), sal_False );
                     }
@@ -2751,7 +2778,6 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
 void CodeCompleteListBox::HideAndRestoreFocus()
 {
     pCodeCompleteWindow->Hide();
-    GetParentEditView()->SetSelection( GetParentEditView()->CursorEndOfLine(pCodeCompleteWindow->GetTextSelection().GetStart()) );
     pCodeCompleteWindow->pParent->GrabFocus();
 }
 


More information about the Libreoffice-commits mailing list