From e02ea551791fc0974a33779582031653d9c1d47f Mon Sep 17 00:00:00 2001 From: Arnaud Vergnet Date: Sun, 6 Dec 2020 16:05:58 +0100 Subject: [PATCH] feat: add initial loading screen --- .../insa/clavardator/ui/MainController.java | 37 ++++++++++++++++++- .../insa/clavardator/users/CurrentUser.java | 21 +++++++++++ .../fr/insa/clavardator/ui/scene.fxml | 37 +++++++++++++------ 3 files changed, 82 insertions(+), 13 deletions(-) diff --git a/src/main/java/fr/insa/clavardator/ui/MainController.java b/src/main/java/fr/insa/clavardator/ui/MainController.java index 80d9dac..378b70c 100644 --- a/src/main/java/fr/insa/clavardator/ui/MainController.java +++ b/src/main/java/fr/insa/clavardator/ui/MainController.java @@ -7,20 +7,27 @@ import fr.insa.clavardator.ui.dialogs.EditUsernameDialogController; import fr.insa.clavardator.ui.dialogs.SnackbarController; import fr.insa.clavardator.ui.users.UserListController; import fr.insa.clavardator.users.CurrentUser; +import javafx.application.Platform; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; -import javafx.scene.control.Label; import javafx.scene.layout.StackPane; +import javafx.scene.layout.VBox; import java.io.IOException; import java.net.URL; import java.util.ResourceBundle; +import java.util.Timer; +import java.util.TimerTask; public class MainController implements Initializable { @FXML private StackPane root; + @FXML + private VBox loadingContainer; + @FXML + private VBox loginContainer; @FXML private ToolbarController toolbarController; @@ -53,9 +60,37 @@ public class MainController implements Initializable { editUserDialogController.show(root, EditUsernameDialogController.Mode.EDIT); } + private void showChat() { + loadingContainer.setVisible(false); + loginContainer.setVisible(false); + } + + private void showLogin() { + loadingContainer.setVisible(false); + loginContainer.setVisible(true); + } + @Override public void initialize(URL url, ResourceBundle rb) { snackbar = new JFXSnackbar(root); + + Timer t = new Timer(); + t.schedule(new TimerTask() { + @Override + public void run() { + Platform.runLater(() -> CurrentUser.getInstance().setState(CurrentUser.State.VALID)); + } + }, 2000); + + CurrentUser.getInstance().addObserver(propertyChangeEvent -> { + if (propertyChangeEvent.getPropertyName().equals("state")) { + if (propertyChangeEvent.getNewValue().equals(CurrentUser.State.VALID)) + showChat(); + else + showLogin(); + } + }); + userListController.addRefreshUserListener(() -> System.out.println("refresh event")); userListController.addUserSelectedListener((user) -> chatController.setRemoteUser(user)); chatController.addAttachmentListener(() -> System.out.println("attach event")); diff --git a/src/main/java/fr/insa/clavardator/users/CurrentUser.java b/src/main/java/fr/insa/clavardator/users/CurrentUser.java index d1f2d29..e1d2e57 100644 --- a/src/main/java/fr/insa/clavardator/users/CurrentUser.java +++ b/src/main/java/fr/insa/clavardator/users/CurrentUser.java @@ -1,10 +1,15 @@ package fr.insa.clavardator.users; +import org.jetbrains.annotations.Nullable; + public class CurrentUser extends User { private static CurrentUser instance = null; + private State state; + private CurrentUser(int uniqueId, String username) { super(uniqueId, username); + state = State.UNINITIALIZED; } /** @@ -27,4 +32,20 @@ public class CurrentUser extends User { public static CurrentUser getInstance() { return instance; } + + public State getState() { + return state; + } + + public void setState(State state) { + instance.pcs.firePropertyChange("state", this.state, state); + this.state = state; + } + + + public enum State { + UNINITIALIZED, + VALID, + INVALID + } } diff --git a/src/main/resources/fr/insa/clavardator/ui/scene.fxml b/src/main/resources/fr/insa/clavardator/ui/scene.fxml index cca2db5..58391ab 100644 --- a/src/main/resources/fr/insa/clavardator/ui/scene.fxml +++ b/src/main/resources/fr/insa/clavardator/ui/scene.fxml @@ -1,18 +1,31 @@ - - - + + + - - - - - - - - + xmlns="http://javafx.com/javafx/11.0.1" + fx:controller="fr.insa.clavardator.ui.MainController" + stylesheets="@styles.css" + styleClass="container" + fx:id="root"> + + + + + + + + + + + + + + + + +