35 |
import javax.swing.BorderFactory; |
import javax.swing.BorderFactory; |
36 |
import javax.swing.Box; |
import javax.swing.Box; |
37 |
import javax.swing.BoxLayout; |
import javax.swing.BoxLayout; |
38 |
|
import javax.swing.JButton; |
39 |
import javax.swing.JPanel; |
import javax.swing.JPanel; |
40 |
|
|
41 |
import org.jdesktop.swingx.JXCollapsiblePane; |
import org.jdesktop.swingx.JXCollapsiblePane; |
54 |
|
|
55 |
private final JXCollapsiblePane mainPane = new JXCollapsiblePane(); |
private final JXCollapsiblePane mainPane = new JXCollapsiblePane(); |
56 |
private final JXCollapsiblePane optionsPane = new JXCollapsiblePane(); |
private final JXCollapsiblePane optionsPane = new JXCollapsiblePane(); |
57 |
|
private final JXCollapsiblePane confirmPane = new JXCollapsiblePane(); |
58 |
|
private final ConfirmRemovalPane confirmRemovalPane = new ConfirmRemovalPane(); |
59 |
|
|
60 |
/** Creates a new instance of <code>DevicePane</code> */ |
/** Creates a new instance of <code>DevicePane</code> */ |
61 |
public |
public |
100 |
mainPane.add(p); |
mainPane.add(p); |
101 |
|
|
102 |
optionsPane.setAlignmentX(LEFT_ALIGNMENT); |
optionsPane.setAlignmentX(LEFT_ALIGNMENT); |
|
optionsPane.setAnimated(false); |
|
|
optionsPane.setCollapsed(true); |
|
|
optionsPane.setAnimated(preferences().getBoolProperty(ANIMATED)); |
|
103 |
|
|
104 |
preferences().addPropertyChangeListener(ANIMATED, new PropertyChangeListener() { |
initCollasiblePane(optionsPane); |
|
public void |
|
|
propertyChange(PropertyChangeEvent e) { |
|
|
optionsPane.setAnimated(preferences().getBoolProperty(ANIMATED)); |
|
|
} |
|
|
}); |
|
105 |
|
|
106 |
mainPane.add(optionsPane); |
mainPane.add(optionsPane); |
107 |
|
|
108 |
|
JPanel p2 = new JPanel(); |
109 |
|
|
110 |
|
confirmPane.setContentPane(confirmRemovalPane); |
111 |
|
confirmPane.setAlignmentX(LEFT_ALIGNMENT); |
112 |
|
initCollasiblePane(confirmPane); |
113 |
|
|
114 |
|
mainPane.add(confirmPane); |
115 |
|
|
116 |
add(mainPane); |
add(mainPane); |
117 |
|
|
118 |
mainPane.setAnimated(false); |
initCollasiblePane(mainPane); |
|
mainPane.setCollapsed(true); |
|
|
mainPane.setAnimated(preferences().getBoolProperty(ANIMATED)); |
|
119 |
mainPane.setCollapsed(false); |
mainPane.setCollapsed(false); |
120 |
|
} |
121 |
|
|
122 |
|
private void |
123 |
|
initCollasiblePane(final JXCollapsiblePane pane) { |
124 |
|
pane.setAnimated(false); |
125 |
|
pane.setCollapsed(true); |
126 |
|
pane.setAnimated(preferences().getBoolProperty(ANIMATED)); |
127 |
|
|
128 |
preferences().addPropertyChangeListener(ANIMATED, new PropertyChangeListener() { |
preferences().addPropertyChangeListener(ANIMATED, new PropertyChangeListener() { |
129 |
public void |
public void |
130 |
propertyChange(PropertyChangeEvent e) { |
propertyChange(PropertyChangeEvent e) { |
131 |
mainPane.setAnimated(preferences().getBoolProperty(ANIMATED)); |
pane.setAnimated(preferences().getBoolProperty(ANIMATED)); |
132 |
} |
} |
133 |
}); |
}); |
134 |
} |
} |
146 |
protected void |
protected void |
147 |
restoreDevice() { |
restoreDevice() { |
148 |
btnDestroy.setSelected(true); |
btnDestroy.setSelected(true); |
149 |
|
confirmRemovalPane.restore(); |
150 |
mainPane.setCollapsed(false); |
mainPane.setCollapsed(false); |
|
|
|
151 |
} |
} |
152 |
|
|
153 |
protected void |
protected void |
173 |
p.setMinimumSize(p.getPreferredSize()); |
p.setMinimumSize(p.getPreferredSize()); |
174 |
p.setMaximumSize(new Dimension(Short.MAX_VALUE, 2)); |
p.setMaximumSize(new Dimension(Short.MAX_VALUE, 2)); |
175 |
return p; |
return p; |
176 |
} |
} |
177 |
|
|
178 |
|
private boolean |
179 |
|
shouldConfirm() { return preferences().getBoolProperty(CONFIRM_DEVICE_REMOVAL); } |
180 |
|
|
181 |
|
private void |
182 |
|
confirmRemoval() { |
183 |
|
confirmRemovalPane.showOptions = !optionsPane.isCollapsed(); |
184 |
|
if(optionsPane.isCollapsed() || !optionsPane.isAnimated()) { |
185 |
|
if(btnOptions.isSelected()) btnOptions.doClick(0); |
186 |
|
btnOptions.setEnabled(false); |
187 |
|
confirmPane.setCollapsed(false); |
188 |
|
return; |
189 |
|
} |
190 |
|
|
191 |
|
final String s = JXCollapsiblePane.ANIMATION_STATE_KEY; |
192 |
|
optionsPane.addPropertyChangeListener(s, new PropertyChangeListener() { |
193 |
|
public void |
194 |
|
propertyChange(PropertyChangeEvent e) { |
195 |
|
if(e.getNewValue() == "collapsed") { |
196 |
|
confirmPane.setCollapsed(false); |
197 |
|
optionsPane.removePropertyChangeListener(s, this); |
198 |
|
} |
199 |
|
} |
200 |
|
}); |
201 |
|
|
202 |
|
btnOptions.doClick(0); |
203 |
|
btnOptions.setEnabled(false); |
204 |
|
} |
205 |
|
|
206 |
private class OptionsButton extends PixmapToggleButton implements ActionListener { |
private class OptionsButton extends PixmapToggleButton implements ActionListener { |
207 |
OptionsButton() { |
OptionsButton() { |
209 |
setRolloverIcon(Res.gfxOptionsOffRO); |
setRolloverIcon(Res.gfxOptionsOffRO); |
210 |
this.setRolloverSelectedIcon(Res.gfxOptionsOnRO); |
this.setRolloverSelectedIcon(Res.gfxOptionsOnRO); |
211 |
addActionListener(this); |
addActionListener(this); |
212 |
|
setToolTipText(i18n.getButtonLabel("DevicePane.ttShowOptions")); |
213 |
} |
} |
214 |
|
|
215 |
public void |
public void |
217 |
showOptionsPane(isSelected()); |
showOptionsPane(isSelected()); |
218 |
|
|
219 |
String s; |
String s; |
220 |
if(isSelected()) s = i18n.getButtonLabel("OptionsButton.ttHideOptions"); |
if(isSelected()) s = i18n.getButtonLabel("DevicePane.ttHideOptions"); |
221 |
else s = i18n.getButtonLabel("OptionsButton.ttShowOptions"); |
else s = i18n.getButtonLabel("DevicePane.ttShowOptions"); |
222 |
|
|
223 |
setToolTipText(s); |
setToolTipText(s); |
224 |
} |
} |
242 |
addActionListener(this); |
addActionListener(this); |
243 |
String s = JXCollapsiblePane.ANIMATION_STATE_KEY; |
String s = JXCollapsiblePane.ANIMATION_STATE_KEY; |
244 |
mainPane.addPropertyChangeListener(s, this); |
mainPane.addPropertyChangeListener(s, this); |
245 |
|
setToolTipText(i18n.getButtonLabel("DevicePane.ttRemoveDevice")); |
246 |
} |
} |
247 |
|
|
248 |
public void |
public void |
249 |
actionPerformed(ActionEvent e) { |
actionPerformed(ActionEvent e) { |
250 |
|
if(shouldConfirm()) { |
251 |
|
if(isSelected()) confirmRemovalPane.onCancel(); |
252 |
|
else confirmRemoval(); |
253 |
|
return; |
254 |
|
} |
255 |
|
|
256 |
if(!mainPane.isAnimated()) { |
if(!mainPane.isAnimated()) { |
257 |
destroyDevice(); |
destroyDevice(); |
258 |
return; |
return; |
269 |
} |
} |
270 |
} |
} |
271 |
|
|
272 |
|
private class ConfirmRemovalPane extends PixmapPane implements ActionListener { |
273 |
|
private final JButton btnRemove = new JButton(i18n.getButtonLabel("DevicePane.btnRemove")); |
274 |
|
private final JButton btnCancel = new JButton(i18n.getButtonLabel("cancel")); |
275 |
|
|
276 |
|
protected boolean showOptions = false; |
277 |
|
|
278 |
|
ConfirmRemovalPane() { |
279 |
|
super(Res.gfxChannelOptions); |
280 |
|
|
281 |
|
setAlignmentX(LEFT_ALIGNMENT); |
282 |
|
|
283 |
|
setPixmapInsets(new Insets(1, 1, 1, 1)); |
284 |
|
setLayout(new java.awt.BorderLayout()); |
285 |
|
setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); |
286 |
|
setOpaque(false); |
287 |
|
|
288 |
|
PixmapPane p = new PixmapPane(Res.gfxRoundBg7); |
289 |
|
p.setPixmapInsets(new Insets(3, 3, 3, 3)); |
290 |
|
p.setOpaque(false); |
291 |
|
|
292 |
|
p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS)); |
293 |
|
p.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); |
294 |
|
|
295 |
|
p.add(Box.createGlue()); |
296 |
|
p.add(btnRemove); |
297 |
|
p.add(Box.createRigidArea(new Dimension(5, 0))); |
298 |
|
p.add(btnCancel); |
299 |
|
|
300 |
|
add(p); |
301 |
|
|
302 |
|
btnRemove.addActionListener(this); |
303 |
|
|
304 |
|
btnCancel.addActionListener(new ActionListener() { |
305 |
|
public void |
306 |
|
actionPerformed(ActionEvent e) { |
307 |
|
onCancel(); |
308 |
|
} |
309 |
|
}); |
310 |
|
} |
311 |
|
|
312 |
|
protected void |
313 |
|
onCancel() { |
314 |
|
btnDestroy.setSelected(true); |
315 |
|
btnOptions.setEnabled(true); |
316 |
|
btnRemove.setEnabled(true); |
317 |
|
|
318 |
|
if(!showOptions) { |
319 |
|
confirmPane.setCollapsed(true); |
320 |
|
return; |
321 |
|
} |
322 |
|
showOptions = false; |
323 |
|
|
324 |
|
if(!confirmPane.isAnimated()) { |
325 |
|
confirmPane.setCollapsed(true); |
326 |
|
btnOptions.doClick(0); |
327 |
|
return; |
328 |
|
} |
329 |
|
|
330 |
|
final String s = JXCollapsiblePane.ANIMATION_STATE_KEY; |
331 |
|
confirmPane.addPropertyChangeListener(s, new PropertyChangeListener() { |
332 |
|
public void |
333 |
|
propertyChange(PropertyChangeEvent e) { |
334 |
|
if(e.getNewValue() == "collapsed") { |
335 |
|
btnOptions.doClick(0); |
336 |
|
confirmPane.removePropertyChangeListener(s, this); |
337 |
|
} |
338 |
|
} |
339 |
|
}); |
340 |
|
|
341 |
|
confirmPane.setCollapsed(true); |
342 |
|
} |
343 |
|
|
344 |
|
protected void |
345 |
|
restore() { |
346 |
|
btnOptions.setEnabled(true); |
347 |
|
boolean b = confirmPane.isAnimated(); |
348 |
|
confirmPane.setAnimated(false); |
349 |
|
confirmPane.setCollapsed(true); |
350 |
|
confirmPane.setAnimated(b); |
351 |
|
btnRemove.setEnabled(true); |
352 |
|
showOptions = false; |
353 |
|
} |
354 |
|
|
355 |
|
public void |
356 |
|
actionPerformed(ActionEvent e) { |
357 |
|
btnRemove.setEnabled(false); |
358 |
|
|
359 |
|
if(!mainPane.isAnimated()) { |
360 |
|
destroyDevice(); |
361 |
|
return; |
362 |
|
} |
363 |
|
|
364 |
|
mainPane.setCollapsed(true); |
365 |
|
} |
366 |
|
} |
367 |
} |
} |