package scotty.ui;
import java.awt.AWTException;
import java.awt.Image;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.Toolkit;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.apache.log4j.Logger;
import scotty.event.EventDispatcher;
import scotty.event.Events;
import scotty.util.Messages;
/**
* Manages the systray.
*
* @author flo
*
*/
public class SystrayManager {
private Logger log = Logger.getLogger(SystrayManager.class);
// private SystemTray tray;
private TrayIcon icon;
private Messages msgs = new Messages();
private String defaultImage = "/systray-default.gif";
private String runningImage = "/systray-loader.gif";
public SystrayManager() {
if (isSupported()) {
PopupMenu menu = new PopupMenu();
SystemTray tray = SystemTray.getSystemTray();
icon = new TrayIcon(createImage(defaultImage), "scotty", menu);
MenuItem close = new MenuItem(msgs.exit());
close.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
EventDispatcher.fireEvent(Events.EXIT, null);
System.exit(0);
};
});
menu.add(close);
try {
tray.add(icon);
} catch (AWTException e1) {
e1.printStackTrace();
}
}
}
public void setRunning(boolean runs) {
updateTrayIconIfSupported(runs);
}
private void updateTrayIconIfSupported(boolean runs) {
if (!isSupported()) {
return;
}
if (runs) {
icon.setImage(createImage(runningImage));
} else {
icon.setImage(createImage(defaultImage));
}
}
public boolean isSupported() {
boolean avail = false;
try {
avail = SystemTray.isSupported();
} catch (Exception e) {
avail = false;
log.info("Systray is not available", e);
}
return avail;
}
public void setTooltip(String tooltip) {
if (isSupported()) {
icon.setToolTip(tooltip);
}
}
public TrayIcon getIcon() {
return icon;
}
public void setIcon(TrayIcon icon) {
this.icon = icon;
}
private static Image createImage(String path) {
java.net.URL imgURL = SystrayManager.class.getResource(path);
if (imgURL != null) {
Image img = Toolkit.getDefaultToolkit().createImage(imgURL);
return img;
} else {
System.err.println("Couldn't find file: " + path);
return null;
}
}
}