feat: add initial loading screen

This commit is contained in:
Arnaud Vergnet 2020-12-06 16:05:58 +01:00
parent 4ba39b3cc3
commit e02ea55179
3 changed files with 82 additions and 13 deletions

View file

@ -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"));

View file

@ -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
}
}

View file

@ -1,11 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--suppress JavaFxUnresolvedFxIdReference -->
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.layout.VBox?>
<?import com.jfoenix.controls.JFXSpinner?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.*?>
<StackPane xmlns:fx="http://javafx.com/fxml/1"
xmlns="http://javafx.com/javafx/11.0.1" fx:controller="fr.insa.clavardator.ui.MainController" fx:id="root">
xmlns="http://javafx.com/javafx/11.0.1"
fx:controller="fr.insa.clavardator.ui.MainController"
stylesheets="@styles.css"
styleClass="container"
fx:id="root">
<StackPane fx:id="mainContainer">
<fx:include source="dialogs/editUsernameDialog.fxml" fx:id="editUserDialog"/>
<fx:include source="dialogs/aboutDialog.fxml" fx:id="aboutDialog"/>
<VBox>
@ -15,4 +20,12 @@
<fx:include source="chat/chat.fxml" fx:id="chat" HBox.hgrow="ALWAYS"/>
</HBox>
</VBox>
</StackPane>
<VBox alignment="CENTER" fx:id="loginContainer" styleClass="container" spacing="30">
<Label>ERROR</Label>
</VBox>
<VBox alignment="CENTER" fx:id="loadingContainer" styleClass="container" spacing="30">
<Label>Initialisation de Clavardator...</Label>
<JFXSpinner/>
</VBox>
</StackPane>