/** * (c) - Alistair Rutherford - www.netthreads.co.uk */ package com.netthreads.network.osc.router; import java.net.URL; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.fxml.JavaFXBuilderFactory; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import com.netthreads.network.osc.router.controller.OSCRouterFXController; import com.netthreads.network.osc.router.service.MIDIRouter; import com.netthreads.network.osc.router.service.OSCService; /** * OSC Router Application. * */ public class OSCRouterFX extends Application { public static final String APPLICATION_TITLE = "OSC Router"; public static final String FXML_FILE = "/routerui.fxml"; public static final String CSS_FILE = "/routerui"; public static final String ID_ROOT = "root"; private MIDIRouter midiService; private OSCService oscService; private OSCRouterFXController oscRouterFXController; private static int DEFAULT_X = 780; private static int DEFAULT_Y = 400; /** * Load layout and display. * */ @Override public void start(Stage stage) throws Exception { // --------------------------------------------------------------- // Resources // --------------------------------------------------------------- URL layoutURL = getClass().getResource(FXML_FILE); URL cssURL = loadCSS(CSS_FILE); // --------------------------------------------------------------- // Load view. // --------------------------------------------------------------- FXMLLoader fxmlLoader = new FXMLLoader(); fxmlLoader.setLocation(layoutURL); fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory()); Parent root = (Parent) fxmlLoader.load(layoutURL.openStream()); root.setId(ID_ROOT); // --------------------------------------------------------------- // Get controller and assign model object // --------------------------------------------------------------- oscRouterFXController = fxmlLoader.getController(); // --------------------------------------------------------------- // Client/Model // --------------------------------------------------------------- oscService = new OSCService(oscRouterFXController.getObservableList(), oscRouterFXController); // --------------------------------------------------------------- // MIDI Router Service. // --------------------------------------------------------------- midiService = new MIDIRouter(); oscService.addRouter(midiService); // --------------------------------------------------------------- // Controller // --------------------------------------------------------------- oscRouterFXController.setService(oscService); oscRouterFXController.setStage(stage); // View. stage.setTitle(APPLICATION_TITLE); // Scene Scene scene = new Scene(root, DEFAULT_X, DEFAULT_Y); scene.getStylesheets().addAll(cssURL.toExternalForm()); stage.setScene(scene); stage.show(); } @Override public void stop() throws Exception { // Kill service(s). oscService.stop(); } /** * JavaFx binary encodes CSS so check for both. * * @param resource * * @return The URL. */ private URL loadCSS(String resource) { URL cssURL = getClass().getResource(resource + ".css"); if (cssURL == null) { cssURL = getClass().getResource(resource + ".bss"); } return cssURL; } /** * Main method. * * @param args * Command line arguments */ public static void main(String[] args) { Application.launch(args); } }