package org.geogebra.web.web.gui.dialog.image;
import org.geogebra.common.util.debug.Log;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.ui.FileUpload;
import com.google.gwt.user.client.ui.FormPanel;
import com.google.gwt.user.client.ui.Image;
import com.google.gwt.user.client.ui.VerticalPanel;
public class UploadImagePanel extends VerticalPanel {
private String fileData;
private String fileName;
int previewHeight;
int previewWidth;
/** used to reset the uploadImageBtn */
private FormPanel panel;
private FileUpload uploadImageBtn;
private Image previewImg;
private UploadImageDialog dialog;
public UploadImagePanel(UploadImageDialog uploadImageDialog,
int previewWidth, int previewHeight) {
this.dialog = uploadImageDialog;
this.previewWidth = previewWidth;
this.previewHeight = previewHeight;
initGUI();
initActions();
}
private void initGUI() {
panel = new FormPanel();
panel.add(uploadImageBtn = new FileUpload());
add(panel);
}
private void initActions() {
addChangeHandler(uploadImageBtn.getElement());
}
public native void addChangeHandler(Element el) /*-{
var panel = this;
el.setAttribute("accept", "image/*");
el.onchange = function(event) {
var fileToHandle = null;
var files = this.files;
if (files.length) {
var fileTypes = /^image.*$/;
for (var i = 0, j = files.length; i < j; ++i) {
if (!files[i].type.match(fileTypes)) {
continue;
}
fileToHandle = files[i];
break;
}
}
if (fileToHandle != null) {
var reader = new FileReader();
var fileName = fileToHandle.name;
reader.onloadend = function(ev) {
if (reader.readyState === reader.DONE) {
var fileStr = reader.result;
panel.@org.geogebra.web.web.gui.dialog.image.UploadImagePanel::fileSelected(Ljava/lang/String;Ljava/lang/String;)(fileStr, fileName);
}
};
reader.readAsDataURL(fileToHandle);
}
}
}-*/;
private void fileSelected(String fileData, String fileName) {
this.fileData = fileData;
this.fileName = fileName;
if (previewImg == null) {
try{
previewImg = new Image(fileData);
previewImg.setWidth(previewWidth + "px");
previewImg.setHeight(previewHeight + "px");
add(previewImg);
}catch(Throwable e){
Log.debug("ImageProblem" + e.getMessage());
}
} else {
previewImg.setUrl(fileData);
}
dialog.imageAvailable();
}
public String getImageDataURL() {
return fileData;
}
public String getFileName() {
return fileName;
}
public void resetPreview() {
if (this.previewImg != null) {
this.remove(this.previewImg);
this.previewImg = null;
panel.reset();
}
}
}