package com.teotigraphix.caustic.screen; import javafx.scene.layout.Pane; import com.teotigraphix.caustic.mediator.DesktopMediatorBase; public abstract class DesktopScreenView extends DesktopMediatorBase implements IScreenView { private Pane rootPane; private void setRoot(Pane value) { rootPane = value; screenRoot = new ScreenRootFX(rootPane); } private ScreenRootFX screenRoot; @Override public IScreenRoot getScreenRoot() { return screenRoot; } public Pane getRoot() { return rootPane; } protected abstract String getResource(); @Override public <T> void create(T root) { Pane base = Pane.class.cast(root); String resource = getResource(); if (resource == null) { // placeholder for injections setRoot((Pane)root); create((Pane)root); } else { Pane component = load(resource); setRoot(component); base.getChildren().add(component); create(component); } } public static class ScreenRootFX implements IScreenRoot { private Pane root; public ScreenRootFX(Pane root) { this.root = root; } @SuppressWarnings("unchecked") @Override public <T> T getRoot() { return (T)root; } @Override public void show() { root.setVisible(true); root.toFront(); } @Override public void hide() { root.setVisible(false); root.toBack(); } } @Override public void onRegister() { } }