# HG changeset patch # User Jaroslav Tulach # Date 1363765284 -3600 # Node ID acffc26790d7c390effc0fb167160aaa3758b0db # Parent 39166e462f8d9e8581eb8740dfafdaf2a96c6edd Using FX dialog. Intercepting just the first alert('bck2brwsr') call. diff -r 39166e462f8d -r acffc26790d7 rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java Wed Mar 20 06:56:44 2013 +0100 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java Wed Mar 20 08:41:24 2013 +0100 @@ -23,11 +23,11 @@ import javafx.application.Application; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; -import javafx.concurrent.Worker; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.HPos; import javafx.geometry.Insets; +import javafx.geometry.Pos; import javafx.geometry.VPos; import javafx.scene.Node; import javafx.scene.Scene; @@ -38,11 +38,12 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.Priority; import javafx.scene.layout.VBox; +import javafx.scene.text.Text; import javafx.scene.web.WebEngine; import javafx.scene.web.WebEvent; import javafx.scene.web.WebView; +import javafx.stage.Modality; import javafx.stage.Stage; -import javax.swing.JOptionPane; import netscape.javascript.JSObject; /** @@ -76,19 +77,11 @@ view.setPrefSize(500, 400); final WebEngine eng = view.getEngine(); final TextField locationField = new TextField(); - LOG.info("params : " + params); + LOG.log(Level.FINE, "params : {0}", params); if (params.size() > 0) { - eng.getLoadWorker().stateProperty().addListener(new ChangeListener() { - @Override - public void changed(ObservableValue ov, Worker.State t, Worker.State t1) { - LOG.info("about to init bck2brwsr"); - initBck2Brwsr(eng); - LOG.info("done init of bck2brwsr"); - } - }); - LOG.info("loading page " + params.get(0)); + LOG.log(Level.FINE, "loading page {0}", params.get(0)); eng.load(params.get(0)); - LOG.info("done loading page "); + LOG.fine("done loading page "); locationField.setText(params.get(0)); } locationField.setMaxHeight(Double.MAX_VALUE); @@ -111,11 +104,36 @@ eng.setOnAlert(new EventHandler>() { @Override public void handle(WebEvent t) { - if ("bck2brwsr".equals(t.getData())) { - initBck2Brwsr(eng); - return; + if ("bck2brwsr".equals(t.getData())) { // NOI18N + if (initBck2Brwsr(eng)) { + // ignore initial message + return; + } } - JOptionPane.showMessageDialog(null, t.getData()); + final Stage dialogStage = new Stage(); + dialogStage.initModality(Modality.WINDOW_MODAL); + dialogStage.setTitle("Warning"); + final Button button = new Button("Close"); + final Text text = new Text(t.getData()); + + VBox box = new VBox(); + box.setAlignment(Pos.CENTER); + box.setSpacing(10); + box.setPadding(new Insets(10)); + box.getChildren().addAll(text, button); + + dialogStage.setScene(new Scene(box)); + + button.setCancelButton(true); + button.setOnAction(new EventHandler() { + @Override + public void handle(ActionEvent t) { + dialogStage.close(); + } + }); + + dialogStage.centerOnScreen(); + dialogStage.showAndWait(); } }); GridPane grid = new GridPane(); @@ -129,14 +147,16 @@ getChildren().add(grid); } - void initBck2Brwsr(WebEngine webEngine) { + boolean initBck2Brwsr(WebEngine webEngine) { JSObject jsobj = (JSObject) webEngine.executeScript("window"); - LOG.info("window: " + jsobj); + LOG.log(Level.FINE, "window: {0}", jsobj); Object prev = jsobj.getMember("bck2brwsr"); if ("undefined".equals(prev)) { System.getProperties().put("webEngine", webEngine); jsobj.setMember("bck2brwsr", bridge); + return true; } + return false; } @Override