Moved the LoginDialogController class inside the LoginDialog class
This commit is contained in:
		| @@ -46,9 +46,10 @@ public class Client implements Closeable { | ||||
| 	private volatile Set<? extends Contact>	contacts; | ||||
| 	private volatile boolean				rejected; | ||||
|  | ||||
| 	// Configuration and logging | ||||
| 	private static final ClientConfig	config	= ClientConfig.getInstance(); | ||||
| 	private static final Logger			logger	= EnvoyLog.getLogger(Client.class); | ||||
| 	// Configuration, logging and event management | ||||
| 	private static final ClientConfig	config		= ClientConfig.getInstance(); | ||||
| 	private static final Logger			logger		= EnvoyLog.getLogger(Client.class); | ||||
| 	private static final EventBus		eventBus	= EventBus.getInstance(); | ||||
|  | ||||
| 	/** | ||||
| 	 * Enters the online mode by acquiring a user ID from the server. As a | ||||
| @@ -80,7 +81,7 @@ public class Client implements Closeable { | ||||
| 		// Register user creation processor, contact list processor and message cache | ||||
| 		receiver.registerProcessor(User.class, sender -> { this.sender = sender; contacts = sender.getContacts(); }); | ||||
| 		receiver.registerProcessor(Message.class, receivedMessageCache); | ||||
| 		receiver.registerProcessor(HandshakeRejectionEvent.class, evt -> { rejected = true; EventBus.getInstance().dispatch(evt); }); | ||||
| 		receiver.registerProcessor(HandshakeRejectionEvent.class, evt -> { rejected = true; eventBus.dispatch(evt); }); | ||||
|  | ||||
| 		rejected = false; | ||||
|  | ||||
| @@ -146,20 +147,19 @@ public class Client implements Closeable { | ||||
| 		receiver.registerProcessor(IDGenerator.class, localDB::setIDGenerator); | ||||
|  | ||||
| 		// Process name changes | ||||
| 		receiver.registerProcessor(NameChangeEvent.class, evt -> { localDB.replaceContactName(evt); EventBus.getInstance().dispatch(evt); }); | ||||
| 		receiver.registerProcessor(NameChangeEvent.class, evt -> { localDB.replaceContactName(evt); eventBus.dispatch(evt); }); | ||||
|  | ||||
| 		// Process contact searches | ||||
| 		receiver.registerProcessor(ContactSearchResult.class, EventBus.getInstance()::dispatch); | ||||
| 		receiver.registerProcessor(ContactSearchResult.class, eventBus::dispatch); | ||||
|  | ||||
| 		receiver.registerProcessor(Contact.class, | ||||
| 				contacts -> EventBus.getInstance() | ||||
| 					.dispatch(new ContactOperationEvent(contacts.getContacts().iterator().next(), ElementOperation.ADD))); | ||||
| 				contacts -> eventBus.dispatch(new ContactOperationEvent(contacts.getContacts().iterator().next(), ElementOperation.ADD))); | ||||
|  | ||||
| 		// Process group size changes | ||||
| 		receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); EventBus.getInstance().dispatch(evt); }); | ||||
| 		receiver.registerProcessor(GroupResizeEvent.class, evt -> { localDB.updateGroup(evt); eventBus.dispatch(evt); }); | ||||
|  | ||||
| 		// Send event | ||||
| 		EventBus.getInstance().register(SendEvent.class, evt -> { | ||||
| 		eventBus.register(SendEvent.class, evt -> { | ||||
| 			try { | ||||
| 				sendEvent(evt.get()); | ||||
| 			} catch (IOException e) { | ||||
|   | ||||
| @@ -2,6 +2,7 @@ | ||||
|  | ||||
| <?import javafx.scene.control.Button?> | ||||
| <?import javafx.scene.control.CheckBox?> | ||||
| <?import javafx.scene.control.DialogPane?> | ||||
| <?import javafx.scene.control.Label?> | ||||
| <?import javafx.scene.control.PasswordField?> | ||||
| <?import javafx.scene.control.TextField?> | ||||
| @@ -12,52 +13,37 @@ | ||||
| <?import javafx.scene.layout.VBox?> | ||||
| <?import javafx.scene.text.Font?> | ||||
|  | ||||
| <VBox maxHeight="-Infinity" maxWidth="-Infinity" | ||||
| 	minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" | ||||
| 	prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" | ||||
| 	xmlns:fx="http://javafx.com/fxml/1" | ||||
| 	fx:controller="envoy.client.ui.LoginDialogController"> | ||||
| 	<children> | ||||
| 		<Label text="User Login"> | ||||
| 			<font> | ||||
| 				<Font size="26.0" /> | ||||
| 			</font> | ||||
| 		</Label> | ||||
| 		<GridPane> | ||||
| 			<columnConstraints> | ||||
| 				<ColumnConstraints hgrow="SOMETIMES" | ||||
| 					minWidth="10.0" percentWidth="40.0" prefWidth="100.0" /> | ||||
| 				<ColumnConstraints hgrow="SOMETIMES" | ||||
| 					minWidth="10.0" prefWidth="100.0" /> | ||||
| 			</columnConstraints> | ||||
| 			<rowConstraints> | ||||
| 				<RowConstraints minHeight="10.0" prefHeight="30.0" | ||||
| 					vgrow="SOMETIMES" /> | ||||
| 				<RowConstraints minHeight="10.0" prefHeight="30.0" | ||||
| 					vgrow="SOMETIMES" /> | ||||
| 				<RowConstraints minHeight="10.0" prefHeight="30.0" | ||||
| 					vgrow="SOMETIMES" /> | ||||
| 			</rowConstraints> | ||||
| 			<children> | ||||
| 				<Label text="User Name:" /> | ||||
| 				<Label text="Password" GridPane.rowIndex="1" /> | ||||
| 				<Label text="Repeat Password:" visible="false" | ||||
| 					GridPane.rowIndex="2" fx:id="repeatPasswordLabel" /> | ||||
| 				<TextField GridPane.columnIndex="1" /> | ||||
| 				<PasswordField GridPane.columnIndex="1" | ||||
| 					GridPane.rowIndex="1" fx:id="repeatPasswordField"/> | ||||
| 				<PasswordField visible="false" | ||||
| 					GridPane.columnIndex="1" GridPane.rowIndex="2" fx:id="repeatPasswordField"/> | ||||
| 			</children> | ||||
| 		</GridPane> | ||||
| 		<CheckBox mnemonicParsing="false" text="Register" fx:id="registerCheckBox" onAction="#registerCheckboxChanged"/> | ||||
| 		<HBox prefHeight="100.0" prefWidth="200.0"> | ||||
| 			<children> | ||||
| 				<Button cancelButton="true" mnemonicParsing="false" | ||||
| 					text="Cancel" onAction="#cancelButtonClicked"/> | ||||
| 				<Button defaultButton="true" mnemonicParsing="false" | ||||
| 					text="Submit" disable="true" onAction="#submitButtonClicked"/> | ||||
| 			</children> | ||||
| 		</HBox> | ||||
| 	</children> | ||||
| </VBox> | ||||
|  | ||||
| <DialogPane xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="envoy.client.ui.LoginDialog$Controller"> | ||||
|    <content> | ||||
|       <VBox maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0"> | ||||
|       	<children> | ||||
|       		<Label text="User Login"> | ||||
|       			<font> | ||||
|       				<Font size="26.0" /> | ||||
|       			</font> | ||||
|       		</Label> | ||||
|       		<GridPane> | ||||
|       			<columnConstraints> | ||||
|       				<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" percentWidth="40.0" prefWidth="100.0" /> | ||||
|       				<ColumnConstraints hgrow="SOMETIMES" minWidth="10.0" prefWidth="100.0" /> | ||||
|       			</columnConstraints> | ||||
|       			<rowConstraints> | ||||
|       				<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> | ||||
|       				<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> | ||||
|       				<RowConstraints minHeight="10.0" prefHeight="30.0" vgrow="SOMETIMES" /> | ||||
|       			</rowConstraints> | ||||
|       			<children> | ||||
|       				<Label text="User Name:" /> | ||||
|       				<Label text="Password" GridPane.rowIndex="1" /> | ||||
|       				<Label fx:id="repeatPasswordLabel" text="Repeat Password:" visible="false" GridPane.rowIndex="2" /> | ||||
|       				<TextField fx:id="userTextField" GridPane.columnIndex="1" /> | ||||
|       				<PasswordField fx:id="repeatPasswordField" GridPane.columnIndex="1" GridPane.rowIndex="1" /> | ||||
|       				<PasswordField fx:id="repeatPasswordField" visible="false" GridPane.columnIndex="1" GridPane.rowIndex="2" /> | ||||
|       			</children> | ||||
|       		</GridPane> | ||||
|       		<CheckBox fx:id="registerCheckBox" mnemonicParsing="false" onAction="#registerCheckboxChanged" text="Register" /> | ||||
|       	</children> | ||||
|       </VBox> | ||||
|    </content> | ||||
| </DialogPane> | ||||
|   | ||||
							
								
								
									
										70
									
								
								src/main/java/envoy/client/ui/LoginDialog.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										70
									
								
								src/main/java/envoy/client/ui/LoginDialog.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,70 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| import javafx.application.Platform; | ||||
| import javafx.fxml.FXML; | ||||
| import javafx.fxml.FXMLLoader; | ||||
| import javafx.scene.control.*; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>LoginDialog.java</strong><br> | ||||
|  * Created: <strong>03.04.2020</strong><br> | ||||
|  *  | ||||
|  * @author Kai S. K. Engelbart | ||||
|  * @since Envoy Client v0.1-beta | ||||
|  */ | ||||
| public final class LoginDialog extends Dialog<Void> { | ||||
|  | ||||
| 	/** | ||||
| 	 * Loads the login dialog using the FXML file {@code LoginDialog.fxml}. | ||||
| 	 *  | ||||
| 	 * @throws IOException if an exception occurs during loading | ||||
| 	 * @since Envoy Client v0.1-beta | ||||
| 	 */ | ||||
| 	public LoginDialog() throws IOException { | ||||
| 		final var dialogPane = FXMLLoader.<DialogPane>load(getClass().getResource("LoginDialog.fxml")); | ||||
|  | ||||
| 		// Configure buttons | ||||
| 		dialogPane.getButtonTypes().addAll(ButtonType.CANCEL, ButtonType.OK); | ||||
|  | ||||
| 		setDialogPane(dialogPane); | ||||
| 	} | ||||
|  | ||||
| 	public static class Controller { | ||||
|  | ||||
| 		@FXML | ||||
| 		private TextField userTextField; | ||||
|  | ||||
| 		@FXML | ||||
| 		private PasswordField passwordField; | ||||
|  | ||||
| 		@FXML | ||||
| 		private PasswordField repeatPasswordField; | ||||
|  | ||||
| 		@FXML | ||||
| 		private Label repeatPasswordLabel; | ||||
|  | ||||
| 		@FXML | ||||
| 		private CheckBox registerCheckBox; | ||||
|  | ||||
| 		@FXML | ||||
| 		private void initialize() { | ||||
|  | ||||
| 			// Set initial cursor | ||||
| 			Platform.runLater(userTextField::requestFocus); | ||||
| 		} | ||||
|  | ||||
| 		@FXML | ||||
| 		private void registerCheckboxChanged() { | ||||
|  | ||||
| 			// Make repeat password field and label visible / invisible | ||||
| 			repeatPasswordField.setVisible(registerCheckBox.isSelected()); | ||||
| 			repeatPasswordLabel.setVisible(registerCheckBox.isSelected()); | ||||
|  | ||||
| 			// Clear repeat password field if registration cancelled | ||||
| 			if (!registerCheckBox.isSelected()) repeatPasswordField.clear(); | ||||
| 		} | ||||
| 	} | ||||
| } | ||||
| @@ -1,53 +0,0 @@ | ||||
| package envoy.client.ui; | ||||
|  | ||||
| import javafx.event.ActionEvent; | ||||
| import javafx.fxml.FXML; | ||||
| import javafx.scene.Node; | ||||
| import javafx.scene.control.CheckBox; | ||||
| import javafx.scene.control.Label; | ||||
| import javafx.scene.control.PasswordField; | ||||
| import javafx.stage.Stage; | ||||
|  | ||||
| /** | ||||
|  * Project: <strong>envoy-client</strong><br> | ||||
|  * File: <strong>LoginDialogController.java</strong><br> | ||||
|  * Created: <strong>03.04.2020</strong><br> | ||||
|  *  | ||||
|  * @author Kai S. K. Engelbart | ||||
|  * @since Envoy Client v0.1-beta | ||||
|  */ | ||||
| public final class LoginDialogController { | ||||
|  | ||||
| 	@FXML | ||||
| 	private PasswordField passwordField; | ||||
|  | ||||
| 	@FXML | ||||
| 	private PasswordField repeatPasswordField; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Label repeatPasswordLabel; | ||||
|  | ||||
| 	@FXML | ||||
| 	private CheckBox registerCheckBox; | ||||
|  | ||||
| 	@FXML | ||||
| 	private void registerCheckboxChanged() { | ||||
|  | ||||
| 		// Make repeat password field and label visible / invisible | ||||
| 		repeatPasswordField.setVisible(registerCheckBox.isSelected()); | ||||
| 		repeatPasswordLabel.setVisible(registerCheckBox.isSelected()); | ||||
|  | ||||
| 		// Clear repeat password field if registration cancelled | ||||
| 		if (!registerCheckBox.isSelected()) repeatPasswordField.clear(); | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| 	private void submitButtonClicked() { | ||||
|  | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| 	private void cancelButtonClicked(ActionEvent e) { closeStage(e); } | ||||
|  | ||||
| 	private void closeStage(ActionEvent e) { ((Stage) ((Node) e.getSource()).getScene().getWindow()).close(); } | ||||
| } | ||||
| @@ -12,7 +12,6 @@ import javax.swing.JOptionPane; | ||||
| import envoy.client.data.*; | ||||
| import envoy.client.net.Client; | ||||
| import envoy.client.net.WriteProxy; | ||||
| import envoy.client.ui.container.LoginDialog; | ||||
| import envoy.data.Message; | ||||
| import envoy.data.User; | ||||
| import envoy.data.User.UserStatus; | ||||
| @@ -91,9 +90,18 @@ public final class Startup extends Application { | ||||
| 		// Initialize client and unread message cache | ||||
| 		client	= new Client(); | ||||
| 		cache	= new Cache<>(); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * {@inheritDoc} | ||||
| 	 */ | ||||
| 	@Override | ||||
| 	public void start(Stage stage) throws Exception { | ||||
|  | ||||
| 		// Try to connect to the server | ||||
| 		new LoginDialog(client, localDB, cache); | ||||
| 		// new LoginDialog(client, localDB, cache); | ||||
| 		new LoginDialog().showAndWait(); | ||||
| 		System.exit(0); | ||||
|  | ||||
| 		// Set client user in local database | ||||
| 		localDB.setUser(client.getSender()); | ||||
| @@ -128,13 +136,6 @@ public final class Startup extends Application { | ||||
| 				.filter(u -> u instanceof User && u != localDB.getUser()) | ||||
| 				.map(User.class::cast) | ||||
| 				.forEach(u -> u.setStatus(UserStatus.OFFLINE)); | ||||
| 	} | ||||
|  | ||||
| 	/** | ||||
| 	 * {@inheritDoc} | ||||
| 	 */ | ||||
| 	@Override | ||||
| 	public void start(Stage stage) throws Exception { | ||||
|  | ||||
| 		// Prepare stage and load ChatScene | ||||
| 		var	loader		= new FXMLLoader(getClass().getResource("ChatScene.fxml")); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user