1 package com.melloware.jukes.tray;
2
3 import java.awt.AWTException;
4 import java.awt.Frame;
5 import java.awt.Image;
6 import java.awt.SystemTray;
7 import java.awt.TrayIcon;
8
9 import javax.swing.JFrame;
10 import javax.swing.JPopupMenu;
11
12 import org.apache.commons.logging.Log;
13 import org.apache.commons.logging.LogFactory;
14
15 import com.jgoodies.uif.action.ActionManager;
16 import com.jgoodies.uif.builder.PopupMenuBuilder;
17 import com.melloware.jukes.file.image.ImageFactory;
18 import com.melloware.jukes.gui.tool.Actions;
19 import com.melloware.jukes.gui.view.MainMenuBuilder;
20
21
22
23
24
25
26
27
28 public class JukesTrayIcon
29 implements ITrayIcon {
30
31 private static final Log LOG = LogFactory.getLog(JukesTrayIcon.class);
32 private final JFrame parentWindow;
33 private final SystemTray tray;
34 private TrayIcon trayIcon;
35
36
37
38
39
40
41
42 public JukesTrayIcon(JFrame aParentWindow) throws AWTException {
43 super();
44 this.parentWindow = aParentWindow;
45 tray = SystemTray.getSystemTray();
46 initialize();
47 }
48
49
50
51
52 public boolean isAvailable() {
53 return true;
54 }
55
56
57
58
59 private JPopupMenu buildTrayMenu() {
60 PopupMenuBuilder builder = new PopupMenuBuilder(MainMenuBuilder.CATALOG);
61 builder.add(ActionManager.get(Actions.HELP_ABOUT_DIALOG_ID));
62 builder.addSeparator();
63 builder.add(ActionManager.get(Actions.PREFERENCES_ID));
64 builder.addSeparator();
65 builder.add(ActionManager.get(Actions.PLAYER_PLAY_ID));
66 builder.add(ActionManager.get(Actions.PLAYER_PAUSE_ID));
67 builder.add(ActionManager.get(Actions.PLAYER_STOP_ID));
68 builder.add(ActionManager.get(Actions.PLAYER_PREVIOUS_ID));
69 builder.add(ActionManager.get(Actions.PLAYER_NEXT_ID));
70 builder.addSeparator();
71 builder.add(ActionManager.get(Actions.APP_HIDE_ID));
72 builder.add(ActionManager.get(Actions.APP_SHOW_ID));
73 builder.add(ActionManager.get(Actions.EXIT_ID));
74 return builder.getPopupMenu();
75 }
76
77
78
79
80 public void cleanUp() {
81 LOG.debug("Cleaning up Unix Tray Icon");
82
83 }
84
85
86
87
88 public void hideWindow() {
89 if (parentWindow.isVisible()) {
90 parentWindow.setVisible(false);
91 ActionManager.get(Actions.APP_HIDE_ID).setEnabled(false);
92 ActionManager.get(Actions.APP_SHOW_ID).setEnabled(true);
93 }
94 }
95
96
97
98
99
100 public void leftClicked() {
101 ActionManager.get(Actions.PLAYER_PAUSE_ID).actionPerformed(null);
102 }
103
104
105
106
107
108 public void middleClicked() {
109 ActionManager.get(Actions.PLAYER_NEXT_ID).actionPerformed(null);
110 }
111
112
113
114
115 public void showWindow() {
116 if (!parentWindow.isVisible()) {
117 parentWindow.setVisible(true);
118 ActionManager.get(Actions.APP_HIDE_ID).setEnabled(true);
119 ActionManager.get(Actions.APP_SHOW_ID).setEnabled(false);
120 }
121
122
123 parentWindow.setState(Frame.NORMAL);
124 }
125
126
127
128
129
130 private void initialize() throws AWTException {
131 LOG.info("Initialize Unix Tray Icon.");
132
133
134 trayIcon = new java.awt.TrayIcon(ImageFactory.ICO_TRAYICON.getImage(), parentWindow.getTitle(), null);
135 trayIcon.setImageAutoSize(true);
136
137
138 trayIcon.addMouseListener(new JukesTrayMouseAdapter(this, buildTrayMenu()));
139
140 tray.add(trayIcon);
141 }
142
143
144
145
146 public void changeImage(Image aImage) {
147 trayIcon.setImage(aImage);
148 }
149
150
151
152
153 public void setToolTip(String aTip) {
154 trayIcon.setToolTip(aTip);
155 }
156
157 }