/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2002-2008, Open Source Geospatial Foundation (OSGeo)
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* 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
* Lesser General Public License for more details.
*/
package org.geotools.gui.swing.contexttree.renderer;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JComponent;
import javax.swing.JTable;
import org.jdesktop.swingx.RolloverRenderer;
import org.jdesktop.swingx.renderer.CellContext;
import org.jdesktop.swingx.renderer.ComponentProvider;
import org.jdesktop.swingx.renderer.LabelProvider;
import org.jdesktop.swingx.renderer.TableCellContext;
/**
* DefaultCellRenderer for JContextTree columns
*
* @author Johann Sorel
*
* @source $URL$
*/
public class DefaultCellRenderer implements javax.swing.table.TableCellRenderer, org.jdesktop.swingx.RolloverRenderer, java.io.Serializable {
protected ComponentProvider componentController;
private CellContext<JTable> cellContext;
private RenderAndEditComponent view;
/**
* Constructor
* @param component
*/
public DefaultCellRenderer(RenderAndEditComponent component){
this(new Provider(component));
this.view = component;
}
private DefaultCellRenderer(ComponentProvider componentController) {
if (componentController == null) {
componentController = new LabelProvider();
}
this.componentController = componentController;
this.cellContext = new TableCellContext();
}
/**
*
* Returns a configured component, appropriate to render the given
* list cell.
*
* @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
*/
public Component getTableCellRendererComponent(JTable table, Object value,boolean isSelected, boolean hasFocus, int row, int column) {
cellContext.installContext(table, value, row, column, isSelected, hasFocus,true, true);
return componentController.getRendererComponent(cellContext);
}
/**
* @param background
*/
public void setBackground(Color background) {
componentController.getRendererComponent(cellContext).setBackground(background);
}
/**
* @param foreground
*/
public void setForeground(Color foreground) {
componentController.getRendererComponent(cellContext).setForeground(foreground);
}
//----------------- RolloverRenderer
/**
* {@inheritDoc}
*/
public void doClick() {
if (isEnabled()) {
((RolloverRenderer) componentController).doClick();
}
}
/**
* {@inheritDoc}
* @return
*/
public boolean isEnabled() {
return (componentController instanceof RolloverRenderer) && ((RolloverRenderer) componentController).isEnabled();
}
}
class Provider extends ComponentProvider<JComponent>{
/** Creates a new instance of SymbolRendererProvider */
Provider(RenderAndEditComponent view) {
this.rendererComponent = view;
}
@Override
protected void format(CellContext cellContext) {
((RenderAndEditComponent)rendererComponent).parse(cellContext.getValue());
}
@Override
protected void configureState(CellContext cellContext) {}
@Override
protected RenderAndEditComponent createRendererComponent() {
return (RenderAndEditComponent) rendererComponent;
}
}