package org.pixelgaffer.turnierserver.codr.view; import java.awt.Desktop; import java.io.File; import java.io.IOException; import java.net.URI; import java.net.URL; import org.pixelgaffer.turnierserver.codr.MainApp; import org.pixelgaffer.turnierserver.codr.utilities.Dialog; import org.pixelgaffer.turnierserver.codr.utilities.ErrorLog; import org.pixelgaffer.turnierserver.codr.utilities.Settings; import javafx.concurrent.Task; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.ChoiceBox; import javafx.scene.control.Label; import javafx.scene.control.PasswordField; import javafx.scene.control.ProgressIndicator; import javafx.scene.control.Slider; import javafx.scene.control.TextField; import javafx.scene.control.TitledPane; import javafx.scene.control.ToggleButton; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.GridPane; import javafx.scene.layout.HBox; import javafx.scene.layout.VBox; import javafx.scene.web.WebEngine; import javafx.scene.web.WebView; public class ControllerStartPage { MainApp mainApp; @FXML Button btInfo; @FXML Button btRegister; @FXML Button btLogin; @FXML public TextField tbEmail; @FXML PasswordField tbPassword; @FXML TitledPane tpLogic; @FXML TitledPane tpRegister; @FXML WebView wfNews; @FXML public VBox vbLogin; @FXML public GridPane gpLogin; @FXML public HBox hbLogout; @FXML public ChoiceBox<String> cbGameTypes; @FXML public Button btTryOnline; @FXML public Label lbIsOnline; @FXML public ProgressIndicator prOnlineResources; @FXML public ProgressIndicator prLogin; @FXML public ProgressIndicator prLogin1; @FXML public ToggleButton btTheme; @FXML public Slider slFontSize; @FXML public TextField tbPythonInterpreter; @FXML public TextField tbJDK; WebEngine webEngine; /** * Initialisiert den Controller * * @param app eine Referenz auf die MainApp */ public void setMainApp(MainApp app) { mainApp = app; MainApp.cStart = this; webEngine = wfNews.getEngine(); webEngine.setJavaScriptEnabled(true); webEngine.load("http://www.bundeswettbewerb-informatik.de/"); wfNews.setZoom(0.9); MainApp.updateLoggedIn(); MainApp.updateConnected(); btTheme.selectedProperty().addListener((observableValue, oldValue, newValue) -> { clickTheme(newValue); }); cbGameTypes.setItems(MainApp.gametypes); tbPassword.addEventHandler(KeyEvent.KEY_RELEASED, new EventHandler<KeyEvent>() { @Override public void handle(KeyEvent event) { if (event.getCode() == KeyCode.ENTER) { clickLogin(); } } }); } public void loadAis() { MainApp.actualGameType.bindBidirectional(cbGameTypes.valueProperty()); cbGameTypes.valueProperty().addListener((observableValue, oldValue, newValue) -> { MainApp.aiManager.loadAis(); MainApp.loadOnlineRanking(); MainApp.cAi.lvAis.getSelectionModel().selectFirst(); }); cbGameTypes.getSelectionModel().selectLast(); } @FXML void clickInfo() { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { try { desktop.open(new File("Downloads/" + MainApp.actualGameType.get() + "/info.pdf")); } catch (Exception e) { Dialog.error("Zu dem Spiel " + MainApp.actualGameType.get() + " gibt es keine info.pdf"); } } } @FXML void clickRegister() { openWebPage("http://" + Settings.webUrl + "/"); } @FXML void clickLogout() { Task<Boolean> updateL = new Task<Boolean>() { public Boolean call() { try { MainApp.webConnector.logout(); } catch (IOException e) { return false; } return true; } }; prLogin.setVisible(true); prLogin1.setVisible(true); updateL.valueProperty().addListener((observableValue, oldValue, newValue) -> { if (newValue) { MainApp.updateLoggedIn(); } else { ErrorLog.write("Logout fehlgeschlagen"); } prLogin.setVisible(false); prLogin1.setVisible(false); }); Thread thread = new Thread(updateL, "updateLoggedIn"); thread.setDaemon(true); thread.start(); } @FXML void clickLogin() { Task<String> updateL = new Task<String>() { public String call() { try { if (!MainApp.webConnector.login(tbEmail.getText(), tbPassword.getText())) { return "wrongPassword"; } else { return "success"; } } catch (IOException e) { return "error"; } } }; updateL.valueProperty().addListener((observableValue, oldValue, newValue) -> { switch (newValue) { case "success": MainApp.updateLoggedIn(); Dialog.info("Login erfolgreich!"); break; case "wrongPassword": Dialog.error("Falsches Passwort oder Email", "Login fehlgeschlagen"); break; case "error": Dialog.error("Login fehlgeschlagen: ERROR", "Login fehlgeschlagen"); ErrorLog.write("Login fehlgeschlagen"); break; } }); prLogin.setVisible(true); Thread thread = new Thread(updateL, "updateLoggedIn"); thread.setDaemon(true); thread.start(); MainApp.updateLoggedIn(); } @FXML void clickForgotPassword() { openWebPage("http://" + Settings.webUrl + "/"); } @FXML void clickTryOnline() { MainApp.updateConnected(); MainApp.loadOnlineResources(); } @FXML void clickPythonInterpreter() { File result = Dialog.folderChooser(MainApp.stage, "Bitte einen Ordner auswählen"); if (result != null) tbPythonInterpreter.setText(result.getPath()); } @FXML void clickJDK() { File result = Dialog.folderChooser(MainApp.stage, "Bitte einen Ordner auswählen"); if (result != null) tbJDK.setText(result.getPath()); } void clickTheme(Boolean isSelected) { if (isSelected) { btTheme.setText("Dunkel"); } else { btTheme.setText("Hell"); } MainApp.cAi.showAi(); } private void openWebPage(String url) { Desktop desktop = Desktop.isDesktopSupported() ? Desktop.getDesktop() : null; if (desktop != null && desktop.isSupported(Desktop.Action.BROWSE)) { try { URI uri = new URL(url).toURI(); desktop.browse(uri); } catch (Exception e) { e.printStackTrace(); } } } }