summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGergo Mocsi <gmocsi91@gmail.com>2013-08-21 14:53:41 +0200
committerGergo Mocsi <gmocsi91@gmail.com>2013-09-02 18:17:02 +0200
commit251990c06363f85ea5e701b16b5120526d0ac1a6 (patch)
tree5b76943d2e8d86b211f171357b28da0830a18ba9
parentf05fa6e67f56a748b0087c287d23a67dfa2cbde2 (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
-rw-r--r--basctl/source/basicide/baside2.hxx2
-rw-r--r--basctl/source/basicide/baside2b.cxx40
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();
}