com.google.gwt.user.cellview.client.PageSizePager.java Source code

Java tutorial

Introduction

Here is the source code for com.google.gwt.user.cellview.client.PageSizePager.java

Source

/*
 * Copyright 2010 Google Inc.
 *
 * Licensed 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 com.google.gwt.user.cellview.client;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.user.client.ui.Anchor;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.view.client.HasRows;
import com.google.gwt.view.client.Range;

/**
 * A simple pager that controls the page size.
 */
public class PageSizePager extends AbstractPager {

    /**
     * The increment by which to grow or shrink the page size.
     */
    private final int increment;

    /**
     * The main layout widget.
     */
    private final FlexTable layout = new FlexTable();

    // TODO(jlabanca): I18N button text.
    private final Anchor showMoreButton = new Anchor("Show More");
    private final Anchor showLessButton = new Anchor("Show Less");

    /**
     * Construct a PageSizePager with a given increment.
     * 
     * @param increment the amount by which to increase the page size
     */
    @UiConstructor
    public PageSizePager(final int increment) {
        this.increment = increment;
        initWidget(layout);
        layout.setCellPadding(0);
        layout.setCellSpacing(0);

        // Show more button.
        showMoreButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                // Display should be non-null, but we check defensively.
                HasRows display = getDisplay();
                if (display != null) {
                    Range range = display.getVisibleRange();
                    int pageSize = Math.min(range.getLength() + increment,
                            display.getRowCount() + (display.isRowCountExact() ? 0 : increment));
                    display.setVisibleRange(range.getStart(), pageSize);
                }
            }
        });
        showLessButton.addClickHandler(new ClickHandler() {
            public void onClick(ClickEvent event) {
                // Display should be non-null, but we check defensively.
                HasRows display = getDisplay();
                if (display != null) {
                    Range range = display.getVisibleRange();
                    int pageSize = Math.max(range.getLength() - increment, increment);
                    display.setVisibleRange(range.getStart(), pageSize);
                }
            }
        });

        // Add the buttons to the pager.
        layout.setWidget(0, 0, showLessButton);
        layout.setText(0, 1, " | ");
        layout.setWidget(0, 2, showMoreButton);

        // Hide the buttons by default.
        setDisplay(null);
    }

    @Override
    public void setDisplay(HasRows display) {
        // Hide the buttons if the display is null. If the display is non-null, the
        // buttons will be displayed in onRangeOrRowCountChanged().
        if (display == null) {
            showLessButton.setVisible(false);
            showMoreButton.setVisible(false);
        }
        super.setDisplay(display);
    }

    @Override
    public void setPageSize(int pageSize) {
        super.setPageSize(pageSize);
    }

    @Override
    protected void onRangeOrRowCountChanged() {
        // Assumes a page start index of 0.
        HasRows display = getDisplay();
        int pageSize = display.getVisibleRange().getLength();
        boolean hasLess = pageSize > increment;
        boolean hasMore = !display.isRowCountExact() || pageSize < display.getRowCount();
        showLessButton.setVisible(hasLess);
        showMoreButton.setVisible(hasMore);
        layout.setText(0, 1, (hasLess && hasMore) ? " | " : "");
    }

    /**
     * Visible for testing.
     */
    boolean isShowLessButtonVisible() {
        return showLessButton.isVisible();
    }

    /**
     * Visible for testing.
     */
    boolean isShowMoreButtonVisible() {
        return showMoreButton.isVisible();
    }
}