package com.gwt.ui.client.masterview;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.VerticalPanel;
/**
*
* @author ibouakl
*
*/
public class Pager extends Composite implements ClickHandler {
public static final String PAGER_STYLE = "masterview-pager";
public static final String PAGER_STATUS_STYLE = "masterview-pager-status";
public static final String PAGER_NAVIGATION_STYLE = "masterview-pager-navigation";
private Label pagerStatusLabel = new Label("");
private ListBox goToPageListBox = new ListBox();
private ImageButtonBase firstPageButton;
private ImageButtonBase previousPageButton;
private ImageButtonBase nextPageButton;
private ImageButtonBase lastPageButton;
private Grid grid;
private SimplePanel header = new SimplePanel();
private DockPanel topBar = new DockPanel();
private VerticalPanel pageablePane = new VerticalPanel();
public Pager(Grid grid, boolean enablePagination) {
goToPageListBox.setVisibleItemCount(1);
this.grid = grid;
grid.setWidth("100%");
pageablePane.add(grid);
if (enablePagination) {
initializePagination();
}
pageablePane.setSpacing(0);
pageablePane.setCellWidth(grid, "100%");
pageablePane.setStyleName(PAGER_STYLE);
initWidget(pageablePane);
}
public final void initializePagination() {
grid.getDataSource().addDataSourceListener(new DataSourceListener() {
@Override
public void onDataChanged(int readItemsCount, int allItemsCount) {
setStatus(readItemsCount, allItemsCount);
setButtonsState();
}
});
firstPageButton = new ImageButtonBase(new Image(GWT.getModuleBaseURL() + "masterview/page-first.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-first.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-first-disabled.gif"));
firstPageButton.addClickHandler(this);
previousPageButton = new ImageButtonBase(new Image(GWT.getModuleBaseURL() + "masterview/page-prev.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-prev.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-prev-disabled.gif"));
previousPageButton.addClickHandler(this);
nextPageButton = new ImageButtonBase(new Image(GWT.getModuleBaseURL() + "masterview/page-next.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-next.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-next-disabled.gif"));
nextPageButton.addClickHandler(this);
lastPageButton = new ImageButtonBase(new Image(GWT.getModuleBaseURL() + "masterview/page-last.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-last.gif"), new Image(GWT.getModuleBaseURL() + "masterview/page-last-disabled.gif"));
lastPageButton.addClickHandler(this);
firstPageButton.setWidth("16px");
previousPageButton.setWidth("16px");
nextPageButton.setWidth("16px");
lastPageButton.setWidth("16px");
topBar.setHeight("100%");
topBar.setWidth("100%");
pagerStatusLabel.setStyleName(PAGER_STATUS_STYLE);
pagerStatusLabel.setHeight("100%");
header.setStylePrimaryName(PAGER_NAVIGATION_STYLE);
header.setWidget(topBar);
/*header.setHeight("21px");*/
topBar.add(firstPageButton, DockPanel.WEST);
topBar.add(previousPageButton, DockPanel.WEST);
topBar.add(nextPageButton, DockPanel.WEST);
topBar.add(lastPageButton, DockPanel.WEST);
topBar.add(pagerStatusLabel, DockPanel.EAST);
pageablePane.add(header);
topBar.setCellWidth(firstPageButton, "16px");
topBar.setCellWidth(previousPageButton, "16px");
topBar.setCellWidth(nextPageButton, "16px");
topBar.setCellWidth(lastPageButton, "16px");
pageablePane.setCellWidth(header, "100%");
previousPageButton.setEnabled(false);
firstPageButton.setEnabled(false);
topBar.setCellVerticalAlignment(firstPageButton, VerticalPanel.ALIGN_MIDDLE);
topBar.setCellVerticalAlignment(previousPageButton, VerticalPanel.ALIGN_MIDDLE);
topBar.setCellVerticalAlignment(nextPageButton, VerticalPanel.ALIGN_MIDDLE);
topBar.setCellVerticalAlignment(lastPageButton, VerticalPanel.ALIGN_MIDDLE);
topBar.setCellVerticalAlignment(pagerStatusLabel, VerticalPanel.ALIGN_MIDDLE);
setButtonsState();
}
public final void setButtonsState() {
int pageCount = grid.getDataSource().getPageCount();
int currentPageNumber = grid.getDataSource().getCurrentPageNumber();
previousPageButton.setEnabled(true);
nextPageButton.setEnabled(true);
firstPageButton.setEnabled(true);
lastPageButton.setEnabled(true);
if (currentPageNumber == 0) {
previousPageButton.setEnabled(false);
firstPageButton.setEnabled(false);
}
if (currentPageNumber == (pageCount - 1)) {
nextPageButton.setEnabled(false);
lastPageButton.setEnabled(false);
}
}
public void setStatus(int displayedItems, int allItems) {
pagerStatusLabel.setText("Affichage " + String.valueOf(displayedItems) + " ligne(s) sur" + String.valueOf(allItems));
}
@Override
public void onClick(ClickEvent event) {
if (event.getSource() == nextPageButton) {
grid.getDataSource().toNextPage();
} else if (event.getSource() == previousPageButton) {
grid.getDataSource().toPreviousPage();
} else if (event.getSource() == firstPageButton) {
grid.getDataSource().toFirstPage();
} else if (event.getSource() == lastPageButton) {
grid.getDataSource().toLastPage();
}
setButtonsState();
}
}