package de.tud.kom.socom.web.client.baseelements.presenters; import java.util.LinkedList; import java.util.List; import com.google.gwt.cell.client.Cell; import com.google.gwt.core.client.GWT; import com.google.gwt.dom.client.HeadingElement; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiTemplate; import com.google.gwt.user.cellview.client.CellList; import com.google.gwt.user.cellview.client.SimplePager; import com.google.gwt.user.cellview.client.HasKeyboardSelectionPolicy.KeyboardSelectionPolicy; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.view.client.AbstractDataProvider; import com.google.gwt.view.client.SelectionChangeEvent; import com.google.gwt.view.client.SingleSelectionModel; import de.tud.kom.socom.web.client.baseelements.presenters.ListPresenter.ListViewInterface; import de.tud.kom.socom.web.client.htmlelements.ErrorList; import de.tud.kom.socom.web.client.htmlelements.ErrorListItemView; /** * @author jkonert * */ public class ListView<LISTITEM extends ListItemInterface> extends Composite implements ListViewInterface<LISTITEM> { @UiTemplate("ListView.ui.xml") interface ListViewUiBinder extends UiBinder<Widget, ListView<? extends ListItemInterface>> { } private static ListViewUiBinder uiBinder = GWT.create(ListViewUiBinder.class); private ListPresenter<LISTITEM> presenter; @UiField ErrorList errorList; @UiField(provided=true) SimplePager pagerTop; @UiField(provided=true) SimplePager pagerBottom; @UiField(provided=true) CellList<LISTITEM> cellList; private AbstractDataProvider<LISTITEM> dataProvider; public ListView(final ListPresenter<LISTITEM> presenter, Cell<LISTITEM> itemDisplayCell) { this.presenter = presenter; this.cellList = new CellList<LISTITEM>(itemDisplayCell); cellList.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); // Add a selection model to handle user selection. final SingleSelectionModel<LISTITEM> selectionModel = new SingleSelectionModel<LISTITEM>(); cellList.setSelectionModel(selectionModel); selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() { public void onSelectionChange(SelectionChangeEvent event) { LISTITEM selected = selectionModel.getSelectedObject(); if (selected != null) { presenter.onSelectionChanged(event, selectionModel); } } }); this.pagerTop = new SimplePager(); this.pagerTop.setDisplay(this.cellList); this.pagerBottom = new SimplePager(); this.pagerBottom.setDisplay(this.cellList); initWidget((Widget)uiBinder.createAndBindUi(this)); } /** * Handling of Item display/remove is done by DataProvider directly calling the CellList for Updates. * Paging event handling is done by presenter...informing the data-provider. */ @Override public void setDataProvider(AbstractDataProvider<LISTITEM> itemDataProvider) { itemDataProvider.addDataDisplay(this.cellList); if (this.dataProvider != null) this.dataProvider.removeDataDisplay(this.cellList); this.dataProvider = itemDataProvider; } @Override public void showError(ErrorListItemView error) { this.errorList.addError(error); } @Override public void hideErrors() { this.errorList.clear(); } @Override public void hideError(ErrorListItemView error) { this.errorList.removeError(error); } @Override public void setAdministrationVisible(boolean visible) { // FIXME JK: think about it....by extending Cell or find a way to let items display the adminpanel } }