blob: e147081d1617e28ff1a79bc57cecd7531298312b [file] [log] [blame]
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);
}
}