/*
* Ext GWT 2.2.4 - Ext for GWT
* Copyright(c) 2007-2010, Ext JS, LLC.
* licensing@extjs.com
*
* http://extjs.com/license
*/
package com.extjs.gxt.ui.client.widget.grid.filters;
import java.util.List;
import com.extjs.gxt.ui.client.GXT;
import com.extjs.gxt.ui.client.core.XDOM;
import com.extjs.gxt.ui.client.data.BaseBooleanFilterConfig;
import com.extjs.gxt.ui.client.data.FilterConfig;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.MenuEvent;
import com.extjs.gxt.ui.client.util.Util;
import com.extjs.gxt.ui.client.widget.menu.CheckMenuItem;
/**
* Boolean filter that displays yes / no radio items.
*/
public class BooleanFilter extends Filter {
public static class BooleanFilterMessages extends FilterMessages {
private String noText = GXT.MESSAGES.booleanFilter_noText();
private String yesText = GXT.MESSAGES.booleanFilter_yesText();
/**
* @return the noText
*/
public String getNoText() {
return noText;
}
/**
* @return the yesText
*/
public String getYesText() {
return yesText;
}
/**
* @param noText the noText to set
*/
public void setNoText(String noText) {
this.noText = noText;
}
/**
* @param yesText the yesText to set
*/
public void setYesText(String yesText) {
this.yesText = yesText;
}
}
private Listener<MenuEvent> listener = new Listener<MenuEvent>() {
public void handleEvent(MenuEvent be) {
fireUpdate();
}
};
private CheckMenuItem yesItem, noItem;
/**
* Creates a new boolean filter index.
*
* @param dataIndex the data index the filter is mapped to
*/
public BooleanFilter(String dataIndex) {
super(dataIndex);
yesItem = new CheckMenuItem();
yesItem.setGroup(XDOM.getUniqueId());
yesItem.addListener(Events.CheckChange, listener);
yesItem.setChecked(false);
noItem = new CheckMenuItem();
noItem.setGroup(yesItem.getGroup());
noItem.addListener(Events.CheckChange, listener);
noItem.setChecked(true);
menu.add(yesItem);
menu.add(noItem);
setMessages(new BooleanFilterMessages());
}
@Override
public BooleanFilterMessages getMessages() {
return (BooleanFilterMessages) super.getMessages();
}
@Override
@SuppressWarnings("unchecked")
public List<FilterConfig> getSerialArgs() {
FilterConfig config = new BaseBooleanFilterConfig();
config.setType("boolean");
config.setValue(getValue());
return Util.createList(config);
}
@Override
public Object getValue() {
return Boolean.valueOf(yesItem.isChecked());
}
@Override
public void setMessages(FilterMessages messages) {
super.setMessages(messages);
if (yesItem != null) {
yesItem.setText(getMessages().getYesText());
}
if (noItem != null) {
noItem.setText(getMessages().getNoText());
}
}
@Override
public void setValue(Object value) {
boolean yes = false;
if (value instanceof Boolean) {
yes = ((Boolean) value).booleanValue();
} else if (value instanceof String) {
yes = Boolean.valueOf((String) value);
}
yesItem.setChecked(yes, false);
noItem.setChecked(!yes, false);
fireUpdate();
}
@Override
public boolean validateModel(ModelData model) {
Boolean val = getModelValue(model);
return getValue().equals(val == null ? Boolean.FALSE : val);
}
}