package eu.lestard.snakefx.util; import de.saxsys.mvvmfx.FluentViewLoader; import de.saxsys.mvvmfx.FxmlView; import de.saxsys.mvvmfx.ViewModel; import de.saxsys.mvvmfx.ViewTuple; import eu.lestard.fxzeug.usability.Scaling; import javafx.beans.property.BooleanProperty; import javafx.beans.property.SimpleBooleanProperty; import javafx.scene.Scene; import javafx.stage.Modality; import javafx.stage.Stage; public class TriggerablePopup { private Stage stage; private BooleanProperty trigger = new SimpleBooleanProperty(); public TriggerablePopup(Class<? extends FxmlView<? extends ViewModel>> contentViewType, Stage parent){ this(contentViewType); stage.initOwner(parent); } public TriggerablePopup(Class<? extends FxmlView<? extends ViewModel>> contentViewType){ stage = new Stage(); final ViewTuple<FxmlView<? extends ViewModel>, ViewModel> viewTuple = FluentViewLoader.fxmlView(contentViewType).load(); final Scene scene = new Scene(viewTuple.getView()); Scaling.enableScaling(scene); stage.setScene(scene); stage.initModality(Modality.WINDOW_MODAL); trigger.addListener((observable, oldValue, open) -> { if (open) { stage.show(); } else { stage.hide(); } }); stage.showingProperty().addListener((observable, oldValue, showing)->{ if(!showing){ trigger.set(false); } }); } public BooleanProperty trigger(){ return trigger; } public Stage getStage() { return stage; } }