Implemented completely new UI for the login scene
This commit is contained in:
		| @@ -8,6 +8,7 @@ import java.util.logging.Logger; | ||||
|  | ||||
| import javafx.application.Platform; | ||||
| import javafx.fxml.FXML; | ||||
| import javafx.geometry.Insets; | ||||
| import javafx.scene.control.*; | ||||
| import javafx.scene.control.Alert.AlertType; | ||||
|  | ||||
| @@ -46,19 +47,27 @@ public final class LoginScene { | ||||
| 	private PasswordField repeatPasswordField; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Label repeatPasswordLabel; | ||||
|  | ||||
| 	@FXML | ||||
| 	private CheckBox registerCheckBox; | ||||
| 	private Button registerSwitch; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Label connectionLabel; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Button loginButton; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Button offlineModeButton; | ||||
|  | ||||
| 	@FXML | ||||
| 	private Label registerTextLabel; | ||||
|  | ||||
| 	private Client			client; | ||||
| 	private LocalDB			localDB; | ||||
| 	private CacheMap		cacheMap; | ||||
| 	private SceneContext	sceneContext; | ||||
|  | ||||
| 	private boolean registration = false; | ||||
|  | ||||
| 	private static final Logger			logger		= EnvoyLog.getLogger(LoginScene.class); | ||||
| 	private static final EventBus		eventBus	= EventBus.getInstance(); | ||||
| 	private static final ClientConfig	config		= ClientConfig.getInstance(); | ||||
| @@ -100,13 +109,13 @@ public final class LoginScene { | ||||
| 	private void loginButtonPressed() { | ||||
|  | ||||
| 		// Prevent registration with unequal passwords | ||||
| 		if (registerCheckBox.isSelected() && !passwordField.getText().equals(repeatPasswordField.getText())) { | ||||
| 		if (registration && !passwordField.getText().equals(repeatPasswordField.getText())) { | ||||
| 			new Alert(AlertType.ERROR, "The entered password is unequal to the repeated one").showAndWait(); | ||||
| 			repeatPasswordField.clear(); | ||||
| 		} else if (!Bounds.isValidContactName(userTextField.getText())) { | ||||
| 			new Alert(AlertType.ERROR, "The entered user name is not valid (" + Bounds.CONTACT_NAME_PATTERN + ")").showAndWait(); | ||||
| 			userTextField.clear(); | ||||
| 		} else performHandshake(new LoginCredentials(userTextField.getText(), passwordField.getText(), registerCheckBox.isSelected(), | ||||
| 		} else performHandshake(new LoginCredentials(userTextField.getText(), passwordField.getText(), registration, | ||||
| 				Startup.VERSION)); | ||||
| 	} | ||||
|  | ||||
| @@ -116,11 +125,24 @@ public final class LoginScene { | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
| 	private void registerCheckboxChanged() { | ||||
| 	private void registerSwitchPressed() { | ||||
| 		registration = !registration; | ||||
|  | ||||
| 		// Make repeat password field and label visible / invisible | ||||
| 		repeatPasswordField.setVisible(registerCheckBox.isSelected()); | ||||
| 		repeatPasswordLabel.setVisible(registerCheckBox.isSelected()); | ||||
| 		repeatPasswordField.setVisible(registration); | ||||
| 		if (loginButton.getText().equals("Login")) { | ||||
| 			loginButton.setText("Register"); | ||||
| 			loginButton.setPadding(new Insets(2, 116, 2, 116)); | ||||
| 			registerTextLabel.setText("Already an account?"); | ||||
| 			registerSwitch.setText("Login"); | ||||
| 			offlineModeButton.setDisable(true); | ||||
| 		} else { | ||||
| 			loginButton.setText("Login"); | ||||
| 			loginButton.setPadding(new Insets(2, 125, 2, 125)); | ||||
| 			registerTextLabel.setText("No account yet?"); | ||||
| 			registerSwitch.setText("Register"); | ||||
| 			offlineModeButton.setDisable(false); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	@FXML | ||||
|   | ||||
| @@ -1,5 +1,5 @@ | ||||
| .button, .list-cell, .progress-bar * { | ||||
| 	-fx-background-radius: 5.0em; | ||||
| 	-fx-background-radius: 0.3em; | ||||
| } | ||||
|  | ||||
| .context-menu, .context-menu > * { | ||||
| @@ -65,6 +65,22 @@ | ||||
| 	-fx-text-alignment: center; | ||||
| } | ||||
|  | ||||
| #loginButton { | ||||
| 	-fx-background-radius: 1em; | ||||
| } | ||||
|  | ||||
| #registerSwitch { | ||||
| 	-fx-background-color: transparent; | ||||
| 	-fx-text-fill: orange; | ||||
| } | ||||
|  | ||||
| #loginInputField { | ||||
| 	-fx-background-color: transparent; | ||||
| 	-fx-border: solid; | ||||
| 	-fx-border-width: 0 0 1 0; | ||||
| 	 | ||||
| } | ||||
|  | ||||
| #remainingCharsLabel { | ||||
| 	-fx-text-fill: #00FF00; | ||||
| 	-fx-background-color: transparent; | ||||
|   | ||||
| @@ -37,3 +37,11 @@ | ||||
| .alert.information.dialog-pane, .alert.warning.dialog-pane, .alert.error.dialog-pane { | ||||
| 	-fx-background-color: black; | ||||
| } | ||||
|  | ||||
| #loginInputField { | ||||
| 	-fx-border-color: white; | ||||
| } | ||||
|  | ||||
| #loginBackground { | ||||
| 	-fx-background-color: rgb(25, 25, 25); | ||||
| } | ||||
|   | ||||
| @@ -14,3 +14,7 @@ | ||||
| .own-message { | ||||
| 	-fx-background-color: lightgreen; | ||||
| } | ||||
|  | ||||
| #loginInputField { | ||||
| 	-fx-border-color: black; | ||||
| } | ||||
|   | ||||
| @@ -2,93 +2,73 @@ | ||||
|  | ||||
| <?import javafx.geometry.Insets?> | ||||
| <?import javafx.scene.control.Button?> | ||||
| <?import javafx.scene.control.CheckBox?> | ||||
| <?import javafx.scene.control.Label?> | ||||
| <?import javafx.scene.control.PasswordField?> | ||||
| <?import javafx.scene.control.TextField?> | ||||
| <?import javafx.scene.layout.BorderPane?> | ||||
| <?import javafx.scene.image.Image?> | ||||
| <?import javafx.scene.image.ImageView?> | ||||
| <?import javafx.scene.layout.ColumnConstraints?> | ||||
| <?import javafx.scene.layout.GridPane?> | ||||
| <?import javafx.scene.layout.HBox?> | ||||
| <?import javafx.scene.layout.RowConstraints?> | ||||
| <?import javafx.scene.layout.VBox?> | ||||
| <?import javafx.scene.text.Font?> | ||||
|  | ||||
| <VBox prefHeight="206.0" prefWidth="440.0" | ||||
| 	xmlns="http://javafx.com/javafx/11.0.1" | ||||
| 	xmlns:fx="http://javafx.com/fxml/1" | ||||
| 	fx:controller="envoy.client.ui.controller.LoginScene"> | ||||
| <VBox id="loginBackground" alignment="TOP_CENTER" prefHeight="500.0" prefWidth="350.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="envoy.client.ui.controller.LoginScene"> | ||||
| 	<children> | ||||
| 		<Label text="User Login"> | ||||
|       <ImageView fitHeight="80.0" fitWidth="80.0" pickOnBounds="true" preserveRatio="true"> | ||||
|          <VBox.margin> | ||||
|             <Insets bottom="10.0" top="50.0" /> | ||||
|          </VBox.margin> | ||||
|          <image> | ||||
|             <Image url="file:@../icons/envoy_logo.png" /> | ||||
|          </image> | ||||
|       </ImageView> | ||||
|       <Label alignment="TOP_CENTER" contentDisplay="CENTER" layoutX="142.0" layoutY="15.0" text="ENVOY MESSENGER" textAlignment="CENTER"> | ||||
|          <font> | ||||
|             <Font size="14.0" /> | ||||
|          </font> | ||||
|          <padding> | ||||
|             <Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
|          </padding> | ||||
|       </Label> | ||||
| 		<Label alignment="TOP_CENTER" contentDisplay="CENTER" prefHeight="33.0" prefWidth="87.0" text="LOGIN" textAlignment="CENTER"> | ||||
| 			<font> | ||||
| 				<Font size="26.0" /> | ||||
| 			</font> | ||||
| 			<VBox.margin> | ||||
| 				<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 				<Insets left="5.0" right="5.0" top="5.0" /> | ||||
| 			</VBox.margin> | ||||
| 			<padding> | ||||
| 				<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 			</padding> | ||||
| 		</Label> | ||||
| 		<GridPane hgap="5.0" vgap="10.0"> | ||||
| 		<GridPane hgap="5.0" vgap="8.5"> | ||||
| 			<columnConstraints> | ||||
| 				<ColumnConstraints hgrow="SOMETIMES" | ||||
| 					minWidth="10.0" percentWidth="40.0" prefWidth="100.0" /> | ||||
| 				<ColumnConstraints hgrow="SOMETIMES" | ||||
| 					minWidth="10.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 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:"> | ||||
| 				<TextField id="loginInputField" fx:id="userTextField" promptText="Username"> | ||||
| 					<GridPane.margin> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 					</GridPane.margin> | ||||
| 					<padding> | ||||
| 						<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> | ||||
| 					</padding> | ||||
| 				</Label> | ||||
| 				<Label text="Password:" GridPane.rowIndex="1"> | ||||
| 					<padding> | ||||
| 						<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> | ||||
| 					</padding> | ||||
| 					<GridPane.margin> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 					</GridPane.margin> | ||||
| 				</Label> | ||||
| 				<Label fx:id="repeatPasswordLabel" text="Repeat Password:" | ||||
| 					visible="false" GridPane.rowIndex="2"> | ||||
| 					<GridPane.margin> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 					</GridPane.margin> | ||||
| 					<padding> | ||||
| 						<Insets bottom="2.0" left="2.0" right="2.0" top="2.0" /> | ||||
| 					</padding> | ||||
| 				</Label> | ||||
| 				<TextField fx:id="userTextField" | ||||
| 					GridPane.columnIndex="1"> | ||||
| 					<GridPane.margin> | ||||
| 						<Insets bottom="10.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 						<Insets bottom="0.0" left="5.0" right="5.0" top="0.0" /> | ||||
| 					</GridPane.margin> | ||||
| 				</TextField> | ||||
| 				<PasswordField fx:id="passwordField" | ||||
| 					GridPane.columnIndex="1" GridPane.rowIndex="1"> | ||||
| 				<PasswordField id="loginInputField" fx:id="passwordField" promptText=" Password" GridPane.rowIndex="1"> | ||||
| 					<GridPane.margin> | ||||
| 						<Insets bottom="10.0" left="5.0" right="5.0" top="10.0" /> | ||||
| 						<Insets bottom="0.0" left="5.0" right="5.0" top="0.0" /> | ||||
| 					</GridPane.margin> | ||||
| 					<padding> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 					</padding> | ||||
| 				</PasswordField> | ||||
| 				<PasswordField fx:id="repeatPasswordField" | ||||
| 					visible="false" GridPane.columnIndex="1" GridPane.rowIndex="2"> | ||||
| 				<PasswordField id="loginInputField" fx:id="repeatPasswordField" promptText=" Repeat Password" visible="false" GridPane.rowIndex="2"> | ||||
| 					<GridPane.margin> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="10.0" /> | ||||
| 						<Insets bottom="0.0" left="5.0" right="5.0" top="0.0" /> | ||||
| 					</GridPane.margin> | ||||
| 					<padding> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| @@ -96,54 +76,40 @@ | ||||
| 				</PasswordField> | ||||
| 			</children> | ||||
| 			<VBox.margin> | ||||
| 				<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 				<Insets bottom="10.0" left="25.0" right="25.0" top="10.0" /> | ||||
| 			</VBox.margin> | ||||
| 		</GridPane> | ||||
| 		<CheckBox fx:id="registerCheckBox" mnemonicParsing="true" | ||||
| 			onAction="#registerCheckboxChanged" prefHeight="17.0" | ||||
| 			prefWidth="181.0" text="_Register"> | ||||
| 			<VBox.margin> | ||||
| 				<Insets left="5.0" right="3.0" /> | ||||
| 			</VBox.margin> | ||||
| 		</CheckBox> | ||||
| 				<Button id="loginButton" fx:id="loginButton" defaultButton="true" mnemonicParsing="false" onAction="#loginButtonPressed" text="Login" textAlignment="CENTER"> | ||||
|          <font> | ||||
|             <Font size="16.0" /> | ||||
|          </font> | ||||
|          <opaqueInsets> | ||||
|             <Insets /> | ||||
|          </opaqueInsets> | ||||
|          <padding> | ||||
|             <Insets bottom="2.0" left="125.0" right="125.0" top="2.0" /> | ||||
|          </padding> | ||||
| 				</Button> | ||||
|       <HBox alignment="CENTER" prefHeight="30.0" prefWidth="200.0"> | ||||
|          <children> | ||||
|             <Label fx:id="registerTextLabel" text="No account yet?" /> | ||||
|             <Button id="registerSwitch" fx:id="registerSwitch" accessibleRole="CHECK_BOX" mnemonicParsing="false" onAction="#registerSwitchPressed" text="Register" /> | ||||
|          </children> | ||||
|          <VBox.margin> | ||||
|             <Insets bottom="20.0" /> | ||||
|          </VBox.margin> | ||||
|       </HBox> | ||||
| 				<Button fx:id="offlineModeButton" mnemonicParsing="false" onAction="#offlineModeButtonPressed" text="Offline mode"> | ||||
|          <VBox.margin> | ||||
|             <Insets bottom="5.0" top="20.0" /> | ||||
|          </VBox.margin></Button> | ||||
| 		<Label fx:id="connectionLabel"> | ||||
| 			<VBox.margin> | ||||
| 				<Insets left="5.0" /> | ||||
| 			</VBox.margin> | ||||
|          <font> | ||||
|             <Font size="12.0" /> | ||||
|          </font> | ||||
| 		</Label> | ||||
| 		<BorderPane prefWidth="200.0"> | ||||
| 			<left> | ||||
| 				<Button cancelButton="true" mnemonicParsing="false" | ||||
| 					onAction="#abortLogin" text="Close" BorderPane.alignment="CENTER"> | ||||
| 					<padding> | ||||
| 						<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" /> | ||||
| 					</padding> | ||||
| 					<BorderPane.margin> | ||||
| 						<Insets /> | ||||
| 					</BorderPane.margin> | ||||
| 				</Button> | ||||
| 			</left> | ||||
| 			<center> | ||||
| 				<Button mnemonicParsing="false" | ||||
| 					onAction="#offlineModeButtonPressed" text="Offline mode" | ||||
| 					BorderPane.alignment="CENTER"> | ||||
| 					<BorderPane.margin> | ||||
| 						<Insets /> | ||||
| 					</BorderPane.margin> | ||||
| 				</Button> | ||||
| 			</center> | ||||
| 			<right> | ||||
| 				<Button defaultButton="true" mnemonicParsing="false" | ||||
| 					onAction="#loginButtonPressed" text="Login" | ||||
| 					BorderPane.alignment="CENTER"> | ||||
| 					<BorderPane.margin> | ||||
| 						<Insets /> | ||||
| 					</BorderPane.margin> | ||||
| 				</Button> | ||||
| 			</right> | ||||
| 			<VBox.margin> | ||||
| 				<Insets bottom="5.0" left="5.0" right="5.0" /> | ||||
| 			</VBox.margin> | ||||
| 		</BorderPane> | ||||
| 	</children> | ||||
| </VBox> | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 DieGurke
					DieGurke