package rmblworx.tools.timey.gui; import java.awt.TrayIcon; import java.io.IOException; import java.util.ResourceBundle; import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.stage.Modality; import javafx.stage.Stage; import javafx.stage.StageStyle; import javax.swing.SwingUtilities; /* * Copyright 2014-2015 Christian Raue * MIT License http://opensource.org/licenses/mit-license.php */ /** * Hilfsmethoden zum Umgang mit Hinweisen. * @author Christian Raue {@literal <christian.raue@gmail.com>} */ public class MessageHelper { /** * Ob Hinweise unterdrückt werden sollen. Sinnvoll für Tests. */ private boolean suppressMessages = false; public final void setSuppressMessages(final boolean suppress) { suppressMessages = suppress; } /** * Zeigt einen Hinweis im System-Tray oder, falls dieser nicht verfügbar ist, in einem modalen Dialog an. * @param caption Titel * @param text Text * @param trayIcon TrayIcon * @param i18n ResourceBundle */ public void showTrayMessageWithFallbackToDialog(final String caption, final String text, final TrayIcon trayIcon, final ResourceBundle i18n) { if (trayIcon != null) { showTrayMessage(caption, text, trayIcon); } else { showDialogMessage(caption, text, i18n); } } /** * Zeigt einen Hinweis im System-Tray an. * @param caption Titel * @param text Text * @param trayIcon TrayIcon */ public final void showTrayMessage(final String caption, final String text, final TrayIcon trayIcon) { if (trayIcon == null) { throw new UnsupportedOperationException("There's no system tray icon."); } SwingUtilities.invokeLater(new Runnable() { public void run() { trayIcon.displayMessage(caption, text, TrayIcon.MessageType.INFO); } }); } /** * Zeigt einen Hinweis in einem modalen Dialog an. * @param title Fenstertitel * @param text Text * @param i18n ResourceBundle */ public void showDialogMessage(final String title, final String text, final ResourceBundle i18n) { if (suppressMessages) { return; } Platform.runLater(new Runnable() { public void run() { try { final Stage stage = new Stage(StageStyle.UTILITY); final Parent root = FXMLLoader.load(getClass().getResource("MessageDialog.fxml"), i18n); final Label message = (Label) root.lookup("#message"); message.setText(text); final Button okButton = (Button) root.lookup("#okButton"); okButton.setOnAction(new EventHandler<ActionEvent>() { public void handle(final ActionEvent event) { stage.close(); } }); stage.setScene(new Scene(root)); stage.setTitle(title); stage.setResizable(false); stage.initModality(Modality.APPLICATION_MODAL); stage.showAndWait(); } catch (final IOException e) { e.printStackTrace(); } } }); } }