|
@@ -24,7 +24,6 @@ package com.dmdirc.addons.ui_swing.components.statusbar;
|
24
|
24
|
|
25
|
25
|
import com.dmdirc.addons.ui_swing.UIUtilities;
|
26
|
26
|
import com.dmdirc.config.IdentityManager;
|
27
|
|
-import com.dmdirc.interfaces.ConfigChangeListener;
|
28
|
27
|
import com.dmdirc.ui.IconManager;
|
29
|
28
|
import com.dmdirc.ui.StatusMessage;
|
30
|
29
|
import com.dmdirc.ui.interfaces.StatusBarComponent;
|
|
@@ -32,7 +31,9 @@ import com.dmdirc.ui.interfaces.StatusMessageNotifier;
|
32
|
31
|
|
33
|
32
|
import java.awt.event.MouseEvent;
|
34
|
33
|
import java.awt.event.MouseListener;
|
|
34
|
+import java.util.ArrayList;
|
35
|
35
|
import java.util.Date;
|
|
36
|
+import java.util.List;
|
36
|
37
|
import java.util.Timer;
|
37
|
38
|
import java.util.TimerTask;
|
38
|
39
|
import java.util.concurrent.Semaphore;
|
|
@@ -44,8 +45,8 @@ import javax.swing.SwingUtilities;
|
44
|
45
|
/**
|
45
|
46
|
* Message label handles showing messages in the status bar.
|
46
|
47
|
*/
|
47
|
|
-public class MessageLabel extends JLabel implements StatusBarComponent,
|
48
|
|
- MouseListener, ConfigChangeListener {
|
|
48
|
+public class MessageLabel extends JLabel implements StatusBarComponent,
|
|
49
|
+ MouseListener {
|
49
|
50
|
|
50
|
51
|
/**
|
51
|
52
|
* A version number for this class. It should be changed whenever the class
|
|
@@ -55,12 +56,12 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
55
|
56
|
private static final long serialVersionUID = 1;
|
56
|
57
|
/** Default status bar message. */
|
57
|
58
|
private final StatusMessage defaultMessage;
|
58
|
|
- /** current status bar message notifier. */
|
59
|
|
- private transient StatusMessageNotifier messageNotifier;
|
|
59
|
+ /** Message queue. */
|
|
60
|
+ private final List<StatusMessage> messages;
|
|
61
|
+ /** Current status messsage. */
|
|
62
|
+ private int currentMessage;
|
60
|
63
|
/** Timer to clear the message. */
|
61
|
64
|
private transient TimerTask messageTimer;
|
62
|
|
- /** Message timeout. */
|
63
|
|
- private int timeout;
|
64
|
65
|
/** Set message synchronisation. */
|
65
|
66
|
private final Semaphore semaphore;
|
66
|
67
|
|
|
@@ -69,14 +70,14 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
69
|
70
|
*/
|
70
|
71
|
public MessageLabel() {
|
71
|
72
|
super();
|
72
|
|
- defaultMessage = new StatusMessage(null, "Ready.", null, -1);
|
|
73
|
+ currentMessage = -1;
|
|
74
|
+ messages = new ArrayList<StatusMessage>();
|
|
75
|
+ defaultMessage = new StatusMessage(null, "Ready.", null, -1,
|
|
76
|
+ IdentityManager.getGlobalConfig());
|
73
|
77
|
semaphore = new Semaphore(1);
|
74
|
78
|
setText("Ready.");
|
75
|
79
|
setBorder(BorderFactory.createEtchedBorder());
|
76
|
80
|
addMouseListener(this);
|
77
|
|
- setCachedSettings();
|
78
|
|
- IdentityManager.getGlobalConfig().addChangeListener("ui",
|
79
|
|
- "awayindicator", this);
|
80
|
81
|
}
|
81
|
82
|
|
82
|
83
|
/**
|
|
@@ -88,7 +89,8 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
88
|
89
|
*/
|
89
|
90
|
@Deprecated
|
90
|
91
|
public void setMessage(final String newMessage) {
|
91
|
|
- setMessage(new StatusMessage(null, newMessage, null, timeout));
|
|
92
|
+ setMessage(new StatusMessage(null, newMessage, null, -1,
|
|
93
|
+ IdentityManager.getGlobalConfig()));
|
92
|
94
|
}
|
93
|
95
|
|
94
|
96
|
/**
|
|
@@ -102,7 +104,8 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
102
|
104
|
@Deprecated
|
103
|
105
|
public void setMessage(final String newMessage,
|
104
|
106
|
final StatusMessageNotifier newNotifier) {
|
105
|
|
- setMessage(new StatusMessage(null, newMessage, newNotifier, timeout));
|
|
107
|
+ setMessage(new StatusMessage(null, newMessage, newNotifier, -1,
|
|
108
|
+ IdentityManager.getGlobalConfig()));
|
106
|
109
|
}
|
107
|
110
|
|
108
|
111
|
/**
|
|
@@ -115,7 +118,8 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
115
|
118
|
*/
|
116
|
119
|
@Deprecated
|
117
|
120
|
public void setMessage(final String iconType, final String newMessage) {
|
118
|
|
- setMessage(new StatusMessage(iconType, newMessage, null, timeout));
|
|
121
|
+ setMessage(new StatusMessage(iconType, newMessage, null, -1,
|
|
122
|
+ IdentityManager.getGlobalConfig()));
|
119
|
123
|
}
|
120
|
124
|
|
121
|
125
|
/**
|
|
@@ -130,8 +134,8 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
130
|
134
|
@Deprecated
|
131
|
135
|
public void setMessage(final String iconType, final String newMessage,
|
132
|
136
|
final StatusMessageNotifier newNotifier) {
|
133
|
|
- setMessage(new StatusMessage(iconType, newMessage, newNotifier,
|
134
|
|
- timeout));
|
|
137
|
+ setMessage(new StatusMessage(iconType, newMessage, newNotifier, -1,
|
|
138
|
+ IdentityManager.getGlobalConfig()));
|
135
|
139
|
}
|
136
|
140
|
|
137
|
141
|
/**
|
|
@@ -146,7 +150,8 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
146
|
150
|
@Deprecated
|
147
|
151
|
public void setMessage(final String newMessage,
|
148
|
152
|
final StatusMessageNotifier newNotifier, final int timeout) {
|
149
|
|
- setMessage(new StatusMessage(null, newMessage, newNotifier, timeout));
|
|
153
|
+ setMessage(new StatusMessage(null, newMessage, newNotifier, timeout,
|
|
154
|
+ IdentityManager.getGlobalConfig()));
|
150
|
155
|
}
|
151
|
156
|
|
152
|
157
|
/**
|
|
@@ -160,10 +165,10 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
160
|
165
|
* @deprecated Should use {@link setMessage(StatusMessage)} instead
|
161
|
166
|
*/
|
162
|
167
|
@Deprecated
|
163
|
|
- public void setMessage(final String iconType, final String newMessage,
|
|
168
|
+ public void setMessage(final String iconType, final String newMessage,
|
164
|
169
|
final StatusMessageNotifier newNotifier, final int timeout) {
|
165
|
170
|
setMessage(new StatusMessage(iconType, newMessage, newNotifier,
|
166
|
|
- timeout));
|
|
171
|
+ timeout, IdentityManager.getGlobalConfig()));
|
167
|
172
|
}
|
168
|
173
|
|
169
|
174
|
/**
|
|
@@ -173,14 +178,15 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
173
|
178
|
*/
|
174
|
179
|
public void setMessage(final StatusMessage message) {
|
175
|
180
|
semaphore.acquireUninterruptibly();
|
176
|
|
- this.messageNotifier = message.getMessageNotifier();
|
177
|
181
|
SwingUtilities.invokeLater(new Runnable() {
|
178
|
182
|
|
179
|
183
|
/** {@inheritDoc} */
|
180
|
184
|
@Override
|
181
|
185
|
public void run() {
|
182
|
186
|
try {
|
183
|
|
- if (message.getIconType() == null) {
|
|
187
|
+ messages.add(message);
|
|
188
|
+ currentMessage = messages.indexOf(message);
|
|
189
|
+ if (message.getIconType() == null) {
|
184
|
190
|
setIcon(null);
|
185
|
191
|
} else {
|
186
|
192
|
setIcon(IconManager.getIconManager().getIcon(
|
|
@@ -188,25 +194,18 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
188
|
194
|
}
|
189
|
195
|
setText(UIUtilities.clipStringifNeeded(MessageLabel.this,
|
190
|
196
|
message.getMessage(), getWidth()));
|
191
|
|
- messageNotifier = message.getMessageNotifier();
|
192
|
197
|
|
193
|
|
- if (messageTimer != null && (System.currentTimeMillis() -
|
194
|
|
- messageTimer.scheduledExecutionTime()) <= 0) {
|
|
198
|
+ if (messageTimer != null && (System.currentTimeMillis()
|
|
199
|
+ - messageTimer.scheduledExecutionTime()) <= 0) {
|
195
|
200
|
messageTimer.cancel();
|
196
|
201
|
}
|
197
|
202
|
|
198
|
203
|
if (!defaultMessage.equals(message)) {
|
199
|
|
- messageTimer = new TimerTask() {
|
200
|
|
-
|
201
|
|
- /** {@inheritDoc} */
|
202
|
|
- @Override
|
203
|
|
- public void run() {
|
204
|
|
- clearMessage();
|
205
|
|
- }
|
206
|
|
- };
|
|
204
|
+ messageTimer = new MessageTimerTask(MessageLabel.this);
|
207
|
205
|
new Timer("SwingStatusBar messageTimer").schedule(
|
208
|
|
- messageTimer, new Date(System.currentTimeMillis()
|
209
|
|
- + 250 + timeout * 1000L));
|
|
206
|
+ messageTimer, new Date(
|
|
207
|
+ System.currentTimeMillis() + 250
|
|
208
|
+ + message.getTimeout() * 1000L));
|
210
|
209
|
}
|
211
|
210
|
} finally {
|
212
|
211
|
semaphore.release();
|
|
@@ -229,8 +228,10 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
229
|
228
|
*/
|
230
|
229
|
@Override
|
231
|
230
|
public void mouseClicked(final MouseEvent e) {
|
232
|
|
- if (messageNotifier != null) {
|
233
|
|
- messageNotifier.clickReceived(e.getButton(), e.getClickCount());
|
|
231
|
+ if (currentMessage != -1 && messages.size() > currentMessage
|
|
232
|
+ && messages.get(currentMessage).getMessageNotifier() != null) {
|
|
233
|
+ messages.get(currentMessage).getMessageNotifier().clickReceived(
|
|
234
|
+ e.getButton(), e.getClickCount());
|
234
|
235
|
}
|
235
|
236
|
}
|
236
|
237
|
|
|
@@ -273,16 +274,4 @@ public class MessageLabel extends JLabel implements StatusBarComponent,
|
273
|
274
|
public void mouseExited(final MouseEvent e) {
|
274
|
275
|
//Ignore
|
275
|
276
|
}
|
276
|
|
-
|
277
|
|
- /** Set cached options. */
|
278
|
|
- private void setCachedSettings() {
|
279
|
|
- timeout = IdentityManager.getGlobalConfig().getOptionInt("statusBar",
|
280
|
|
- "messageDisplayLength");
|
281
|
|
- }
|
282
|
|
-
|
283
|
|
- /** {@inheritDoc} */
|
284
|
|
- @Override
|
285
|
|
- public void configChanged(final String domain, final String key) {
|
286
|
|
- setCachedSettings();
|
287
|
|
- }
|
288
|
277
|
}
|