Kaydet (Commit) 6f516edc authored tarafından Gergo Mocsi's avatar Gergo Mocsi

GSOC work week 3, showing methods in a ListBox

This patch allows the Code Completition feature to list methods in a custom ListBox class called CodeCompleteListBox.
So, when the user presses the dot("."), a ListBox appears, and listed the methods(not just prints on the terminal).
The user can select one from them, and it is put in the source code (after the dot).

Change-Id: Ie5165e7bdaae1d96bbf40a9b996ca8ebbdb40dea
üst 025e7ff3
...@@ -41,6 +41,7 @@ class SvxSearchItem; ...@@ -41,6 +41,7 @@ class SvxSearchItem;
#include <vcl/split.hxx> #include <vcl/split.hxx>
#include <svl/lstner.hxx> #include <svl/lstner.hxx>
#include <svtools/colorcfg.hxx> #include <svtools/colorcfg.hxx>
#include "vcl/lstbox.hxx"
#include <sfx2/progress.hxx> #include <sfx2/progress.hxx>
#include <unotools/options.hxx> #include <unotools/options.hxx>
...@@ -57,6 +58,7 @@ namespace basctl ...@@ -57,6 +58,7 @@ namespace basctl
{ {
class ObjectCatalog; class ObjectCatalog;
class CodeCompleteListBox;
DBG_NAMEEX( ModulWindow ) DBG_NAMEEX( ModulWindow )
...@@ -109,6 +111,7 @@ private: ...@@ -109,6 +111,7 @@ private:
::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer > ::com::sun::star::uno::Reference< ::com::sun::star::awt::XWindowPeer >
GetComponentInterface(sal_Bool bCreate = true); GetComponentInterface(sal_Bool bCreate = true);
std::vector< CodeCompleteData > aCodeCompleteCache; std::vector< CodeCompleteData > aCodeCompleteCache;
CodeCompleteListBox* aListBox;
protected: protected:
virtual void Paint( const Rectangle& ); virtual void Paint( const Rectangle& );
...@@ -463,6 +466,17 @@ private: ...@@ -463,6 +466,17 @@ private:
} aSyntaxColors; } aSyntaxColors;
}; };
class CodeCompleteListBox: public ListBox
{
private:
EditorWindow* pParent; // parent window
DECL_LINK(ImplSelectHdl, void*);
public:
CodeCompleteListBox(EditorWindow* pPar);
virtual ~CodeCompleteListBox();
};
} // namespace basctl } // namespace basctl
#endif // BASCTL_BASIDE2_HXX #endif // BASCTL_BASIDE2_HXX
......
...@@ -250,6 +250,7 @@ EditorWindow::EditorWindow (Window* pParent, ModulWindow* pModulWindow) : ...@@ -250,6 +250,7 @@ EditorWindow::EditorWindow (Window* pParent, ModulWindow* pModulWindow) :
s[0] = OUString( "FontHeight" ); s[0] = OUString( "FontHeight" );
s[1] = OUString( "FontName" ); s[1] = OUString( "FontName" );
n->addPropertiesChangeListener(s, listener_.get()); n->addPropertiesChangeListener(s, listener_.get());
aListBox = new CodeCompleteListBox(this);
} }
...@@ -271,6 +272,7 @@ EditorWindow::~EditorWindow() ...@@ -271,6 +272,7 @@ EditorWindow::~EditorWindow()
EndListening( *pEditEngine ); EndListening( *pEditEngine );
pEditEngine->RemoveView(pEditView.get()); pEditEngine->RemoveView(pEditView.get());
} }
delete aListBox;
} }
OUString EditorWindow::GetWordAtCursor() OUString EditorWindow::GetWordAtCursor()
...@@ -513,13 +515,27 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt ) ...@@ -513,13 +515,27 @@ void EditorWindow::KeyInput( const KeyEvent& rKEvt )
{ {
Reference< lang::XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory(), UNO_SET_THROW ); Reference< lang::XMultiServiceFactory > xFactory( comphelper::getProcessServiceFactory(), UNO_SET_THROW );
Reference< reflection::XIdlReflection > xRefl( xFactory->createInstance("com.sun.star.reflection.CoreReflection"), UNO_QUERY_THROW ); Reference< reflection::XIdlReflection > xRefl( xFactory->createInstance("com.sun.star.reflection.CoreReflection"), UNO_QUERY_THROW );
Reference< reflection::XIdlClass > xClass = xRefl->forName(aCodeCompleteCache[j].sVarType); if( xRefl.is() )
if( !xRefl.is() )
break;
Sequence< Reference< reflection::XIdlMethod > > aMethods = xClass->getMethods();
for(sal_Int32 i = 0; i < aMethods.getLength(); ++i)
{ {
SAL_WARN("method information",aMethods[i]->getName()); Reference< reflection::XIdlClass > xClass = xRefl->forName(aCodeCompleteCache[j].sVarType);
if( xClass != NULL )
{
Sequence< Reference< reflection::XIdlMethod > > aMethods = xClass->getMethods();
aListBox->Clear();
for(sal_Int32 i = 0; i < aMethods.getLength(); ++i)
{
aListBox->InsertEntry( OUString(aMethods[i]->getName()) );
SAL_WARN("method information", aMethods[i]->getName());
}
aListBox->EnableAutoSize(true);
aListBox->Show();
aListBox->GetFocus();
aListBox->ToggleDropDown();
}
else
{
SAL_WARN("Type does not exist", aCodeCompleteCache[j].sVarType);
}
} }
break; break;
} }
...@@ -2291,6 +2307,24 @@ void WatchTreeListBox::UpdateWatches( bool bBasicStopped ) ...@@ -2291,6 +2307,24 @@ void WatchTreeListBox::UpdateWatches( bool bBasicStopped )
setBasicWatchMode( false ); setBasicWatchMode( false );
} }
CodeCompleteListBox::CodeCompleteListBox(EditorWindow* pPar)
: ListBox(pPar, WB_DROPDOWN),
pParent(pPar)
{
SetSelectHdl( LINK(this, CodeCompleteListBox, ImplSelectHdl) );
}
CodeCompleteListBox::~CodeCompleteListBox()
{
}
IMPL_LINK_NOARG(CodeCompleteListBox, ImplSelectHdl)
{
TextSelection aSel = this->pParent->GetEditView()->GetSelection();
pParent->GetEditEngine()->ReplaceText(aSel, (OUString) GetEntry(GetSelectEntryPos()) );
Clear();
return 0;
}
} // namespace basctl } // namespace basctl
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment