/*
* Sencha GXT 2.3.1 - Sencha for GWT
* Copyright(c) 2007-2013, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.extjs.gxt.ui.client.widget.grid.filters;
import java.util.ArrayList;
import java.util.List;
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.store.ListStore;
import com.extjs.gxt.ui.client.widget.menu.CheckMenuItem;
import com.extjs.gxt.ui.client.widget.menu.Menu;
public class ListMenu extends Menu {
private Listener<MenuEvent> checkListener = new Listener<MenuEvent>() {
public void handleEvent(MenuEvent be) {
onCheckChange(be);
}
};
private ListFilter filter;
private List<ModelData> selected;
private ListStore<ModelData> store;
@SuppressWarnings({"unchecked", "rawtypes"})
public ListMenu(ListFilter filter, ListStore store) {
this.filter = filter;
this.store = store;
selected = new ArrayList<ModelData>();
}
public ListFilter getFilter() {
return filter;
}
public List<ModelData> getSelected() {
return selected;
}
public List<String> getValue() {
List<String> values = new ArrayList<String>();
for (ModelData m : selected) {
values.add((String) m.get(filter.getDisplayProperty()));
}
return values;
}
public void setSelected(List<ModelData> selected) {
this.selected = new ArrayList<ModelData>(selected);
}
protected void onCheckChange(MenuEvent be) {
CheckMenuItem item = (CheckMenuItem) be.getItem();
ModelData m = (ModelData) item.getData("model");
if (be.isChecked()) {
if (!selected.contains(m)) {
selected.add(m);
}
} else {
selected.remove(m);
}
filter.onCheckChange(be);
}
@Override
protected void onShow() {
super.onShow();
removeAll(true);
for (int i = 0; i < store.getCount(); i++) {
ModelData m = store.getAt(i);
CheckMenuItem item = new CheckMenuItem();
Object v = m.get(filter.getDisplayProperty());
item.setHtml(v == null ? "" : v.toString());
item.setChecked(selected.contains(m));
item.setHideOnClick(false);
item.setData("model", m);
item.addListener(Events.CheckChange, checkListener);
add(item);
}
layout();
}
}