package org.dashbuilder.common.client.editor;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiConstructor;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.ValueBoxBase;
import com.google.gwt.user.client.ui.Widget;
import org.gwtbootstrap3.client.ui.Popover;
import org.gwtbootstrap3.client.ui.Tooltip;
import org.gwtbootstrap3.client.ui.constants.Placement;
import javax.enterprise.context.Dependent;
/**
* <p>The ValueBoxEditor view.</p>
*
* @since 0.4.0
*/
@Dependent
public class ValueBoxEditorView<T> extends Composite implements ValueBoxEditor.View<T> {
private static final String STYLE_ERROR = " control-group has-error ";
interface Binder extends UiBinder<Widget, ValueBoxEditorView> {
Binder BINDER = GWT.create(Binder.class);
}
@UiField
SimplePanel contents;
@UiField
@Editor.Ignore
Tooltip errorTooltip;
ValueBoxEditor<T> presenter;
ValueBoxBase<T> widget;
@Override
public void init(final ValueBoxEditor<T> presenter) {
this.presenter = presenter;
}
@UiConstructor
public ValueBoxEditorView() {
initWidget(Binder.BINDER.createAndBindUi(this));
}
@Override
public void setValueBox(final ValueBoxBase<T> widget) {
this.widget = widget;
widget.addValueChangeHandler(new ValueChangeHandler<T>() {
@Override
public void onValueChange(final ValueChangeEvent<T> event) {
presenter.onValueChanged(event.getValue());
}
});
contents.add(widget);
}
@Override
public ValueBoxEditor.View<T> setValue(T value) {
widget.setValue(value);
return this;
}
@Override
public ValueBoxEditor.View<T> showError(SafeHtml message) {
contents.addStyleName(STYLE_ERROR);
errorTooltip.setTitle(message.asString());
errorTooltip.reconfigure();
return this;
}
@Override
public ValueBoxEditor.View<T> clearError() {
contents.removeStyleName(STYLE_ERROR);
errorTooltip.setTitle("");
errorTooltip.reconfigure();
return this;
}
public ValueBoxEditor.View<T> addHelpContent(final String title, final String content, final Placement placement) {
final Popover popover = new Popover(widget);
popover.setContainer("body");
popover.setShowDelayMs(1000);
popover.setPlacement(placement);
popover.setTitle(title);
popover.setContent(content);
contents.add(popover);
return this;
}
}