001    /*
002     * Copyright (c) 2005 Jens Schou, Staffan Gustafsson, Björn Lanneskog, 
003     * Einar Pehrson and Sebastian Kekkonen
004     *
005     * This file is part of
006     * CleanSheets Extension for Test Cases
007     *
008     * CleanSheets Extension for Test Cases is free software; you can
009     * redistribute it and/or modify it under the terms of the GNU General Public
010     * License as published by the Free Software Foundation; either version 2 of
011     * the License, or (at your option) any later version.
012     *
013     * CleanSheets Extension for Test Cases is distributed in the hope that
014     * it will be useful, but WITHOUT ANY WARRANTY; without even the implied
015     * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with CleanSheets Extension for Test Cases; if not, write to the
020     * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
021     * Boston, MA  02111-1307  USA
022     */
023    package csheets.ext.test.ui;
024    
025    import java.awt.Color;
026    import java.awt.Component;
027    
028    import javax.swing.JComboBox;
029    import javax.swing.JTable;
030    import javax.swing.table.TableCellRenderer;
031    
032    import csheets.ext.test.TestCase;
033    
034    /**
035     * A combo box in which validation states are selected, which acts as a table
036     * cell renderer.
037     * @author Einar Pehrson
038     */
039    @SuppressWarnings("serial")
040    public class ValidationStateRenderer extends JComboBox implements TableCellRenderer {
041    
042            /**
043             * Creates a new validation state renderer.
044             */
045            public ValidationStateRenderer() {
046                    super(TestCase.ValidationState.values());
047            }
048    
049            public Component getTableCellRendererComponent(JTable table, Object value,
050                            boolean selected, boolean hasFocus, int row, int column) {
051                    TestCase.ValidationState state = (TestCase.ValidationState)value;
052    
053                    // Sets colors
054                    switch (state) {
055                            case VALID:
056                                    setForeground(Color.green);
057                                    break;
058                            case REJECTED:
059                                    setForeground(Color.red);
060                                    break;
061                            default:
062                                    if (selected) {
063                                            setForeground(table.getSelectionForeground());
064                                            super.setBackground(table.getSelectionBackground());
065                                    } else {
066                                            setForeground(table.getForeground());
067                                            setBackground(table.getBackground());
068                                    }
069                    }
070    
071                    // Selects the current value
072                    setSelectedItem(value);
073                    return this;
074            }
075    }