26
26
import processing .mode .java .JavaEditor ;
27
27
28
28
import javax .swing .*;
29
+ import javax .swing .event .ChangeEvent ;
30
+ import javax .swing .event .ChangeListener ;
29
31
import java .awt .event .ActionEvent ;
30
32
import java .awt .event .ActionListener ;
31
33
import java .io .File ;
@@ -48,7 +50,7 @@ public UpdateDeviceListTask(JMenu deviceMenu) {
48
50
public void run () {
49
51
final Devices devices = Devices .getInstance ();
50
52
java .util .List <Device > deviceList = devices .findMultiple (false );
51
- String selectedDeviceId = devices .getSelectedDeviceId ();
53
+ Device selectedDevice = devices .getSelectedDevice ();
52
54
53
55
if (deviceList .size () == 0 ) {
54
56
if (deviceMenu .getItem (0 ).isEnabled ()) {
@@ -58,45 +60,54 @@ public void run() {
58
60
deviceMenu .add (noDevicesItem );
59
61
}
60
62
61
- devices .setSelectedDeviceId (null );
63
+ devices .setSelectedDevice (null );
62
64
} else {
63
65
deviceMenu .removeAll ();
64
- JMenuItem deviceItem ;
65
66
66
- if (selectedDeviceId == null ) {
67
- selectedDeviceId = deviceList .get (0 ). getId ( );
68
- devices .setSelectedDeviceId ( selectedDeviceId );
67
+ if (selectedDevice == null ) {
68
+ selectedDevice = deviceList .get (0 );
69
+ devices .setSelectedDevice ( selectedDevice );
69
70
} else {
70
71
// check if selected device is still connected
71
72
boolean found = false ;
72
73
for (Device device : deviceList ) {
73
- if (device .getId (). equals (selectedDeviceId )) {
74
+ if (device .equals (selectedDevice )) {
74
75
found = true ;
75
76
break ;
76
77
}
77
78
}
78
79
79
80
if (!found ) {
80
- selectedDeviceId = deviceList .get (0 ). getId ( );
81
- devices .setSelectedDeviceId ( selectedDeviceId );
81
+ selectedDevice = deviceList .get (0 );
82
+ devices .setSelectedDevice ( selectedDevice );
82
83
}
83
84
}
84
85
85
86
for (final Device device : deviceList ) {
86
- deviceItem = new JMenuItem (device .getName ());
87
+ final JCheckBoxMenuItem deviceItem = new JCheckBoxMenuItem (device .getName ());
87
88
deviceItem .setEnabled (true );
89
+
90
+ if (device .equals (selectedDevice )) deviceItem .setState (true );
91
+
92
+ // prevent checkboxmenuitem automatic state changing onclick
93
+ final Device finalSelectedDevice = selectedDevice ;
94
+ deviceItem .addChangeListener (new ChangeListener () {
95
+ @ Override
96
+ public void stateChanged (ChangeEvent e ) {
97
+ if (device .equals (finalSelectedDevice )) deviceItem .setState (true );
98
+ }
99
+ });
100
+
88
101
deviceItem .addActionListener (new ActionListener () {
89
102
@ Override
90
103
public void actionPerformed (ActionEvent e ) {
91
- devices .setSelectedDeviceId (device . getId () );
104
+ devices .setSelectedDevice (device );
92
105
}
93
106
});
94
107
95
108
deviceMenu .add (deviceItem );
96
109
}
97
110
}
98
-
99
- deviceMenu .updateUI ();
100
111
}
101
112
}
102
113
0 commit comments