1 package jalviewfx.controllers.engine;
3 import java.util.HashMap;
5 import javafx.animation.KeyFrame;
6 import javafx.animation.KeyValue;
7 import javafx.animation.Timeline;
8 import javafx.beans.property.DoubleProperty;
9 import javafx.event.Event;
10 import javafx.event.EventHandler;
11 import javafx.fxml.FXMLLoader;
12 import javafx.scene.Node;
13 import javafx.scene.Parent;
14 import javafx.scene.layout.StackPane;
15 import javafx.util.Duration;
16 import application.App.Screens;
18 public class ScreensController extends StackPane {
19 private HashMap<String, Node> screens = new HashMap<>();
21 public void addScreen(String name, Node screen) {
22 screens.put(name, screen);
25 public boolean loadScreen(String name, String resource) {
27 FXMLLoader myLoader = new FXMLLoader(getClass().getResource(resource));
28 Parent loadScreen = (Parent) myLoader.load();
29 ControlledScreen myScreenControler = ((ControlledScreen) myLoader.getController());
30 myScreenControler.setScreenParent(this);
31 addScreen(name, loadScreen);
33 } catch (Exception e) {
34 System.out.println(e.getMessage());
39 public boolean setScreen(final Screens screen) {
41 if (screens.get(screen.getName()) != null) { // screen loaded
42 final DoubleProperty opacity = opacityProperty();
44 // Is there is more than one screen
45 if (!getChildren().isEmpty()) {
46 @SuppressWarnings({ "unchecked", "rawtypes" })
47 Timeline fade = new Timeline(new KeyFrame(Duration.ZERO, new KeyValue(opacity, 1.0)), new KeyFrame(new Duration(1000),
51 public void handle(Event t) {
52 // remove displayed screen
53 getChildren().remove(0);
55 getChildren().add(0, screens.get(screen.getName()));
56 Timeline fadeIn = new Timeline(new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
57 new KeyFrame(new Duration(800), new KeyValue(opacity, 1.0)));
61 }, new KeyValue(opacity, 0.0)));
64 // no one else been displayed, then just show
66 getChildren().add(screens.get(screen.getName()));
67 Timeline fadeIn = new Timeline(new KeyFrame(Duration.ZERO, new KeyValue(opacity, 0.0)),
68 new KeyFrame(new Duration(2500), new KeyValue(opacity, 1.0)));
73 System.out.println("screen hasn't been loaded!\n");
78 public boolean unloadScreen(String name) {
79 if (screens.remove(name) == null) {
80 System.out.println("Screen didn't exist");