package de.uni_luebeck.inb.krabbenhoeft.eQTL.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.BlurEvent;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataRetrieval;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataRetrievalAsync;
import de.uni_luebeck.inb.krabbenhoeft.eQTL.api.gwt.DataSetLayerOverview;
public class LayerTableView extends Composite {
interface LayerTableViewUiBinder extends UiBinder<Widget, LayerTableView> {
}
private static LayerTableViewUiBinder uiBinder = GWT.create(LayerTableViewUiBinder.class);
// private final MyMessages myMessages = (MyMessages)
// GWT.create(MyMessages.class);
private final DataRetrievalAsync dataRetrievalService = GWT.create(DataRetrieval.class);
private final DataSetLayerOverview dataSetLayerOverview;
@UiField
Button prevA, prevB, nextA, nextB;
@UiField
TextBox pageA, pageB;
@UiField
Grid table;
int currentPage;
int lastPageIndex;
static int itemsPerPage = 25;
public LayerTableView(DataSetLayerOverview dataSetLayerOverview) {
this.dataSetLayerOverview = dataSetLayerOverview;
initWidget(uiBinder.createAndBindUi(this));
lastPageIndex = (int) Math.floor((double) dataSetLayerOverview.numberOfDataRows / (double) itemsPerPage);
if (lastPageIndex > 49)
lastPageIndex = 49;
table.resize(1, dataSetLayerOverview.columns.length);
for (int i = 0; i < dataSetLayerOverview.columns.length; i++) {
table.setText(0, i, dataSetLayerOverview.columns[i]);
}
table.getRowFormatter().addStyleName(0, "tableHeader");
// refresh pagination
currentPage = -1;
setCurrentPage(0);
}
void setCurrentPage(int newPage) {
if (newPage < 0)
newPage = 0;
if (newPage > lastPageIndex)
newPage = lastPageIndex;
if (newPage == currentPage)
return;
currentPage = newPage;
final String text = Integer.toString(currentPage + 1);
pageA.setText(text);
pageB.setText(text);
boolean enablePrev = currentPage > 0;
prevA.setEnabled(enablePrev);
prevB.setEnabled(enablePrev);
boolean enableNext = currentPage < lastPageIndex;
nextA.setEnabled(enableNext);
nextB.setEnabled(enableNext);
table.resizeRows(1);
new AutoRetry<String[][]>() {
public void success(String[][] result) {
table.resizeRows(1 + result.length);
for (int i = 0; i < result.length; i++) {
for (int j = 0; j < result[i].length; j++) {
table.setText(1 + i, j, result[i][j]);
}
}
}
public void invoke(AsyncCallback<String[][]> callback) {
dataRetrievalService.getLayerRows(dataSetLayerOverview.layerKey, currentPage * itemsPerPage, itemsPerPage, callback);
}
}.run();
}
@UiHandler( { "prevA", "prevB" })
void onClickPrev(ClickEvent e) {
setCurrentPage(currentPage - 1);
}
@UiHandler( { "nextA", "nextB" })
void onClickNext(ClickEvent e) {
setCurrentPage(currentPage + 1);
}
@UiHandler("pageA")
void onChangePageA(BlurEvent e) {
setCurrentPage(Integer.parseInt(pageA.getText()) - 1);
}
@UiHandler("pageB")
void onChangePageB(BlurEvent e) {
setCurrentPage(Integer.parseInt(pageB.getText()) - 1);
}
}