package com.akjava.gwt.bvhtools.client.player.list; import java.util.ArrayList; import java.util.List; import com.akjava.gwt.lib.client.widget.cell.util.WidgetUtils; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; //this is easy to scroll than CellList system //use cell list public class DataListCell<T> extends ScrollPanel{ List<T> datas=new ArrayList<T>(); T selected; private VerticalPanel panel; DataListRenderer<T> renderer; private String styleName="selected"; private ChangeSelectionListener<T> listener; public ChangeSelectionListener<T> getListener() { return listener; } public void setListener(ChangeSelectionListener<T> listener) { this.listener = listener; } public DataListCell(DataListRenderer<T> renderer){ panel=new VerticalPanel(); this.renderer=renderer; setWidget(panel); } public void setDatas(List<T> datas){ this.datas=datas; updateWidget(); } public T getSelection(){ return selected; } public void setSelection(T data){ this.selected=data; int csize=panel.getWidgetCount(); for(int i=0;i<csize;i++){ Widget w=panel.getWidget(i); w.removeStyleName(styleName); } int select=datas.indexOf(data); if(select!=-1){ panel.getWidget(select).addStyleName(styleName); } int y=WidgetUtils.calculateScrollY(panel, select); this.setVerticalScrollPosition(y-getOffsetHeight()/2); if(listener!=null){ listener.onChangeSelection(data); } } private void updateWidget(){ panel.clear(); for(T data:datas){ Widget widget=renderer.createWidget(data,this); panel.add(widget); } } public interface DataListRenderer<T> { public Widget createWidget(T data,DataListCell<T> dataList); } public interface ChangeSelectionListener<T>{ public void onChangeSelection(T data); } }