diff options
author | Gergo Mocsi <gmocsi91@gmail.com> | 2013-08-21 14:53:41 +0200 |
---|---|---|
committer | Gergo Mocsi <gmocsi91@gmail.com> | 2013-09-02 18:17:02 +0200 |
commit | 251990c06363f85ea5e701b16b5120526d0ac1a6 (patch) | |
tree | 5b76943d2e8d86b211f171357b28da0830a18ba9 /basctl | |
parent | f05fa6e67f56a748b0087c287d23a67dfa2cbde2 (diff) |
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
Diffstat (limited to 'basctl')
-rw-r--r-- | basctl/source/basicide/baside2.hxx | 2 | ||||
-rw-r--r-- | basctl/source/basicide/baside2b.cxx | 40 |
2 files changed, 34 insertions, 8 deletions
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx index df6b45167de8..7e037f8f3b17 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 eb3931ad7dc9..4aab4642af1e 100644 --- a/basctl/source/basicide/baside2b.cxx +++ b/basctl/source/basicide/baside2b.cxx @@ -619,7 +619,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 @@ -662,6 +662,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(); @@ -2646,7 +2676,6 @@ void CodeCompleteListBox::SetMatchingEntries() } } - void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt ) { sal_Unicode aChar = rKeyEvt.GetKeyCode().GetCode(); @@ -2685,8 +2714,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() ) { @@ -2710,8 +2738,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 ); } @@ -2757,7 +2784,6 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt ) void CodeCompleteListBox::HideAndRestoreFocus() { pCodeCompleteWindow->Hide(); - GetParentEditView()->SetSelection( GetParentEditView()->CursorEndOfLine(pCodeCompleteWindow->GetTextSelection().GetStart()) ); pCodeCompleteWindow->pParent->GrabFocus(); } |