Move autocomplete to the remove filtered items paradigm.
Fixes https://gitlab.com/kicad/code/kicad/issues/4190
This commit is contained in:
parent
9414f65a3f
commit
0741bbb1b9
|
@ -50,6 +50,11 @@ SCINTILLA_TRICKS::SCINTILLA_TRICKS( wxStyledTextCtrl* aScintilla, const wxString
|
||||||
m_te->StyleSetBackground( wxSTC_STYLE_BRACELIGHT, highlight );
|
m_te->StyleSetBackground( wxSTC_STYLE_BRACELIGHT, highlight );
|
||||||
m_te->StyleSetForeground( wxSTC_STYLE_BRACEBAD, *wxRED );
|
m_te->StyleSetForeground( wxSTC_STYLE_BRACEBAD, *wxRED );
|
||||||
|
|
||||||
|
// Set up autocomplete
|
||||||
|
m_te->AutoCompSetIgnoreCase( true );
|
||||||
|
m_te->AutoCompSetFillUps( m_braces[1] );
|
||||||
|
m_te->AutoCompSetMaxHeight( 20 );
|
||||||
|
|
||||||
// Hook up events
|
// Hook up events
|
||||||
m_te->Bind( wxEVT_STC_UPDATEUI, &SCINTILLA_TRICKS::onScintillaUpdateUI, this );
|
m_te->Bind( wxEVT_STC_UPDATEUI, &SCINTILLA_TRICKS::onScintillaUpdateUI, this );
|
||||||
|
|
||||||
|
@ -180,23 +185,25 @@ void SCINTILLA_TRICKS::onScintillaUpdateUI( wxStyledTextEvent& aEvent )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void SCINTILLA_TRICKS::DoAutocomplete( const wxString& aPartial, wxArrayString aTokens )
|
void SCINTILLA_TRICKS::DoAutocomplete( const wxString& aPartial, const wxArrayString& aTokens )
|
||||||
{
|
{
|
||||||
if( aTokens.size() > 0 )
|
wxArrayString matchedTokens;
|
||||||
|
|
||||||
|
wxString filter = wxT( "*" ) + aPartial.Lower() + wxT( "*" );
|
||||||
|
|
||||||
|
for( const wxString& token : aTokens )
|
||||||
{
|
{
|
||||||
bool match = aPartial.IsEmpty();
|
if( token.Lower().Matches( filter ) )
|
||||||
|
matchedTokens.push_back( token );
|
||||||
|
}
|
||||||
|
|
||||||
for( size_t ii = 0; ii < aTokens.size() && !match; ++ii )
|
if( matchedTokens.size() > 0 )
|
||||||
match = aTokens[ii].StartsWith( aPartial );
|
|
||||||
|
|
||||||
if( match )
|
|
||||||
{
|
{
|
||||||
// NB: tokens MUST be in alphabetical order because the Scintilla engine is going
|
// NB: tokens MUST be in alphabetical order because the Scintilla engine is going
|
||||||
// to do a binary search on them
|
// to do a binary search on them
|
||||||
aTokens.Sort();
|
matchedTokens.Sort();
|
||||||
|
|
||||||
m_te->AutoCompShow( aPartial.size(), wxJoin( aTokens, ' ' ) );
|
m_te->AutoCompShow( aPartial.size(), wxJoin( matchedTokens, ' ' ) );
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ void TEXTENTRY_TRICKS::OnCharHook( wxTextEntry* aTextEntry, wxKeyEvent& aEvent )
|
||||||
long start, end;
|
long start, end;
|
||||||
aTextEntry->GetSelection( &start, &end );
|
aTextEntry->GetSelection( &start, &end );
|
||||||
|
|
||||||
if( start > end )
|
if( end > start )
|
||||||
{
|
{
|
||||||
aTextEntry->Remove( start, end );
|
aTextEntry->Remove( start, end );
|
||||||
aTextEntry->SetInsertionPoint( start );
|
aTextEntry->SetInsertionPoint( start );
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include <wx/log.h>
|
#include <wx/log.h>
|
||||||
#include <wx/stc/stc.h>
|
#include <wx/stc/stc.h>
|
||||||
#include <textentry_tricks.h>
|
#include <textentry_tricks.h>
|
||||||
|
#include <wx/listctrl.h>
|
||||||
|
|
||||||
using namespace std::placeholders;
|
using namespace std::placeholders;
|
||||||
|
|
||||||
|
@ -386,7 +387,9 @@ void ACTION_MENU::OnMenuEvent( wxMenuEvent& aEvent )
|
||||||
// in TOOL_DISPATCHER::DispatchWxEvent, wxWidgets sometimes converts those it knows
|
// in TOOL_DISPATCHER::DispatchWxEvent, wxWidgets sometimes converts those it knows
|
||||||
// about into menu commands without ever generating the appropriate CHAR_HOOK and CHAR
|
// about into menu commands without ever generating the appropriate CHAR_HOOK and CHAR
|
||||||
// events first.
|
// events first.
|
||||||
if( dynamic_cast<wxStyledTextCtrl*>( focus ) || dynamic_cast<wxTextEntry*>( focus ) )
|
if( dynamic_cast<wxTextEntry*>( focus )
|
||||||
|
|| dynamic_cast<wxStyledTextCtrl*>( focus )
|
||||||
|
|| dynamic_cast<wxListView*>( focus ) )
|
||||||
{
|
{
|
||||||
// Original key event has been lost, so we have to re-create it from the menu's
|
// Original key event has been lost, so we have to re-create it from the menu's
|
||||||
// wxAcceleratorEntry.
|
// wxAcceleratorEntry.
|
||||||
|
|
|
@ -38,7 +38,7 @@ public:
|
||||||
|
|
||||||
SCINTILLA_TRICKS( wxStyledTextCtrl* aScintilla, const wxString& aBraces );
|
SCINTILLA_TRICKS( wxStyledTextCtrl* aScintilla, const wxString& aBraces );
|
||||||
|
|
||||||
void DoAutocomplete( const wxString& aPartial, wxArrayString aTokens );
|
void DoAutocomplete( const wxString& aPartial, const wxArrayString& aTokens );
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
bool isCtrl( int aChar, const wxKeyEvent& e );
|
bool isCtrl( int aChar, const wxKeyEvent& e );
|
||||||
|
|
Loading…
Reference in New Issue