package org.openswing.swing.table.columns.client;
import java.util.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.table.*;
import org.openswing.swing.table.client.*;
import org.openswing.swing.table.editors.client.*;
import org.openswing.swing.table.renderers.client.*;
import org.openswing.swing.util.client.*;
import javax.swing.border.Border;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Column of type button: it contains a button with text "..."
* The button text can be redefined.</p>
* <p>Copyright: Copyright (C) 2006 Mauro Carniel</p>
*
* <p> This file is part of OpenSwing Framework.
* This library is free software; you can redistribute it and/or
* modify it under the terms of the (LGPL) Lesser General Public
* License as published by the Free Software Foundation;
*
* GNU LESSER GENERAL PUBLIC LICENSE
* Version 2.1, February 1999
*
* 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
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* The author may be contacted at:
* maurocarniel@tin.it</p>
*
* @author Mauro Carniel
* @version 1.0
*/
public class ButtonColumn extends Column {
/** button text; default value: "..." */
private String text = "...";
/** button action listeners */
private ArrayList actionListeners = new ArrayList();
/** flag used to indicate that attribute value will be showed as button text; default value: <code>false</code> i.e. the button text is defined by the "text" property */
private boolean showAttributeValue = false;
/** flag used to indicate if the button is enabled also when the grid is in readonly mode; default value: <code>false</code> i.e. the button is enabled only in INSERT/EDIT modes, according to "editableOnEdit" and "editableOnInsert" properties */
private boolean enableInReadOnlyMode = false;
/** icon to render within the button (optional) */
private Icon icon = null;
/** file name (inside "image" folder) related to the icon to render within the button (optional) */
private String iconName = null;
/** define the border to show around the button */
private Border buttonBorder = null;
public ButtonColumn() {
setColumnRequired(false);
setTextAlignment(SwingConstants.CENTER);
}
/**
* @return column type
*/
public int getColumnType() {
return TYPE_BUTTON;
}
/**
* @return button text
*/
public final String getText() {
return text;
}
/**
* Set button text.
* @param text button text
*/
public final void setText(String text) {
this.text = text;
}
/**
* Add an ItemListener to the button.
* @param listener ActionListener to add
*/
public final void addActionListener(ActionListener listener) {
actionListeners.add(listener);
}
/**
* Remove an ActionListener from the button.
* @param listener ActionListener to remove
*/
public final void removeActionListener(ActionListener listener) {
actionListeners.remove(listener);
}
/**
* @return ActionListener objects
*/
public final ArrayList getActionListeners() {
return actionListeners;
}
/**
* @return indicate that attribute value will be showed as button text; default value: <code>false</code> i.e. the button text is defined by the "text" property
*/
public final boolean isShowAttributeValue() {
return showAttributeValue;
}
/**
* Indicate that attribute value will be showed as button text; default value: <code>false</code> i.e. the button text is defined by the "text" property
* @param showAttributeValue indicate that attribute value will be showed as button text
*/
public final void setShowAttributeValue(boolean showAttributeValue) {
this.showAttributeValue = showAttributeValue;
}
/**
* @return indicate if the button is enabled also when the grid is in readonly mode; default value: <code>false</code> i.e. the button is enabled only in INSERT/EDIT modes, according to "editableOnEdit" and "editableOnInsert" properties
*/
public final boolean isEnableInReadOnlyMode() {
return enableInReadOnlyMode;
}
/**
* Define if the button is enabled also when the grid is in readonly mode.
* @param enableInReadOnlyMode flag used to indicate if the button is enabled also when the grid is in readonly mode; <code>false</code> means that the button is enabled only in INSERT/EDIT modes, according to "editableOnEdit" and "editableOnInsert" properties
*/
public final void setEnableInReadOnlyMode(boolean enableInReadOnlyMode) {
this.enableInReadOnlyMode = enableInReadOnlyMode;
}
/**
* @return TableCellRenderer for this column
*/
public final TableCellRenderer getCellRenderer(GridController tableContainer,Grids grids) {
return new ButtonTableCellRenderer(
getText(),
isShowAttributeValue(),
tableContainer,
getTextAlignment(),
isEnableInReadOnlyMode(),
icon,
buttonBorder,
getColumnName()
);
}
/**
* @return TableCellEditor for this column
*/
public final TableCellEditor getCellEditor(GridController tableContainer,Grids grids) {
return new ButtonCellEditor(
getText(),
isShowAttributeValue(),
getActionListeners(),
icon,
buttonBorder
);
}
/**
* @return icon to render within the button (optional)
*/
public final Icon getIcon() {
return icon;
}
/**
* Set the icon to render within the button (optional).
* @param icon icon to render within the button (optional)
*/
public final void setIcon(Icon icon) {
this.icon = icon;
}
/**
* @return file name (inside "image" folder) related to the icon to render within the button (optional)
*/
public final String getIconName() {
return iconName;
}
/**
* Set the file name (inside "image" folder) related to the icon to render within the button (optional)
* @param iconName file name (inside "image" folder) related to the icon to render within the button (optional)
*/
public final void setIconName(String iconName) {
this.iconName = iconName;
if (iconName!=null)
icon = new ImageIcon(ClientUtils.getImage(iconName));
}
/**
* @return border to show around the button
*/
public final Border getBorder() {
return buttonBorder;
}
/**
* Define the border to show around the button.
* @param buttonBorder border to show around the button
*/
public final void setBorder(Border buttonBorder) {
this.buttonBorder = buttonBorder;
}
}