1 17 package org.columba.core.gui.trayicon; 18 19 import java.io.IOException ; 20 import java.io.InputStream ; 21 22 import javax.swing.Icon ; 23 import javax.swing.JPopupMenu ; 24 25 import org.columba.api.gui.frame.IFrameMediator; 26 import org.columba.core.base.OSInfo; 27 import org.columba.core.gui.base.SelfClosingPopupMenu; 28 import org.columba.core.gui.menu.MenuXMLDecoder; 29 import org.columba.core.io.DiskIO; 30 import org.columba.core.logging.Logging; 31 import org.columba.core.resourceloader.ImageLoader; 32 import org.columba.core.shutdown.ShutdownManager; 33 34 39 public class ColumbaTrayIcon { 40 41 private IFrameMediator frameMediator; 42 43 46 public static final Icon DEFAULT_ICON = ImageLoader 47 .getMiscIcon("trayicon.png"); 48 49 private static ColumbaTrayIcon instance = new ColumbaTrayIcon(); 50 51 private JPopupMenu menu; 52 53 private TrayIconInterface activeIcon; 54 55 protected ColumbaTrayIcon() { 56 activeIcon = new DefaultTrayIcon(); 57 58 } 59 60 65 public static ColumbaTrayIcon getInstance() { 66 return instance; 67 } 68 69 73 public void addToSystemTray(IFrameMediator frameMediator) { 74 75 initPopupMenu(); 76 77 this.frameMediator = frameMediator; 78 activeIcon.addToTray(DEFAULT_ICON, "Columba"); 79 activeIcon.setPopupMenu(menu); 80 81 ShutdownManager.getInstance().register(new Runnable () { 82 public void run() { 83 ColumbaTrayIcon.getInstance().removeFromSystemTray(); 84 } 85 86 }); 87 } 88 89 94 public void setTooltip(String tooltip) { 95 activeIcon.setTooltip(tooltip); 96 } 97 98 103 public void setIcon(Icon icon) { 104 activeIcon.setIcon(icon); 105 } 106 107 110 public void removeFromSystemTray() { 111 activeIcon.removeFromTray(); 112 } 113 114 private void initPopupMenu() { 115 if (menu == null) { 116 menu = new JPopupMenu (); 117 118 try { 119 InputStream is = DiskIO 120 .getResourceStream("org/columba/core/action/trayiconmenu.xml"); 121 122 menu = new MenuXMLDecoder(frameMediator).createPopupMenu(is); 123 } catch (IOException e) { 124 e.printStackTrace(); 125 } 126 127 136 new SelfClosingPopupMenu(menu); 137 } 138 } 139 140 143 public TrayIconInterface getActiveIcon() { 144 return activeIcon; 145 } 146 147 151 public void initActiveIcon() { 152 try { 153 if (OSInfo.isLinux()) { 154 activeIcon = new JDICTrayIcon(); 155 } else if (OSInfo.isWin32Platform()) { 156 activeIcon = new JDICTrayIcon(); 157 } else if (OSInfo.isMac()) { 158 } 160 } catch (Exception e) { 161 if (Logging.DEBUG) 162 e.printStackTrace(); 163 164 activeIcon = new DefaultTrayIcon(); 165 } catch (Error e) { 166 if (Logging.DEBUG) 167 e.printStackTrace(); 168 169 activeIcon = new DefaultTrayIcon(); 170 } 171 } 172 173 } | Popular Tags |