Using FX dialog. Intercepting just the first alert('bck2brwsr') call. fx
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Wed, 20 Mar 2013 08:41:24 +0100
branchfx
changeset 854acffc26790d7
parent 853 39166e462f8d
child 855 b11992f928c7
Using FX dialog. Intercepting just the first alert('bck2brwsr') call.
rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java
     1.1 --- a/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java	Wed Mar 20 06:56:44 2013 +0100
     1.2 +++ b/rt/launcher/src/main/java/org/apidesign/bck2brwsr/launcher/impl/FXBrwsr.java	Wed Mar 20 08:41:24 2013 +0100
     1.3 @@ -23,11 +23,11 @@
     1.4  import javafx.application.Application;
     1.5  import javafx.beans.value.ChangeListener;
     1.6  import javafx.beans.value.ObservableValue;
     1.7 -import javafx.concurrent.Worker;
     1.8  import javafx.event.ActionEvent;
     1.9  import javafx.event.EventHandler;
    1.10  import javafx.geometry.HPos;
    1.11  import javafx.geometry.Insets;
    1.12 +import javafx.geometry.Pos;
    1.13  import javafx.geometry.VPos;
    1.14  import javafx.scene.Node;
    1.15  import javafx.scene.Scene;
    1.16 @@ -38,11 +38,12 @@
    1.17  import javafx.scene.layout.Pane;
    1.18  import javafx.scene.layout.Priority;
    1.19  import javafx.scene.layout.VBox;
    1.20 +import javafx.scene.text.Text;
    1.21  import javafx.scene.web.WebEngine;
    1.22  import javafx.scene.web.WebEvent;
    1.23  import javafx.scene.web.WebView;
    1.24 +import javafx.stage.Modality;
    1.25  import javafx.stage.Stage;
    1.26 -import javax.swing.JOptionPane;
    1.27  import netscape.javascript.JSObject;
    1.28  
    1.29  /**
    1.30 @@ -76,19 +77,11 @@
    1.31              view.setPrefSize(500, 400);
    1.32              final WebEngine eng = view.getEngine();
    1.33              final TextField locationField = new TextField();
    1.34 -            LOG.info("params : " + params);
    1.35 +            LOG.log(Level.FINE, "params : {0}", params);
    1.36              if (params.size() > 0) {
    1.37 -                eng.getLoadWorker().stateProperty().addListener(new ChangeListener<Worker.State>() {
    1.38 -                    @Override
    1.39 -                    public void changed(ObservableValue<? extends Worker.State> ov, Worker.State t, Worker.State t1) {
    1.40 -                        LOG.info("about to init bck2brwsr");
    1.41 -                        initBck2Brwsr(eng);
    1.42 -                        LOG.info("done init of bck2brwsr");
    1.43 -                    }
    1.44 -                });
    1.45 -                LOG.info("loading page " + params.get(0));
    1.46 +                LOG.log(Level.FINE, "loading page {0}", params.get(0));
    1.47                  eng.load(params.get(0));
    1.48 -                LOG.info("done loading page ");
    1.49 +                LOG.fine("done loading page ");
    1.50                  locationField.setText(params.get(0));
    1.51              }
    1.52              locationField.setMaxHeight(Double.MAX_VALUE);
    1.53 @@ -111,11 +104,36 @@
    1.54              eng.setOnAlert(new EventHandler<WebEvent<String>>() {
    1.55                  @Override
    1.56                  public void handle(WebEvent<String> t) {
    1.57 -                    if ("bck2brwsr".equals(t.getData())) {
    1.58 -                        initBck2Brwsr(eng);
    1.59 -                        return;
    1.60 +                    if ("bck2brwsr".equals(t.getData())) { // NOI18N
    1.61 +                        if (initBck2Brwsr(eng)) {
    1.62 +                            // ignore initial message
    1.63 +                            return;
    1.64 +                        }
    1.65                      }
    1.66 -                    JOptionPane.showMessageDialog(null, t.getData());
    1.67 +                    final Stage dialogStage = new Stage();
    1.68 +                    dialogStage.initModality(Modality.WINDOW_MODAL);
    1.69 +                    dialogStage.setTitle("Warning");
    1.70 +                    final Button button = new Button("Close");
    1.71 +                    final Text text = new Text(t.getData());
    1.72 +                    
    1.73 +                    VBox box = new VBox();
    1.74 +                    box.setAlignment(Pos.CENTER);
    1.75 +                    box.setSpacing(10);
    1.76 +                    box.setPadding(new Insets(10));
    1.77 +                    box.getChildren().addAll(text, button);
    1.78 +                    
    1.79 +                    dialogStage.setScene(new Scene(box));
    1.80 +                    
    1.81 +                    button.setCancelButton(true);
    1.82 +                    button.setOnAction(new EventHandler<ActionEvent>() {
    1.83 +                        @Override
    1.84 +                        public void handle(ActionEvent t) {
    1.85 +                            dialogStage.close();
    1.86 +                        }
    1.87 +                    });
    1.88 +                    
    1.89 +                    dialogStage.centerOnScreen();
    1.90 +                    dialogStage.showAndWait();
    1.91                  }
    1.92              });
    1.93              GridPane grid = new GridPane();
    1.94 @@ -129,14 +147,16 @@
    1.95              getChildren().add(grid);
    1.96          }
    1.97  
    1.98 -        void initBck2Brwsr(WebEngine webEngine) {
    1.99 +        boolean initBck2Brwsr(WebEngine webEngine) {
   1.100              JSObject jsobj = (JSObject) webEngine.executeScript("window");
   1.101 -            LOG.info("window: " + jsobj);
   1.102 +            LOG.log(Level.FINE, "window: {0}", jsobj);
   1.103              Object prev = jsobj.getMember("bck2brwsr");
   1.104              if ("undefined".equals(prev)) {
   1.105                  System.getProperties().put("webEngine", webEngine);
   1.106                  jsobj.setMember("bck2brwsr", bridge);
   1.107 +                return true;
   1.108              }
   1.109 +            return false;
   1.110          }
   1.111  
   1.112          @Override