package org.geogebra.web.web.main;
import org.geogebra.common.gui.view.consprotocol.ConstructionProtocolView;
import org.geogebra.web.html5.Browser;
import org.geogebra.web.html5.main.AppW;
import org.geogebra.web.web.gui.browser.BrowseGUI;
import org.geogebra.web.web.gui.browser.BrowseResources;
import org.geogebra.web.web.gui.dialog.image.ImageInputDialog;
import org.geogebra.web.web.gui.dialog.image.UploadImageDialog;
import org.geogebra.web.web.gui.view.consprotocol.ConstructionProtocolViewW;
import com.google.gwt.dom.client.Element;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Image;
/**
* Device class for case we are running in the browser (eg Chrome app)
*/
public class BrowserDevice implements GDevice {
/**
* Button for opening local files
*
*/
public static class FileOpenButton extends FlowPanel {
private Element input;
/**
* New button
*/
public FileOpenButton() {
super();
this.setStyleName("button");
final Image icon = new Image(
BrowseResources.INSTANCE.location_local());
final Element span = DOM.createElement("span");
span.setAttribute(
"style",
"position: absolute; width: 50px; height: 50px; padding: 10px; top: 0px; left: 0px; overflow: hidden;");
span.setInnerHTML("<img src=\"" + icon.getUrl() + "\"/>");
Element form = DOM.createElement("form");
input = DOM.createElement("input");
input.setAttribute("type", "file");
input.setAttribute(
"style",
"width: 500px; height: 60px; font-size: 56px;"
+ "opacity: 0; position: absolute; right: 0px; top: 0px; cursor: pointer;");
form.appendChild(input);
span.appendChild(form);
DOM.insertChild(getElement(), span, 0);
}
/**
* @param bg
* browsing gui
*/
public void setBrowseGUI(BrowseGUI bg) {
addGgbChangeHandler(input, bg);
}
private native void addGgbChangeHandler(Element el, BrowseGUI bg) /*-{
var dialog = this;
// el.setAttribute("accept", "application/vnd.geogebra.file, application/vnd.geogebra.tool");
el.onchange = function(event) {
var files = this.files;
if (files.length) {
bg.@org.geogebra.web.web.gui.browser.BrowseGUI::showLoading()();
var fileToHandle = files[0];
bg.@org.geogebra.web.web.gui.browser.BrowseGUI::openFile(Lcom/google/gwt/core/client/JavaScriptObject;Lcom/google/gwt/core/client/JavaScriptObject;)(fileToHandle);
}
el.parentElement.reset();
};
}-*/;
}
@Override
public FileManager createFileManager(AppW app) {
return new FileManagerW(app);
}
@Override
public boolean isOffline(AppW app) {
return !app.getNetworkOperation().isOnline();
}
@Override
public UploadImageDialog getImageInputDialog(AppW app) {
return new ImageInputDialog(app);
}
@Override
public BrowseGUI createBrowseView(AppW app) {
FileOpenButton mb = new FileOpenButton();
BrowseGUI bg = new BrowseGUI(app, mb);
mb.setBrowseGUI(bg);
return bg;
}
@Override
public ConstructionProtocolView getConstructionProtocolView(AppW app) {
return new ConstructionProtocolViewW(app);
}
@Override
public void resizeView(int width0, int height0) {
if (width0 > Browser.getScreenWidth()
|| height0 > Browser.getScreenHeight()) {
int width = Browser.getScreenWidth();
int height = Browser.getScreenHeight();
Window.moveTo(0, 0);
Window.resizeTo(width, height);
} else {
Window.resizeTo(width0, height0);
}
}
}