summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGergo Mocsi <gmocsi91@gmail.com>2013-08-02 17:36:29 +0200
committerGergo Mocsi <gmocsi91@gmail.com>2013-08-02 17:36:29 +0200
commit6c6c281267a357d3370a699106e68dbce3b9409e (patch)
tree9a1e8caebf8d2e9558c64ba0887beb81df8e911a
parent287b5c42b7fcf035a0a52c241c0a5f53c151ea4e (diff)
GSOC work, KeyInput instead of PreNotify
CodeCompleteListBox now uses KeyInput instead of PreNotify to handle key events. The cursor is visible, arrow keys navigate the listbox correctly. Change-Id: Ia0d5c5c48858d345dc4b4886ece1db618bdfc67c
-rw-r--r--basctl/source/basicide/baside2.hxx4
-rw-r--r--basctl/source/basicide/baside2b.cxx84
2 files changed, 18 insertions, 70 deletions
diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx
index 5618f7618cc7..68f16a12216e 100644
--- a/basctl/source/basicide/baside2.hxx
+++ b/basctl/source/basicide/baside2.hxx
@@ -491,9 +491,7 @@ public:
void InsertSelectedEntry(); //insert the selected entry
DECL_LINK(ImplDoubleClickHdl, void*);
- //DECL_LINK(ImplSelectionChangeHdl, void*);
-
- virtual long PreNotify( NotifyEvent& rNEvt );
+ DECL_LINK(ImplSelectHdl, void*);
protected:
virtual void KeyInput( const KeyEvent& rKeyEvt );
diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx
index fe9da85b5697..eb6666a62f8f 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -502,11 +502,13 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt )
// see if there is an accelerator to be processed first
bool bDone = SfxViewShell::Current()->KeyInput( rKEvt );
- //sal_Unicode aChar = rKEvt.GetKeyCode().GetCode();
- if( pCodeCompleteWnd->IsVisible() )
+ if( pCodeCompleteWnd->IsVisible() && CodeCompleteOptions::IsCodeCompleteOn() )
{
std::cerr << "EditorWindow::KeyInput" << std::endl;
pCodeCompleteWnd->GetListBox()->KeyInput(rKEvt);
+ if( rKEvt.GetKeyCode().GetCode() == KEY_UP
+ || rKEvt.GetKeyCode().GetCode() == KEY_DOWN )
+ return;
}
if( (rKEvt.GetKeyCode().GetCode() == KEY_SPACE ||
@@ -2546,7 +2548,7 @@ CodeCompleteListBox::CodeCompleteListBox( CodeCompleteWindow* pPar )
pCodeCompleteWindow( pPar )
{
SetDoubleClickHdl(LINK(this, CodeCompleteListBox, ImplDoubleClickHdl));
- //SetSelectHdl(LINK(this, CodeCompleteListBox, ImplSelectionChangeHdl));
+ SetSelectHdl(LINK(this, CodeCompleteListBox, ImplSelectHdl));
}
IMPL_LINK_NOARG(CodeCompleteListBox, ImplDoubleClickHdl)
@@ -2555,11 +2557,11 @@ IMPL_LINK_NOARG(CodeCompleteListBox, ImplDoubleClickHdl)
return 0;
}
-/*IMPL_LINK_NOARG(CodeCompleteListBox, ImplSelectionChangeHdl)
-{
+IMPL_LINK_NOARG(CodeCompleteListBox, ImplSelectHdl)
+{//give back the focus to the parent
pCodeCompleteWindow->pParent->GrabFocus();
return 0;
-}*/
+}
void CodeCompleteListBox::InsertSelectedEntry()
{
@@ -2597,65 +2599,6 @@ void CodeCompleteListBox::InsertSelectedEntry()
}
}
-long CodeCompleteListBox::PreNotify( NotifyEvent& rNEvt )
-{
- if( rNEvt.GetType() == EVENT_KEYINPUT )
- {
- std::cerr << "CodeCompleteListBox::PreNotify" << std::endl;
- KeyEvent aKeyEvt = *rNEvt.GetKeyEvent();
- sal_Unicode aChar = aKeyEvt.GetKeyCode().GetCode();
- if( ( aChar >= KEY_A ) && ( aChar <= KEY_Z ) )
- {
- pCodeCompleteWindow->pParent->GetEditView()->InsertText( OUString(aKeyEvt.GetCharCode()) );
- aFuncBuffer.append(aKeyEvt.GetCharCode());
- SetVisibleEntries();
- //pCodeCompleteWindow->pParent->GetEditView()->GetWindow()->GrabFocus();
- return 0;
- }
- else
- {
- switch( aChar )
- {
- case KEY_ESCAPE: // hide, do nothing
- pCodeCompleteWindow->ClearAndHide();
- return 0;
- case KEY_TAB: case KEY_SPACE:
- /* space, tab the user probably have typed in the whole
- * procedure name: hide the window, and insert the tab/space
- */
- pCodeCompleteWindow->pParent->GetEditView()->InsertText( OUString(aKeyEvt.GetCharCode()) );
- pCodeCompleteWindow->Hide();
- pCodeCompleteWindow->pParent->GetEditView()->SetSelection( pCodeCompleteWindow->pParent->GetEditView()->CursorEndOfLine(pCodeCompleteWindow->GetTextSelection().GetStart()) );
- pCodeCompleteWindow->pParent->GrabFocus();
- return 0;
- case KEY_BACKSPACE: case KEY_DELETE:
- if( aFuncBuffer.toString() != OUString("") )
- {
- TextPaM aEnd(pCodeCompleteWindow->aTextSelection.GetEnd().GetPara(), pCodeCompleteWindow->GetTextSelection().GetEnd().GetIndex() + aFuncBuffer.getLength());
- TextPaM aStart(pCodeCompleteWindow->aTextSelection.GetEnd().GetPara(), pCodeCompleteWindow->GetTextSelection().GetEnd().GetIndex() + aFuncBuffer.getLength()-1);
- aFuncBuffer = aFuncBuffer.remove(aFuncBuffer.getLength()-1, 1);
- pCodeCompleteWindow->pParent->GetEditView()->SetSelection(TextSelection(aStart, aEnd));
- pCodeCompleteWindow->pParent->GetEditView()->DeleteSelected();
- SetVisibleEntries();
- }
- else
- {
- pCodeCompleteWindow->ClearAndHide();
- }
- return 0;
- case KEY_RETURN:
- InsertSelectedEntry();
- return 0;
- /*case KEY_UP: case KEY_DOWN:
- std::cerr << "up/down ke in PreNotify" << std::endl;
- break;*/
- }
- }
- }
- //pCodeCompleteWindow->pParent->GrabFocus();
- return ListBox::PreNotify( rNEvt );
-}
-
void CodeCompleteListBox::SetVisibleEntries()
{
for(sal_uInt16 i=0; i< GetEntryCount(); ++i)
@@ -2672,11 +2615,9 @@ void CodeCompleteListBox::SetVisibleEntries()
void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
{
std::cerr << "CodeCompleteListBox::KeyInput" << std::endl;
- //pCodeCompleteWindow->pParent->GetEditView()->KeyInput( rKeyEvt );
sal_Unicode aChar = rKeyEvt.GetKeyCode().GetCode();
if( ( aChar >= KEY_A ) && ( aChar <= KEY_Z ) )
{
- //pCodeCompleteWindow->pParent->GetEditView()->InsertText( OUString(rKeyEvt.GetCharCode()) );
aFuncBuffer.append(rKeyEvt.GetCharCode());
SetVisibleEntries();
}
@@ -2706,6 +2647,15 @@ void CodeCompleteListBox::KeyInput( const KeyEvent& rKeyEvt )
case KEY_RETURN:
InsertSelectedEntry();
break;
+ case KEY_UP: case KEY_DOWN:
+ std::cerr << "up/down ke in CodeCompleteListBox::KeyInput" << std::endl;
+ //GrabFocus();
+ NotifyEvent nEvt( EVENT_KEYINPUT, NULL, &rKeyEvt );
+ PreNotify(nEvt);
+ //pCodeCompleteWindow->pParent->GrabFocus();
+ //SetVisibleEntries();
+ //pCodeCompleteWindow->pParent->GrabFocus();
+ break;
}
}
ListBox::KeyInput(rKeyEvt);