package ilarkesto.gwt.client;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FocusListener;
import com.google.gwt.user.client.ui.FocusPanel;
import com.google.gwt.user.client.ui.Widget;
public class MultiSelectionWidget<I extends Object> extends AWidget {
private FlexTable table;
private Map<I, CheckBox> items = new HashMap<I, CheckBox>();
private FocusPanel panel;
@Override
protected Widget onInitialization() {
table = new FlexTable();
table.setCellPadding(0);
table.setCellSpacing(0);
panel = new FocusPanel();
panel.setStyleName("MultiSelectionWidget");
panel.setWidget(table);
return panel;
}
public void add(I item) {
initialize();
CheckBox checkbox;
if (item instanceof HtmlLabelSupport) {
checkbox = new CheckBox(((HtmlLabelSupport) item).getHtmlLabel(), true);
} else {
checkbox = new CheckBox(item.toString());
}
items.put(item, checkbox);
table.setWidget(table.getRowCount(), 0, checkbox);
}
public void setItems(Collection<I> items) {
initialize();
clear();
for (I item : items) {
add(item);
}
}
public void clear() {
items.clear();
table.clear();
}
public void setSelected(Collection<I> selectedItems) {
for (Map.Entry<I, CheckBox> entry : items.entrySet()) {
entry.getValue().setValue((selectedItems.contains(entry.getKey())));
}
}
public List<I> getSelected() {
List<I> ret = new LinkedList<I>();
for (Map.Entry<I, CheckBox> entry : items.entrySet()) {
if (entry.getValue().getValue()) ret.add(entry.getKey());
}
return ret;
}
public void addFocusListener(FocusListener focusListener) {
initialize();
panel.addFocusListener(focusListener);
}
}