Using dialog buttons instead of custom ones
This commit is contained in:
		| @@ -54,19 +54,8 @@ | ||||
| 							visible="false" GridPane.columnIndex="1" GridPane.rowIndex="2" /> | ||||
| 					</children> | ||||
| 				</GridPane> | ||||
| 				<HBox alignment="CENTER_RIGHT" prefHeight="100.0" | ||||
| 					prefWidth="200.0"> | ||||
| 					<children> | ||||
| 						<CheckBox fx:id="registerCheckBox" | ||||
| 							mnemonicParsing="false" onAction="#registerCheckboxChanged" | ||||
| 							text="Register" /> | ||||
| 						<Button alignment="CENTER_RIGHT" cancelButton="true" | ||||
| 							mnemonicParsing="false" onAction="#abortLogin" text="Close" /> | ||||
| 						<Button alignment="CENTER_RIGHT" defaultButton="true" | ||||
| 							mnemonicParsing="false" text="Login" | ||||
| 							onAction="#loginButtonClicked" fx:id="loginButton" /> | ||||
| 					</children> | ||||
| 				</HBox> | ||||
| 				<CheckBox fx:id="registerCheckBox" mnemonicParsing="false" | ||||
| 					onAction="#registerCheckboxChanged" text="Register" /> | ||||
| 			</children> | ||||
| 		</VBox> | ||||
| 	</content> | ||||
|   | ||||
| @@ -17,6 +17,7 @@ import envoy.event.HandshakeRejectionEvent; | ||||
| import envoy.exception.EnvoyException; | ||||
| import envoy.util.EnvoyLog; | ||||
| import javafx.application.Platform; | ||||
| import javafx.event.ActionEvent; | ||||
| import javafx.fxml.FXML; | ||||
| import javafx.fxml.FXMLLoader; | ||||
| import javafx.scene.control.*; | ||||
| @@ -47,9 +48,6 @@ public final class LoginDialog extends Dialog<Void> { | ||||
| 	@FXML | ||||
| 	private CheckBox registerCheckBox; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Button loginButton; | ||||
|  | ||||
| 	private final Client			client; | ||||
| 	private final LocalDB			localDB; | ||||
| 	private final Cache<Message>	receivedMessageCache; | ||||
| @@ -75,27 +73,43 @@ public final class LoginDialog extends Dialog<Void> { | ||||
|  | ||||
| 		final var loader = new FXMLLoader(getClass().getResource("LoginDialog.fxml")); | ||||
| 		loader.setController(this); | ||||
| 		setDialogPane(loader.load()); | ||||
| 		final var dialogPane = loader.<DialogPane>load(); | ||||
|  | ||||
| 		// Configure dialog buttons | ||||
| 		dialogPane.getButtonTypes().addAll(ButtonType.CLOSE, ButtonType.OK); | ||||
|  | ||||
| 		// Close button | ||||
| 		dialogPane.lookupButton(ButtonType.CLOSE).addEventHandler(ActionEvent.ACTION, e -> abortLogin()); | ||||
|  | ||||
| 		// Login button | ||||
| 		final var loginButton = (Button) dialogPane.lookupButton(ButtonType.OK); | ||||
| 		loginButton.setText("Login"); | ||||
| 		loginButton.addEventFilter(ActionEvent.ACTION, e -> { | ||||
| 			e.consume(); | ||||
|  | ||||
| 			// Prevent registration with unequal passwords | ||||
| 			if (registerCheckBox.isSelected() && !passwordField.getText().equals(repeatPasswordField.getText())) { | ||||
| 				clearPasswordFields(); | ||||
| 				new Alert(AlertType.ERROR, "The entered password is unequal to the repeated one").showAndWait(); | ||||
| 			} else | ||||
| 				performHandshake(new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), registerCheckBox.isSelected())); | ||||
| 		}); | ||||
|  | ||||
| 		// Perform automatic login if configured | ||||
| 		setOnShown(e -> { if (config.hasLoginCredentials()) performHandshake(config.getLoginCredentials()); }); | ||||
|  | ||||
| 		setDialogPane(dialogPane); | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| 	private void initialize() { | ||||
|  | ||||
| 		// Close the dialog when the user exits the dialog | ||||
| 		getDialogPane().getScene().getWindow().setOnCloseRequest(e -> abortLogin()); | ||||
|  | ||||
| 		// Show an alert after an unsuccessful handshake | ||||
| 		eventBus.register(HandshakeRejectionEvent.class, | ||||
| 				e -> Platform.runLater(() -> { clearPasswordFields(); new Alert(AlertType.ERROR, e.get()).showAndWait(); })); | ||||
|  | ||||
| 		// Set initial cursor | ||||
| 		userTextField.requestFocus(); | ||||
|  | ||||
| 		// Perform automatic login if configured | ||||
| 		if (config.hasLoginCredentials()) { | ||||
| 			performHandshake(config.getLoginCredentials()); | ||||
| 			hide(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| @@ -114,22 +128,12 @@ public final class LoginDialog extends Dialog<Void> { | ||||
| 		System.exit(0); | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| 	private void loginButtonClicked() { | ||||
|  | ||||
| 		// Prevent registration with unequal passwords | ||||
| 		if (registerCheckBox.isSelected() && !passwordField.getText().equals(repeatPasswordField.getText())) { | ||||
| 			clearPasswordFields(); | ||||
| 			new Alert(AlertType.ERROR, "The entered password is unequal to the repeated one").showAndWait(); | ||||
| 		} else performHandshake(new LoginCredentials(userTextField.getText(), passwordField.getText().toCharArray(), registerCheckBox.isSelected())); | ||||
| 	} | ||||
|  | ||||
| 	private void performHandshake(LoginCredentials credentials) { | ||||
| 		try { | ||||
| 			client.performHandshake(credentials, receivedMessageCache); | ||||
| 			if (client.isOnline()) { | ||||
| 				client.initReceiver(localDB, receivedMessageCache); | ||||
| 				hide(); | ||||
| 				Platform.runLater(this::hide); | ||||
| 			} | ||||
| 		} catch (IOException | InterruptedException | TimeLimitExceededException e) { | ||||
| 			logger.warning("Could not connect to server. Trying offline mode..."); | ||||
| @@ -140,10 +144,13 @@ public final class LoginDialog extends Dialog<Void> { | ||||
| 				User clientUser = (User) localDB.getUsers().get(credentials.getIdentifier()); | ||||
| 				if (clientUser == null) throw new EnvoyException("Could not enter offline mode: user name unknown"); | ||||
| 				client.setSender(clientUser); | ||||
| 				new Alert(AlertType.WARNING, "A connection to the server could not be established. Starting in offline mode.\n" + e).showAndWait(); | ||||
| 				hide(); | ||||
| 				Platform.runLater(() -> { | ||||
| 					new Alert(AlertType.WARNING, "A connection to the server could not be established. Starting in offline mode.\n" + e) | ||||
| 						.showAndWait(); | ||||
| 					hide(); | ||||
| 				}); | ||||
| 			} catch (Exception e1) { | ||||
| 				new Alert(AlertType.ERROR, "Client error: " + e.toString()).showAndWait(); | ||||
| 				Platform.runLater(() -> new Alert(AlertType.ERROR, "Client error: " + e.toString()).showAndWait()); | ||||
| 				System.exit(1); | ||||
| 			} | ||||
| 		} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user