/* * PainterPropertyEditor.java * * Created on March 21, 2006, 11:26 AM * * To change this template, choose Tools | Template Manager * and open the template in the editor. */ package org.jdesktop.beans.editors; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Paint; import java.awt.Rectangle; import java.beans.PropertyEditorSupport; import java.util.HashMap; import java.util.Map; /** * Two parts to this property editor. The first part is a simple dropdown. * The second part is a complicated UI for constructing multiple "layers" of * various different Painters, including gradient paints. * * @author Richard */ public class PaintPropertyEditor extends PropertyEditorSupport { private static Map<Paint, String> DEFAULT_PAINTS = new HashMap<Paint, String>(); static { //add the default paints DEFAULT_PAINTS.put(Color.BLACK, "Black"); DEFAULT_PAINTS.put(Color.BLUE, "Blue"); DEFAULT_PAINTS.put(Color.CYAN, "Cyan"); DEFAULT_PAINTS.put(Color.DARK_GRAY, "Dark Gray"); DEFAULT_PAINTS.put(Color.GRAY, "Gray"); DEFAULT_PAINTS.put(Color.GREEN, "Green"); DEFAULT_PAINTS.put(Color.LIGHT_GRAY, "Light Gray"); DEFAULT_PAINTS.put(Color.MAGENTA, "Magenta"); DEFAULT_PAINTS.put(Color.ORANGE, "Orange"); DEFAULT_PAINTS.put(Color.PINK, "Pink"); DEFAULT_PAINTS.put(Color.RED, "Red"); DEFAULT_PAINTS.put(Color.WHITE, "White"); DEFAULT_PAINTS.put(Color.YELLOW, "Yellow"); DEFAULT_PAINTS.put(new Color(1f, 1f, 1f, 0f), "Transparent"); // DEFAULT_PAINTS.put( // BasicGradientPainter.WHITE_TO_CONTROL_HORZONTAL, "White->Control (horizontal)"); // DEFAULT_PAINTS.put( // BasicGradientPainter.WHITE_TO_CONTROL_VERTICAL, "White->Control (vertical)"); /* josh: this should be replaced with matte painters DEFAULT_PAINTS.put( BasicGradientPainter.AERITH, "Aerith"); DEFAULT_PAINTS.put( BasicGradientPainter.BLUE_EXPERIENCE, "Blue Experience"); DEFAULT_PAINTS.put( BasicGradientPainter.GRAY, "Gray Gradient"); DEFAULT_PAINTS.put( BasicGradientPainter.MAC_OSX, "Mac OSX"); DEFAULT_PAINTS.put( BasicGradientPainter.MAC_OSX_SELECTED, "Max OSX Selected"); DEFAULT_PAINTS.put( BasicGradientPainter.NIGHT_GRAY, "Night Gray"); DEFAULT_PAINTS.put( BasicGradientPainter.NIGHT_GRAY_LIGHT, "Night Gray Light"); DEFAULT_PAINTS.put( BasicGradientPainter.RED_XP, "Red XP"); DEFAULT_PAINTS.put( LinearGradientPainter.BLACK_STAR, "Black Star"); DEFAULT_PAINTS.put( LinearGradientPainter.ORANGE_DELIGHT, "Orange Delight");*/ } /** Creates a new instance of PainterPropertyEditor */ public PaintPropertyEditor() { } @Override public String[] getTags() { String[] names = DEFAULT_PAINTS.values().toArray(new String[0]); String[] results = new String[names.length+1]; results[0] = "<none>"; System.arraycopy(names, 0, results, 1, names.length); return results; } @Override public Paint getValue() { return (Paint)super.getValue(); } @Override public String getJavaInitializationString() { Paint paint = getValue(); //TODO!!! return paint == null ? "null" : "org.jdesktop.swingx.painter.gradient.LinearGradientPainter.BLACK_STAR"; } @Override public void setAsText(String text) throws IllegalArgumentException { if (text == null || text.trim().equals("") || text.trim().equalsIgnoreCase("none") || text.trim().equalsIgnoreCase("<none>") || text.trim().equalsIgnoreCase("[none]")) { setValue(null); return; } if (text.trim().equalsIgnoreCase("<custom>")) { //do nothing } for (Map.Entry<Paint, String> entry : DEFAULT_PAINTS.entrySet()) { if (entry.getValue().equalsIgnoreCase(text)) { setValue(entry.getKey()); return; } } throw new IllegalArgumentException("The input value " + text + " does" + " not match one of the names of the standard paints"); } @Override public String getAsText() { Paint p = getValue(); if (p == null) { return null; } else if (DEFAULT_PAINTS.containsKey(p)) { return DEFAULT_PAINTS.get(p); } else { return "<custom>"; } } @Override public void paintValue(Graphics gfx, Rectangle box) { Paint p = getValue(); if (p == null) { //do nothing -- in the future draw the checkerboard or something } else { ((Graphics2D)gfx).setPaint(p); gfx.fillRect(box.x, box.y, box.width, box.height); } } @Override public boolean isPaintable() { return true; } }