package org.vaadin.jcrop;
import com.vaadin.annotations.Theme;
import com.vaadin.annotations.VaadinServletConfiguration;
import com.vaadin.server.StreamResource;
import com.vaadin.server.VaadinRequest;
import com.vaadin.server.VaadinServlet;
import com.vaadin.ui.*;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.themes.ValoTheme;
import org.vaadin.jcrop.selection.JcropSelection;
import org.vaadin.jcrop.selection.JcropSelectionChanged;
import javax.servlet.annotation.WebServlet;
@Theme("valo")
public class JCropSampleUI extends UI {
private final Jcrop jcrop = new Jcrop();
private final Label listenerLabel = new Label("cropEvent: ");
private final String[] imageUrls = new String[]{"./VAADIN/images/pic-1.jpg", "./VAADIN/images/pic-2.jpg", "./VAADIN/images/pic-3.jpg"};
private final TextField minX = genNumberField("x", "0"), minY = genNumberField("y", "0");
private final TextField maxX = genNumberField("x", "0"), maxY = genNumberField("y", "0");
private final TextField aspectRatio = genNumberField("aspectRatio", "0");
private int currentIndex = 1;
private Button toggleEnabled;
private TextField genNumberField(final String caption, final String initValue) {
TextField textField = new TextField();
textField.setValue(initValue);
textField.setPlaceholder(caption);
textField.setWidth(60, Unit.PIXELS);
textField.addStyleName(ValoTheme.TEXTFIELD_TINY);
return textField;
}
@Override
protected void init(final VaadinRequest vaadinRequest) {
final VerticalLayout layout = new VerticalLayout();
layout.setMargin(true);
layout.setSpacing(true);
layout.setSizeFull();
setContent(layout);
HorizontalLayout buttonLayout = new HorizontalLayout();
buttonLayout.setSpacing(true);
buttonLayout.addComponent(new Button("setSelection", new Button.ClickListener() {
@Override
public void buttonClick(final ClickEvent clickEvent) {
JCropSampleUI.this.jcrop.setSelection(10, 10, 100, 50);
}
}));
buttonLayout.addComponent(new Button("clearSelection", new Button.ClickListener() {
@Override
public void buttonClick(final ClickEvent clickEvent) {
JCropSampleUI.this.jcrop.clearSelection();
}
}));
buttonLayout.addComponent(new Button("switchImage", new Button.ClickListener() {
@Override
public void buttonClick(final ClickEvent clickEvent) {
JCropSampleUI.this.jcrop.setImageUrl(JCropSampleUI.this.imageUrls[(++JCropSampleUI.this.currentIndex) % 3]);
}
}));
buttonLayout.addComponent(new Button("setResource", new Button.ClickListener() {
@Override
public void buttonClick(final ClickEvent clickEvent) {
JCropSampleUI.this.jcrop.setResource(new StreamResource(new SampleStreamResource(), "sample-image.png"));
}
}));
this.toggleEnabled = new Button("toggle isEnabled", new Button.ClickListener() {
@Override
public void buttonClick(final ClickEvent clickEvent) {
if (JCropSampleUI.this.toggleEnabled.getCaption()
.contains("isEnabled")) {
JCropSampleUI.this.jcrop.setEnabled(false);
JCropSampleUI.this.toggleEnabled.setCaption("toggle isDisabled");
} else {
JCropSampleUI.this.jcrop.setEnabled(true);
JCropSampleUI.this.toggleEnabled.setCaption("toggle isEnabled");
}
}
});
buttonLayout.addComponent(this.toggleEnabled);
layout.addComponent(buttonLayout);
HorizontalLayout maxMinSizeLayout = new HorizontalLayout();
maxMinSizeLayout.setSpacing(true);
maxMinSizeLayout.addComponent(new Label("minSize"));
maxMinSizeLayout.addComponent(this.minX);
maxMinSizeLayout.addComponent(this.minY);
maxMinSizeLayout.addComponent(new Label("maxSize"));
maxMinSizeLayout.addComponent(this.maxX);
maxMinSizeLayout.addComponent(this.maxY);
maxMinSizeLayout.addComponent(new Label("aspectRatio"));
maxMinSizeLayout.addComponent(this.aspectRatio);
Button setMinMaxSelectionBtn = new Button("changeSettings", (ClickListener) clickEvent -> {
JCropSampleUI.this.jcrop.setMinCropSize(Integer.parseInt(JCropSampleUI.this.minX.getValue()), Integer.parseInt(JCropSampleUI.this.minY.getValue()));
JCropSampleUI.this.jcrop.setMaxCropSize(Integer.parseInt(JCropSampleUI.this.maxX.getValue()), Integer.parseInt(JCropSampleUI.this.maxY.getValue()));
JCropSampleUI.this.jcrop.setAspectRatio(Integer.parseInt(JCropSampleUI.this.aspectRatio.getValue()));
});
setMinMaxSelectionBtn.addStyleName(ValoTheme.BUTTON_TINY);
maxMinSizeLayout.addComponent(setMinMaxSelectionBtn);
layout.addComponent(maxMinSizeLayout);
layout.addComponent(this.listenerLabel);
this.jcrop.setWidth(750, Unit.PIXELS);
this.jcrop.setHeight(500, Unit.PIXELS);
this.jcrop.setImageUrl(this.imageUrls[this.currentIndex]);
layout.addComponent(this.jcrop);
layout.setExpandRatio(this.jcrop, 1);
this.jcrop.addListener(new JcropSelectionChanged() {
@Override
public void selectionChanged(final JcropSelection selection) {
JCropSampleUI.this.listenerLabel.setValue(selection.toString());
}
});
}
@WebServlet(
urlPatterns = "/*",
name = "JCropSampleUIServlet",
asyncSupported = true)
@VaadinServletConfiguration(
ui = org.vaadin.jcrop.JCropSampleUI.class,
productionMode = false)
public static class MyUIServlet extends VaadinServlet {
}
}