package com.akjava.gwt.lib.client.widget.cell; import java.util.List; import com.google.common.collect.ForwardingList; import com.google.gwt.user.cellview.client.CellList; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SelectionChangeEvent.Handler; import com.google.gwt.view.client.SingleSelectionModel; /** * * @author aki * * @param <T> */ public abstract class CellListControlList<T> extends ForwardingList<T>{ private List<T> rawList; private CellList<T> cellList; protected SingleSelectionModel<T> selectionModel; public CellListControlList(List<T> rawList,CellList<T> cellList){ this.rawList=rawList; this.cellList=cellList; selectionModel=new SingleSelectionModel<T>(); selectionModel.addSelectionChangeHandler(new Handler() { @Override public void onSelectionChange(SelectionChangeEvent event) { onSelect(selectionModel.getSelectedObject()); } }); cellList.setSelectionModel(selectionModel); } @Override protected List<T> delegate() { return rawList; } public T getSelection(){ return selectionModel.getSelectedObject(); } public abstract void onSelect(T selection); public void setSelected(T item,boolean selected){ selectionModel.setSelected(item, selected); } public SingleSelectionModel<T> getSelectionModel() { return selectionModel; } public void setSelectionModel(SingleSelectionModel<T> selectionModel) { this.selectionModel = selectionModel; } @Override public void add(int index, T newAddIndexElement) { delegate().add(index, newAddIndexElement); updateCellList(); } @Override public void clear() { super.clear(); updateCellList(); } @Override public boolean add(T element) { boolean b= super.add(element); updateCellList(); return b; } @Override public boolean remove(Object object) { boolean b= super.remove(object); updateCellList(); return b; } //TODO support more public void unselect() { T selection=getSelection(); if(selection!=null){ selectionModel.setSelected(selection, false); } } public void updateCellList(){ cellList.setRowData(this); } }