diff options
author | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2011-03-04 13:58:24 +0000 |
---|---|---|
committer | clemenso <clemenso@8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4> | 2011-03-04 13:58:24 +0000 |
commit | 1c33971524f9fa72026cc14253a522228f01627e (patch) | |
tree | 8c46494250fd94681c46a49a05f4a0f0bfac7ee2 /BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java | |
parent | 1819f5598e7390bd3703b8bd05e504cbfc9cc7a2 (diff) | |
download | mocca-1c33971524f9fa72026cc14253a522228f01627e.tar.gz mocca-1c33971524f9fa72026cc14253a522228f01627e.tar.bz2 mocca-1c33971524f9fa72026cc14253a522228f01627e.zip |
TrayIcon new
git-svn-id: https://joinup.ec.europa.eu/svn/mocca/trunk@914 8a26b1a7-26f0-462f-b9ef-d0e30c41f5a4
Diffstat (limited to 'BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java')
-rw-r--r-- | BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java | 191 |
1 files changed, 191 insertions, 0 deletions
diff --git a/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java new file mode 100644 index 00000000..5c44dac3 --- /dev/null +++ b/BKUWebStart/src/main/java/at/gv/egiz/bku/webstart/gui/MOCCAIcon.java @@ -0,0 +1,191 @@ +/* + * To change this template, choose Tools | Templates + * and open the template in the editor. + */ +package at.gv.egiz.bku.webstart.gui; + +import java.awt.AWTException; +import java.awt.Image; +import java.awt.MenuItem; +import java.awt.PopupMenu; +import java.awt.SystemTray; +import java.awt.TrayIcon; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.WindowAdapter; +import java.io.IOException; +import java.text.MessageFormat; +import java.util.Locale; +import java.util.ResourceBundle; +import javax.imageio.ImageIO; +import javax.swing.JFrame; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * + * @author clemens + */ +public class MOCCAIcon implements StatusNotifier, ActionListener { + + public static final String LABEL_SHUTDOWN = "tray.label.shutdown"; + public static final String LABEL_PIN = "tray.label.pin"; + public static final String LABEL_HELP = "tray.label.help"; + public static final String LABEL_ABOUT = "tray.label.about"; + public static final String TOOLTIP_DEFAULT = "tray.tooltip.default"; + /** action commands for tray menu */ + public static final String SHUTDOWN_COMMAND = "shutdown"; + public static final String PIN_COMMAND = "pin"; + public static final String ABOUT_COMMAND = "about"; + public static final String HELP_COMMAND = "help"; + private static final Logger log = LoggerFactory.getLogger(MOCCAIcon.class); + protected BKUControllerInterface controller; + protected TrayIcon trayIcon; + protected ResourceBundle messages; + + private AboutDialog aboutDialog; + + public MOCCAIcon(BKUControllerInterface controller) { + this.controller = controller; + messages = ResourceBundle.getBundle(MESSAGES_RESOURCE, Locale.getDefault()); + this.trayIcon = initTrayIcon(); + } + + private TrayIcon initTrayIcon() { + if (SystemTray.isSupported()) { + try { + // get the SystemTray instance + SystemTray tray = SystemTray.getSystemTray(); + log.debug("TrayIcon size: " + tray.getTrayIconSize()); + + String iconResource; + if (tray.getTrayIconSize().height < 17) { + iconResource = TRAYICON_RESOURCE + "16.png"; + } else if (tray.getTrayIconSize().height < 25) { + iconResource = TRAYICON_RESOURCE + "24.png"; + } else if (tray.getTrayIconSize().height < 33) { + iconResource = TRAYICON_RESOURCE + "32.png"; + } else { + iconResource = TRAYICON_RESOURCE + "48.png"; + } + Image image = ImageIO.read(getClass().getResourceAsStream(iconResource)); + + PopupMenu menu = new PopupMenu(); + + MenuItem helpItem = new MenuItem(messages.getString(LABEL_HELP)); + helpItem.addActionListener(this); + helpItem.setActionCommand(HELP_COMMAND); + menu.add(helpItem); + + MenuItem pinItem = new MenuItem(messages.getString(LABEL_PIN)); + pinItem.addActionListener(this); + pinItem.setActionCommand(PIN_COMMAND); + menu.add(pinItem); + + MenuItem shutdownItem = new MenuItem(messages.getString(LABEL_SHUTDOWN)); + shutdownItem.addActionListener(this); + shutdownItem.setActionCommand(SHUTDOWN_COMMAND); + menu.add(shutdownItem); + + menu.addSeparator(); + + MenuItem aboutItem = new MenuItem(messages.getString(LABEL_ABOUT)); + aboutItem.setActionCommand(ABOUT_COMMAND); + aboutItem.addActionListener(this); + menu.add(aboutItem); + + TrayIcon ti = new TrayIcon(image, messages.getString(TOOLTIP_DEFAULT), menu); + ti.setImageAutoSize(true); + ti.addActionListener(this); + tray.add(ti); + return ti; + } catch (AWTException ex) { + log.error("Failed to init tray icon", ex); + } catch (IOException ex) { + log.error("Failed to load tray icon image", ex); + } + } else { + log.error("No system tray support"); + } + return null; + } + + @Override + public void error(String msgKey) { + if (trayIcon != null) { + trayIcon.displayMessage( + messages.getString(CAPTION_ERROR), + messages.getString(msgKey), + TrayIcon.MessageType.ERROR); + } else { + log.error(messages.getString(msgKey)); + } + } + + @Override + public void error(String msgPatternKey, Object... argument) { + if (trayIcon != null) { + trayIcon.displayMessage( + messages.getString(CAPTION_ERROR), + MessageFormat.format(messages.getString(msgPatternKey), argument), + TrayIcon.MessageType.ERROR); + } else { + log.error(MessageFormat.format(messages.getString(msgPatternKey), argument)); + } + } + + @Override + public void info(String msgKey) { + if (trayIcon != null) { + trayIcon.displayMessage( + messages.getString(CAPTION_DEFAULT), + messages.getString(msgKey), + TrayIcon.MessageType.INFO); + } else { + log.info(messages.getString(msgKey)); + } + } + + @Override + public Locale getLocale() { + return messages.getLocale(); + } + + /** + * Listen for TrayMenu actions (display error messages on trayIcon) + * @param e + */ + @Override + public void actionPerformed(ActionEvent e) { + if (SHUTDOWN_COMMAND.equals(e.getActionCommand())) { + log.debug("shutdown requested via tray menu"); + controller.shutDown(); + } else if (ABOUT_COMMAND.equals(e.getActionCommand())) { + log.debug("about dialog requested via tray menu"); + + if (aboutDialog == null) { + aboutDialog = new AboutDialog(new JFrame(), true, controller.getVersion()); + aboutDialog.addWindowListener(new WindowAdapter() { + + @Override + public void windowClosing(java.awt.event.WindowEvent e) { + aboutDialog.setVisible(false); + } + }); + } + aboutDialog.setLocationByPlatform(true); + aboutDialog.setVisible(true); + + } else if (PIN_COMMAND.equals(e.getActionCommand())) { + log.debug("pin management dialog requested via tray menu"); + controller.pinManagement(messages.getLocale()); + + } else if (HELP_COMMAND.equals(e.getActionCommand())) { + log.debug("help page requested via tray menu"); + controller.showHelp(messages.getLocale()); + + } else { + log.error("unknown tray menu command: " + e.getActionCommand()); + } + } +} |