package de.pbauerochse.worklogviewer; import de.pbauerochse.worklogviewer.fx.MainViewController; import de.pbauerochse.worklogviewer.util.ExceptionUtil; import de.pbauerochse.worklogviewer.util.FormattingUtil; import de.pbauerochse.worklogviewer.util.SettingsUtil; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.stage.WindowEvent; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.charset.Charset; import java.util.Locale; /** * @author Patrick Bauerochse * @since 01.04.15 */ public class WorklogViewer extends Application { private static final Logger LOGGER = LoggerFactory.getLogger(WorklogViewer.class); private static WorklogViewer instance; public static WorklogViewer getInstance() { if (instance == null) { throw ExceptionUtil.getIllegalStateException("exceptions.main.instance"); } return instance; } public static void main(String[] args) { launch(args); } private Stage primaryStage; @Override public void stop() throws Exception { SettingsUtil.saveSettings(); MainViewController.EXECUTOR.shutdownNow(); } @Override public void start(Stage primaryStage) throws Exception { instance = this; this.primaryStage = primaryStage; Locale locale = Locale.getDefault(); Charset charset = Charset.defaultCharset(); LOGGER.info("Default Locale: {}", locale); LOGGER.info("Default Charset: {}", charset); SettingsUtil.Settings settings = SettingsUtil.loadSettings(); FXMLLoader loader = new FXMLLoader(Charset.forName("utf-8")); loader.setResources(FormattingUtil.RESOURCE_BUNDLE); Parent root = loader.load(WorklogViewer.class.getResource("/fx/views/main.fxml"), FormattingUtil.RESOURCE_BUNDLE); Scene mainScene = new Scene(root, settings.getWindowWidth(), settings.getWindowHeight()); mainScene.getStylesheets().add("/fx/css/main.css"); primaryStage.setTitle("YouTrack Worklog Viewer " + FormattingUtil.getFormatted("release.version")); primaryStage.setScene(mainScene); primaryStage.setX(settings.getWindowX()); primaryStage.setY(settings.getWindowY()); primaryStage.show(); primaryStage.widthProperty().addListener((observable, oldValue, newValue) -> settings.setWindowWidth(newValue.intValue())); primaryStage.heightProperty().addListener((observable, oldValue, newValue) -> settings.setWindowHeight(newValue.intValue())); primaryStage.xProperty().addListener((observable, oldValue, newValue) -> settings.setWindowX(newValue.intValue())); primaryStage.yProperty().addListener((observable, oldValue, newValue) -> settings.setWindowY(newValue.intValue())); } public void requestShutdown() { LOGGER.debug("Shutdown requested"); primaryStage.fireEvent(new WindowEvent(primaryStage, WindowEvent.WINDOW_CLOSE_REQUEST)); } }