package javaforce.webui;
/** Color Chooser Popup
*
* Shows a popup dialog to select a RGB color.
*
* @author pquiring
*/
public class ColorChooserPopup extends PopupPanel {
public ColorChooserPopup() {
super("Select Color");
setModal(true);
Row row = new Row();
add(row);
Column col;
col = new Column();
row.add(col);
Label rl = new Label("R");
rl.setAlign(CENTER);
col.add(rl);
r = new Slider(Slider.VERTICAL, 0, 255, 1);
r.addChangedListener((c) -> {
rv.setText(Integer.toString(r.getPos()));
setClr();
});
col.add(r);
rv = new Label("0");
rv.setAlign(CENTER);
col.add(rv);
col = new Column();
row.add(col);
Label gl = new Label("G");
gl.setAlign(CENTER);
col.add(gl);
g = new Slider(Slider.VERTICAL, 0, 255, 1);
g.addChangedListener((c) -> {
gv.setText(Integer.toString(g.getPos()));
setClr();
});
col.add(g);
gv = new Label("0");
gv.setAlign(CENTER);
col.add(gv);
col = new Column();
row.add(col);
Label bl = new Label("B");
bl.setAlign(CENTER);
col.add(bl);
b = new Slider(Slider.VERTICAL, 0, 255, 1);
b.addChangedListener((c) -> {
bv.setText(Integer.toString(b.getPos()));
setClr();
});
col.add(b);
bv = new Label("0");
bv.setAlign(CENTER);
col.add(bv);
row = new Row();
add(row);
row.add(new Pad());
ok = new Button("OK");
row.add(ok);
cancel = new Button("Cancel");
row.add(cancel);
row.add(new Pad());
row = new Row();
add(row);
row.add(new Pad());
clr = new Block();
clr.setWidth("64px");
clr.setHeight("64px");
row.add(clr);
row.add(new Pad());
ok.addClickListener((e, c) -> {
setVisible(false);
action();
});
cancel.addClickListener((e, c) -> {
setVisible(false);
});
}
public void setValue(int rgb) {
int _r = (rgb & 0xff0000) >> 16;
int _g = (rgb & 0xff00) >> 8;
int _b = (rgb & 0xff);
rv.setText(Integer.toString(_r));
r.setPos(_r);
gv.setText(Integer.toString(_g));
g.setPos(_g);
bv.setText(Integer.toString(_b));
b.setPos(_b);
clr.setBackColor(String.format("#%06x", rgb));
}
public int getValue() {
int rgb = 0;
rgb |= r.getPos() << 16;
rgb |= g.getPos() << 8;
rgb |= b.getPos();
return rgb;
}
private void setClr() {
clr.setBackColor(String.format("#%06x", getValue()));
}
private Label rv, gv, bv;
private Slider r, g, b;
private Button ok, cancel;
private Block clr;
}