Package lighthouse.subwindows

Source Code of lighthouse.subwindows.EmbeddedWindow

package lighthouse.subwindows;

import de.jensd.fx.fontawesome.AwesomeIcon;
import javafx.scene.control.Label;
import javafx.scene.effect.DropShadow;
import javafx.scene.layout.*;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;

/**
* A fake window with a big fat titlebar, a drop shadow around the edges, and an X close button in that titlebar.
* Not draggable at the moment. Can't exceed the bounds of the containing window. In other words is worse than
* a regular window in almost every possible way, except that it looks cooler and the same across platforms.
*/
public class EmbeddedWindow extends BorderPane {
    private final StackPane closeButton;

    public EmbeddedWindow(String title, Pane content) {
        super(wrapContent(content));

        getStyleClass().add("fat-buttons");
        getStyleClass().add("windows-root");
        setEffect(new DropShadow());

        Label label = new Label(title);
        label.getStyleClass().add("title");
        label.setMaxWidth(Double.MAX_VALUE);
        HBox.setHgrow(label, Priority.ALWAYS);

        Label x1 = new Label(AwesomeIcon.TIMES_CIRCLE.toString());
        x1.getStyleClass().add("awesome");
        x1.getStyleClass().add("windows-x");
        Circle circle = new Circle(10);
        circle.setFill(Color.WHITE);
        closeButton = new StackPane(circle, x1);

        HBox titlebar = new HBox(label, closeButton);
        titlebar.getStyleClass().add("titlebar");
        setTop(titlebar);

        sceneProperty().addListener(x -> {
            if (getParent() == null) return;
            getParent().applyCss();
            getParent().layout();
            maxWidthProperty().bind(content.prefWidthProperty());
            maxHeightProperty().bind(content.prefHeightProperty().add(titlebar.heightProperty()));
        });
    }

    private static Pane wrapContent(Pane content) {
        Pane pane = new Pane(content);
        pane.setStyle("-fx-background-color: white");
        return pane;
    }

    public void setOnCloseClicked(Runnable runnable) {
        closeButton.setOnMouseClicked(ev -> runnable.run());
    }
}
TOP

Related Classes of lighthouse.subwindows.EmbeddedWindow

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.