package autotest.common.table; import autotest.common.ui.ExtendedListBox; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.json.client.JSONString; import com.google.gwt.json.client.JSONValue; import com.google.gwt.user.client.ui.ListBox; import com.google.gwt.user.client.ui.Widget; public class ListFilter extends FieldFilter { protected ListBox select; protected String allValuesText = "All values"; public ListFilter(String fieldName) { super(fieldName); select = new ExtendedListBox(); select.setMultipleSelect(isMultipleSelect()); select.setStylePrimaryName("filter-box"); select.addChangeHandler(new ChangeHandler() { public void onChange(ChangeEvent event) { notifyListeners(); } }); } /** * Subclasses should override this if they wish to use a multi-select listbox * @return true if and only if the listbox should be multiple select */ protected boolean isMultipleSelect() { return false; } /** * Set the text for that option that matches any value for this filter. */ public void setMatchAllText(String text) { allValuesText = text; if (select.getItemCount() > 0) { select.setItemText(0, allValuesText); } } @Override public void setExactMatch(boolean isExactMatch) { this.isExactMatch = isExactMatch; } protected String getItemText(int index) { return select.getItemText(index); } protected String getSelectedText() { int selected = select.getSelectedIndex(); if (selected == -1) { return ""; } return getItemText(selected); } @Override public JSONValue getMatchValue() { return new JSONString(getSelectedText()); } @Override public boolean isActive() { return select.isEnabled() && !getSelectedText().equals(allValuesText); } @Override public Widget getWidget() { return select; } public void setChoices(String[] choices) { String selectedValue = null; if (select.getSelectedIndex() != -1) { selectedValue = getSelectedText(); } select.clear(); select.addItem(allValuesText); for (int i = 0; i < choices.length; i++) { select.addItem(choices[i]); } if (selectedValue != null) { setSelectedChoice(selectedValue); } } public void setSelectedChoice(String choice) { for(int i = 0; i < select.getItemCount(); i++) { if(select.getItemText(i).equals(choice)) { select.setSelectedIndex(i); return; } } select.addItem(choice); select.setSelectedIndex(select.getItemCount() - 1); } public void setEnabled(boolean enabled) { select.setEnabled(enabled); } }