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.*;
/**
* <p>Title: OpenSwing Framework</p>
* <p>Description: Column of type check-box.
* <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 CheckBoxColumn extends Column {
/** value used to select the check-box; default value: Boolean.TRUE */
private Object positiveValue = new Boolean(true);
/** value used to deselect the check-box; default value: Boolean.FALSE */
private Object negativeValue = new Boolean(false);
/** list of ItemListener object linked to the check-box */
private ArrayList itemListeners = new ArrayList();
/** flag used to indicate if the check-box is enabled also when the grid is in readonly mode; default value: <code>false</code> i.e. the check-box is enabled only in INSERT/EDIT modes, according to "editableOnEdit" and "editableOnInsert" properties */
private boolean enableInReadOnlyMode = false;
/** define if null value is alloed (i.e. distinct from Boolean.FALSE value); default value: <code>false</code> */
private boolean allowNullValue = false;
/** define whether "select all" and "deselect all" menu items have to be added to popup menu when right clicking on this check-box column; default value: <code>false</code> */
private boolean showDeSelectAllInPopupMenu = false;
/** define whether "select all" and "deselect all" commands must be applied on editable cells or on all cells, independently from cells editability; default value: <code>false</code>, i.e. do not select all cells independently from cells editability; note: this flag is used only when "showDeSelectAllInPopupMenu" property is set to <code>true</code> */
private boolean deSelectAllCells = false;
public CheckBoxColumn() {
setTextAlignment(SwingConstants.CENTER);
}
/**
* @return coumn type
*/
public final int getColumnType() {
return TYPE_CHECK;
}
/**
* Add an ItemListener to the check-box.
*/
public final void addItemListener(ItemListener listener) {
itemListeners.add(listener);
}
/**
* @return value used to select the check-box
*/
public final Object getPositiveValue() {
return positiveValue;
}
/**
* Set the value used to select the check-box.
* @param positiveValue value used to select the check-box
*/
public final void setPositiveValue(Object positiveValue) {
this.positiveValue = positiveValue;
}
/**
* @return value used to deselect the check-box
*/
public final Object getNegativeValue() {
return negativeValue;
}
/**
* Set the value used to deselect the check-box .
* @param negativeValue value used to deselect the check-box
*/
public final void setNegativeValue(Object negativeValue) {
this.negativeValue = negativeValue;
}
/**
* @return list of ItemListener object linked to the check-box
*/
public ArrayList getItemListeners() {
return itemListeners;
}
/**
* @return indicate if the check-box is enabled also when the grid is in readonly mode; default value: <code>false</code> i.e. the check-box is enabled only in INSERT/EDIT modes, according to "editableOnEdit" and "editableOnInsert" properties
*/
public final boolean isEnableInReadOnlyMode() {
return enableInReadOnlyMode;
}
/**
* Define if the check-box is enabled also when the grid is in readonly mode.
* @param enableInReadOnlyMode flag used to indicate if the check-box is enabled also when the grid is in readonly mode; <code>false</code> means that the check-box 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 CheckBoxTableCellRenderer(
tableContainer,
getTextAlignment(),
isEnableInReadOnlyMode(),
isAllowNullValue(),
getColumnName(),
positiveValue,
negativeValue
);
}
/**
* @return TableCellEditor for this column
*/
public final TableCellEditor getCellEditor(GridController tableContainer,Grids grids) {
return new CheckBoxCellEditor(
grids,
isColumnRequired(),
getItemListeners(),
isAllowNullValue(),
positiveValue,
negativeValue
);
}
/**
* @return define if null value is alloed (i.e. distinct from Boolean.FALSE value)
*/
public final boolean isAllowNullValue() {
return allowNullValue;
}
/**
* Define if null value is alloed (i.e. distinct from Boolean.FALSE value)
* @param allowNullValue define if null value is alloed (i.e. distinct from Boolean.FALSE value)
*/
public final void setAllowNullValue(boolean allowNullValue) {
this.allowNullValue = allowNullValue;
}
/**
* @return define whether "select all" and "deselect all" commands must be applied on editable cells or on all cells, independently from cells editability; default value: <code>false</code>, i.e. do not select all cells independently from cells editability
*/
public final boolean isDeSelectAllCells() {
return deSelectAllCells;
}
/**
* @return define whether "select all" and "deselect all" menu items have to be added to popup menu when right clicking on this check-box column
*/
public final boolean isShowDeSelectAllInPopupMenu() {
return showDeSelectAllInPopupMenu;
}
/**
* Define whether "select all" and "deselect all" menu items have to be added to popup menu when right clicking on this check-box column.
* Default value: <code>false</code>
* @param showDeSelectAllInPopupMenu define whether "select all" and "deselect all" menu items have to be added to popup menu when right clicking on this check-box column
*/
public final void setShowDeSelectAllInPopupMenu(boolean showDeSelectAllInPopupMenu) {
this.showDeSelectAllInPopupMenu = showDeSelectAllInPopupMenu;
}
/**
* Define whether "select all" and "deselect all" commands must be applied on editable cells or on all cells, independently from cells editability; default value: <code>false</code>, i.e. do not select all cells independently from cells editability.
* Note: this flag is used only when "showDeSelectAllInPopupMenu" property is set to <code>true</code>.
* @param deSelectAllCells define whether "select all" and "deselect all" commands must be applied on editable cells or on all cells, independently from cells editability; default value: <code>false</code>, i.e. do not select all cells independently from cells editability
*/
public final void setDeSelectAllCells(boolean deSelectAllCells) {
this.deSelectAllCells = deSelectAllCells;
}
}