/* Copyright (C) Paul Falstad and Iain Sharp This file is part of CircuitJS1. CircuitJS1 is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. CircuitJS1 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with CircuitJS1. If not, see <http://www.gnu.org/licenses/>. */ package com.lushprojects.circuitjs1.client; import com.google.gwt.user.client.ui.DialogBox; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.Window.Location; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.http.client.URL; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.RichTextArea; import com.google.gwt.http.client.RequestBuilder; import com.google.gwt.http.client.RequestCallback; import com.google.gwt.http.client.RequestException; import com.google.gwt.http.client.Response; import com.google.gwt.http.client.Request; public class ExportAsUrlDialog extends DialogBox { VerticalPanel vp; Button shortButton; static RichTextArea tb; String requrl; public boolean shortIsSupported() { return circuitjs1.shortRelaySupported; } // static public final native boolean bitlyIsSupported() // /*-{ // return !!($wnd.bitlytoken !==undefined && $wnd.bitlytoken !==null); // }-*/; // static public void createShort(String urlin) { String url; url = "shortrelay.php"+"?v="+urlin; tb.setText("Waiting for short URL for web service..."); RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, url); try { requestBuilder.sendRequest(null, new RequestCallback() { public void onError(Request request, Throwable exception) { GWT.log("File Error Response", exception); } public void onResponseReceived(Request request, Response response) { // processing goes here if (response.getStatusCode()==Response.SC_OK) { String text = response.getText(); tb.setText(text); // end or processing } else { String text="Shortner error:"+response.getStatusText(); tb.setText(text); GWT.log(text ); } } }); } catch (RequestException e) { GWT.log("failed file reading", e); } } public ExportAsUrlDialog( String dump) { super(); String start[] = Location.getHref().split("\\?"); dump=dump.replace(' ', '+'); String query="?cct=" + URL.encode(dump); dump = start[0] + query; requrl = URL.encodeQueryString(query); Button okButton; Label la1, la2; vp=new VerticalPanel(); setWidget(vp); setText(CirSim.LS("Export as URL")); vp.add(new Label(CirSim.LS("URL for this circuit is..."))); if (dump.length()>2000) { vp.add( la1= new Label(CirSim.LS("Warning: this URL is longer than 2000 characters and may not work in some browsers."), true)); la1.setWidth("300px"); } vp.add(tb = new RichTextArea()); tb.setText(dump); // tb.setMaxLength(s.length()); // tb.setVisibleLength(s.length()); vp.add(la2 = new Label(CirSim.LS("To save this URL select it all (eg click in text and type control-A) and copy to your clipboard (eg control-C) before pasting to a suitable place."), true)); la2.setWidth("300px"); HorizontalPanel hp = new HorizontalPanel(); hp.setWidth("100%"); hp.setStyleName("topSpace"); hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT); hp.add(okButton = new Button(CirSim.LS("OK"))); vp.add(hp); if (shortIsSupported()) { hp.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT); hp.add(shortButton = new Button(CirSim.LS("Create short URL"))); shortButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { shortButton.setVisible(false); createShort(requrl); } }); } okButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { closeDialog(); } }); this.center(); } protected void closeDialog() { this.hide(); } }