gvsig-scripting / trunk / org.gvsig.scripting.thing / src / main / java / thinletcommons / ColorChooser.java @ 4
History | View | Annotate | Download (5.39 KB)
1 |
// jEdit settings:
|
---|---|
2 |
// :tabSize=4:indentSize=4:noTabs=true:folding=explicit:collapseFolds=1:
|
3 |
|
4 |
package thinletcommons; |
5 |
|
6 |
|
7 |
import java.awt.Color; |
8 |
import java.awt.Dialog; |
9 |
import java.awt.Frame; |
10 |
import java.util.logging.Level; |
11 |
import java.util.logging.Logger; |
12 |
|
13 |
import thinlet.Thinlet; |
14 |
|
15 |
|
16 |
/**
|
17 |
* A Thinlet color chooser dialog.
|
18 |
*
|
19 |
* <p>
|
20 |
* The dialog is modal and blocks the calling frame/dialog. It is therefore
|
21 |
* displayed in a separate window.
|
22 |
*
|
23 |
* @author Dirk Moebius
|
24 |
*/
|
25 |
public class ColorChooser |
26 |
{ |
27 |
//{{{ logging
|
28 |
private static final Logger log = Logger.getLogger("thinletcommons"); |
29 |
private static final boolean debug() { return log.isLoggable(Level.FINE); } |
30 |
//}}}
|
31 |
|
32 |
|
33 |
private ThinletDialog dialog;
|
34 |
private Thinlet thinlet;
|
35 |
private Color selectedColor; |
36 |
|
37 |
// components
|
38 |
private Object sl_red, sl_green, sl_blue; |
39 |
private Object sb_red, sb_green, sb_blue; |
40 |
private Object tf_hue, tf_saturation, tf_brightness; |
41 |
private Object pb_hue, pb_saturation, pb_brightness; |
42 |
private Object rgb_label; |
43 |
|
44 |
|
45 |
public ColorChooser(Frame owner, String title) |
46 |
{ |
47 |
this.dialog = new ThinletDialog(owner, title); |
48 |
init(); |
49 |
} |
50 |
|
51 |
|
52 |
public ColorChooser(Dialog owner, String title) |
53 |
{ |
54 |
this.dialog = new ThinletDialog(owner, title); |
55 |
init(); |
56 |
} |
57 |
|
58 |
|
59 |
private void init() |
60 |
{ |
61 |
thinlet = new AntiAliasedThinlet();
|
62 |
|
63 |
try
|
64 |
{ |
65 |
Object panel = thinlet.parse("/thinletcommons/colorchooser.xml", this); |
66 |
thinlet.add(panel); |
67 |
} |
68 |
catch(Exception e) |
69 |
{ |
70 |
log.log(Level.SEVERE, "Error parsing colorchooser.xml", e); |
71 |
} |
72 |
|
73 |
dialog.setContent(thinlet); |
74 |
} |
75 |
|
76 |
|
77 |
/**
|
78 |
* Show the modal dialog.
|
79 |
* This halts the application until the user dismisses the dialog.
|
80 |
*/
|
81 |
public void show() |
82 |
{ |
83 |
if(debug()) log.fine("in show"); |
84 |
dialog.pack(); |
85 |
dialog.setResizable(false);
|
86 |
dialog.setLocationRelativeTo(dialog.getOwner()); |
87 |
dialog.setVisible(true);
|
88 |
} |
89 |
|
90 |
|
91 |
public void setSelectedColor(Color color) |
92 |
{ |
93 |
int red = 0, green = 0, blue = 0; |
94 |
if(color != null) |
95 |
{ |
96 |
red = color.getRed(); |
97 |
green = color.getGreen(); |
98 |
blue = color.getBlue(); |
99 |
thinlet.setInteger(sl_red, "value", red);
|
100 |
thinlet.setInteger(sl_green, "value", green);
|
101 |
thinlet.setInteger(sl_blue, "value", blue);
|
102 |
thinlet.setString(sb_red, "text", String.valueOf(red)); |
103 |
thinlet.setString(sb_green, "text", String.valueOf(green)); |
104 |
thinlet.setString(sb_blue, "text", String.valueOf(blue)); |
105 |
hsbChanged(); |
106 |
} |
107 |
} |
108 |
|
109 |
|
110 |
public Color getSelectedColor() |
111 |
{ |
112 |
return selectedColor;
|
113 |
} |
114 |
|
115 |
|
116 |
//{{{ callbacks for colorchooser.xml
|
117 |
/** Thinlet callback. */
|
118 |
public void init(Object sl_red, Object sl_green, Object sl_blue, |
119 |
Object sb_red, Object sb_green, Object sb_blue, |
120 |
Object tf_hue, Object tf_saturation, Object tf_brightness, |
121 |
Object pb_hue, Object pb_saturation, Object pb_brightness, |
122 |
Object rgb_label)
|
123 |
{ |
124 |
if(debug()) log.fine("in init"); |
125 |
this.sl_red = sl_red;
|
126 |
this.sl_green = sl_green;
|
127 |
this.sl_blue = sl_blue;
|
128 |
this.sb_red = sb_red;
|
129 |
this.sb_green = sb_green;
|
130 |
this.sb_blue = sb_blue;
|
131 |
this.tf_hue = tf_hue;
|
132 |
this.tf_saturation = tf_saturation;
|
133 |
this.tf_brightness = tf_brightness;
|
134 |
this.pb_hue = pb_hue;
|
135 |
this.pb_saturation = pb_saturation;
|
136 |
this.pb_brightness = pb_brightness;
|
137 |
this.rgb_label = rgb_label;
|
138 |
} |
139 |
|
140 |
|
141 |
/** Thinlet callback. */
|
142 |
public void sliderChanged(int value, Object spinbox) |
143 |
{ |
144 |
thinlet.setString(spinbox, "text", String.valueOf(value)); |
145 |
hsbChanged(); |
146 |
} |
147 |
|
148 |
|
149 |
/** Thinlet callback. */
|
150 |
public void spinboxChanged(String text, Object slider) |
151 |
{ |
152 |
try
|
153 |
{ |
154 |
int value = Integer.parseInt(text); |
155 |
if(value >= 0 && value <= 255) |
156 |
{ |
157 |
thinlet.setInteger(slider, "value", value);
|
158 |
hsbChanged(); |
159 |
} |
160 |
} |
161 |
catch (NumberFormatException ignore) |
162 |
{ |
163 |
} |
164 |
} |
165 |
|
166 |
|
167 |
/** Thinlet callback. */
|
168 |
public void ok() |
169 |
{ |
170 |
int red = thinlet.getInteger(sl_red, "value"); |
171 |
int green = thinlet.getInteger(sl_green, "value"); |
172 |
int blue = thinlet.getInteger(sl_blue, "value"); |
173 |
this.selectedColor = new Color(red, green, blue); |
174 |
dialog.setVisible(false);
|
175 |
} |
176 |
|
177 |
|
178 |
/** Thinlet callback. */
|
179 |
public void close() |
180 |
{ |
181 |
dialog.setVisible(false);
|
182 |
} |
183 |
//}}}
|
184 |
|
185 |
|
186 |
//{{{ private methods
|
187 |
private void hsbChanged() |
188 |
{ |
189 |
int red = thinlet.getInteger(sl_red, "value"); |
190 |
int green = thinlet.getInteger(sl_green, "value"); |
191 |
int blue = thinlet.getInteger(sl_blue, "value"); |
192 |
|
193 |
float[] hsb = Color.RGBtoHSB(red, green, blue, null); |
194 |
|
195 |
thinlet.setColor(rgb_label, "background", new Color(red, green, blue)); |
196 |
thinlet.setString(tf_hue, "text", String.valueOf(hsb[0])); |
197 |
thinlet.setString(tf_saturation, "text", String.valueOf(hsb[1])); |
198 |
thinlet.setString(tf_brightness, "text", String.valueOf(hsb[2])); |
199 |
|
200 |
thinlet.setInteger(pb_hue, "value", (int) (100f * hsb[0])); |
201 |
thinlet.setInteger(pb_saturation, "value", (int) (100f * hsb[1])); |
202 |
thinlet.setInteger(pb_brightness, "value", (int) (100f * hsb[2])); |
203 |
} |
204 |
//}}}
|
205 |
|
206 |
} |
207 |
|