| 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); |
| } |
| } |