package kornell.gui.client.util.view; import java.util.List; import com.github.gwtbootstrap.client.ui.CellTable; import com.github.gwtbootstrap.client.ui.NavLink; import com.github.gwtbootstrap.client.ui.Pagination; import com.github.gwtbootstrap.client.ui.base.IconAnchor; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; @SuppressWarnings({"rawtypes", "unchecked"}) public class KornellPagination extends Pagination{ private PaginationPresenter presenter; private int maxPaginationTabs = 10; private int totalRowCount = 0; private CellTable table; public KornellPagination(CellTable table, PaginationPresenter presenter) { this.presenter = presenter; this.table = table; } private void updatePagination(List rowData){ clear(); table.setRowData(rowData); int pageSize = Integer.parseInt(presenter.getPageSize()); int pageNumber = Integer.parseInt(presenter.getPageNumber()); int navLinkCount = (totalRowCount+pageSize-1)/pageSize; setVisible(navLinkCount > 1); setAlignment("centered"); if(navLinkCount < maxPaginationTabs){ for(int i = 1; i <= navLinkCount; i++){ add(createNavLink(i, i==pageNumber)); } } else if(pageNumber <= (maxPaginationTabs / 2)){ for(int i = 1; i <= maxPaginationTabs; i++){ add(createNavLink(i, i==pageNumber)); } add(createNavLink(">", navLinkCount)); } else if(pageNumber > navLinkCount - (maxPaginationTabs / 2)){ add(createNavLink("<", 1)); for(int i = (navLinkCount - maxPaginationTabs) + 1; i <= navLinkCount; i++){ add(createNavLink(i, i==pageNumber)); } } else { add(createNavLink("<", 1)); for(int i = pageNumber - (maxPaginationTabs / 2); i <= pageNumber + (maxPaginationTabs / 2); i++){ add(createNavLink(i, i==pageNumber)); } add(createNavLink(">", navLinkCount)); } } private NavLink createNavLink(int i, boolean active) { return createNavLink(""+i, i, active); } private NavLink createNavLink(String text, int pageNumber) { return createNavLink(text, pageNumber, false); } private NavLink createNavLink(String text, int pageNumber, boolean active) { NavLink navLink = new NavLink(); navLink.setText(text); navLink.setName(""+pageNumber); navLink.setActive(active); if(pageNumber > 0){ navLink.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { IconAnchor thisThing = (IconAnchor) event.getSource(); presenter.setPageNumber(thisThing.getName().trim()); presenter.updateData(); } }); } return navLink; } public void setRowData(List rowData, int totalRowCount) { this.totalRowCount = totalRowCount; updatePagination(rowData); } }