Skip to content

Commit 8a1263a

Browse files
committed
Adds "Add All" and "Remove All" buttons to Signature Discovery panel.
1 parent 2ddfd35 commit 8a1263a

File tree

3 files changed

+75
-42
lines changed

3 files changed

+75
-42
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/actions/LoadSignatureSetsActionListener.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,13 +10,11 @@
1010

1111
import org.baderlab.csplugins.enrichmentmap.CytoscapeServiceModule.Sync;
1212
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMap;
13-
import org.baderlab.csplugins.enrichmentmap.model.EnrichmentMapManager;
1413
import org.baderlab.csplugins.enrichmentmap.model.SetOfGeneSets;
1514
import org.baderlab.csplugins.enrichmentmap.task.postanalysis.FilterMetric;
1615
import org.baderlab.csplugins.enrichmentmap.task.postanalysis.FilterSignatureGSTask;
1716
import org.baderlab.csplugins.enrichmentmap.task.postanalysis.LoadSignatureGMTFilesTask;
1817
import org.baderlab.csplugins.enrichmentmap.util.ResultTaskObserver;
19-
import org.cytoscape.application.CyApplicationManager;
2018
import org.cytoscape.application.swing.CySwingApplication;
2119
import org.cytoscape.work.FinishStatus;
2220
import org.cytoscape.work.ObservableTask;
@@ -29,9 +27,7 @@
2927
public class LoadSignatureSetsActionListener implements ActionListener {
3028

3129
@Inject private CySwingApplication application;
32-
@Inject private CyApplicationManager applicationManager;
3330
@Inject private @Sync TaskManager<?,?> taskManager;
34-
@Inject private EnrichmentMapManager emManager;
3531

3632
private final File file;
3733
private final FilterMetric filterMetric;

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/actions/ShowAboutDialogAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public class ShowAboutDialogAction extends AbstractCyAction {
6262
@Inject private OpenBrowser browser;
6363

6464
public ShowAboutDialogAction() {
65-
super("About...");
65+
super("About");
6666
}
6767

6868
@Override

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/postanalysis/PostAnalysisSignatureDiscoveryPanel.java

Lines changed: 74 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414
import java.nio.file.InvalidPathException;
1515
import java.nio.file.Paths;
1616
import java.util.ArrayList;
17-
import java.util.Collections;
17+
import java.util.HashSet;
1818
import java.util.List;
1919
import java.util.Map;
2020
import java.util.Optional;
21+
import java.util.Set;
2122

2223
import javax.swing.DefaultListModel;
2324
import javax.swing.GroupLayout;
@@ -31,6 +32,7 @@
3132
import javax.swing.JPanel;
3233
import javax.swing.JScrollPane;
3334
import javax.swing.JTextField;
35+
import javax.swing.LayoutStyle.ComponentPlacement;
3436
import javax.swing.ScrollPaneConstants;
3537
import javax.swing.event.ListSelectionEvent;
3638
import javax.swing.event.ListSelectionListener;
@@ -75,7 +77,9 @@ public class PostAnalysisSignatureDiscoveryPanel extends JPanel implements ListS
7577
private JList<String> availSigSetsField;
7678
private JList<String> selectedSigSetsField;
7779
private JButton addSelectedButton;
80+
private JButton addAllButton;
7881
private JButton removeSelectedButton;
82+
private JButton removeAllButton;
7983

8084
private DefaultListModel<String> availSigSetsModel = new DefaultListModel<>();
8185
private DefaultListModel<String> selectedSigSetsModel = new DefaultListModel<>();
@@ -101,19 +105,23 @@ public PostAnalysisSignatureDiscoveryPanel(@Assisted PostAnalysisInputPanel pare
101105

102106
@Override
103107
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());
106115

107116
// Enable/disable buttons when list selection changes
108117
if (addSelectedButton != null)
109118
addSelectedButton.setEnabled(availSigSetsField.getSelectedIndices().length > 0);
110119
if (removeSelectedButton != null)
111120
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);
117125
}
118126

119127
@AfterInjection
@@ -166,45 +174,43 @@ private JPanel createSignatureGenesetsPanel() {
166174
Font selectBtnFont = iconManager.getIconFont(14.0f);
167175

168176
addSelectedButton = new JButton(IconManager.ICON_ANGLE_DOWN);
169-
addSelectedButton.setToolTipText("Add Selected");
170177
addSelectedButton.setFont(selectBtnFont);
178+
addSelectedButton.setToolTipText("Add Selected");
171179
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);
172185

173186
removeSelectedButton = new JButton(IconManager.ICON_ANGLE_UP);
174-
removeSelectedButton.setToolTipText("Remove Selected");
175187
removeSelectedButton.setFont(selectBtnFont);
188+
removeSelectedButton.setToolTipText("Remove Selected");
176189
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+
178196
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+
});
187202
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);
203207
});
204208

205209
if (LookAndFeelUtil.isAquaLAF()) {
206210
addSelectedButton.putClientProperty("JButton.buttonType", "gradient");
211+
addAllButton.putClientProperty("JButton.buttonType", "gradient");
207212
removeSelectedButton.putClientProperty("JButton.buttonType", "gradient");
213+
removeAllButton.putClientProperty("JButton.buttonType", "gradient");
208214
}
209215

210216
availSigSetsField.addListSelectionListener(this);
@@ -224,7 +230,7 @@ private JPanel createSignatureGenesetsPanel() {
224230

225231
makeSmall(availableLabel, availSigSetsField, availSigSetsScroll);
226232
makeSmall(selectedLabel, selectedSigSetsField, selectedSigSetsScroll);
227-
makeSmall(addSelectedButton, removeSelectedButton, clearButton);
233+
makeSmall(addSelectedButton, addAllButton, removeSelectedButton, removeAllButton, clearButton);
228234

229235
JPanel panel = new JPanel();
230236
panel.setBorder(LookAndFeelUtil.createTitledBorder("Signature Gene Sets"));
@@ -241,6 +247,9 @@ private JPanel createSignatureGenesetsPanel() {
241247
.addGap(0, 0, Short.MAX_VALUE)
242248
.addComponent(addSelectedButton, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
243249
.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)
244253
.addGap(0, 0, Short.MAX_VALUE)
245254
)
246255
.addComponent(selectedSigSetsScroll, DEFAULT_SIZE, DEFAULT_SIZE, Short.MAX_VALUE)
@@ -257,6 +266,8 @@ private JPanel createSignatureGenesetsPanel() {
257266
.addGroup(layout.createParallelGroup(Alignment.CENTER, false)
258267
.addComponent(addSelectedButton, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
259268
.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)
260271
)
261272
.addComponent(selectedSigSetsScroll, PREFERRED_SIZE, DEFAULT_SIZE, PREFERRED_SIZE)
262273
.addComponent(selectedLabel)
@@ -268,6 +279,31 @@ private JPanel createSignatureGenesetsPanel() {
268279

269280
return panel;
270281
}
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+
}
271307

272308
/**
273309
* @return Panel for choosing and loading GMT and SignatureGMT Geneset-Files
@@ -355,10 +391,11 @@ private JPanel createSignatureDiscoveryGMTPanel() {
355391
}
356392

357393
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());
359396

360397
action.setGeneSetCallback(gs -> {
361-
this.signatureGenesets = gs;
398+
signatureGenesets = gs;
362399
});
363400

364401
action.setFilteredSignatureSetsCallback(selected -> {

0 commit comments

Comments
 (0)