Module client : ajout composant Toast + factory associée

This commit is contained in:
Notmoo 2017-08-17 23:44:39 +02:00
parent 517ac8bdeb
commit 11be8f0889
4 changed files with 116 additions and 0 deletions

View File

@ -6,6 +6,7 @@ import com.pqt.client.gui.modules.stat_screen.StatScreen;
import com.pqt.client.gui.modules.stock_screen.StockScreen;
import com.pqt.client.gui.ressources.components.generics.others.SideBar;
import com.pqt.client.gui.ressources.components.generics.others.listeners.ISideBarListener;
import com.pqt.client.gui.ressources.components.generics.toast.ToastFactory;
import com.pqt.client.gui.ressources.css.GUICssTool;
import com.pqt.client.gui.ressources.strings.GUIStringTool;
import com.pqt.client.module.account.AccountService;
@ -38,6 +39,7 @@ public class Main extends Application{
scene.getStylesheets().clear();
scene.getStylesheets().addAll(getClass().getResource(GUICssTool.getCssFilePath()).toExternalForm());
ToastFactory.init(primaryStage);
primaryStage.setTitle(GUIStringTool.getAppTitle());
primaryStage.setScene(scene);
primaryStage.show();

View File

@ -0,0 +1,54 @@
package com.pqt.client.gui.ressources.components.generics.toast;
import com.pqt.client.gui.ressources.css.GUICssTool;
import javafx.animation.KeyFrame;
import javafx.animation.KeyValue;
import javafx.animation.Timeline;
import javafx.scene.Scene;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
import javafx.util.Duration;
final class Toast {
static void toast(Stage ownerStage, String toastMsg, int toastDelay, int fadeInDelay, int fadeOutDelay) {
Stage toastStage = new Stage();
toastStage.initOwner(ownerStage);
toastStage.setResizable(false);
toastStage.initStyle(StageStyle.TRANSPARENT);
Text text = new Text(toastMsg);
text.getStyleClass().add("toast-text");
StackPane root = new StackPane(text);
root.getStyleClass().add("toast-pane");
root.setOpacity(0);
Scene scene = new Scene(root);
scene.setFill(Color.TRANSPARENT);
scene.getStylesheets().addAll(Toast.class.getResource(GUICssTool.getCssFilePath()).toExternalForm());
toastStage.setScene(scene);
toastStage.show();
Timeline fadeInTimeline = new Timeline();
KeyFrame fadeInKey1 = new KeyFrame(Duration.millis(fadeInDelay), new KeyValue (toastStage.getScene().getRoot().opacityProperty(), 1));
fadeInTimeline.getKeyFrames().add(fadeInKey1);
fadeInTimeline.setOnFinished((ae) ->
new Thread(() -> {
try {
Thread.sleep(toastDelay);
}
catch (InterruptedException e) {
e.printStackTrace();
}
Timeline fadeOutTimeline = new Timeline();
KeyFrame fadeOutKey1 = new KeyFrame(Duration.millis(fadeOutDelay), new KeyValue (toastStage.getScene().getRoot().opacityProperty(), 0));
fadeOutTimeline.getKeyFrames().add(fadeOutKey1);
fadeOutTimeline.setOnFinished((aeb) -> toastStage.close());
fadeOutTimeline.play();
}).start());
fadeInTimeline.play();
}
}

View File

@ -0,0 +1,46 @@
package com.pqt.client.gui.ressources.components.generics.toast;
import javafx.stage.Stage;
public class ToastFactory {
private static ToastFactory INSTANCE = null;
private Stage stage;
private int delay, fadeInDelay, fadeOutDelay;
private ToastFactory(Stage stage){
this.stage = stage;
delay = 3000;
fadeInDelay = 250;
fadeOutDelay = 250;
}
public void setToastDelay(int msDelay){
this.delay = msDelay;
}
public void setToastFadeInDelay(int msDelay){
this.fadeInDelay = msDelay;
}
public void setToastFadeOutDelay(int msDelay){
this.fadeOutDelay = msDelay;
}
public void toast(String message){
Toast.toast(stage, message, delay, fadeInDelay, fadeOutDelay);
}
public static void init(Stage stage){
INSTANCE = new ToastFactory(stage);
}
public static boolean isInitialized(){
return INSTANCE!=null;
}
public static ToastFactory getINSTANCE(){
return INSTANCE;
}
}

View File

@ -231,4 +231,18 @@
-fx-padding: 5 5 5 5;
-fx-background-radius: 0;
-fx-background-insets: 0 0 0 0, 0, 1, 2;
.toast-text{
-fx-font: 50px "Impact";
-fx-fill: whitesmoke;
}
.toast-pane {
-fx-background-radius: 10px;
-fx-background-color: rgba(0, 0, 0, 0.4);
-fx-border-width: 2px;
-fx-border-color: whitesmoke;
-fx-border-radius: 6px;
-fx-padding: 25px;
}
}