/*
* Geotoolkit - An Open Source Java GIS Toolkit
* http://www.geotoolkit.org
*
* (C) 2012 Geomatys
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation;
* version 2.1 of the License.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*/
package org.geotoolkit.gui.swing.propertyedit.styleproperty;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.geom.AffineTransform;
import java.awt.image.RenderedImage;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.DefaultListCellRenderer;
import javax.swing.JList;
import org.geotoolkit.image.palette.PaletteFactory;
import org.geotoolkit.style.interval.Palette;
import org.apache.sis.util.logging.Logging;
/**
* Renderer of Palette in combobox in Style editor.
* @author Quentin Boileau (Geomatys).
*/
public class PaletteCellRenderer extends DefaultListCellRenderer {
private static final Logger LOGGER = Logging.getLogger("org.geotoolkit.gui.swing.propertyedit.styleproperty");
private final PaletteFactory PF = PaletteFactory.getDefault();
private Object paletteValue = null;
@Override
public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) {
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
this.setText(" Palette ");
this.setPreferredSize(new Dimension(120, 18));
paletteValue = value;
return this;
}
@Override
protected void paintComponent(final Graphics g) {
super.paintComponent(g);
if (paletteValue != null) {
Dimension d = this.getSize();
Rectangle rect = new Rectangle(d);
rect.grow(-2, -2);
if (paletteValue instanceof String) {
try {
final String paletteName = String.valueOf(paletteValue);
final org.geotoolkit.image.palette.Palette palette = PF.getPalette(paletteName, 10);
final RenderedImage img = palette.getLegend(rect.getSize());
((Graphics2D) g).drawRenderedImage(img, new AffineTransform(1,0,0,1,2,2));
} catch (IOException ex) {
LOGGER.log(Level.WARNING, ex.getMessage(), ex);
}
} else if (paletteValue instanceof Palette) {
final Palette palette = (Palette) paletteValue;
palette.render((Graphics2D) g, rect,true);
}
}
}
}