package org.dashbuilder.common.client.editor.list;
import com.google.gwt.core.client.GWT;
import com.google.gwt.editor.client.Editor;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.resources.client.CssResource;
import com.google.gwt.safehtml.shared.SafeHtml;
import com.google.gwt.safehtml.shared.SafeUri;
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.*;
import org.gwtbootstrap3.client.ui.*;
import org.gwtbootstrap3.client.ui.Image;
import org.gwtbootstrap3.client.ui.constants.Placement;
import org.uberfire.mvp.Command;
import javax.enterprise.context.Dependent;
/**
* <p>The ImageListEditor default view. It places images in an horizontal way.</p>
*
* @since 0.4.0
*/
@Dependent
public class HorizImageListEditorView<T> extends Composite implements ImageListEditorView<T> {
interface Binder extends UiBinder<Widget, HorizImageListEditorView> {
Binder BINDER = GWT.create(Binder.class);
}
interface HorizImageListEditorViewStyle extends CssResource {
String errorPanel();
String errorPanelWithError();
String image();
}
@UiField
HorizImageListEditorViewStyle style;
@UiField
@Editor.Ignore
HTMLPanel errorPanel;
@UiField
@Editor.Ignore
FlowPanel helpPanel;
@UiField
@Editor.Ignore
HorizontalPanel mainPanel;
@UiField
@Editor.Ignore
Tooltip errorTooltip;
ImageListEditor<T> presenter;
@Override
public void init(final ImageListEditor<T> presenter) {
this.presenter = presenter;
}
@UiConstructor
public HorizImageListEditorView() {
initWidget(Binder.BINDER.createAndBindUi(this));
}
@Override
public ImageListEditorView<T> add(final SafeUri uri, final String width, final String height,
final SafeHtml heading, final SafeHtml text,
final boolean selected, final Command clickCommand) {
final VerticalPanel panel = new VerticalPanel();
panel.setVerticalAlignment(HasAlignment.ALIGN_MIDDLE);
panel.setHeight("100%");
final Image image = new Image(uri);
image.setWidth(width);
image.setHeight(height);
image.addStyleName(style.image());
final double alpha = selected ? 1 : 0.2;
image.getElement().setAttribute("style", "filter: alpha(opacity=5);opacity: " + alpha);
image.addClickHandler(new ClickHandler() {
@Override
public void onClick(final ClickEvent event) {
clickCommand.execute();
}
});
final Popover popover = new Popover();
popover.setTitle( heading.asString() );
popover.setContent( text.asString() );
popover.setWidget(image);
popover.setContainer("body");
popover.setPlacement(Placement.BOTTOM);
popover.setShowDelayMs(1000);
final HTML label = new HTML(heading.asString());
final HorizontalPanel labelPanel = new HorizontalPanel();
labelPanel.setWidth("100%");
labelPanel.setHorizontalAlignment(HasAlignment.ALIGN_CENTER);
labelPanel.add(label);
panel.add(popover);
panel.add(labelPanel);
mainPanel.add(panel);
return this;
}
@Override
public ImageListEditorView<T> addHelpContent(final String title, final String content, final Placement placement) {
final Popover popover = new Popover(mainPanel);
popover.setContainer("body");
popover.setShowDelayMs(1000);
popover.setPlacement(placement);
popover.setTitle(title);
popover.setContent(content);
helpPanel.add(popover);
return this;
}
@Override
public ImageListEditorView<T> showError(SafeHtml message) {
errorTooltip.setTitle(message.asString());
errorTooltip.reconfigure();
errorPanel.removeStyleName(style.errorPanel());
errorPanel.addStyleName(style.errorPanelWithError());
return null;
}
@Override
public ImageListEditorView<T> clearError() {
errorTooltip.setTitle("");
errorTooltip.reconfigure();
errorPanel.removeStyleName(style.errorPanelWithError());
errorPanel.addStyleName(style.errorPanel());
return this;
}
@Override
public ImageListEditorView<T> clear() {
clearError();
mainPanel.clear();
return this;
}
}