package com.kodcu.component; import javafx.application.Platform; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; import javafx.collections.ListChangeListener; import javafx.collections.ObservableList; import javafx.scene.Node; import javafx.scene.layout.AnchorPane; import java.util.Optional; /** * Created by usta on 29.11.2015. */ public class ShowerHider extends AnchorPane { private ObjectProperty<Node> master = new SimpleObjectProperty<>(); private ObservableList<Node> slaves = FXCollections.observableArrayList(); public ShowerHider() { getChildren().addListener((ListChangeListener<Node>) c -> { final ObservableList<? extends Node> nodes = c.getList(); if (!nodes.isEmpty()) { final Node node = nodes.get(0); AnchorPane.setBottomAnchor(node, 0.0); AnchorPane.setTopAnchor(node, 0.0); AnchorPane.setLeftAnchor(node, 0.0); AnchorPane.setRightAnchor(node, 0.0); } }); master.addListener((observable, oldValue, newValue) -> { if (getChildren().contains(newValue)) { return; } getChildren().clear(); getChildren().add(newValue); }); } public void showDefaultNode() { Platform.runLater(() -> { getChildren().clear(); getChildren().add(getMaster()); }); } public void showNode(Node node) { if (!slaves.contains(node)) { slaves.add(node); } if (getChildren().contains(node)) { return; } Platform.runLater(() -> { getChildren().clear(); getChildren().add(node); }); } private void makeHidden(Node node) { node.setVisible(false); node.setManaged(false); } private void makeVisible(Node node) { node.setVisible(true); node.setManaged(true); } public Node getMaster() { return master.get(); } public ObjectProperty<Node> masterProperty() { return master; } public void setMaster(Node master) { this.master.set(master); } public ObservableList<Node> getSlaves() { return slaves; } public Optional<ViewPanel> getShowing() { return Optional.ofNullable(getChildren().get(0)) .filter(n -> n instanceof ViewPanel) .map(n -> (ViewPanel) n); } }