103 lines
2.6 KiB
Java
103 lines
2.6 KiB
Java
package app;
|
|
|
|
import java.io.IOException;
|
|
import java.util.Optional;
|
|
|
|
import javafx.application.Application;
|
|
import javafx.fxml.FXMLLoader;
|
|
import javafx.scene.Parent;
|
|
import javafx.scene.Scene;
|
|
import javafx.scene.image.Image;
|
|
import javafx.stage.Stage;
|
|
import app.events.FileSaveStateChangedEvent;
|
|
import app.model.Model;
|
|
import app.service.DialogBoxes;
|
|
import app.settings.SettingsProvider;
|
|
|
|
public class Main extends Application {
|
|
|
|
private Scene scene;
|
|
private FXMLLoader fxmlLoader;
|
|
private Parent fxmlRoot;
|
|
|
|
private static final String TITLE = "Banana Editor";
|
|
private static final String ICON_PATH = "/graphics/logo.png";
|
|
|
|
/**
|
|
* Boilerplate function to launch the application.
|
|
*
|
|
* @param args Additional arguments from commandline
|
|
*/
|
|
public static void main(String[] args) {
|
|
launch(args);
|
|
}
|
|
|
|
/**
|
|
* Set up a window with title and icon.
|
|
*/
|
|
private void setupWindow(Stage window) {
|
|
window.setTitle(TITLE);
|
|
if (window.getIcons().isEmpty())
|
|
window.getIcons().add(new Image(getClass().getResourceAsStream(ICON_PATH)));
|
|
}
|
|
|
|
/**
|
|
* Loads all FXML documents of the main UI and initializes all correlated
|
|
* subcontrollers
|
|
*
|
|
* @throws IOException
|
|
*/
|
|
private void loadFXML() {
|
|
try {
|
|
this.fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/Main.fxml"));
|
|
this.fxmlRoot = fxmlLoader.load();
|
|
} catch (Exception e) {
|
|
DialogBoxes.showErrorMessage("There is an error within the program. Please try to reinstall.");
|
|
System.exit(1);
|
|
}
|
|
|
|
}
|
|
|
|
/**
|
|
* Generates a scene for the window, and adds it to {@link Model}
|
|
*/
|
|
private void createScene() {
|
|
this.scene = new Scene(fxmlRoot);
|
|
this.scene.setUserData(this.fxmlLoader);
|
|
Model.setScene(scene);
|
|
}
|
|
|
|
/**
|
|
* Set up default values and settings for the editor.
|
|
*/
|
|
private void setupDefaults() {
|
|
scene.getStylesheets().setAll("", "");
|
|
|
|
MainController mainController = fxmlLoader.getController();
|
|
SettingsProvider SP = new SettingsProvider(mainController.getEventBus());
|
|
SP.loadSettings();
|
|
Model.setActiveFilePath(Optional.empty());
|
|
Model.setProjectPath(Optional.empty());
|
|
mainController.getEventBus().post(new FileSaveStateChangedEvent(true));
|
|
mainController.setHostServices(getHostServices());
|
|
}
|
|
|
|
/**
|
|
* The entrypoint of the application.
|
|
*
|
|
* @param window The primary window of the application
|
|
*/
|
|
@Override
|
|
public void start(Stage window) throws IOException {
|
|
|
|
setupWindow(window);
|
|
loadFXML();
|
|
createScene();
|
|
setupDefaults();
|
|
|
|
window.setScene(scene);
|
|
window.show();
|
|
}
|
|
|
|
}
|