package com.baselet.gwt.client.view.widgets; import java.util.Date; import com.baselet.control.enums.Program; import com.google.gwt.i18n.client.DateTimeFormat; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.TextBox; public class DownloadPopupPanel extends MyPopupPanel { private static DateTimeFormat DTF = DateTimeFormat.getFormat("yyyy-MM-dd HH-mm-ss"); public DownloadPopupPanel(final String uxfUrl, final String pngUrl, final FilenameHolder filenameHolder) { super(true, Type.POPUP); setHeader("Export Diagram"); FlowPanel panel = new FlowPanel(); HTML w = new HTML("Optionally set a filename"); panel.add(w); final TextBox textBox = new TextBox(); panel.add(textBox); textBox.setValue(filenameHolder.getFilename()); final HTML downloadLinkHtml = new HTML(createDownloadLinks(uxfUrl, pngUrl, filenameHolder.getFilename())); panel.add(downloadLinkHtml); panel.add(new HTML("<div style=\"color:gray;\">To change the target directory</div><div style=\"color:gray;\">use \"Right click -> Save as\"</div>")); setWidget(panel); // listen to all input events from the browser (http://stackoverflow.com/a/43089693) textBox.addDomHandler(new InputHandler() { @Override public void onInput(InputEvent event) { filenameHolder.setFilename(textBox.getText()); downloadLinkHtml.setHTML(createDownloadLinks(uxfUrl, pngUrl, filenameHolder.getFilename())); } }, InputEvent.getType()); } private String createDownloadLinks(String uxfUrl, String pngUrl, String filename) { if (filename.isEmpty()) { filename = "Diagram " + DTF.format(new Date()); } return "<p class=\"exportLink\">" + link(uxfUrl, filename + "." + Program.getInstance().getExtension()) + "Save Diagram File</a></p>" + "<p class=\"exportLink\">" + link(pngUrl, filename + ".png") + "Save Image File</a></p>"; } private String link(String uxfUrl, String filename) { return "<a download=\"" + filename + "\" href='" + uxfUrl.replace("'", "'") + "'>"; // apostrophes in datauris must be escaped because it's the closing sign fore the href } }