Vous trouverez ci-dessous un exemple (simple) pour un FlexTable. Il y a sans doute des choses à revoir, notamment le cas de chargement de données asynchrone, le premier appel de la fonction refresh (sur le onAttach? le onLoad?)
package org.gch.FlexTable; import java.util.ArrayList; import java.util.List; import com.google.gwt.event.shared.HandlerRegistration; import com.google.gwt.user.client.Element; import com.google.gwt.user.client.ui.FlexTable; import com.google.gwt.view.client.HasData; import com.google.gwt.view.client.Range; import com.google.gwt.view.client.RangeChangeEvent; import com.google.gwt.view.client.RowCountChangeEvent; import com.google.gwt.view.client.RangeChangeEvent.Handler; import com.google.gwt.view.client.SelectionModel; public class FlexTableHasRows extends FlexTable implements HasData{ private Range range = new Range(0, 25); private Handler handler; private boolean isExact = true; private int count; private SelectionModel selectionModel; @Override public HandlerRegistration addRangeChangeHandler(Handler handler) { this.handler = handler; return addHandler(handler, RangeChangeEvent.getType()); } @Override public HandlerRegistration addRowCountChangeHandler(com.google.gwt.view.client.RowCountChangeEvent.Handler handler) { return addHandler(handler, RowCountChangeEvent.getType()); } @Override public Range getVisibleRange() { return range; } @Override public boolean isRowCountExact() { return isExact; } @Override public void setRowCount(int count) { this.count = this.getRowCount(); } @Override public void setRowCount(int count, boolean isExact) { this.count = this.getRowCount(); this.isExact = isExact; } @Override public void setVisibleRange(int start, int length) { range = new Range(start, length); RangeChangeEvent.fire(this, getVisibleRange()); refresh(); } @Override public void setVisibleRange(Range range) { this.range = range; RangeChangeEvent.fire(this, getVisibleRange()); refresh(); } @Override public HandlerRegistration addCellPreviewHandler(com.google.gwt.view.client.CellPreviewEvent.Handler handler) { System.out.println("addCellPreviewHandler"); return null; } @Override public SelectionModel getSelectionModel() { return this.selectionModel; } @Override public Element getVisibleItem(int indexOnPage) { Element e = this.getRowFormatter().getElement(range.getStart() + indexOnPage); return e; } @Override public int getVisibleItemCount() { return range.getLength(); } @Override public Iterable getVisibleItems() { List res = new ArrayList (); int end = range.getStart() + range.getLength(); if (end > this.getRowCount()) { end = this.getRowCount(); } for (int i = range.getStart(); i < end; i++) { res.add(this.getRowFormatter().getElement(i)); } return res; } @Override public void setRowData(int start, List values) { //todo parse element } @Override public void setSelectionModel(SelectionModel selectionModel) { this.selectionModel = selectionModel; } @Override public void setVisibleRangeAndClearData(Range range, boolean forceRangeChangeEvent) { System.out.println("setVisibleRangeAndClearData"); } //TODO public void refresh() { for (int i = 0; i < this.getRowCount(); i++) { this.getRowFormatter().setVisible(i, false); } int end = range.getStart() + range.getLength(); if (end > this.getRowCount()) { end = this.getRowCount(); } for (int i = range.getStart(); i < end; i++) { this.getRowFormatter().setVisible(i, true); } } }
Pour l'utilisation:
VerticalPanel v = new VerticalPanel(); SimlePager p = new SimplePager(); FlexTableHasRows flex = new FlexTableHasRows(); for (int i = 0; i < 50; i++) { flex.setText(i, 0, i + ""); flex.setText(i, 1, "Text"); } flex.refresh(); p.setDisplay(flex); v.add(flex); v.add(p);
Aucun commentaire:
Enregistrer un commentaire