basctl/source/basicide/baside2.hxx | 30 ++++++++++- basctl/source/basicide/baside2b.cxx | 96 ++++++++++++++++++++++++++++++++---- 2 files changed, 115 insertions(+), 11 deletions(-)
New commits: commit cf8d21808a3a5365f0de2419ab60bdec03f84434 Author: Gergo Mocsi <gmocs...@gmail.com> Date: Mon Jul 15 15:14:23 2013 +0200 GSOC work, Window instead a FloatingWindow Changed CodeCompleteListBox into a Window which contains a single ListBox. Navigation with arrows is enabled, window closes on ESC key. Double click inserts the selected method into the source code. Visible line count in ListBox is set to 8 lines, width is adopted from the longest entry. Change-Id: I6b6ceb0ce78f9fc727aed53952dc6ee24cba47df diff --git a/basctl/source/basicide/baside2.hxx b/basctl/source/basicide/baside2.hxx index e949a19..3d8afde 100644 --- a/basctl/source/basicide/baside2.hxx +++ b/basctl/source/basicide/baside2.hxx @@ -51,6 +51,9 @@ class SvxSearchItem; #include <set> #include <boost/scoped_ptr.hpp> +#include <vcl/floatwin.hxx> +#include <vcl/textdata.hxx> + namespace com { namespace sun { namespace star { namespace beans { class XMultiPropertySet; } } } } @@ -60,6 +63,7 @@ namespace basctl class ObjectCatalog; class CodeCompleteListBox; +class CodeCompleteFloatWindow; DBG_NAMEEX( ModulWindow ) @@ -112,7 +116,8 @@ private: ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > GetComponentInterface(sal_Bool bCreate = true); std::vector< CodeCompleteData > aCodeCompleteCache; - CodeCompleteListBox* aListBox; + CodeCompleteFloatWindow* pCodeCompleteWnd; + //CodeCompleteListBox* aListBox; OUString GetActualSubName( sal_uLong nLine ); // gets the actual subroutine name according to line number std::vector< OUString > Split( const OUString& sStr, const sal_Unicode& aChar ); @@ -469,6 +474,29 @@ private: } aSyntaxColors; }; +class CodeCompleteFloatWindow: public Window +{ +private: + EditorWindow* pParent; // parent window + TextSelection aTextSelection; + ListBox* pListBox; + + void InitListBox(); // initialize the ListBox + DECL_LINK(ImplDoubleClickHdl, void*); + +public: + CodeCompleteFloatWindow( EditorWindow* pPar ); + virtual ~CodeCompleteFloatWindow(); + + void InsertEntry( const OUString& aStr ); + void ClearListBox(); + void SetTextSelection( const TextSelection& aSel ); + void ResizeListBox(); + +protected: + virtual void KeyInput( const KeyEvent& rKeyEvt ); +}; + class CodeCompleteListBox: public ListBox { private: diff --git a/basctl/source/basicide/baside2b.cxx b/basctl/source/basicide/baside2b.cxx index 4d15c48..77db23d 100644 --- a/basctl/source/basicide/baside2b.cxx +++ b/basctl/source/basicide/baside2b.cxx @@ -250,7 +250,9 @@ EditorWindow::EditorWindow (Window* pParent, ModulWindow* pModulWindow) : s[0] = OUString( "FontHeight" ); s[1] = OUString( "FontName" ); n->addPropertiesChangeListener(s, listener_.get()); - aListBox = new CodeCompleteListBox(this); + //aListBox = new CodeCompleteListBox(this); + //pCodeCopleteWnd = new CodeCompleteFloatWindow(this); + pCodeCompleteWnd = new CodeCompleteFloatWindow( this ); } @@ -272,7 +274,9 @@ EditorWindow::~EditorWindow() EndListening( *pEditEngine ); pEditEngine->RemoveView(pEditView.get()); } - delete aListBox; + + //delete aListBox; + delete pCodeCompleteWnd; } OUString EditorWindow::GetWordAtCursor() @@ -570,17 +574,21 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt ) if( aMethods.getLength() != 0 ) { Rectangle aRect = ( (TextEngine*) GetEditEngine() )->PaMtoEditCursor( aSel.GetEnd() , false ); - aListBox->SetPosPixel( aRect.TopLeft() ); - aListBox->SetSizePixel( Size(150,150) ); + GetEditView()->EnableCursor( false ); + + aSel.GetStart().GetIndex() += 1; + aSel.GetEnd().GetIndex() += 1; + pCodeCompleteWnd->ClearListBox(); + pCodeCompleteWnd->SetTextSelection(aSel); + pCodeCompleteWnd->SetPosPixel( aRect.BottomRight() ); for(sal_Int32 l = 0; l < aMethods.getLength(); ++l) { - aListBox->InsertEntry( OUString(aMethods[l]->getName()) ); - std::cerr << aMethods[l]->getName() << std::endl; + pCodeCompleteWnd->InsertEntry( OUString(aMethods[l]->getName()) ); } - - aListBox->GetFocus(); - aListBox->ToggleDropDown(); + pCodeCompleteWnd->ResizeListBox(); + pCodeCompleteWnd->Show(); + pCodeCompleteWnd->GrabFocus(); } } } @@ -2371,10 +2379,11 @@ void WatchTreeListBox::UpdateWatches( bool bBasicStopped ) } CodeCompleteListBox::CodeCompleteListBox(EditorWindow* pPar) -: ListBox(pPar, WB_DROPDOWN), +: ListBox(pPar, WB_DROPDOWN | WB_BORDER), pParent(pPar) { SetSelectHdl( LINK(this, CodeCompleteListBox, ImplSelectHdl) ); + SetDropDownLineCount( 8 ); } CodeCompleteListBox::~CodeCompleteListBox() @@ -2389,6 +2398,73 @@ IMPL_LINK_NOARG(CodeCompleteListBox, ImplSelectHdl) return 0; } +CodeCompleteFloatWindow::CodeCompleteFloatWindow( EditorWindow* pPar ) +: Window( pPar, WB_BORDER | WB_SYSTEMWINDOW | WB_NOSHADOW ), +pParent(pPar) +{ + InitListBox(); + SetSizePixel( Size(150,150) ); +} + +void CodeCompleteFloatWindow::InitListBox() +{ + pListBox = new ListBox( this ); + pListBox->SetSizePixel( Size(150,150) ); //default, this will adopt the line length + pListBox->SetDoubleClickHdl(LINK(this, CodeCompleteFloatWindow, ImplDoubleClickHdl)); + pListBox->Show(); +} + +CodeCompleteFloatWindow::~CodeCompleteFloatWindow() +{ + delete pListBox; +} + +void CodeCompleteFloatWindow::InsertEntry( const OUString& aStr ) +{ + pListBox->InsertEntry( aStr ); +} + +void CodeCompleteFloatWindow::ClearListBox() +{ + pListBox->Clear(); +} + +IMPL_LINK_NOARG(CodeCompleteFloatWindow, ImplDoubleClickHdl) +{ + if( pListBox->GetEntry( pListBox->GetSelectEntryPos() ) != OUString("") ) + { + pParent->GetEditView()->SetSelection( aTextSelection ); + pParent->GetEditView()->InsertText( (OUString) pListBox->GetEntry(pListBox->GetSelectEntryPos()) ); + pParent->GetEditView()->EnableCursor( true ); + LoseFocus(); + Hide(); + } + return 0; +} + +void CodeCompleteFloatWindow::KeyInput( const KeyEvent& rKeyEvt ) +{ + if( rKeyEvt.GetKeyCode().GetCode() == KEY_ESCAPE ) + {// ESC key closes the window: does not modify anything + pParent->GetEditView()->EnableCursor( true ); + Hide(); + } +} + +void CodeCompleteFloatWindow::SetTextSelection( const TextSelection& aSel ) +{ + aTextSelection = aSel; +} + +void CodeCompleteFloatWindow::ResizeListBox() +{ + Size aSize = pListBox->CalcMinimumSize(); + const Font& aFont = pListBox->GetUnzoomedControlPointFont(); + aSize.setHeight( aFont.GetSize().getHeight() * 16 ); + pListBox->SetSizePixel( aSize ); + SetSizePixel( aSize ); +} + } // namespace basctl /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits