package mara.mybox.controller; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.event.Event; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.layout.Pane; import javafx.scene.web.WebEngine; import mara.mybox.data.VisitHistory; import mara.mybox.fxml.FxmlStage; import mara.mybox.tools.NetworkTools; import mara.mybox.value.AppVariables; import static mara.mybox.value.AppVariables.logger; import static mara.mybox.value.AppVariables.message; import mara.mybox.value.CommonFxValues; import mara.mybox.value.CommonValues; /** * @Author Mara * @CreateDate 2018-7-31 * @Description * @License Apache License Version 2.0 */ public class WebBrowserController extends BaseController { protected int delay, fontSize, orginalStageHeight, orginalStageY, orginalStageWidth; protected int snapHeight, snapCount; protected boolean isOneImage; protected List<Image> images; protected float zoomScale; protected boolean loadSynchronously, isFrameSet; protected int cols, rows; protected Map<Tab, WebBrowserBoxController> tabControllers; @FXML protected Button loadButton, plusButton; @FXML protected TabPane tabPane; @FXML protected CheckBox bypassCheck; @FXML protected TextField bottomText, findInput; public WebBrowserController() { baseTitle = AppVariables.message("WebBrowser"); SourceFileType = VisitHistory.FileType.Html; SourcePathType = VisitHistory.FileType.Html; TargetPathType = VisitHistory.FileType.Html; TargetFileType = VisitHistory.FileType.Html; AddFileType = VisitHistory.FileType.Html; AddPathType = VisitHistory.FileType.Html; sourcePathKey = "HtmlFilePath"; targetPathKey = "HtmlFilePath"; sourceExtensionFilter = CommonFxValues.HtmlExtensionFilter; targetExtensionFilter = sourceExtensionFilter; } @Override public void initializeNext() { try { isSettingValues = false; fontSize = 14; zoomScale = 1.0f; isFrameSet = false; tabControllers = new HashMap(); newTabAction(null, false); initOptions(); } catch (Exception e) { logger.error(e.toString()); } } protected void initOptions() { try { bypassCheck.selectedProperty().addListener(new ChangeListener<Boolean>() { @Override public void changed(ObservableValue ov, Boolean oldv, Boolean newv) { AppVariables.setUserConfigValue("SSLBypassAll", newv); if (newv) { NetworkTools.trustAll(); } else { NetworkTools.myBoxSSL(); } } }); bypassCheck.setSelected(AppVariables.getUserConfigBoolean("SSLBypassAll", false)); if (bypassCheck.isSelected()) { NetworkTools.trustAll(); } else { NetworkTools.myBoxSSL(); } } catch (Exception e) { logger.error(e.toString()); } } protected WebEngine initWebEngine() { if (tabControllers == null || tabControllers.isEmpty()) { return null; } for (Tab tab : tabControllers.keySet()) { WebBrowserBoxController c = tabControllers.get(tab); return c.webEngine; } return null; } @FXML protected void newTabAction() { newTabAction(null, true); } protected WebBrowserBoxController newTabAction(String address, boolean focus) { try { FXMLLoader fxmlLoader = new FXMLLoader(FxmlStage.class.getResource( CommonValues.WebBrowserBoxFxml), AppVariables.currentBundle); Pane pane = fxmlLoader.load(); Tab tab = new Tab(); ImageView tabImage = new ImageView("img/MyBox.png"); tabImage.setFitWidth(20); tabImage.setFitHeight(20); tab.setGraphic(tabImage); tab.setContent(pane); tabPane.getTabs().add(tab); if (focus) { tabPane.getSelectionModel().select(tab); } WebBrowserBoxController controller = (WebBrowserBoxController) fxmlLoader.getController(); controller.parent = this; controller.tab = tab; tabControllers.put(tab, controller); tab.setOnClosed(new EventHandler<Event>() { @Override public void handle(Event event) { tabControllers.remove(tab); } }); if (address != null) { controller.loadLink(address); } return controller; } catch (Exception e) { logger.error(e.toString()); return null; } } public void loadFile(File file) { WebBrowserBoxController c = newTabAction(null, true); c.loadFile(file); } @FXML protected void editAction() { Tab tab = tabPane.getSelectionModel().getSelectedItem(); WebBrowserBoxController controller = tabControllers.get(tab); if (controller == null) { return; } HtmlEditorController hcontroller = (HtmlEditorController) openStage(CommonValues.HtmlEditorFxml); hcontroller.loadLink(controller.url.toString()); } @FXML protected void zoomIn() { Tab tab = tabPane.getSelectionModel().getSelectedItem(); WebBrowserBoxController controller = tabControllers.get(tab); if (controller == null) { return; } controller.zoomIn(); } @FXML protected void zoomOut() { Tab tab = tabPane.getSelectionModel().getSelectedItem(); WebBrowserBoxController controller = tabControllers.get(tab); if (controller == null) { return; } controller.zoomOut(); } @FXML protected void backAction() { Tab tab = tabPane.getSelectionModel().getSelectedItem(); WebBrowserBoxController controller = tabControllers.get(tab); if (controller == null) { return; } controller.backAction(); } @FXML protected void forwardAction() { Tab tab = tabPane.getSelectionModel().getSelectedItem(); WebBrowserBoxController controller = tabControllers.get(tab); if (controller == null) { return; } controller.forwardAction(); } @FXML protected void refreshAction() { Tab tab = tabPane.getSelectionModel().getSelectedItem(); WebBrowserBoxController controller = tabControllers.get(tab); if (controller == null) { return; } controller.refreshAction(); } @FXML protected void manageCertificates() { openStage(CommonValues.SecurityCertificatesFxml); } @FXML protected void manageBypass() { try { FXMLLoader fxmlLoader = new FXMLLoader(FxmlStage.class.getResource( CommonValues.SecurityCertificatesBypassFxml), AppVariables.currentBundle); Pane pane = fxmlLoader.load(); Tab tab = new Tab(message("SSLVerificationBypassList")); ImageView tabImage = new ImageView("img/MyBox.png"); tabImage.setFitWidth(20); tabImage.setFitHeight(20); tab.setGraphic(tabImage); tab.setContent(pane); tabPane.getTabs().add(tab); tabPane.getSelectionModel().select(tab); } catch (Exception e) { logger.error(e.toString()); } } @FXML protected void manageHistories() { try { FXMLLoader fxmlLoader = new FXMLLoader(FxmlStage.class.getResource( CommonValues.WebBrowserHistoryFxml), AppVariables.currentBundle); Pane pane = fxmlLoader.load(); Tab tab = new Tab(message("ManageHistories")); ImageView tabImage = new ImageView("img/MyBox.png"); tabImage.setFitWidth(20); tabImage.setFitHeight(20); tab.setGraphic(tabImage); tab.setContent(pane); tabPane.getTabs().add(tab); tabPane.getSelectionModel().select(tab); WebBrowserHistoryController controller = (WebBrowserHistoryController) fxmlLoader.getController(); controller.parent = this; } catch (Exception e) { logger.error(e.toString()); } } @Override public boolean leavingScene() { tabControllers.clear(); tabControllers = null; return super.leavingScene(); } }