Java tutorial
/* * Copyright 2008 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.gen2.demo.scrolltable.client.option.log; import com.google.gwt.core.client.Duration; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.gen2.demo.scrolltable.client.PagingScrollTableDemo; import com.google.gwt.gen2.demo.scrolltable.client.ScrollTableDemo; import com.google.gwt.gen2.demo.scrolltable.client.option.AbstractOption; import com.google.gwt.gen2.demo.scrolltable.shared.Student; import com.google.gwt.gen2.table.client.FixedWidthGrid; import com.google.gwt.gen2.table.client.PagingScrollTable; import com.google.gwt.gen2.table.client.TableModelHelper.ColumnSortList; import com.google.gwt.gen2.table.event.client.CellHighlightEvent; import com.google.gwt.gen2.table.event.client.CellHighlightHandler; import com.google.gwt.gen2.table.event.client.CellUnhighlightEvent; import com.google.gwt.gen2.table.event.client.CellUnhighlightHandler; import com.google.gwt.gen2.table.event.client.ColumnSortEvent; import com.google.gwt.gen2.table.event.client.ColumnSortHandler; 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.PageLoadEvent; import com.google.gwt.gen2.table.event.client.PageLoadHandler; import com.google.gwt.gen2.table.event.client.RowHighlightEvent; import com.google.gwt.gen2.table.event.client.RowHighlightHandler; import com.google.gwt.gen2.table.event.client.RowSelectionEvent; import com.google.gwt.gen2.table.event.client.RowSelectionHandler; import com.google.gwt.gen2.table.event.client.RowUnhighlightEvent; import com.google.gwt.gen2.table.event.client.RowUnhighlightHandler; import com.google.gwt.gen2.table.event.client.TableEvent.Cell; import com.google.gwt.gen2.table.event.client.TableEvent.Row; import com.google.gwt.gen2.table.override.client.FlexTable; import com.google.gwt.user.client.DOM; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.ScrollPanel; import com.google.gwt.user.client.ui.SourcesTableEvents; import com.google.gwt.user.client.ui.TableListener; import com.google.gwt.user.client.ui.Widget; import java.util.Set; /** * An option. */ public class LogOption extends AbstractOption { /** * The main layout widget. */ private FlexTable layout = null; /** * The label that contains the log info. */ private HTML logLabel = null; /** * The line count in the log. */ private int lineCount = 0; /** * The duration of a page load. */ private Duration pageLoadDuration = null; public LogOption() { // The log should initialize immediately initialize(); } @Override protected String getDescription() { return ""; } @Override protected Widget onInitialize() { layout = new FlexTable(); // Create the log area logLabel = new HTML(); logLabel.setHeight("200px"); DOM.setStyleAttribute(logLabel.getElement(), "font", "8pt/10pt courier"); ScrollPanel scrollPanel = new ScrollPanel(logLabel); scrollPanel.setPixelSize(500, 200); DOM.setStyleAttribute(scrollPanel.getElement(), "border", "1px solid black"); layout.setWidget(0, 0, scrollPanel); layout.getFlexCellFormatter().setColSpan(0, 0, 2); // Add a clear button Button clearButton = new Button("Clear Log", new ClickHandler() { public void onClick(ClickEvent event) { logLabel.setHTML(""); lineCount = 0; } }); layout.setWidget(1, 0, clearButton); layout.getFlexCellFormatter().setColSpan(1, 0, 2); // Add labels for highlighting final Label highlightedCellLabel = new Label("Highlighted cell:"); final Label highlightedRowLabel = new Label("Highlighted row:"); final Label unhighlightedCellLabel = new Label("Last unhighlighted cell:"); final Label unhighlightedRowLabel = new Label("Last unhighlighted row:"); layout.setWidget(2, 0, highlightedCellLabel); layout.setWidget(3, 0, highlightedRowLabel); layout.setWidget(2, 1, unhighlightedRowLabel); layout.setWidget(3, 1, unhighlightedCellLabel); // Add all of the listeners FixedWidthGrid dataTable = ScrollTableDemo.get().getDataTable(); dataTable.addTableListener(new TableListener() { public void onCellClicked(SourcesTableEvents sender, int row, int cell) { addLogEntry("cell clicked: (" + row + "," + cell + ")", "#ff00ff"); } }); dataTable.addColumnSortHandler(new ColumnSortHandler() { public void onColumnSorted(ColumnSortEvent event) { ColumnSortList sortList = event.getColumnSortList(); int column = -1; boolean ascending = true; if (sortList != null) { column = sortList.getPrimaryColumn(); ascending = sortList.isPrimaryAscending(); } if (ascending) { addLogEntry("sorted column: " + column + " (ascending)", "black"); } else { addLogEntry("sorted column: " + column, "black"); } } }); dataTable.addCellHighlightHandler(new CellHighlightHandler() { public void onCellHighlight(CellHighlightEvent event) { Cell cell = event.getValue(); highlightedCellLabel .setText("Highlighted cell: (" + cell.getRowIndex() + "," + cell.getCellIndex() + ")"); } }); dataTable.addCellUnhighlightHandler(new CellUnhighlightHandler() { public void onCellUnhighlight(CellUnhighlightEvent event) { Cell cell = event.getValue(); unhighlightedCellLabel.setText( "Last unhighlighted cell: (" + cell.getRowIndex() + "," + cell.getCellIndex() + ")"); } }); dataTable.addRowHighlightHandler(new RowHighlightHandler() { public void onRowHighlight(RowHighlightEvent event) { Row cell = event.getValue(); highlightedRowLabel.setText("Highlighted row: (" + cell.getRowIndex() + ")"); } }); dataTable.addRowUnhighlightHandler(new RowUnhighlightHandler() { public void onRowUnhighlight(RowUnhighlightEvent event) { Row cell = event.getValue(); unhighlightedRowLabel.setText("Last unhighlighted row: (" + cell.getRowIndex() + ")"); } }); dataTable.addRowSelectionHandler(new RowSelectionHandler() { public void onRowSelection(RowSelectionEvent event) { // Show the previously selected rows Set<Row> deselectedRows = event.getDeselectedRows(); String previous = "Previously selected rows: "; for (Row row : event.getOldValue()) { if (deselectedRows.contains(row)) { previous += "-"; } previous += row.getRowIndex() + ", "; } addLogEntry(previous, "green"); // Show the currently selected rows Set<Row> selectedRows = event.getSelectedRows(); String current = "Currently selected rows: "; for (Row row : event.getNewValue()) { if (selectedRows.contains(row)) { current += "+"; } current += row.getRowIndex() + ", "; } addLogEntry(current, "green"); } }); // Paging specific options if (PagingScrollTableDemo.get() != null) { PagingScrollTable<Student> pagingScrollTable = PagingScrollTableDemo.get().getPagingScrollTable(); if (pagingScrollTable != null) { pagingScrollTable.addPageChangeHandler(new PageChangeHandler() { public void onPageChange(PageChangeEvent event) { pageLoadDuration = new Duration(); } }); pagingScrollTable.addPageLoadHandler(new PageLoadHandler() { public void onPageLoad(PageLoadEvent event) { // Convert to 1 based index int page = event.getPage() + 1; int duration = -1; if (pageLoadDuration != null) { duration = pageLoadDuration.elapsedMillis(); pageLoadDuration = null; } String text = "Page " + page + " loaded in " + duration + "ms"; addLogEntry(text, "black"); } }); } } return layout; } /** * Add some data to the log. * * @param text the text to add * @param color the text color */ private void addLogEntry(String text, String color) { text = "<B>" + lineCount + ":</B> " + "<FONT color=\"" + color + "\">" + text + "</FONT>" + "<BR>" + logLabel.getHTML(); logLabel.setHTML(text); lineCount++; } }