001    /* ===========================================================
002     * JFreeChart : a free chart library for the Java(tm) platform
003     * ===========================================================
004     *
005     * (C) Copyright 2000-2007, by Object Refinery Limited and Contributors.
006     *
007     * Project Info:  http://www.jfree.org/jfreechart/index.html
008     *
009     * This library is free software; you can redistribute it and/or modify it 
010     * under the terms of the GNU Lesser General Public License as published by 
011     * the Free Software Foundation; either version 2.1 of the License, or 
012     * (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but 
015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
017     * License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this library; if not, write to the Free Software
021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
022     * USA.  
023     *
024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025     * in the United States and other countries.]
026     *
027     * ------------------
028     * PaletteSample.java
029     * ------------------
030     * (C) Copyright 2002-2007, by David M. O'Donnell.
031     *
032     * Original Author:  David M. O'Donnell;
033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
034     *
035     * $Id: PaletteSample.java,v 1.1.2.2 2007/01/31 15:56:18 mungady Exp $
036     *
037     * Changes
038     * -------
039     * 21-Jan-2003 : Added standard header (DG);
040     * ------------- JFREECHART 1.0.x ---------------------------------------------
041     * 31-Jan-2007 : Deprecated (DG);
042     *
043     */
044    
045    package org.jfree.chart.editor;
046    
047    import java.awt.BasicStroke;
048    import java.awt.Component;
049    import java.awt.Dimension;
050    import java.awt.Graphics;
051    import java.awt.Graphics2D;
052    import java.awt.Insets;
053    import java.awt.RenderingHints;
054    import java.awt.geom.Line2D;
055    
056    import javax.swing.JComponent;
057    import javax.swing.JList;
058    import javax.swing.ListCellRenderer;
059    
060    import org.jfree.chart.plot.ColorPalette;
061    import org.jfree.chart.plot.XYPlot;
062    import org.jfree.chart.renderer.xy.XYBlockRenderer;
063    
064    
065    /**
066     * A panel that displays a palette sample.
067     *
068     * @deprecated This class is no longer supported.  If you are creating
069     *     contour plots, please try to use {@link XYPlot} and 
070     *     {@link XYBlockRenderer}.
071     */
072    public class PaletteSample extends JComponent implements ListCellRenderer {
073    
074        /** The palette being displayed. */
075        private ColorPalette palette;
076    
077        /** The preferred size of the component; */
078        private Dimension preferredSize;
079    
080        /**
081         * Creates a new sample.
082         *
083         * @param palette  the palette.
084         */
085        public PaletteSample(ColorPalette palette) {
086            this.palette = palette;
087            this.preferredSize = new Dimension(80, 18);
088        }
089    
090        /**
091         * Returns a list cell renderer for the stroke, so the sample can be 
092         * displayed in a list or combo.
093         *
094         * @param list  the list component.
095         * @param value  the value.
096         * @param index  the index.
097         * @param isSelected  a flag that indicates whether or not the item is 
098         *                    selected.
099         * @param cellHasFocus  a flag that indicates whether or not the cell has 
100         *                      the focus.
101         *
102         * @return The renderer.
103         */
104        public Component getListCellRendererComponent(JList list, Object value, 
105                                                      int index,
106                                                      boolean isSelected, 
107                                                      boolean cellHasFocus) {
108            if (value instanceof PaletteSample) {
109                PaletteSample in = (PaletteSample) value;
110                setPalette(in.getPalette());
111            }
112            return this;
113        }
114    
115        /**
116         * Returns the current palette object being displayed.
117         *
118         * @return The palette.
119         */
120        public ColorPalette getPalette() {
121            return this.palette;
122        }
123    
124        /**
125         * Returns the preferred size of the component.
126         *
127         * @return The preferred size.
128         */
129        public Dimension getPreferredSize() {
130            return this.preferredSize;
131        }
132    
133        /**
134         * Draws the sample.
135         *
136         * @param g  the graphics device.
137         */
138        public void paintComponent(Graphics g) {
139    
140            Graphics2D g2 = (Graphics2D) g;
141            g2.setRenderingHint(
142                RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF
143            );
144            Dimension size = getSize();
145            Insets insets = getInsets();
146            double ww = size.getWidth() - insets.left - insets.right;
147            double hh = size.getHeight() - insets.top - insets.bottom;
148    
149            g2.setStroke(new BasicStroke(1.0f));
150    
151            double y1 = insets.top;
152            double y2 = y1 + hh;
153            double xx = insets.left;
154            Line2D line = new Line2D.Double();
155            int count = 0;
156            while (xx <= insets.left + ww) {
157                count++;
158                line.setLine(xx, y1, xx, y2);
159                g2.setPaint(this.palette.getColor(count));
160                g2.draw(line);
161                xx += 1;
162            }
163        }
164    
165        /**
166         * Sets the palette object being displayed.
167         *
168         * @param palette  the palette.
169         */
170        public void setPalette(ColorPalette palette) {
171            this.palette = palette;
172            this.repaint();
173        }
174    
175    }