All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.threerings.gwt.ui.SmartTable Maven / Gradle / Ivy

The newest version!
//
// $Id$
//
// OOO GWT Utils - utilities for creating GWT applications
// Copyright (C) 2009-2010 Three Rings Design, Inc., All Rights Reserved
// http://code.google.com/p/ooo-gwt-utils/
//
// This library is free software; you can redistribute it and/or modify it
// under the terms of the GNU Lesser General Public License as published
// by the Free Software Foundation; either version 2.1 of the License, or
// (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

package com.threerings.gwt.ui;

import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.Widget;

/**
 * Extends {@link FlexTable} with a number of extremely useful utility methods.
 */
public class SmartTable extends FlexTable
{
    /**
     * Performs a number of convenient modifications on a cell, each returning the mutator instance
     * for very legible chaining of modifications.
     */
    public class CellMutator
    {
        /**
         * Sets the cell content to the given widget.
         */
        public CellMutator widget (Widget widget)
        {
            setWidget(_row, _col, widget);
            return this;
        }

        /**
         * Sets the cell content to the given text.
         */
        public CellMutator text (String text)
        {
            setText(_row, _col, text);
            return this;
        }

        /**
         * Sets the cell content to the given html.
         */
        public CellMutator html (String html)
        {
            setHTML(_row, _col, html);
            return this;
        }

        /**
         * Sets the colspan attribute of the cell to the given span.
         */
        public CellMutator colSpan (int span)
        {
            getFlexCellFormatter().setColSpan(_row, _col, span);
            return this;
        }

        /**
         * Adds the given styles to the cell.
         */
        public CellMutator styles (String... names)
        {
            setStyleNames(_row, _col, names);
            return this;
        }

        /**
         * Removes the given styles from the cell.
         */
        public CellMutator removeStyles (String... names)
        {
            removeStyleNames(_row, _col, names);
            return this;
        }

        /**
         * Clears the widget or text from the cell. Does not affect styles.
         */
        public CellMutator clear ()
        {
            clearCell(_row, _col);
            return this;
        }

        /**
         * Sets the vertical alignment for the cell to "top".
         */
        public CellMutator alignTop ()
        {
            valign(_row, _col, HasVerticalAlignment.ALIGN_TOP);
            return this;
        }

        /**
         * Sets the vertical alignment for the cell to "middle".
         */
        public CellMutator alignMiddle ()
        {
            valign(_row, _col, HasVerticalAlignment.ALIGN_MIDDLE);
            return this;
        }

        /**
         * Sets the vertical alignment for the cell to "bottom".
         */
        public CellMutator alignBottom ()
        {
            valign(_row, _col, HasVerticalAlignment.ALIGN_BOTTOM);
            return this;
        }

        /**
         * Sets the horizontal alignment for the cell to "left".
         */
        public CellMutator alignLeft ()
        {
            halign(_row, _col, HasHorizontalAlignment.ALIGN_LEFT);
            return this;
        }

        /**
         * Sets the horizontal alignment for the cell to "center".
         */
        public CellMutator alignCenter ()
        {
            halign(_row, _col, HasHorizontalAlignment.ALIGN_CENTER);
            return this;
        }

        /**
         * Sets the horizontal alignment for the cell to "right".
         */
        public CellMutator alignRight ()
        {
            halign(_row, _col, HasHorizontalAlignment.ALIGN_RIGHT);
            return this;
        }

        /**
         * Sets the horizontal alignment for the cell to "default".
         */
        public CellMutator alignDefault ()
        {
            halign(_row, _col, HasHorizontalAlignment.ALIGN_DEFAULT);
            return this;
        }

        /**
         * Sets the width of the cell.
         */
        public CellMutator width (String width)
        {
            getFlexCellFormatter().setWidth(_row, _col, width);
            return this;
        }

        /**
         * Sets the height of the cell.
         */
        public CellMutator height (String height)
        {
            getFlexCellFormatter().setHeight(_row, _col, height);
            return this;
        }

        /**
         * Moves this cell mutator to the next column in the table.
         */
        public CellMutator nextCol ()
        {
            _col++;
            return this;
        }

        /**
         * Fills in the current row with the given column text values and advances the column.
         */
        public CellMutator fillText (String... values)
        {
            for (String text : values) {
                text(text);
                nextCol();
            }
            return this;
        }

        /**
         * Moves this cell mutator to the next row in the table and the 0th column.
         */
        public CellMutator next ()
        {
            _row++;
            _col = 0;
            return this;
        }

        /**
         * Returns the row number of the cell that this mutator is set to modify.
         */
        public int getRow ()
        {
            return _row;
        }

        /**
         * Returns the column number of the cell that this mutator is set to modify.
         */
        public int getCol ()
        {
            return _col;
        }

        /**
         * Returns the table associated with this mutator.
         */
        public SmartTable finish ()
        {
            return SmartTable.this;
        }

        protected CellMutator (int row, int col)
        {
            _row = row;
            _col = col;
        }

        protected int _row, _col;
    }

    public SmartTable ()
    {
    }

    public SmartTable (int cellPadding, int cellSpacing)
    {
        setCellPadding(cellPadding);
        setCellSpacing(cellSpacing);
    }

    public SmartTable (String styleName, int cellPadding, int cellSpacing)
    {
        setStyleName(styleName);
        setCellPadding(cellPadding);
        setCellSpacing(cellSpacing);
    }

    /**
     * Sets the text in the specified cell, with the specified style and column span.
     *
     * @param text an object whose string value will be displayed.
     */
    public void setText (int row, int column, Object text, int colSpan, String... styles)
    {
        setText(row, column, String.valueOf(text));
        if (colSpan > 0) {
            getFlexCellFormatter().setColSpan(row, column, colSpan);
        }
        setStyleNames(row, column, styles);
    }

    /**
     * Sets the HTML in the specified cell, with the specified style and column span.
     */
    public void setHTML (int row, int column, String text, int colSpan, String... styles)
    {
        setHTML(row, column, text);
        if (colSpan > 0) {
            getFlexCellFormatter().setColSpan(row, column, colSpan);
        }
        setStyleNames(row, column, styles);
    }

    /**
     * Sets the widget in the specified cell, with the specified style and column span.
     */
    public void setWidget (int row, int column, Widget widget, int colSpan, String... styles)
    {
        setWidget(row, column, widget);
        if (colSpan > 0) {
            getFlexCellFormatter().setColSpan(row, column, colSpan);
        }
        setStyleNames(row, column, styles);
    }

    /**
     * Adds text to the bottom row of this table in column zero, with the specified column span and
     * style.
     *
     * @param text an object whose string value will be displayed.
     *
     * @return the row to which the text was added.
     */
    public int addText (Object text, int colSpan, String... styles)
    {
        int row = getRowCount();
        setText(row, 0, text, colSpan, styles);
        return row;
    }

    /**
     * Adds a widget to the bottom row of this table in column zero, with the specified column span
     * and style.
     *
     * @return the row to which the widget was added.
     */
    public int addWidget (Widget widget, int colSpan, String... styles)
    {
        int row = getRowCount();
        setWidget(row, 0, widget, colSpan, styles);
        return row;
    }

    /**
     * Configures the specified style names on the specified row and column. The first style is set
     * as the primary style and additional styles are added onto that.
     */
    public void setStyleNames (int row, int column, String... styles)
    {
        int idx = 0;
        for (String style : styles) {
            if (idx++ == 0) {
                getFlexCellFormatter().setStyleName(row, column, style);
            } else {
                getFlexCellFormatter().addStyleName(row, column, style);
            }
        }
    }

    /**
     * Sets the style of all cells in the given column to the given values. The first style is set
     * as the primary style and additional styles are added onto that.
     */
    public void setColumnCellStyles (int column, String... styles)
    {
        int rowCount = getRowCount();
        for (int row = 0; row < rowCount; ++row) {
            setStyleNames(row, column, styles);
        }
    }

    /**
     * Removes the specified style names on the specified row and column.
     */
    public void removeStyleNames (int row, int column, String... styles)
    {
        for (String style : styles) {
            getFlexCellFormatter().removeStyleName(row, column, style);
        }
    }

    /**
     * Gets a mutator for the given cell.
     */
    public CellMutator cell (int row, int col)
    {
        return new CellMutator(row, col);
    }

    protected void valign (
        int row, int col, HasVerticalAlignment.VerticalAlignmentConstant align)
    {
        getFlexCellFormatter().setVerticalAlignment(row, col, align);
    }

    protected void halign (
        int row, int col, HasHorizontalAlignment.HorizontalAlignmentConstant align)
    {
        getFlexCellFormatter().setHorizontalAlignment(row, col, align);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy