001package polaris.sdk.ui.controls; 002import polaris.sdk.ui.*; 003 004import java.util.*; 005public class AutoComplete extends SearchField { 006 protected final java.util.List<String> suggestions=new ArrayList<String>();protected PopupMenu menu; 007 public AutoComplete(){super();}public AutoComplete(String... options){this();suggestions(options);} 008 public AutoComplete suggestions(String... values){suggestions.clear();Collections.addAll(suggestions,values);return this;} 009 protected void openSuggestions(boolean all){if(ui==null)return;String query=text.toLowerCase(Locale.ROOT);menu=new PopupMenu();menu.bounds(0,0,w,8);for(String s:suggestions)if(all||s.toLowerCase(Locale.ROOT).contains(query)){final String option=s;menu.item(s,()->{value(option);changed();});}if(menu.itemCount()>0)ui.popupKeepFocus(menu,ax,ay+h+3);else ui.closePopups();} 010 @Override public void event(UiEvent e){if(e.type==UiEvent.Type.KEY&&menu!=null&&menu.ui()!=null&&(e.key==38||e.key==40||e.key==10)){menu.event(e);return;}super.event(e);if(e.type==UiEvent.Type.TEXT||e.type==UiEvent.Type.KEY&&(e.key==8||e.key==127))openSuggestions(false);} 011}