/* * $Id$ * * Copyright (c) 2005 by Rodney Kinney, Brent Easton * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public * License (LGPL) as published by the Free Software Foundation. * * 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 * Library General Public License for more details. * * You should have received a copy of the GNU Library General Public * License along with this library; if not, copies are available * at http://www.opensource.org. */ package VASSAL.build.module.gamepieceimage; import java.awt.Color; import java.awt.Component; import java.awt.Graphics2D; import java.awt.event.ItemListener; import java.awt.image.BufferedImage; import javax.swing.ImageIcon; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JTable; import javax.swing.ListCellRenderer; import javax.swing.table.TableCellRenderer; import VASSAL.tools.image.ImageUtils; public class SwatchComboBox extends JComboBox { private static final long serialVersionUID = 1L; public SwatchComboBox() { String[] s = ColorManager.getColorManager().getColorNames(); for (int i = 0; i < s.length; ++i) { addItem(s[i]); } SwatchRenderer renderer = new SwatchRenderer(); setRenderer(renderer); } public SwatchComboBox(ItemListener l) { this(); addItemListener(l); } public SwatchComboBox(ItemListener l, String colorName) { this(); setSelectedItem(colorName); addItemListener(l); } public class SwatchRenderer extends JLabel implements ListCellRenderer { private static final long serialVersionUID = 1L; public SwatchRenderer() { setOpaque(true); setHorizontalAlignment(LEFT); setVerticalAlignment(CENTER); } /* * This method finds the image and text corresponding to the selected * value and returns the label, set up to display the text and image. */ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { ColorSwatch swatch = ColorManager.getColorManager().getColorSwatch((String) value); if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); } else { setBackground(list.getBackground()); setForeground(list.getForeground()); } //Set the icon and text. If icon was null, say so. //String name = (String) list.get final BufferedImage img = ImageUtils.createCompatibleImage(25, 12); final Graphics2D g = img.createGraphics(); g.setColor(swatch.getColor()); g.fillRect(0, 0, 25, 12); g.setColor(Color.black); g.drawRect(0, 0, 24, 11); g.dispose(); setIcon(new ImageIcon(img)); setText((String) value); setFont(list.getFont()); return this; } } class SwatchTableRenderer extends JLabel implements TableCellRenderer { private static final long serialVersionUID = 1L; public SwatchTableRenderer() { setOpaque(true); setHorizontalAlignment(LEFT); setVerticalAlignment(CENTER); } /* * This method finds the image and text corresponding to the selected * value and returns the label, set up to display the text and image. */ public Component getTableCellRendererComponent( JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { ColorSwatch swatch = (ColorSwatch) value; if (isSelected) { setBackground(table.getSelectionBackground()); setForeground(table.getSelectionForeground()); } else { setBackground(table.getBackground()); setForeground(table.getForeground()); } //Set the icon and text. If icon was null, say so. //String name = (String) list.get final BufferedImage img = ImageUtils.createCompatibleImage(25, 12); final Graphics2D g = img.createGraphics(); g.setColor(swatch.getColor()); g.fillRect(0, 0, 25, 12); g.setColor(Color.black); g.drawRect(0, 0, 24, 11); g.dispose(); setIcon(new ImageIcon(img)); setText(swatch.getConfigureName()); setFont(table.getFont()); return this; } } }