/* * Copyright 2012 Rui Afonso * * 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.googlecode.gwt.charts.client.table; import com.google.gwt.core.client.JsArray; import com.google.gwt.dom.client.Element; import com.googlecode.gwt.charts.client.ChartObject; import com.googlecode.gwt.charts.client.ChartWidget; import com.googlecode.gwt.charts.client.Selection; import com.googlecode.gwt.charts.client.event.HandlerRef; import com.googlecode.gwt.charts.client.event.PageHandler; import com.googlecode.gwt.charts.client.event.ReadyHandler; import com.googlecode.gwt.charts.client.event.SelectHandler; import com.googlecode.gwt.charts.client.event.SortHandler; import com.googlecode.gwt.charts.client.util.ArrayHelper; /** * A table that can be sorted and paged. Table cells can be formatted using format strings, or by directly inserting * HTML as cell values. Numeric values are right-aligned; boolean values are displayed as check marks. Users can select * single rows either with the keyboard or the mouse. Users can sort rows by clicking on column headers. The header row * remains fixed as the user scrolls. The table fires a number of events corresponding to user interaction. */ public class Table extends ChartWidget<TableOptions> { private JsArray<Selection> selection; /** * Creates a new chart widget. */ public Table() { super(); } /** * Adds an handler that listens for page events. * * @param handler the class to call when the event is fired * @return the handler reference */ public HandlerRef addPageHandler(PageHandler handler) { return addHandler(handler); } /** * Adds an handler that listens for ready events. * * @param handler the class to call when the event is fired * @return the handler reference */ public HandlerRef addReadyHandler(ReadyHandler handler) { return addHandler(handler); } /** * Adds an handler that listens for select events. * * @param handler the class to call when the event is fired * @return the handler reference */ public HandlerRef addSelectHandler(SelectHandler handler) { return addHandler(handler); } /** * Adds an handler that listens for sort events. * * @param handler the class to call when the event is fired * @return the handler reference */ public HandlerRef addSortHandler(SortHandler handler) { return addHandler(handler); } /** * Returns an array of selected objects, each one describing a data element in the underlying table used to create * the * visualization (a DataView or a DataTable). Each object has properties row and/or column, with the index of the * row and/or column of the selected item in the underlying DataTable. If the row property is null, then the * selection is a column; if the column property is null, then the selection is a row; if both are non-null, then it * is a specific data item. You can call the DataTable.getValue() method to get the value of the selected item. The * retrieved array can be passed into setSelection(). * * @return an array of selected objects */ public JsArray<Selection> getSelection() { return chartObject.getSelection(); } /** * Call this method to retrieve information about the current sort state of a table that has been sorted (typically * by the user, who has clicked on a column heading to sort the rows by a specific column). If you have disabled * sorting, this method will not work. * * If you have not sorted data in code, or the user has not sorted data by selecting code, the default sort values * will be returned. * * @return information about the current sort state */ public TableSortInfo getSortInfo() { return chartObject.getSortInfo(); } /** * Selects a data entry in the visualization—for example, a point in an area chart, or a bar in a bar chart. When * this method is called, the visualization should visually indicate what the new selection is. The implementation * of setSelection() should not fire a "select" event. Visualizations may ignore part of the selection. For example, * a table that can show only selected rows may ignore cell or column elements in its setSelection() implementation, * or it can select the entire row. * * Every time this method is called, all selected items are deselected, and the new selection list passed in should * be applied. There is no explicit way to deselect individual items; to deselect individual items, call * setSelection() with the items to remain selected; to deselect all elements, call setSelection(), * setSelection(null), or setSelection([]). * * @param selection */ public void setSelection(Selection... selection) { this.selection = ArrayHelper.createArray(selection); chartObject.setSelection(this.selection); } @Override protected native ChartObject createChartObject(Element container) /*-{ return new $wnd.google.visualization.Table(container); }-*/; @Override protected void redrawNow() { super.redrawNow(); if (selection != null) { chartObject.setSelection(selection); } } }