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 <gmocs...@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(); } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits