blob: 4eca4a3e8241293a9520d604b6a55c2f27a356a8 [file] [log] [blame]
/*
* Copyright 2011 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.dom.builder.shared.TableSectionBuilder;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.TableRowElement;
/**
* Builds the DOM elements for the footer section of a CellTable. It also
* provides queries on elements in the last DOM subtree that it created.
*
* <p>
* {@link FooterBuilder} provides two optional ways to handle events, via a
* {@link Column}, a {@link Header}, or both. If {@link #getColumn(Element)}
* returns a {@link Column} given the target {@link Element} of an event, cell
* table will use it to enable features such as sorting. If
* {@link #getHeader(Element)} returns a {@link Header}, cell table will forward
* the event to the {@link Header}. You can specify both a {@link Column} and
* {@link Header}.
* </p>
*
* <p>
* The default implementation used by cell widgets is
* {@link DefaultHeaderOrFooterBuilder}.
* </p>
*
* @param <T> the row data type
*/
public interface FooterBuilder<T> {
/**
* Builds the DOM subtree for this footer. The root of the subtree must be a
* TFOOT element, as appropriate. This method may be called multiple times and
* should return a new DOM subtree each time.
*
* <p>
* If the footer is empty, return null.
* </p>
*
* @return a {@link TableSectionBuilder} representing the new footer, or null
* if the footer is empty
*/
TableSectionBuilder buildFooter();
/**
* Given an element in the DOM subtree returned by the most recent call to
* {@link #buildFooter()}, returns the Column that should be the target of any
* button clicks or other events on that element, or null if the events should
* be discarded. The column is used to support features such as column
* sorting.
*
* @param elem the element that the contains column
* @return the immediate column contained by the element
*/
Column<T, ?> getColumn(Element elem);
/**
* If you want to handle browser events using a subclass of {@link Header},
* implement this method to return the appropriate instance and cell table
* will forward events originating in the element to the {@link Header}.
* Return null if events from the element should be discarded.
*
* @param elem the element that the contains header
* @return the immediate {@link Header} contained by the element
*/
Header<?> getHeader(Element elem);
/**
* Get the row index from the associated
* {@link TableRowElement} (an TR element).
*
* @param row the row element
* @return the row value index
*/
int getRowIndex(TableRowElement row);
/**
* Check if an element contains a {@link Column}. This method should return
* false if and only if {@link #getColumn(Element)} would return null.
*
* @param elem the element of interest
*/
boolean isColumn(Element elem);
/**
* Check if an element contains a {@link Header}. This method should return
* false if and only if {@link #getHeader(Element)} would return null.
*
* @param elem the element of interest
*/
boolean isHeader(Element elem);
}