package com.limegroup.gnutella.gui.search;

import java.awt.Color;
import java.awt.Component;

import javax.swing.JTable;
import javax.swing.table.DefaultTableCellRenderer;

import com.limegroup.gnutella.gui.themes.ThemeFileHandler;
import com.limegroup.gnutella.gui.themes.ThemeMediator;
import com.limegroup.gnutella.gui.themes.ThemeObserver;

/** Draws ResultSpeed's appropriately colorized */
class ResultSpeedRenderer extends DefaultTableCellRenderer 
	implements ThemeObserver {
    /** The color to show measured speeds in.  This is dark green,
     *  similar to the color on the connected status icon. */
    public static Color _measuredColor;
    public static Color _unmeasuredColor;

	/**
	 * Creates a new <tt>ResultSpeedRenderer</tt> instance, making it a
	 * theme listener.
	 */
    ResultSpeedRenderer() {
		updateTheme();
		ThemeMediator.addThemeObserver(this);
	}

	// inherit doc comment
	public void updateTheme() {
		_measuredColor = ThemeFileHandler.SEARCH_RESULT_SPEED_COLOR.getValue();
		_unmeasuredColor = ThemeFileHandler.WINDOW8_COLOR.getValue();			
	}

    public Component getTableCellRendererComponent(JTable table,
                                                   Object value, 
                                                   boolean isSel, 
                                                   boolean hasFocus,
                                                   int row,
                                                   int column) {        
        //Note that we don't display all the information in the column.
        ResultSpeed speed=(ResultSpeed)value;
        String tag = (speed == null ? "" : speed.stringValue());
        Component ret=super.getTableCellRendererComponent(
            table, tag, isSel, hasFocus, row, column);                           
        //Render measured speeds in green, others in black.  The second call is
        //necessary to prevent everything from turning green, since one renderer
        //is shared among all cells.
        if (speed != null && speed.isMeasured())
            ret.setForeground(_measuredColor);
        else
            ret.setForeground(_unmeasuredColor);
        return ret;
    }
}
