/**
*
*/
package org.openflexo.fib.view.widget.browser;
import java.awt.Component;
import java.awt.Font;
import javax.swing.Icon;
import javax.swing.JLabel;
import javax.swing.JTree;
import javax.swing.tree.DefaultTreeCellRenderer;
import org.openflexo.fib.view.widget.FIBBrowserWidget;
import org.openflexo.fib.view.widget.browser.FIBBrowserModel.BrowserCell;
public class FIBBrowserCellRenderer extends DefaultTreeCellRenderer {
private final FIBBrowserWidget widget;
public FIBBrowserCellRenderer(FIBBrowserWidget widget) {
super();
this.widget = widget;
if (widget.getBrowser().getTextSelectionColor() != null) {
setTextSelectionColor(widget.getBrowser().getTextSelectionColor());
}
if (widget.getBrowser().getTextNonSelectionColor() != null) {
setTextNonSelectionColor(widget.getBrowser().getTextNonSelectionColor());
}
if (widget.getBrowser().getBackgroundSelectionColor() != null) {
setBackgroundSelectionColor(widget.getBrowser().getBackgroundSelectionColor());
}
if (widget.getBrowser().getBackgroundNonSelectionColor() != null) {
setBackgroundNonSelectionColor(widget.getBrowser().getBackgroundNonSelectionColor());
}
if (widget.getBrowser().getBorderSelectionColor() != null) {
setBorderSelectionColor(widget.getBrowser().getBorderSelectionColor());
}
if (widget.getFont() != null) {
setFont(widget.getFont());
}
}
/**
*
* 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 getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded, boolean leaf, int row,
boolean hasFocus) {
if (value instanceof BrowserCell) {
Object representedObject = ((BrowserCell) value).getRepresentedObject();
if (sel) {
if (widget.isLastFocusedSelectable()) {
if (widget.getBrowser().getTextSelectionColor() != null) {
setTextSelectionColor(widget.getBrowser().getTextSelectionColor());
}
if (widget.getBrowser().getBackgroundSelectionColor() != null) {
setBackgroundSelectionColor(widget.getBrowser().getBackgroundSelectionColor());
}
} else {
if (widget.getBrowser().getTextNonSelectionColor() != null) {
setTextSelectionColor(widget.getBrowser().getTextNonSelectionColor());
}
if (widget.getBrowser().getBackgroundSecondarySelectionColor() != null) {
setBackgroundSelectionColor(widget.getBrowser().getBackgroundSecondarySelectionColor());
}
}
}
JLabel returned = (JLabel) super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
if (widget.isEnabled()) {
if (isEnabled(representedObject)) {
if (widget.getBrowser().getTextNonSelectionColor() != null) {
setTextNonSelectionColor(widget.getBrowser().getTextNonSelectionColor());
}
} else {
setEnabled(false);
}
}
Font font = getFont(representedObject);
if (font != null) {
returned.setFont(font);
}
returned.setText(getLabel(representedObject));
returned.setIcon(getIcon(representedObject));
returned.setToolTipText(getTooltip(representedObject));
return returned;
}
return super.getTreeCellRendererComponent(tree, value, sel, expanded, leaf, row, hasFocus);
}
/* protected Color getCellBackground(JTree tree, boolean isSelected, boolean hasFocus)
{
if (isSelected) {
if (widget.isLastFocusedSelectable()) return MAIN_SELECTION_COLOR;
else return SECONDARY_SELECTION_COLOR;
}
return tree.getBackground();
}*/
private FIBBrowserElementType getElementType(Object object) {
return widget.getBrowserModel().elementTypeForClass(object.getClass());
}
protected String getLabel(Object object) {
FIBBrowserElementType elementType = getElementType(object);
if (elementType != null) {
return elementType.getLabelFor(object);
}
return object.toString();
}
protected Icon getIcon(Object object) {
FIBBrowserElementType elementType = getElementType(object);
if (elementType != null) {
return elementType.getIconFor(object);
}
return null;
}
protected String getTooltip(Object object) {
FIBBrowserElementType elementType = getElementType(object);
if (elementType != null) {
return elementType.getTooltipFor(object);
}
return object.toString();
}
protected boolean isEnabled(Object object) {
FIBBrowserElementType elementType = getElementType(object);
if (elementType != null) {
// System.out.println("Object "+object+" isEnabled="+elementType.isEnabled(object));
return elementType.isEnabled(object);
}
return true;
}
protected Font getFont(Object object) {
FIBBrowserElementType elementType = getElementType(object);
if (elementType != null) {
return elementType.getFont(object);
}
return widget.getFont();
}
/**
* Overrides updateUI
*
* @see javax.swing.JLabel#updateUI()
*/
/* @Override
public void updateUI()
{
super.updateUI();
// Fix for TreeCellRenderer
setLeafIcon(UIManager.getIcon("Tree.leafIcon"));
setClosedIcon(UIManager.getIcon("Tree.closedIcon"));
setOpenIcon(UIManager.getIcon("Tree.openIcon"));
setTextSelectionColor(UIManager.getColor("Tree.selectionForeground"));
setTextNonSelectionColor(UIManager.getColor("Tree.textForeground"));
setBackgroundSelectionColor(UIManager.getColor("Tree.selectionBackground"));
setBackgroundNonSelectionColor(UIManager.getColor("Tree.textBackground"));
setBorderSelectionColor(UIManager.getColor("Tree.selectionBorderColor"));
}*/
}