/******************************************************************************
* Product: Posterita Ajax UI *
* Copyright (C) 2007 Posterita Ltd. All Rights Reserved. *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program 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 General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* Posterita Ltd., 3, Draper Avenue, Quatre Bornes, Mauritius *
* or via info@posterita.org or http://www.posterita.org/ *
*****************************************************************************/
package org.adempiere.webui.component;
/**
* @author Andrew Kimball
*
*/
public class WTableColumn
{
/** The width of the column. */
protected int width;
/** The minimum width of the column. */
protected int minWidth;
/** The preferred width of the column. */
private int preferredWidth;
/** The maximum width of the column. */
protected int maxWidth;
/** If true, the user is allowed to resize the column; the default is true. */
protected boolean isResizable;
/** The header value of the column. */
protected Object headerValue;
protected Class columnClass;
/**
* Cover method, using a default width of 75
* @see #WTableColumn(int)
*/
public WTableColumn() {
this(75);
}
public WTableColumn(int width)
{
this.width = width;
this.preferredWidth = width;
// Set other instance variables to default values.
minWidth = 15;
maxWidth = Integer.MAX_VALUE;
isResizable = true;
headerValue = null;
}
/**
* Sets the <code>Object</code> whose string representation will be
* used as the value for the <code>headerRenderer</code>. When the
* <code>WTableColumn</code> is created, the default <code>headerValue</code>
* is <code>null</code>.
*
* @param headerValue the new headerValue
* @see #getHeaderValue
*/
public void setHeaderValue(Object headerValue)
{
this.headerValue = headerValue;
return;
}
/**
* Returns the <code>Object</code> used as the value for the header
* renderer.
*
* @return the <code>headerValue</code> property
* @see #setHeaderValue
*/
public Object getHeaderValue()
{
return headerValue;
}
/**
* This method should not be used to set the widths of columns in the
* <code>WListbox</code>, use <code>setPreferredWidth</code> instead.
* This method sets this column's width to <code>width</code>.
* If <code>width</code> exceeds the minimum or maximum width,
* it is adjusted to the appropriate limiting value.
* <p>
* @param width the new width
* @see #getWidth
* @see #setMinWidth
* @see #setMaxWidth
* @see #setPreferredWidth
*/
public void setWidth(int width)
{
this.width = Math.min(Math.max(width, minWidth), maxWidth);
return;
}
/**
* Returns the width of the <code>TableColumn</code>. The default width is
* 75.
*
* @return the <code>width</code> property
* @see #setWidth
*/
public int getWidth()
{
return width;
}
/**
* Sets this column's preferred width to <code>preferredWidth</code>.
* If <code>preferredWidth</code> exceeds the minimum or maximum width,
* it is adjusted to the appropriate limiting value.
*
* @param preferredWidth the new preferred width
* @see #getPreferredWidth
*/
public void setPreferredWidth(int preferredWidth)
{
this.preferredWidth = Math.min(Math.max(preferredWidth, minWidth), maxWidth);
}
/**
* Returns the preferred width of the <code>WTableColumn</code>.
* The default preferred width is 75.
*
* @return the <code>preferredWidth</code> property
* @see #setPreferredWidth
*/
public int getPreferredWidth()
{
return preferredWidth;
}
/**
* Sets the <code>WTableColumn</code>'s minimum width to
* <code>minWidth</code>; also adjusts the current width
* and preferred width if they are less than this value.
*
* @param minWidth the new minimum width
* @see #getMinWidth
* @see #setPreferredWidth
* @see #setMaxWidth
*/
public void setMinWidth(int minWidth)
{
this.minWidth = Math.max(minWidth, 0);
if (width < minWidth)
{
setWidth(minWidth);
}
if (preferredWidth < minWidth)
{
setPreferredWidth(minWidth);
}
return;
}
/**
* Returns the minimum width for the <code>WTableColumn</code>. The
* <code>WTableColumn</code>'s width can't be made less than this either
* by the user or programmatically. The default minWidth is 15.
*
* @return the <code>minWidth</code> property
* @see #setMinWidth
*/
public int getMinWidth()
{
return minWidth;
}
/**
* Sets the <code>WTableColumn</code>'s maximum width to
* <code>maxWidth</code>; also adjusts the width and preferred
* width if they are greater than this value.
*
* @param maxWidth the new maximum width
* @see #getMaxWidth
* @see #setPreferredWidth
* @see #setMinWidth
*/
public void setMaxWidth(int maxWidth)
{
this.maxWidth = Math.max(minWidth, maxWidth);
if (width > maxWidth)
{
setWidth(maxWidth);
}
if (preferredWidth > maxWidth)
{
setPreferredWidth(maxWidth);
}
return;
}
/**
* Returns the maximum width for the <code>WTableColumn</code>. The
* <code>WTableColumn</code>'s width can't be made larger than this
* either by the user or programmatically. The default maxWidth
* is Integer.MAX_VALUE.
*
* @return the <code>maxWidth</code> property
* @see #setMaxWidth
*/
public int getMaxWidth()
{
return maxWidth;
}
/**
* Sets whether this column can be resized.
*
* @param isResizable if true, resizing is allowed; otherwise false
* @see #getResizable
*/
public void setResizable(boolean isResizable)
{
this.isResizable = isResizable;
}
/**
* Returns true if the user is allowed to resize the
* <code>WTableColumn</code>'s
* width, false otherwise. You can change the width programmatically
* regardless of this setting. The default is true.
*
* @return the <code>isResizable</code> property
* @see #setResizable
*/
public boolean getResizable()
{
return isResizable;
}
/**
*
* @return Class
*/
public Class getColumnClass()
{
return columnClass;
}
/**
*
* @param columnClass
*/
public void setColumnClass(Class columnClass)
{
this.columnClass = columnClass;
}
}