All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.factoryfx.javafx.view.container.ViewsDisplayWidget Maven / Gradle / Ivy

package de.factoryfx.javafx.view.container;

import java.util.HashMap;

import de.factoryfx.data.util.LanguageText;
import de.factoryfx.javafx.util.UniformDesign;
import de.factoryfx.javafx.view.View;
import de.factoryfx.javafx.widget.Widget;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.ContextMenu;
import javafx.scene.control.MenuItem;
import javafx.scene.control.Tab;
import javafx.scene.control.TabPane;
import javafx.scene.layout.Region;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import org.controlsfx.glyphfont.FontAwesome;

public class ViewsDisplayWidget implements Widget {
    private final TabPane tabPane;
    private final UniformDesign uniformDesign;
    private final LanguageText expandText = new LanguageText().en("expand").en("in neuem Fenster öffnen");

    public ViewsDisplayWidget(TabPane component, UniformDesign uniformDesign) {
        this.tabPane = component;
        this.uniformDesign = uniformDesign;
    }


    @Override
    public Node createContent() {
        return tabPane;
    }

    public Node createExpandReplacement(final Stage stage) {
        StackPane stackPane = new StackPane();
        Button button = new Button("edit expanded Window");
        button.setOnAction(event -> stage.toFront());
        stackPane.getChildren().add(button);
        return stackPane;
    }


    private HashMap viewToTab = new HashMap<>();

    public void close(View view) {
        ViewDisplayer viewDisplayer = viewToTab.get(view);
        if (viewDisplayer!=null){
            viewDisplayer.close(tabPane);
            viewToTab.remove(view);
        }
    }

    public void show(View view) {
        ViewDisplayer viewDisplayer = viewToTab.get(view);

        if (viewDisplayer == null) {
            final Tab tab = new Tab();
            viewDisplayer = new ViewDisplayerTab(tab);
            viewDisplayer.show(tabPane);
            viewToTab.put(view, viewDisplayer);

            ContextMenu contextMenu = new ContextMenu();
            MenuItem expand = new MenuItem(uniformDesign.getText(expandText));
            uniformDesign.addIcon(expand, FontAwesome.Glyph.EXPAND);
            expand.setOnAction(event -> {
                Stage stage = new Stage();
                stage.setTitle(tab.getText());
                Parent content = (Parent) tab.getContent();
                tab.setOnClosed(null);
                tab.setContent(new Region());
                tabPane.getTabs().remove(tab);
                tab.setContent(createExpandReplacement(stage));
                Scene scene = new Scene(content, 1380, 850);
                scene.getStylesheets().addAll(tabPane.getScene().getStylesheets());
                stage.setScene(scene);
                stage.show();
                stage.setOnCloseRequest(we -> {
                    close(view);
                });
                viewToTab.put(view, new ViewDisplayerStage(stage));
            });
            contextMenu.getItems().addAll(expand);
            tab.setContextMenu(contextMenu);

            tab.textProperty().bind(view.title);
            tab.setContent(view.createContent());

            tab.setOnClosed(event -> view.close());
        } else {
            viewDisplayer.focus(tabPane);
        }

    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy