001 /*
002 * PainterPropertyEditor.java
003 *
004 * Created on March 21, 2006, 11:26 AM
005 *
006 * To change this template, choose Tools | Template Manager
007 * and open the template in the editor.
008 */
009
010 package org.jdesktop.swingx.editors;
011
012 import java.awt.Color;
013 import java.awt.Graphics;
014 import java.awt.Graphics2D;
015 import java.awt.Paint;
016 import java.awt.Rectangle;
017 import java.beans.PropertyEditorSupport;
018 import java.util.HashMap;
019 import java.util.Map;
020 import org.jdesktop.swingx.painter.gradient.BasicGradientPainter;
021 import org.jdesktop.swingx.painter.gradient.LinearGradientPainter;
022
023 /**
024 * Two parts to this property editor. The first part is a simple dropdown.
025 * The second part is a complicated UI for constructing multiple "layers" of
026 * various different Painters, including gradient paints.
027 *
028 * @author Richard
029 */
030 public class PaintPropertyEditor extends PropertyEditorSupport {
031 private static Map<Paint, String> DEFAULT_PAINTS = new HashMap<Paint, String>();
032 static {
033 //add the default paints
034 DEFAULT_PAINTS.put(Color.BLACK, "Black");
035 DEFAULT_PAINTS.put(Color.BLUE, "Blue");
036 DEFAULT_PAINTS.put(Color.CYAN, "Cyan");
037 DEFAULT_PAINTS.put(Color.DARK_GRAY, "Dark Gray");
038 DEFAULT_PAINTS.put(Color.GRAY, "Gray");
039 DEFAULT_PAINTS.put(Color.GREEN, "Green");
040 DEFAULT_PAINTS.put(Color.LIGHT_GRAY, "Light Gray");
041 DEFAULT_PAINTS.put(Color.MAGENTA, "Magenta");
042 DEFAULT_PAINTS.put(Color.ORANGE, "Orange");
043 DEFAULT_PAINTS.put(Color.PINK, "Pink");
044 DEFAULT_PAINTS.put(Color.RED, "Red");
045 DEFAULT_PAINTS.put(Color.WHITE, "White");
046 DEFAULT_PAINTS.put(Color.YELLOW, "Yellow");
047 DEFAULT_PAINTS.put(new Color(1f, 1f, 1f, 0f), "Transparent");
048 // DEFAULT_PAINTS.put(
049 // BasicGradientPainter.WHITE_TO_CONTROL_HORZONTAL, "White->Control (horizontal)");
050 // DEFAULT_PAINTS.put(
051 // BasicGradientPainter.WHITE_TO_CONTROL_VERTICAL, "White->Control (vertical)");
052 DEFAULT_PAINTS.put(
053 BasicGradientPainter.AERITH, "Aerith");
054 DEFAULT_PAINTS.put(
055 BasicGradientPainter.BLUE_EXPERIENCE, "Blue Experience");
056 DEFAULT_PAINTS.put(
057 BasicGradientPainter.GRAY, "Gray Gradient");
058 DEFAULT_PAINTS.put(
059 BasicGradientPainter.MAC_OSX, "Mac OSX");
060 DEFAULT_PAINTS.put(
061 BasicGradientPainter.MAC_OSX_SELECTED, "Max OSX Selected");
062 DEFAULT_PAINTS.put(
063 BasicGradientPainter.NIGHT_GRAY, "Night Gray");
064 DEFAULT_PAINTS.put(
065 BasicGradientPainter.NIGHT_GRAY_LIGHT, "Night Gray Light");
066 DEFAULT_PAINTS.put(
067 BasicGradientPainter.RED_XP, "Red XP");
068 DEFAULT_PAINTS.put(
069 LinearGradientPainter.BLACK_STAR, "Black Star");
070 DEFAULT_PAINTS.put(
071 LinearGradientPainter.ORANGE_DELIGHT, "Orange Delight");
072 }
073
074 /** Creates a new instance of PainterPropertyEditor */
075 public PaintPropertyEditor() {
076 }
077
078 public String[] getTags() {
079 String[] names = DEFAULT_PAINTS.values().toArray(new String[0]);
080 String[] results = new String[names.length+1];
081 results[0] = "<none>";
082 System.arraycopy(names, 0, results, 1, names.length);
083 return results;
084 }
085
086 public Paint getValue() {
087 return (Paint)super.getValue();
088 }
089
090 public String getJavaInitializationString() {
091 Paint paint = getValue();
092 //TODO!!!
093 return paint == null ? "null" :
094 "org.jdesktop.swingx.painter.gradient.LinearGradientPainter.BLACK_STAR";
095 }
096
097 public void setAsText(String text) throws IllegalArgumentException {
098 if (text == null || text.trim().equals("") || text.trim().equalsIgnoreCase("none")
099 || text.trim().equalsIgnoreCase("<none>")
100 || text.trim().equalsIgnoreCase("[none]")) {
101 setValue(null);
102 return;
103 }
104
105 if (text.trim().equalsIgnoreCase("<custom>")) {
106 //do nothing
107 }
108
109 for (Map.Entry<Paint, String> entry : DEFAULT_PAINTS.entrySet()) {
110 if (entry.getValue().equalsIgnoreCase(text)) {
111 setValue(entry.getKey());
112 return;
113 }
114 }
115
116 throw new IllegalArgumentException("The input value " + text + " does" +
117 " not match one of the names of the standard paints");
118 }
119
120 public String getAsText() {
121 Paint p = getValue();
122 if (p == null) {
123 return null;
124 } else if (DEFAULT_PAINTS.containsKey(p)) {
125 return DEFAULT_PAINTS.get(p);
126 } else {
127 return "<custom>";
128 }
129 }
130
131 public void paintValue(Graphics gfx, Rectangle box) {
132 Paint p = getValue();
133 if (p == null) {
134 //do nothing -- in the future draw the checkerboard or something
135 } else {
136 ((Graphics2D)gfx).setPaint(p);
137 gfx.fillRect(box.x, box.y, box.width, box.height);
138 }
139 }
140
141 public boolean isPaintable() {
142 return true;
143 }
144 }