Statistics
| Revision:

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