package com.project.website.canvas.client.shared.widgets; import com.google.gwt.dom.client.Element; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.user.client.ui.TextBox; import com.project.website.canvas.client.resources.CanvasResources; public class ColorPicker extends TextBox { private String _colorToSetOnAttach = null; public ColorPicker() { /* color class is used by jscolor.js */ this.addStyleName(CanvasResources.INSTANCE.main().colorPickerButton()); this.addStyleName("color {pickerClosable:true}"); this.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { setPickerVisible(true); } }); } @Override protected void onLoad() { super.onLoad(); this.bindJsColor(this.getElement()); if (null != this._colorToSetOnAttach) { this.setColor(this._colorToSetOnAttach); this._colorToSetOnAttach = null; } } private final native void bindJsColor(Element elem) /*-{ if (elem.color) { return; } var c = $wnd.jscolor.color; var myPicker = new c(elem, {pickerClosable:true}); elem.color = myPicker; }-*/; public void setPickerVisible(boolean isVisible) { this.setPickerVisible(this.getElement(), isVisible); } private final native void setPickerVisible(Element elem, boolean isVisible) /*-{ if (!elem.color) { return; } if (isVisible) { elem.color.showPicker(); } else { elem.color.hidePicker(); } }-*/; public String getColor() { return this.getElement().getStyle().getBackgroundColor(); } public void setColor(String color) { if (false == this.isAttached()) { this._colorToSetOnAttach = color; return; } this.getElement().getStyle().setBackgroundColor(color); } private final native int getColor(Element elem, int index) /*-{ return elem.color.rgb[index]; }-*/; }