14
14
import java .nio .file .InvalidPathException ;
15
15
import java .nio .file .Paths ;
16
16
import java .util .ArrayList ;
17
- import java .util .Collections ;
17
+ import java .util .HashSet ;
18
18
import java .util .List ;
19
19
import java .util .Map ;
20
20
import java .util .Optional ;
21
+ import java .util .Set ;
21
22
22
23
import javax .swing .DefaultListModel ;
23
24
import javax .swing .GroupLayout ;
31
32
import javax .swing .JPanel ;
32
33
import javax .swing .JScrollPane ;
33
34
import javax .swing .JTextField ;
35
+ import javax .swing .LayoutStyle .ComponentPlacement ;
34
36
import javax .swing .ScrollPaneConstants ;
35
37
import javax .swing .event .ListSelectionEvent ;
36
38
import javax .swing .event .ListSelectionListener ;
@@ -75,7 +77,9 @@ public class PostAnalysisSignatureDiscoveryPanel extends JPanel implements ListS
75
77
private JList <String > availSigSetsField ;
76
78
private JList <String > selectedSigSetsField ;
77
79
private JButton addSelectedButton ;
80
+ private JButton addAllButton ;
78
81
private JButton removeSelectedButton ;
82
+ private JButton removeAllButton ;
79
83
80
84
private DefaultListModel <String > availSigSetsModel = new DefaultListModel <>();
81
85
private DefaultListModel <String > selectedSigSetsModel = new DefaultListModel <>();
@@ -101,19 +105,23 @@ public PostAnalysisSignatureDiscoveryPanel(@Assisted PostAnalysisInputPanel pare
101
105
102
106
@ Override
103
107
public void valueChanged (ListSelectionEvent e ) {
104
- if (e .getValueIsAdjusting ())
105
- return ;
108
+ if (!e .getValueIsAdjusting ())
109
+ update ();
110
+ }
111
+
112
+ public void update () {
113
+ setAvSigCount (availSigSetsModel .size ());
114
+ setSelSigCount (selectedSigSetsModel .size ());
106
115
107
116
// Enable/disable buttons when list selection changes
108
117
if (addSelectedButton != null )
109
118
addSelectedButton .setEnabled (availSigSetsField .getSelectedIndices ().length > 0 );
110
119
if (removeSelectedButton != null )
111
120
removeSelectedButton .setEnabled (selectedSigSetsField .getSelectedIndices ().length > 0 );
112
- }
113
-
114
- public void update () {
115
- setAvSigCount (availSigSetsModel .size ());
116
- setSelSigCount (selectedSigSetsModel .size ());
121
+ if (addAllButton != null )
122
+ addAllButton .setEnabled (availSigSetsField .getModel ().getSize () > 0 );
123
+ if (removeAllButton != null )
124
+ removeAllButton .setEnabled (selectedSigSetsField .getModel ().getSize () > 0 );
117
125
}
118
126
119
127
@ AfterInjection
@@ -166,45 +174,43 @@ private JPanel createSignatureGenesetsPanel() {
166
174
Font selectBtnFont = iconManager .getIconFont (14.0f );
167
175
168
176
addSelectedButton = new JButton (IconManager .ICON_ANGLE_DOWN );
169
- addSelectedButton .setToolTipText ("Add Selected" );
170
177
addSelectedButton .setFont (selectBtnFont );
178
+ addSelectedButton .setToolTipText ("Add Selected" );
171
179
addSelectedButton .setEnabled (false );
180
+
181
+ addAllButton = new JButton (IconManager .ICON_ANGLE_DOUBLE_DOWN );
182
+ addAllButton .setFont (selectBtnFont );
183
+ addAllButton .setToolTipText ("Add All" );
184
+ addAllButton .setEnabled (false );
172
185
173
186
removeSelectedButton = new JButton (IconManager .ICON_ANGLE_UP );
174
- removeSelectedButton .setToolTipText ("Remove Selected" );
175
187
removeSelectedButton .setFont (selectBtnFont );
188
+ removeSelectedButton .setToolTipText ("Remove Selected" );
176
189
removeSelectedButton .setEnabled (false );
177
-
190
+
191
+ removeAllButton = new JButton (IconManager .ICON_ANGLE_DOUBLE_UP );
192
+ removeAllButton .setFont (selectBtnFont );
193
+ removeAllButton .setToolTipText ("Remove All" );
194
+ removeAllButton .setEnabled (false );
195
+
178
196
addSelectedButton .addActionListener (e -> {
179
- int [] selected = availSigSetsField .getSelectedIndices ();
180
- for (int i = selected .length ; i > 0 ; i --) {
181
- selectedSigSetsModel .addElement (availSigSetsModel .get (selected [i - 1 ]));
182
- availSigSetsModel .remove (selected [i - 1 ]);
183
- }
184
- setSelSigCount (selectedSigSetsModel .size ());
185
- setAvSigCount (availSigSetsModel .size ());
186
- });
197
+ moveSigSets (availSigSetsField , selectedSigSetsField , false );
198
+ });
199
+ addAllButton .addActionListener (e -> {
200
+ moveSigSets (availSigSetsField , selectedSigSetsField , true );
201
+ });
187
202
removeSelectedButton .addActionListener (e -> {
188
- int [] selected = selectedSigSetsField .getSelectedIndices ();
189
- for (int i = selected .length ; i > 0 ; i --) {
190
- availSigSetsModel .addElement (selectedSigSetsModel .get (selected [i - 1 ]));
191
- selectedSigSetsModel .remove (selected [i - 1 ]);
192
- }
193
-
194
- // Sort the Genesets:
195
- List <String > setNamesArray = Collections .list (availSigSetsModel .elements ());
196
- Collections .sort (setNamesArray );
197
- availSigSetsModel .removeAllElements ();
198
- for (String name : setNamesArray ) {
199
- availSigSetsModel .addElement (name );
200
- }
201
- setAvSigCount (availSigSetsModel .size ());
202
- setSelSigCount (selectedSigSetsModel .size ());
203
+ moveSigSets (selectedSigSetsField , availSigSetsField , false );
204
+ });
205
+ removeAllButton .addActionListener (e -> {
206
+ moveSigSets (selectedSigSetsField , availSigSetsField , true );
203
207
});
204
208
205
209
if (LookAndFeelUtil .isAquaLAF ()) {
206
210
addSelectedButton .putClientProperty ("JButton.buttonType" , "gradient" );
211
+ addAllButton .putClientProperty ("JButton.buttonType" , "gradient" );
207
212
removeSelectedButton .putClientProperty ("JButton.buttonType" , "gradient" );
213
+ removeAllButton .putClientProperty ("JButton.buttonType" , "gradient" );
208
214
}
209
215
210
216
availSigSetsField .addListSelectionListener (this );
@@ -224,7 +230,7 @@ private JPanel createSignatureGenesetsPanel() {
224
230
225
231
makeSmall (availableLabel , availSigSetsField , availSigSetsScroll );
226
232
makeSmall (selectedLabel , selectedSigSetsField , selectedSigSetsScroll );
227
- makeSmall (addSelectedButton , removeSelectedButton , clearButton );
233
+ makeSmall (addSelectedButton , addAllButton , removeSelectedButton , removeAllButton , clearButton );
228
234
229
235
JPanel panel = new JPanel ();
230
236
panel .setBorder (LookAndFeelUtil .createTitledBorder ("Signature Gene Sets" ));
@@ -241,6 +247,9 @@ private JPanel createSignatureGenesetsPanel() {
241
247
.addGap (0 , 0 , Short .MAX_VALUE )
242
248
.addComponent (addSelectedButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
243
249
.addComponent (removeSelectedButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
250
+ .addPreferredGap (ComponentPlacement .UNRELATED )
251
+ .addComponent (addAllButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
252
+ .addComponent (removeAllButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
244
253
.addGap (0 , 0 , Short .MAX_VALUE )
245
254
)
246
255
.addComponent (selectedSigSetsScroll , DEFAULT_SIZE , DEFAULT_SIZE , Short .MAX_VALUE )
@@ -257,6 +266,8 @@ private JPanel createSignatureGenesetsPanel() {
257
266
.addGroup (layout .createParallelGroup (Alignment .CENTER , false )
258
267
.addComponent (addSelectedButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
259
268
.addComponent (removeSelectedButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
269
+ .addComponent (addAllButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
270
+ .addComponent (removeAllButton , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
260
271
)
261
272
.addComponent (selectedSigSetsScroll , PREFERRED_SIZE , DEFAULT_SIZE , PREFERRED_SIZE )
262
273
.addComponent (selectedLabel )
@@ -268,6 +279,31 @@ private JPanel createSignatureGenesetsPanel() {
268
279
269
280
return panel ;
270
281
}
282
+
283
+ private void moveSigSets (JList <String > src , JList <String > tgt , boolean all ) {
284
+ final Set <String > set = new HashSet <>();
285
+
286
+ final DefaultListModel <String > srcModel = (DefaultListModel <String >) src .getModel ();
287
+ final DefaultListModel <String > tgtModel = (DefaultListModel <String >) tgt .getModel ();
288
+
289
+ for (int i = 0 ; i < srcModel .getSize (); i ++) {
290
+ int index = i ;
291
+
292
+ final String element = srcModel .get (index );
293
+
294
+ if (all || src .isSelectedIndex (i )) {
295
+ set .add (element );
296
+
297
+ if (!tgtModel .contains (element ))
298
+ tgtModel .addElement (element );
299
+ }
300
+ }
301
+
302
+ for (final String element : set )
303
+ srcModel .removeElement (element );
304
+
305
+ update ();
306
+ }
271
307
272
308
/**
273
309
* @return Panel for choosing and loading GMT and SignatureGMT Geneset-Files
@@ -355,10 +391,11 @@ private JPanel createSignatureDiscoveryGMTPanel() {
355
391
}
356
392
357
393
FilterMetric filterMetric = createFilterMetric ();
358
- LoadSignatureSetsActionListener action = loadSignatureSetsActionListenerFactory .create (new File (filePath ), filterMetric , parentPanel .getEnrichmentMap ());
394
+ LoadSignatureSetsActionListener action =
395
+ loadSignatureSetsActionListenerFactory .create (new File (filePath ), filterMetric , parentPanel .getEnrichmentMap ());
359
396
360
397
action .setGeneSetCallback (gs -> {
361
- this . signatureGenesets = gs ;
398
+ signatureGenesets = gs ;
362
399
});
363
400
364
401
action .setFilteredSignatureSetsCallback (selected -> {
0 commit comments