Skip to content

Commit 3a9e1e8

Browse files
committed
Multi-select in heat map table.
Refs #426
1 parent bd1953b commit 3a9e1e8

File tree

11 files changed

+87
-22
lines changed

11 files changed

+87
-22
lines changed

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/genemania/GeneManiaTaskFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public class GeneManiaTaskFactory {
4747
@Inject private OpenBrowser openBrowser;
4848

4949

50-
public TaskIterator createTaskIterator(EnrichmentMap map, List<String> genes, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
50+
public TaskIterator createTaskIterator(EnrichmentMap map, List<String> genes, List<String> selectedGenes, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
5151
// Show message to user if genemania not installed
5252
List<String> commands = availableCommands.getCommands(GENEMANIA_NAMESPACE);
5353

@@ -67,7 +67,7 @@ public TaskIterator createTaskIterator(EnrichmentMap map, List<String> genes, Li
6767

6868

6969

70-
QueryGeneManiaTask queryTask = queryGeneManiaTaskFactory.create(map, genes, leadingEdgeRanks);
70+
QueryGeneManiaTask queryTask = queryGeneManiaTaskFactory.create(map, genes, selectedGenes, leadingEdgeRanks);
7171

7272
// Get list of organisms from GeneMANIA
7373
TaskIterator ti = commandExecutorTaskFactory.createTaskIterator(

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/genemania/QueryGeneManiaNodeViewTaskFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public TaskIterator createTaskIterator(View<CyNode> nodeView, CyNetworkView netw
3434

3535
List<GSEALeadingEdgeRankingOption> rankOptions = rankingOptionFactory.getGSEADataSetSetRankOptions(map);
3636

37-
TaskIterator tasks = geneManiaTaskFactory.createTaskIterator(map, genes, rankOptions);
37+
TaskIterator tasks = geneManiaTaskFactory.createTaskIterator(map, genes, null, rankOptions);
3838
return tasks;
3939
}
4040

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/genemania/QueryGeneManiaTask.java

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.gson.Gson;
2525
import com.google.inject.Inject;
2626
import com.google.inject.assistedinject.Assisted;
27+
import com.google.inject.assistedinject.AssistedInject;
2728

2829
public class QueryGeneManiaTask extends AbstractTask {
2930

@@ -43,6 +44,9 @@ public class QueryGeneManiaTask extends AbstractTask {
4344
@Tunable(description = "Network Weighting:")
4445
public ListSingleSelection<GMWeightingMethod> weightingMethods;
4546

47+
// not a tunable, used just for the UI
48+
public List<String> selectedGenes;
49+
4650
private GMSearchResult result;
4751

4852
private static long lastTaxonomyId = 9606; // H.sapiens
@@ -51,12 +55,21 @@ public class QueryGeneManiaTask extends AbstractTask {
5155
@Inject private SynchronousTaskManager<?> syncTaskManager;
5256

5357
public static interface Factory {
54-
QueryGeneManiaTask create(EnrichmentMap map, List<String> geneList, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks);
58+
QueryGeneManiaTask create(
59+
EnrichmentMap map,
60+
@Assisted("geneList") List<String> geneList,
61+
@Assisted("selectedGenes") List<String> selectedGenes,
62+
List<GSEALeadingEdgeRankingOption> leadingEdgeRanks);
5563
}
5664

57-
@Inject
58-
public QueryGeneManiaTask(@Assisted EnrichmentMap map, @Assisted List<String> geneList, @Assisted List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
59-
this.geneList = new GeneListTunable(map, geneList, leadingEdgeRanks);
65+
@AssistedInject
66+
public QueryGeneManiaTask(
67+
@Assisted EnrichmentMap map,
68+
@Assisted("geneList") List<String> geneList,
69+
@Assisted("selectedGenes") List<String> selectedGenes,
70+
@Assisted List<GSEALeadingEdgeRankingOption> leadingEdgeRanks)
71+
{
72+
this.geneList = new GeneListTunable(map, geneList, selectedGenes, leadingEdgeRanks);
6073
this.organisms = new ListSingleSelection<>();
6174
this.weightingMethods = new ListSingleSelection<>(GMWeightingMethod.values());
6275
this.weightingMethods.setSelectedValue(weightingMethods.getPossibleValues().get(0));

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/string/QueryStringNodeViewTaskFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public TaskIterator createTaskIterator(View<CyNode> nodeView, CyNetworkView netw
3434

3535
List<GSEALeadingEdgeRankingOption> rankOptions = rankingOptionFactory.getGSEADataSetSetRankOptions(map);
3636

37-
return stringAppFactory.createTaskIterator(map, genes, rankOptions);
37+
return stringAppFactory.createTaskIterator(map, genes, null, rankOptions);
3838
}
3939

4040
@Override

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/string/QueryStringTask.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.gson.Gson;
2525
import com.google.inject.Inject;
2626
import com.google.inject.assistedinject.Assisted;
27+
import com.google.inject.assistedinject.AssistedInject;
2728

2829
public class QueryStringTask extends AbstractTask {
2930

@@ -50,12 +51,21 @@ public class QueryStringTask extends AbstractTask {
5051
@Inject private CommandExecutorTaskFactory commandExecutorTaskFactory;
5152

5253
public static interface Factory {
53-
QueryStringTask create(EnrichmentMap map, List<String> geneList, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks);
54+
QueryStringTask create(
55+
EnrichmentMap map,
56+
@Assisted("geneList") List<String> geneList,
57+
@Assisted("selectedGenes") List<String> selectedGenes,
58+
List<GSEALeadingEdgeRankingOption> leadingEdgeRanks);
5459
}
5560

56-
@Inject
57-
public QueryStringTask(@Assisted EnrichmentMap map, @Assisted List<String> geneList, @Assisted List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
58-
this.geneList = new GeneListTunable(map, geneList, leadingEdgeRanks);
61+
@AssistedInject
62+
public QueryStringTask(
63+
@Assisted EnrichmentMap map,
64+
@Assisted("geneList") List<String> geneList,
65+
@Assisted("selectedGenes") List<String> selectedGenes,
66+
@Assisted List<GSEALeadingEdgeRankingOption> leadingEdgeRanks)
67+
{
68+
this.geneList = new GeneListTunable(map, geneList, selectedGenes, leadingEdgeRanks);
5969
this.organisms = new ListSingleSelection<>();
6070
}
6171

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/string/StringAppTaskFactory.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ public class StringAppTaskFactory {
4444
@Inject private OpenBrowser openBrowser;
4545

4646

47-
public TaskIterator createTaskIterator(EnrichmentMap map, List<String> genes, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
47+
public TaskIterator createTaskIterator(EnrichmentMap map, List<String> genes, List<String> selectedGenes, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
4848
// Show message to user if STRING App not installed
4949
List<String> commands = availableCommands.getCommands(STRING_NAMESPACE);
5050

@@ -62,7 +62,7 @@ public TaskIterator createTaskIterator(EnrichmentMap map, List<String> genes, Li
6262
return null;
6363
}
6464

65-
QueryStringTask queryTask = queryStringTaskFactory.create(map, genes, leadingEdgeRanks);
65+
QueryStringTask queryTask = queryStringTaskFactory.create(map, genes, selectedGenes, leadingEdgeRanks);
6666

6767
// Get list of organisms from STRING App
6868
TaskIterator ti = commandExecutorTaskFactory.createTaskIterator(

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/tunables/GeneListGUITunableHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,10 @@ private JPanel createGeneListPanel() {
4747
GeneListTunable geneListTunable = getGeneListTunable();
4848
EnrichmentMap map = geneListTunable.getEnrichmentMap();
4949
List<String> genes = geneListTunable.getGenes();
50+
List<String> selectedGenes = geneListTunable.getSelectedGenes();
5051
List<GSEALeadingEdgeRankingOption> leadingEdgeRanks = geneListTunable.getLeadingEdgeRanks();
5152

52-
checkboxPanel = new GeneListPanel(map, genes, leadingEdgeRanks);
53+
checkboxPanel = new GeneListPanel(map, genes, selectedGenes, leadingEdgeRanks);
5354

5455
JPanel panel = new JPanel();
5556

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/tunables/GeneListPanel.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,11 @@
77
import java.awt.event.ActionEvent;
88
import java.awt.event.ActionListener;
99
import java.util.ArrayList;
10+
import java.util.Collections;
11+
import java.util.HashSet;
1012
import java.util.List;
1113
import java.util.Map;
14+
import java.util.Set;
1215
import java.util.function.Consumer;
1316
import java.util.stream.Collectors;
1417

@@ -42,12 +45,21 @@ public class GeneListPanel extends JPanel {
4245
private JButton selectNoneButton;
4346
private JButton selectEdgeButton;
4447

45-
public GeneListPanel(EnrichmentMap map, List<String> genes, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
48+
public GeneListPanel(
49+
EnrichmentMap map,
50+
List<String> genes,
51+
List<String> selectedGenes,
52+
List<GSEALeadingEdgeRankingOption> leadingEdgeRanks)
53+
{
4654
this.map = map;
4755

56+
57+
Set<String> selected = selectedGenes == null ? Collections.emptySet() : new HashSet<>(selectedGenes);
58+
4859
checkboxListModel = new CheckboxListModel<>();
4960
genes.stream().sorted().forEach(gene -> {
50-
checkboxListModel.addElement(new CheckboxData<>(gene, gene, true));
61+
boolean sel = selected.isEmpty() || selected.contains(gene);
62+
checkboxListModel.addElement(new CheckboxData<>(gene, gene, sel));
5163
});
5264

5365
checkboxList = new CheckboxList<>(checkboxListModel);

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/task/tunables/GeneListTunable.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,16 @@ public class GeneListTunable {
1515
private List<GSEALeadingEdgeRankingOption> leadingEdgeRanks;
1616

1717

18-
public GeneListTunable(EnrichmentMap map, List<String> genes, List<GSEALeadingEdgeRankingOption> leadingEdgeRanks) {
18+
public GeneListTunable(
19+
EnrichmentMap map,
20+
List<String> genes,
21+
List<String> selectedGenes,
22+
List<GSEALeadingEdgeRankingOption> leadingEdgeRanks)
23+
{
1924
this.map = map;
2025
this.genes = Objects.requireNonNull(genes);
2126
this.leadingEdgeRanks = leadingEdgeRanks == null ? Collections.emptyList() : leadingEdgeRanks;
22-
this.selectedGenes = genes;
27+
this.selectedGenes = selectedGenes == null ? Collections.emptyList() : selectedGenes;
2328
}
2429

2530
public List<GSEALeadingEdgeRankingOption> getLeadingEdgeRanks() {

EnrichmentMapPlugin/src/main/java/org/baderlab/csplugins/enrichmentmap/view/heatmap/HeatMapContentPanel.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -288,7 +288,7 @@ JTable getTable() {
288288
table.setFillsViewportHeight(true);
289289
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
290290
table.setCellSelectionEnabled(true);
291-
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
291+
table.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
292292
table.setDefaultRenderer(Double.class, new HeatMapCellRenderer());
293293
table.setDefaultRenderer(RankValue.class, new RankValueRenderer());
294294
table.setRowSorter(new HeatMapRowSorter(model));
@@ -345,6 +345,28 @@ public List<String> getGenes() {
345345
return ((HeatMapTableModel) getTable().getModel()).getGenes();
346346
}
347347

348+
public List<String> getSelectedGenes() {
349+
JTable table = getTable();
350+
351+
int[] selectedCols = table.getSelectedColumns();
352+
if(selectedCols == null || selectedCols.length == 0)
353+
return Collections.emptyList();
354+
Arrays.sort(selectedCols);
355+
if(Arrays.binarySearch(selectedCols, HeatMapTableModel.GENE_COL) < 0)
356+
return Collections.emptyList(); // Genes column not selected
357+
358+
List<String> selectedGenes = new ArrayList<>();
359+
for(int row : table.getSelectedRows()) {
360+
Object value = table.getValueAt(row, HeatMapTableModel.GENE_COL);
361+
if(value != null) {
362+
String gene = value.toString();
363+
selectedGenes.add(gene);
364+
}
365+
366+
}
367+
return selectedGenes;
368+
}
369+
348370
public Set<String> getLeadingEdgeGenes() {
349371
return ((HeatMapTableModel) getTable().getModel()).getLeadingEdgeGenes();
350372
}

0 commit comments

Comments
 (0)