blob: 8a81f97f25e216aee964df37d69e553aa9ec6109 [file] [log] [blame]
/****************************************************************
* Licensed to the Apache Software Foundation (ASF) under one *
* or more contributor license agreements. See the NOTICE file *
* distributed with this work for additional information *
* regarding copyright ownership. The ASF licenses this file *
* to you under the Apache License, Version 2.0 (the *
* "License"); you may not use this file except in compliance *
* with the License. You may obtain a copy of the License at *
* *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, *
* software distributed under the License is distributed on an *
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *
* KIND, either express or implied. See the License for the *
* specific language governing permissions and limitations *
* under the License. *
****************************************************************/
package org.apache.hupa.widgets.ui;
import org.apache.hupa.widgets.PagingOptionsConstants;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.gen2.table.client.PagingScrollTable;
import com.google.gwt.gen2.table.client.TableModel;
import com.google.gwt.gen2.table.event.client.PageChangeEvent;
import com.google.gwt.gen2.table.event.client.PageChangeHandler;
import com.google.gwt.gen2.table.event.client.PageCountChangeEvent;
import com.google.gwt.gen2.table.event.client.PageCountChangeHandler;
import com.google.gwt.gen2.table.event.client.PageLoadEvent;
import com.google.gwt.gen2.table.event.client.PageLoadHandler;
import com.google.gwt.gen2.table.event.client.PagingFailureEvent;
import com.google.gwt.gen2.table.event.client.PagingFailureHandler;
import com.google.gwt.gen2.table.event.client.RowCountChangeEvent;
import com.google.gwt.gen2.table.event.client.RowCountChangeHandler;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.SimplePanel;
/**
* PagingOptions for using to control the PagingScrollTable
*
*/
public class PagingOptions extends Composite {
private HorizontalPanel pagingPanel = new HorizontalPanel();
private EnableHyperlink firstLink;
private EnableHyperlink prevLink;
private EnableHyperlink lastLink;
private EnableHyperlink nextLink;
private Label text = new Label();
private int currentPage = 1;
private Loading loading = null;
private SimplePanel panel = new SimplePanel();
public PagingOptions(final PagingScrollTable<?> table, PagingOptionsConstants constants, Loading loading) {
this.loading = loading;
<<<<<<< HEAD
firstLink = new EnableHyperlink("<< " + constants.pageFirst(),null);
prevLink = new EnableHyperlink("< " + constants.pagePrev(),null);
lastLink = new EnableHyperlink(constants.pageLast() + " >>",null);
nextLink = new EnableHyperlink(constants.pageNext() + " >",null);
=======
firstLink = new EnableHyperlink("<< " + constants.pageFirst(),"");
prevLink = new EnableHyperlink("< " + constants.pagePrev(),"");
lastLink = new EnableHyperlink(constants.pageLast() + " >>","");
nextLink = new EnableHyperlink(constants.pageNext() + " >","");
>>>>>>> first commit
pagingPanel.setSpacing(3);
pagingPanel.add(panel);
pagingPanel.add(firstLink);
pagingPanel.add(prevLink);
pagingPanel.add(nextLink);
pagingPanel.add(lastLink);
panel.setWidget(text);
panel.setWidth("100px");
pagingPanel.setCellHorizontalAlignment(panel, HorizontalPanel.ALIGN_CENTER);
firstLink.setEnabled(false);
prevLink.setEnabled(false);
lastLink.setEnabled(false);
nextLink.setEnabled(false);
table.addPageCountChangeHandler(new PageCountChangeHandler() {
public void onPageCountChange(PageCountChangeEvent event) {
int startCount = currentPage * table.getPageSize() + 1;
int endCount = currentPage * table.getPageSize() + table.getPageSize();
int rows = table.getTableModel().getRowCount();
updateControl(startCount, endCount, rows);
}
});
table.addPageChangeHandler(new PageChangeHandler() {
public void onPageChange(PageChangeEvent event) {
loading(true);
currentPage = event.getNewPage();
int startCount = currentPage * table.getPageSize() + 1;
int endCount = currentPage * table.getPageSize() + table.getPageSize();
int rows = table.getTableModel().getRowCount();
updateControl(startCount, endCount, rows);
}
});
table.addPageLoadHandler(new PageLoadHandler() {
public void onPageLoad(PageLoadEvent event) {
loading(false);
}
});
table.addPagingFailureHandler(new PagingFailureHandler() {
public void onPagingFailure(PagingFailureEvent event) {
loading(false);
}
});
firstLink.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
table.gotoFirstPage();
}
});
prevLink.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
table.gotoPreviousPage();
}
});
nextLink.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
table.gotoNextPage();
}
});
lastLink.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
table.gotoLastPage();
}
});
table.getTableModel().addRowCountChangeHandler(new RowCountChangeHandler() {
public void onRowCountChange(RowCountChangeEvent event) {
int startCount = currentPage * table.getPageSize() + 1;
int endCount = currentPage * table.getPageSize() + table.getPageSize();
int rows =event.getNewRowCount();
updateControl(startCount, endCount, rows);
}
});
initWidget(pagingPanel);
}
protected void loading(boolean isLoading) {
if (loading != null) {
if (isLoading)
loading.show();
else
loading.hide();
}
}
protected void updateControl(int startCount, int endCount, int rows) {
if (rows == TableModel.UNKNOWN_ROW_COUNT) {
startCount = 0;
endCount = 0;
rows = 0;
}
if (rows < endCount) {
endCount = rows;
}
if (endCount == 0) {
startCount = 0;
}
if (startCount <= 1) {
firstLink.setEnabled(false);
prevLink.setEnabled(false);
} else {
firstLink.setEnabled(true);
prevLink.setEnabled(true);
}
if (rows > endCount) {
lastLink.setEnabled(true);
nextLink.setEnabled(true);
} else {
lastLink.setEnabled(false);
nextLink.setEnabled(false);
}
text.setText(startCount + " - " + endCount + " of " + rows);
}
/**
* Reset the currentPage to 0
*/
public void reset() {
currentPage = 0;
text.setText("0 - 0 of 0");
}
/**
* Return the Link to navigate to the first page
*
* @return firstLink
*/
public EnableHyperlink getFirstLink() {
return firstLink;
}
/**
* Return the Link to navigate to the previous page
*
* @return prevLink
*/
public EnableHyperlink getPrevLink() {
return prevLink;
}
/**
* Return the Link to navigate to the next page
*
* @return nextLink
*/
public EnableHyperlink getNextLink() {
return nextLink;
}
/**
* Return the Link to navigate to the last page
*
* @return lastLink
*/
public EnableHyperlink getLastLink() {
return lastLink;
}
}