package com.limegroup.gnutella.gui.notify; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import org.jdesktop.jdic.tray.SystemTray; import org.jdesktop.jdic.tray.TrayIcon; import com.limegroup.gnutella.gui.GUIMediator; public class LinuxNotifyUser implements NotifyUser { private final SystemTray _tray; private TrayIcon _icon; private final JPopupMenu _menu; public LinuxNotifyUser() { _tray = SystemTray.getDefaultSystemTray(); _menu = buildPopupMenu(); buildTrayIcon(GUIMediator.getStringResource("TRAY_TOOLTIP"),"limeicon"); } private void buildTrayIcon(String desc, String imageFileName) { //String tip = "LimeWire: Running the Gnutella Network"; _icon = new TrayIcon(GUIMediator.getThemeImage(imageFileName), desc, _menu); // left click restores. This happens on the awt thread. _icon.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GUIMediator.restoreView(); } }); _icon.setIconAutoSize(true); } private JPopupMenu buildPopupMenu() { JPopupMenu menu = new JPopupMenu(); // restore JMenuItem item = new JMenuItem(GUIMediator.getStringResource("TRAY_RESTORE_LABEL")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GUIMediator.restoreView(); } }); menu.add(item); menu.addSeparator(); // about box item = new JMenuItem(GUIMediator.getStringResource("TRAY_ABOUT_LABEL")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GUIMediator.showAboutWindow(); } }); menu.add(item); menu.addSeparator(); //exit after transfers item = new JMenuItem(GUIMediator.getStringResource("TRAY_EXIT_LATER_LABEL")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GUIMediator.shutdownAfterTransfers(); } }); menu.add(item); // exit item = new JMenuItem(GUIMediator.getStringResource("TRAY_EXIT_LABEL")); item.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { GUIMediator.shutdown(); } }); menu.add(item); return menu; } public void addNotify() { _tray.addTrayIcon(_icon); } public void removeNotify() { _tray.removeTrayIcon(_icon); } public void updateNotify(String imageFileName, String desc) { removeNotify(); buildTrayIcon(desc,imageFileName); _tray.addTrayIcon(_icon); } public void updateDesc(String desc) { removeNotify(); _icon.setCaption(desc); addNotify(); } public void updateImage(String imageFileName) { removeNotify(); ImageIcon i = new ImageIcon(LinuxNotifyUser.class.getResource(imageFileName)); _icon.setIcon(i); addNotify(); } public void hideNotify() { removeNotify(); } }