/**
*
*/
package org.openflexo.fib.view.widget.table;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JTable;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableCellRenderer;
import org.openflexo.fib.model.FIBTable;
import org.openflexo.fib.view.widget.FIBTableWidget;
class FIBTableCellRenderer<T> extends DefaultTableCellRenderer {
private final AbstractColumn<T> column;
private Color disabledColor;
private Color disabledBackgroundColor;
public FIBTableCellRenderer(AbstractColumn<T> aColumn) {
super();
column = aColumn;
setFont(column.getColumnModel().retrieveValidFont());
}
@Override
public void updateUI() {
super.updateUI();
disabledColor = UIManager.getDefaults().getColor("Label.disabledForeground");
disabledBackgroundColor = UIManager.getDefaults().getColor("TextArea.disabledBackground");
}
public FIBTableModel getTableModel() {
return column.getTableModel();
}
public FIBTableWidget getTableWidget() {
return column.getTableModel().getTableWidget();
}
public FIBTable getTable() {
return getTableModel().getTable();
}
/**
*
* Returns the cell renderer.
*
* @param table
* the <code>JTable</code>
* @param value
* the value to assign to the cell at <code>[row, column]</code>
* @param isSelected
* true if cell is selected
* @param hasFocus
* true if cell has focus
* @param row
* the row of the cell to render
* @param column
* the column of the cell to render
* @return the default table cell renderer
*/
@Override
public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
setForeground(null);
setBackground(null);
Component returned = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
row = table.convertRowIndexToModel(row);
if (returned instanceof JComponent) {
((JComponent) returned).setToolTipText(this.column.getTooltip(getTableModel().elementAt(row)));
}
if (returned instanceof JLabel) {
((JLabel) returned).setText(this.column.getStringRepresentation(value));
}
if (getTableWidget().isEnabled()) {
if (isSelected) {
if (getTableWidget().isLastFocusedSelectable()) {
if (getTable().getTextSelectionColor() != null) {
setForeground(getTable().getTextSelectionColor());
}
if (getTable().getBackgroundSelectionColor() != null) {
setBackground(getTable().getBackgroundSelectionColor());
}
} else {
if (getTable().getTextNonSelectionColor() != null) {
setForeground(getTable().getTextNonSelectionColor());
}
if (getTable().getBackgroundSecondarySelectionColor() != null) {
setBackground(getTable().getBackgroundSecondarySelectionColor());
}
}
} else {
if (getTable().getTextNonSelectionColor() != null) {
setForeground(getTable().getTextNonSelectionColor());
}
if (getTable().getBackgroundNonSelectionColor() != null) {
setBackground(getTable().getBackgroundNonSelectionColor());
}
}
} else {
if (disabledColor != null) {
setForeground(disabledColor);
} else if (getForeground() != null) {
setForeground(getForeground().brighter());
}
if (disabledBackgroundColor != null) {
setBackground(disabledBackgroundColor);
} else if (getBackground() != null) {
setBackground(getBackground().darker());
}
}
Color specificColor = this.column.getSpecificColor(getTableModel().elementAt(row));
if (specificColor != null) {
setForeground(specificColor);
}
Color specificBgColor = this.column.getSpecificBgColor(getTableModel().elementAt(row));
if (specificBgColor != null) {
setBackground(specificBgColor);
}
return returned;
}
}