summaryrefslogtreecommitdiff
path: root/basctl
diff options
context:
space:
mode:
authorGergo Mocsi <gmocsi91@gmail.com>2013-08-02 17:36:29 +0200
committerGergo Mocsi <gmocsi91@gmail.com>2013-09-02 18:16:55 +0200
commit972bbede6e79fb7c828a32a560559391290af997 (patch)
tree050a136aae4e9c19b143e2d10e80cf5c2b8aa2ea /basctl
parenta1c1e89e43a8c3815d6029a2438c57ef8d1f98cb (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
Diffstat (limited to 'basctl')
-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 00b048d26cf1..fd69045302f0 100644
--- a/basctl/source/basicide/baside2b.cxx
+++ b/basctl/source/basicide/baside2b.cxx
@@ -508,11 +508,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 ||
@@ -2552,7 +2554,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)
@@ -2561,11 +2563,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()
{
@@ -2603,65 +2605,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)
@@ -2678,11 +2621,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();
}
@@ -2712,6 +2653,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);