/*
 * MyArrayRenderer.java
 *
 * Created on October 26, 2007, 4:24 PM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package usda.weru.mcrew;

import com.klg.jclass.cell.JCCellInfo;
import com.klg.jclass.cell.JCCellRenderer;
import com.klg.jclass.cell.JCComponentCellRenderer;
import com.klg.jclass.cell.JCLightCellRenderer;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import javax.swing.JComponent;
import usda.weru.mcrew.gui.ArrayRenderer_n;

/**
 *
 * @author Joseph Levin
 */
public class MyArrayRenderer extends ArrayRenderer_n implements JCComponentCellRenderer{
    private JCComponentCellRenderer c_renderer;
    /** Creates a new instance of MyArrayRenderer */
    protected MyArrayRenderer(JCComponentCellRenderer renderer) {
        c_renderer = renderer;
    }
    
    public Component getRendererComponent(JCCellInfo info, Object o, boolean selected) {
        if (o != null && o.getClass().isArray()){
            Object[] values = (Object[]) o;
            Component comp = c_renderer.getRendererComponent(info, values[0], selected);
            g_rendererPane.removeAll();
            g_rendererPane.add(comp);
            
            setBackground(comp.getBackground());
            return this;
        } else{
            return c_renderer.getRendererComponent(info, o, selected);
        }
    }
    
    public static MyArrayRenderer wrap(JCCellRenderer renderer){
        if (renderer instanceof JCComponentCellRenderer){
            return new MyArrayRenderer((JCComponentCellRenderer)renderer);
        } else{
            final Wrapper wrapper = new Wrapper((JCLightCellRenderer)renderer);
            JCComponentCellRenderer newRenderer = new JCComponentCellRenderer(){
                public Component getRendererComponent(JCCellInfo info, Object o, boolean selected) {
                    wrapper.initilize(info, o, selected);
                    return wrapper;
                }
                
            };
            return new MyArrayRenderer(newRenderer);
        }
        
    }

    public void setEnabled(boolean enabled) {
        super.setEnabled(enabled);
        g_editorButton.setEnabled(enabled);        
    }
    
    
    private static class Wrapper extends JComponent{
        JCCellInfo c_info;
        Object c_o;
        boolean c_selected;
        JCLightCellRenderer c_lightRenderer;
        
        public Wrapper(JCLightCellRenderer renderer){
            c_lightRenderer = renderer;
        }
        
        public void initilize(JCCellInfo info, Object o, boolean selected){
            c_info = info;
            c_o = o;
            c_selected = selected;
            Color background = (!selected) ? info.getBackground() : info.getSelectedBackground();
            setBackground(background);
        }
        
        public void paint(Graphics g) {
            c_lightRenderer.draw(g, c_info, c_o, c_selected);
        }
        
        public Dimension getPreferredSize() {
            return c_lightRenderer.getPreferredSize(getGraphics(), c_info, c_o);
        }
        
    }
    
    
    
}
