public class WebContainerController {
@FXML
private BorderPane parent;
@FXML
private ToolBar tbTop;
@FXML
private Button buttonBack;
@FXML
private Button buttonForward;
@FXML
private Button buttonReloadStop;
@FXML
private Region spacer;
@FXML
private Button buttonBrowser;
@FXML
private Button buttonClose;
@FXML
private WebView webView;
@FXML
private ProgressBar progressBar;
@FXML
private ToolBar tbBotton;
@FXML
private Label labelStatus;
private HostServices hostServices = null;
public void setHostServices(HostServices hostServices) {
this.hostServices = hostServices;
}
private Window window;
public void setWindow(Window window) {
this.window = window;
}
private String url;
public void setUrl(String url) {
this.url = url;
if (webEngine != null) {
webEngine.load(url);
}
}
public String getUrl() {
return url;
}
private WebEngine webEngine;
private ImageView ivStop = null;
private ImageView ivReload = null;
private EventListener<?> prefsEventListener = null;
@FXML
public void initialize() {
// by standards I know now: far too complicated...
if (prefsEventListener == null) {
prefsEventListener = new InternalPreferenceEventListener();
TypedEventDispatcher.getInstance().addListener(prefsEventListener, Preferences.EventName.INTERNAL_EVENT_LANGUAGE);
}
HBox.setHgrow(spacer, Priority.ALWAYS);
webEngine = webView.getEngine();
UIUtils.updateWebEngine(window, webEngine, true, false);
ivStop = ImageResource.getImageView(ImageType.WEB_STOP);
ivStop.setFitHeight(20);
ivStop.setFitWidth(20);
ivReload = ImageResource.getImageView(ImageType.WEB_RELOAD);
ivReload.setFitHeight(20);
ivReload.setFitWidth(20);
progressBar.setVisible(false);
progressBar.setManaged(false);
webView.setContextMenuEnabled(false);
webEngine.getLoadWorker().stateProperty().addListener(new ChangeListener<State>() {
@Override
public void changed(ObservableValue<? extends State> observable, State oldValue, State newValue) {
if (newValue == State.SUCCEEDED) {
buttonReloadStop.setGraphic(ivReload);
buttonReloadStop.setTooltip(new Tooltip(StringResource.getString("web.button.relaod")));
progressBar.setVisible(false);
progressBar.setManaged(false);
} else {
buttonReloadStop.setGraphic(ivStop);
buttonReloadStop.setTooltip(new Tooltip(StringResource.getString("web.button.stop")));
progressBar.setVisible(true);
progressBar.setManaged(true);
}
}
});
webEngine.getLoadWorker().progressProperty().addListener(new ChangeListener<Number>() {
@Override
public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
progressBar.setProgress(newValue.doubleValue());
}
});
webEngine.locationProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
if (newValue.toLowerCase(Locale.ENGLISH).startsWith("mailto")) {
hostServices.showDocument(newValue);
webEngine.load(oldValue);
}
}
});
// some more init stuff
}
@FXML
public void onBack(ActionEvent event) {
WebHistory history = webEngine.getHistory();
if (history.getEntries().size() == 0)
return;
int index = history.getCurrentIndex();
if (index > 0)
history.go(-1);
}
@FXML
public void onForward(ActionEvent event) {
WebHistory history = webEngine.getHistory();
if (history.getEntries().size() == 0)
return;
int index = history.getCurrentIndex();
if (index < (history.getEntries().size() - 1))
history.go(+1);
}
@FXML
public void onReloadStop(ActionEvent event) {
if (webEngine.getLoadWorker().isRunning()) {
webEngine.getLoadWorker().cancel();
} else {
webEngine.reload();
}
}
@FXML
public void onBrowser(ActionEvent event) {
hostServices.showDocument(webEngine.getLocation());
}
@FXML
public void onClose(ActionEvent event) {
// hide this overlay
}
}