001/*
002 * $Id: AbstractRenderer.java 3927 2011-02-22 16:34:11Z kleopatra $
003 *
004 * Copyright 2007 Sun Microsystems, Inc., 4150 Network Circle,
005 * Santa Clara, California 95054, U.S.A. All rights reserved.
006 *
007 * This library is free software; you can redistribute it and/or
008 * modify it under the terms of the GNU Lesser General Public
009 * License as published by the Free Software Foundation; either
010 * version 2.1 of the License, or (at your option) any later version.
011 * 
012 * This library is distributed in the hope that it will be useful,
013 * but WITHOUT ANY WARRANTY; without even the implied warranty of
014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
015 * Lesser General Public License for more details.
016 * 
017 * You should have received a copy of the GNU Lesser General Public
018 * License along with this library; if not, write to the Free Software
019 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
020 */
021package org.jdesktop.swingx.renderer;
022
023import java.awt.Color;
024import java.io.Serializable;
025
026import org.jdesktop.swingx.plaf.UIDependent;
027import org.jdesktop.swingx.rollover.RolloverRenderer;
028
029/**
030 * Convenience common ancestor for SwingX renderers. Concrete subclasses
031 * should 
032 * 
033 *  <ul>
034 *  <li> provide a bunch of convenience constructors as appropriate for the type of 
035 *      collection component
036 *  <li> create a reasonable default ComponentProvider if none is given  
037 *  <li> implement the getXXCellRenderer by delegating to the ComponentProvider
038 *  </ul>
039 * 
040 * @author Jeanette Winzenburg
041 */
042public abstract class AbstractRenderer 
043    implements  RolloverRenderer, StringValue, Serializable, UIDependent {
044
045    protected ComponentProvider<?> componentController;
046
047    public AbstractRenderer(ComponentProvider<?> provider) {
048        if (provider ==  null) {
049            provider = createDefaultComponentProvider();
050        }
051        this.componentController = provider;
052    }
053    
054    /**
055     * Returns the ComponentProvider used by this renderer.
056     * 
057     * @return the ComponentProvider used by this renderer
058     */
059    public ComponentProvider<?> getComponentProvider() {
060        return componentController;
061    }
062
063    /**
064     * The default ComponentProvider to use if no special.
065     * 
066     * @return the default <code>ComponentProvider</code>
067     */
068    protected abstract ComponentProvider<?> createDefaultComponentProvider();
069    
070// --------------- implement StringValue    
071    
072    /**
073     * {@inheritDoc}
074     */
075    @Override
076    public String getString(Object value) {
077        return componentController.getString(value);
078    }
079
080 // ------------ implement RolloverRenderer   
081    
082    /**
083     * {@inheritDoc}
084     */
085    @Override
086    public void doClick() {
087        if (isEnabled()) {
088            ((RolloverRenderer) componentController).doClick();
089        }
090    }
091
092    /**
093     * {@inheritDoc}
094     */
095    @Override
096    public boolean isEnabled() {
097        return (componentController instanceof RolloverRenderer)
098                && ((RolloverRenderer) componentController).isEnabled();
099    }
100
101    /**
102     * {@inheritDoc}
103     */
104    @Override
105    public void updateUI() {
106        componentController.updateUI();
107    }
108
109//-------------------- legacy: configure arbitrary visuals    
110    /**
111     * @param background
112     */
113    public void setBackground(Color background) {
114        componentController.getDefaultVisuals().setBackground(background);
115    
116    }
117
118    /**
119     * @param foreground
120     */
121    public void setForeground(Color foreground) {
122        componentController.getDefaultVisuals().setForeground(foreground);
123    }
124
125
126}