2 |
26 Feb 07 |
jari |
1 |
/* |
2 |
26 Feb 07 |
jari |
Copyright @ 1999-2006, The Institute for Genomic Research (TIGR). |
2 |
26 Feb 07 |
jari |
All rights reserved. |
2 |
26 Feb 07 |
jari |
4 |
*/ |
2 |
26 Feb 07 |
jari |
5 |
package org.tigr.microarray.mev.cluster.gui.impl.lem; |
2 |
26 Feb 07 |
jari |
6 |
|
2 |
26 Feb 07 |
jari |
7 |
import java.awt.Color; |
2 |
26 Feb 07 |
jari |
8 |
import java.awt.Dimension; |
2 |
26 Feb 07 |
jari |
9 |
import java.awt.FontMetrics; |
2 |
26 Feb 07 |
jari |
10 |
import java.awt.Graphics; |
2 |
26 Feb 07 |
jari |
11 |
import java.awt.GridBagConstraints; |
2 |
26 Feb 07 |
jari |
12 |
import java.awt.GridBagLayout; |
2 |
26 Feb 07 |
jari |
13 |
import java.awt.Insets; |
2 |
26 Feb 07 |
jari |
14 |
import java.awt.Toolkit; |
2 |
26 Feb 07 |
jari |
15 |
import java.awt.event.ActionEvent; |
2 |
26 Feb 07 |
jari |
16 |
import java.awt.event.ActionListener; |
2 |
26 Feb 07 |
jari |
17 |
import java.awt.event.KeyEvent; |
2 |
26 Feb 07 |
jari |
18 |
import java.awt.event.KeyListener; |
2 |
26 Feb 07 |
jari |
19 |
import java.awt.event.MouseEvent; |
2 |
26 Feb 07 |
jari |
20 |
import java.awt.event.MouseListener; |
2 |
26 Feb 07 |
jari |
21 |
import java.awt.event.WindowAdapter; |
2 |
26 Feb 07 |
jari |
22 |
import java.util.Vector; |
2 |
26 Feb 07 |
jari |
23 |
|
2 |
26 Feb 07 |
jari |
24 |
import javax.swing.BorderFactory; |
2 |
26 Feb 07 |
jari |
25 |
import javax.swing.JCheckBoxMenuItem; |
2 |
26 Feb 07 |
jari |
26 |
import javax.swing.JDialog; |
2 |
26 Feb 07 |
jari |
27 |
import javax.swing.JFrame; |
2 |
26 Feb 07 |
jari |
28 |
import javax.swing.JMenu; |
2 |
26 Feb 07 |
jari |
29 |
import javax.swing.JMenuBar; |
2 |
26 Feb 07 |
jari |
30 |
import javax.swing.JMenuItem; |
2 |
26 Feb 07 |
jari |
31 |
import javax.swing.JOptionPane; |
2 |
26 Feb 07 |
jari |
32 |
import javax.swing.JPanel; |
2 |
26 Feb 07 |
jari |
33 |
import javax.swing.JScrollPane; |
2 |
26 Feb 07 |
jari |
34 |
import javax.swing.JTable; |
2 |
26 Feb 07 |
jari |
35 |
import javax.swing.JTextPane; |
2 |
26 Feb 07 |
jari |
36 |
import javax.swing.table.AbstractTableModel; |
2 |
26 Feb 07 |
jari |
37 |
|
2 |
26 Feb 07 |
jari |
38 |
import org.tigr.graph.GC; |
2 |
26 Feb 07 |
jari |
39 |
import org.tigr.graph.GraphLine; |
2 |
26 Feb 07 |
jari |
40 |
import org.tigr.graph.GraphPoint; |
2 |
26 Feb 07 |
jari |
41 |
import org.tigr.graph.GraphTick; |
2 |
26 Feb 07 |
jari |
42 |
import org.tigr.graph.GraphViewer; |
2 |
26 Feb 07 |
jari |
43 |
import org.tigr.microarray.mev.cluster.gui.IData; |
2 |
26 Feb 07 |
jari |
44 |
import org.tigr.microarray.mev.cluster.gui.impl.dialogs.AlgorithmDialog; |
2 |
26 Feb 07 |
jari |
45 |
import org.tigr.microarray.mev.cluster.gui.impl.dialogs.ParameterPanel; |
2 |
26 Feb 07 |
jari |
46 |
import org.tigr.util.FloatMatrix; |
2 |
26 Feb 07 |
jari |
47 |
import org.tigr.util.QSort; |
2 |
26 Feb 07 |
jari |
48 |
|
2 |
26 Feb 07 |
jari |
49 |
/** |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
51 |
* |
2 |
26 Feb 07 |
jari |
* The LEMSelectionEditor presents a table of selected loci. |
2 |
26 Feb 07 |
jari |
* A graph representation of each selected loci can be displayed. |
2 |
26 Feb 07 |
jari |
* File output and list editing is supported. |
2 |
26 Feb 07 |
jari |
55 |
*/ |
2 |
26 Feb 07 |
jari |
56 |
public class LEMSelectionEditor extends AlgorithmDialog { |
2 |
26 Feb 07 |
jari |
57 |
|
2 |
26 Feb 07 |
jari |
58 |
private JTable selectionList; |
2 |
26 Feb 07 |
jari |
59 |
private LinearExpressionMapViewer lem; |
2 |
26 Feb 07 |
jari |
60 |
private SelectionTableModel model; |
2 |
26 Feb 07 |
jari |
61 |
private JTable table; |
2 |
26 Feb 07 |
jari |
62 |
private JMenu saveSelectedMenu; |
2 |
26 Feb 07 |
jari |
63 |
private JMenu fileMenu; |
2 |
26 Feb 07 |
jari |
64 |
|
2 |
26 Feb 07 |
jari |
65 |
|
2 |
26 Feb 07 |
jari |
66 |
private JPanel mainpanel; |
2 |
26 Feb 07 |
jari |
67 |
private JTextPane infoPane; |
2 |
26 Feb 07 |
jari |
68 |
private ParameterPanel locusTablePanel; |
2 |
26 Feb 07 |
jari |
69 |
private String infoText; |
2 |
26 Feb 07 |
jari |
70 |
|
2 |
26 Feb 07 |
jari |
71 |
private IData data; |
2 |
26 Feb 07 |
jari |
72 |
private int numSamples; |
2 |
26 Feb 07 |
jari |
73 |
private Vector selectedIndices; |
2 |
26 Feb 07 |
jari |
74 |
private FloatMatrix meanMatrix; |
2 |
26 Feb 07 |
jari |
75 |
private JCheckBoxMenuItem coloredLociBox; |
2 |
26 Feb 07 |
jari |
76 |
private JMenuItem hideGraphItem; |
2 |
26 Feb 07 |
jari |
77 |
private boolean showGraph; |
2 |
26 Feb 07 |
jari |
78 |
|
2 |
26 Feb 07 |
jari |
79 |
private LocusGraph locusGraph; |
2 |
26 Feb 07 |
jari |
80 |
|
2 |
26 Feb 07 |
jari |
81 |
|
2 |
26 Feb 07 |
jari |
82 |
public LEMSelectionEditor (JFrame frame, LinearExpressionMapViewer lem, Vector selectedIndices) { |
2 |
26 Feb 07 |
jari |
83 |
super(frame, "LEM Locus Selection List", false); |
2 |
26 Feb 07 |
jari |
84 |
|
2 |
26 Feb 07 |
jari |
85 |
this.lem = lem; |
2 |
26 Feb 07 |
jari |
86 |
this.meanMatrix = lem.getLocusMeanMatrix(); |
2 |
26 Feb 07 |
jari |
87 |
numSamples = lem.getExperiment().getNumberOfSamples(); |
2 |
26 Feb 07 |
jari |
88 |
|
2 |
26 Feb 07 |
jari |
89 |
this.selectedIndices = selectedIndices; |
2 |
26 Feb 07 |
jari |
90 |
showGraph = true; |
2 |
26 Feb 07 |
jari |
91 |
|
2 |
26 Feb 07 |
jari |
// infoPanel |
2 |
26 Feb 07 |
jari |
93 |
infoPane = new JTextPane(); |
2 |
26 Feb 07 |
jari |
94 |
infoPane.setContentType("text/html"); |
2 |
26 Feb 07 |
jari |
95 |
infoPane.setEditable(false); |
2 |
26 Feb 07 |
jari |
96 |
infoPane.setBackground(Color.white); |
2 |
26 Feb 07 |
jari |
97 |
infoPane.setBorder(BorderFactory.createLineBorder(Color.black, 1)); |
2 |
26 Feb 07 |
jari |
98 |
|
2 |
26 Feb 07 |
jari |
99 |
infoText = "<html><body><font size = 5><b><u><center>Locus Selection List</center></u></b></font>"; |
2 |
26 Feb 07 |
jari |
100 |
infoText += "<center>Use <b>shift-left-click</b> on a locus arrow to add to the list.<br></center>"; |
2 |
26 Feb 07 |
jari |
101 |
infoText += "</body></html>"; |
2 |
26 Feb 07 |
jari |
102 |
infoPane.setText(infoText); |
2 |
26 Feb 07 |
jari |
103 |
|
2 |
26 Feb 07 |
jari |
104 |
infoPane.setMargin(new Insets(5,20,5,20)); |
2 |
26 Feb 07 |
jari |
105 |
Dimension dim = new Dimension(200, 80); |
2 |
26 Feb 07 |
jari |
106 |
infoPane.setPreferredSize(dim); |
2 |
26 Feb 07 |
jari |
107 |
infoPane.setSize(dim); |
2 |
26 Feb 07 |
jari |
108 |
|
2 |
26 Feb 07 |
jari |
//menu |
2 |
26 Feb 07 |
jari |
110 |
JMenuBar menu = new JMenuBar(); |
2 |
26 Feb 07 |
jari |
111 |
Listener listener = new Listener(); |
2 |
26 Feb 07 |
jari |
112 |
|
2 |
26 Feb 07 |
jari |
113 |
fileMenu = new JMenu("File"); |
2 |
26 Feb 07 |
jari |
114 |
|
2 |
26 Feb 07 |
jari |
115 |
saveSelectedMenu = new JMenu("Save Selected Loci"); |
2 |
26 Feb 07 |
jari |
116 |
|
2 |
26 Feb 07 |
jari |
117 |
JMenuItem item = new JMenuItem("Locus Level Detail"); |
2 |
26 Feb 07 |
jari |
118 |
item.setActionCommand("save-selected-loci-detail-command"); |
2 |
26 Feb 07 |
jari |
119 |
item.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
120 |
saveSelectedMenu.add(item); |
2 |
26 Feb 07 |
jari |
121 |
|
2 |
26 Feb 07 |
jari |
122 |
item = new JMenuItem("Spot Level Detail"); |
2 |
26 Feb 07 |
jari |
123 |
item.setActionCommand("save-selected-spot-detail-command"); |
2 |
26 Feb 07 |
jari |
124 |
item.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
125 |
saveSelectedMenu.add(item); |
2 |
26 Feb 07 |
jari |
126 |
|
2 |
26 Feb 07 |
jari |
127 |
fileMenu.add(saveSelectedMenu); |
2 |
26 Feb 07 |
jari |
128 |
|
2 |
26 Feb 07 |
jari |
129 |
JMenu saveAllMenu = new JMenu("Save All Loci"); |
2 |
26 Feb 07 |
jari |
130 |
|
2 |
26 Feb 07 |
jari |
131 |
item = new JMenuItem("Locus Level Detail"); |
2 |
26 Feb 07 |
jari |
132 |
item.setActionCommand("save-all-loci-detail-command"); |
2 |
26 Feb 07 |
jari |
133 |
item.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
134 |
saveAllMenu.add(item); |
2 |
26 Feb 07 |
jari |
135 |
|
2 |
26 Feb 07 |
jari |
136 |
item = new JMenuItem("Spot Level Detail"); |
2 |
26 Feb 07 |
jari |
137 |
item.setActionCommand("save-all-spot-detail-command"); |
2 |
26 Feb 07 |
jari |
138 |
item.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
139 |
saveAllMenu.add(item); |
2 |
26 Feb 07 |
jari |
140 |
|
2 |
26 Feb 07 |
jari |
141 |
fileMenu.add(saveAllMenu); |
2 |
26 Feb 07 |
jari |
142 |
|
2 |
26 Feb 07 |
jari |
143 |
JMenu selectMenu = new JMenu("Select"); |
2 |
26 Feb 07 |
jari |
144 |
|
2 |
26 Feb 07 |
jari |
145 |
item = new JMenuItem("Locus List Selection"); |
2 |
26 Feb 07 |
jari |
146 |
item.setActionCommand("loci-list-selection-command"); |
2 |
26 Feb 07 |
jari |
147 |
item.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
148 |
selectMenu.add(item); |
2 |
26 Feb 07 |
jari |
149 |
|
2 |
26 Feb 07 |
jari |
150 |
item = new JMenuItem("Base Range Selection"); |
2 |
26 Feb 07 |
jari |
151 |
item.setActionCommand("base-range-selection-command"); |
2 |
26 Feb 07 |
jari |
152 |
item.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
153 |
selectMenu.add(item); |
2 |
26 Feb 07 |
jari |
154 |
|
2 |
26 Feb 07 |
jari |
/*JMenu viewMenu = new JMenu("View"); |
2 |
26 Feb 07 |
jari |
showExpressionGraphItem = new JMenuItem("Show Expression Graphs"); |
2 |
26 Feb 07 |
jari |
157 |
|
2 |
26 Feb 07 |
jari |
if(selectedIndices.size() == 0) |
2 |
26 Feb 07 |
jari |
showExpressionGraphItem.setEnabled(false); |
2 |
26 Feb 07 |
jari |
160 |
|
2 |
26 Feb 07 |
jari |
showExpressionGraphItem.setActionCommand("toggle-show-expression-graph-command"); |
2 |
26 Feb 07 |
jari |
162 |
*/ |
2 |
26 Feb 07 |
jari |
163 |
|
2 |
26 Feb 07 |
jari |
164 |
JMenu viewerMenu = new JMenu("Graph Options"); |
2 |
26 Feb 07 |
jari |
165 |
|
2 |
26 Feb 07 |
jari |
166 |
hideGraphItem = new JMenuItem("Hide Locus Graph"); |
2 |
26 Feb 07 |
jari |
167 |
hideGraphItem.setActionCommand("toggle-hide-graph-command"); |
2 |
26 Feb 07 |
jari |
168 |
hideGraphItem.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
169 |
viewerMenu.add(hideGraphItem); |
2 |
26 Feb 07 |
jari |
170 |
|
2 |
26 Feb 07 |
jari |
171 |
coloredLociBox = new JCheckBoxMenuItem("Multi-colored Graphs", false); |
2 |
26 Feb 07 |
jari |
172 |
coloredLociBox.setActionCommand("toggle-multi-colored-graphs"); |
2 |
26 Feb 07 |
jari |
173 |
coloredLociBox.addActionListener(listener); |
2 |
26 Feb 07 |
jari |
174 |
viewerMenu.add(coloredLociBox); |
2 |
26 Feb 07 |
jari |
175 |
|
2 |
26 Feb 07 |
jari |
176 |
menu.add(fileMenu); |
2 |
26 Feb 07 |
jari |
177 |
menu.add(selectMenu); |
2 |
26 Feb 07 |
jari |
178 |
menu.add(viewerMenu); |
2 |
26 Feb 07 |
jari |
179 |
menu.setBorder(BorderFactory.createLineBorder(Color.black)); |
2 |
26 Feb 07 |
jari |
180 |
menu.setMinimumSize(new Dimension(100, 20)); |
2 |
26 Feb 07 |
jari |
181 |
menu.setMaximumSize(new Dimension(1000, 20)); |
2 |
26 Feb 07 |
jari |
182 |
|
2 |
26 Feb 07 |
jari |
//set the menu bar (via cast) |
2 |
26 Feb 07 |
jari |
184 |
JDialog dialog = (JDialog)this; |
2 |
26 Feb 07 |
jari |
185 |
|
2 |
26 Feb 07 |
jari |
//JTable construction |
2 |
26 Feb 07 |
jari |
187 |
table = new JTable(); |
2 |
26 Feb 07 |
jari |
188 |
table.addMouseListener(listener); |
2 |
26 Feb 07 |
jari |
189 |
table.addKeyListener(listener); |
2 |
26 Feb 07 |
jari |
190 |
|
2 |
26 Feb 07 |
jari |
191 |
Vector headerVector = new Vector(); |
2 |
26 Feb 07 |
jari |
192 |
headerVector.add("Locus"); |
2 |
26 Feb 07 |
jari |
193 |
headerVector.add("5'"); |
2 |
26 Feb 07 |
jari |
194 |
headerVector.add("3'"); |
2 |
26 Feb 07 |
jari |
195 |
headerVector.add("# spots/locus"); |
2 |
26 Feb 07 |
jari |
196 |
|
2 |
26 Feb 07 |
jari |
197 |
model = new SelectionTableModel(selectedIndices, headerVector); |
2 |
26 Feb 07 |
jari |
198 |
table.setModel(model); |
2 |
26 Feb 07 |
jari |
199 |
|
2 |
26 Feb 07 |
jari |
200 |
JScrollPane pane = new JScrollPane(table); |
2 |
26 Feb 07 |
jari |
201 |
dim = new Dimension(550, 150); |
2 |
26 Feb 07 |
jari |
202 |
pane.setPreferredSize(dim); |
2 |
26 Feb 07 |
jari |
203 |
pane.setSize(dim); |
2 |
26 Feb 07 |
jari |
204 |
|
2 |
26 Feb 07 |
jari |
205 |
mainpanel = new JPanel(); |
2 |
26 Feb 07 |
jari |
206 |
mainpanel.setLayout(new GridBagLayout()); |
2 |
26 Feb 07 |
jari |
207 |
|
2 |
26 Feb 07 |
jari |
208 |
locusTablePanel = new ParameterPanel("Selected Loci"); |
2 |
26 Feb 07 |
jari |
209 |
locusTablePanel.setLayout(new GridBagLayout()); |
2 |
26 Feb 07 |
jari |
210 |
|
2 |
26 Feb 07 |
jari |
211 |
dim.height = 200; |
2 |
26 Feb 07 |
jari |
212 |
locusTablePanel.setPreferredSize(dim); |
2 |
26 Feb 07 |
jari |
213 |
locusTablePanel.setSize(dim); |
2 |
26 Feb 07 |
jari |
214 |
|
2 |
26 Feb 07 |
jari |
215 |
locusTablePanel.add(pane, new GridBagConstraints(0,0,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
216 |
|
2 |
26 Feb 07 |
jari |
217 |
mainpanel.add(menu, new GridBagConstraints(0,0,1,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
218 |
mainpanel.add(infoPane, new GridBagConstraints(0,1,1,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
219 |
|
2 |
26 Feb 07 |
jari |
220 |
locusGraph = new LocusGraph(); |
2 |
26 Feb 07 |
jari |
221 |
|
2 |
26 Feb 07 |
jari |
222 |
mainpanel.add(locusGraph, new GridBagConstraints(0,2,1,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
223 |
mainpanel.add(locusTablePanel, new GridBagConstraints(0,3,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
224 |
|
2 |
26 Feb 07 |
jari |
//alter button text |
2 |
26 Feb 07 |
jari |
226 |
okButton.setText("Close"); |
2 |
26 Feb 07 |
jari |
227 |
resetButton.setText("Remove Selected"); |
2 |
26 Feb 07 |
jari |
228 |
dim = new Dimension(120, 30); |
2 |
26 Feb 07 |
jari |
229 |
resetButton.setPreferredSize(dim); |
2 |
26 Feb 07 |
jari |
230 |
resetButton.setSize(dim); |
2 |
26 Feb 07 |
jari |
231 |
cancelButton.setText("Clear All"); |
2 |
26 Feb 07 |
jari |
232 |
cancelButton.setPreferredSize(dim); |
2 |
26 Feb 07 |
jari |
233 |
cancelButton.setSize(dim); |
2 |
26 Feb 07 |
jari |
234 |
|
2 |
26 Feb 07 |
jari |
235 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
236 |
|
2 |
26 Feb 07 |
jari |
237 |
addContent(mainpanel); |
2 |
26 Feb 07 |
jari |
238 |
setActionListeners(listener); |
2 |
26 Feb 07 |
jari |
239 |
addWindowListener(listener); |
2 |
26 Feb 07 |
jari |
240 |
pack(); |
2 |
26 Feb 07 |
jari |
241 |
} |
2 |
26 Feb 07 |
jari |
242 |
|
2 |
26 Feb 07 |
jari |
243 |
/** |
2 |
26 Feb 07 |
jari |
* updates the information text to reflect list changes, row count |
2 |
26 Feb 07 |
jari |
245 |
* |
2 |
26 Feb 07 |
jari |
246 |
*/ |
2 |
26 Feb 07 |
jari |
247 |
public void updateSelectionText() { |
2 |
26 Feb 07 |
jari |
248 |
infoText = "<html><body><font size = 5><b><u><center>Locus Selection List</center></u></b></font>"; |
2 |
26 Feb 07 |
jari |
249 |
infoText += "<center>Use <b>shift-left-click</b> on a locus arrow to add to the list.<br>"; |
2 |
26 Feb 07 |
jari |
250 |
infoText += "Number of Loci in the List: <b>"+this.model.getRowCount()+"</b></center></body></html>"; |
2 |
26 Feb 07 |
jari |
251 |
infoPane.setText(infoText); |
2 |
26 Feb 07 |
jari |
252 |
infoPane.setCaretPosition(0); |
2 |
26 Feb 07 |
jari |
253 |
} |
2 |
26 Feb 07 |
jari |
254 |
|
2 |
26 Feb 07 |
jari |
255 |
/** |
2 |
26 Feb 07 |
jari |
* validates the state of buttons based on the list population |
2 |
26 Feb 07 |
jari |
257 |
*/ |
2 |
26 Feb 07 |
jari |
258 |
private void validateMenuItemsAndButtons() { |
2 |
26 Feb 07 |
jari |
259 |
boolean isNotEmpty = (table.getRowCount() > 0); |
2 |
26 Feb 07 |
jari |
260 |
fileMenu.setEnabled(isNotEmpty); |
2 |
26 Feb 07 |
jari |
261 |
resetButton.setEnabled(isNotEmpty); |
2 |
26 Feb 07 |
jari |
262 |
cancelButton.setEnabled(isNotEmpty); |
2 |
26 Feb 07 |
jari |
263 |
|
2 |
26 Feb 07 |
jari |
264 |
int [] selRows = table.getSelectedRows(); |
2 |
26 Feb 07 |
jari |
265 |
saveSelectedMenu.setEnabled(selRows!=null && selRows.length > 0); |
2 |
26 Feb 07 |
jari |
266 |
} |
2 |
26 Feb 07 |
jari |
267 |
|
2 |
26 Feb 07 |
jari |
268 |
/** |
2 |
26 Feb 07 |
jari |
* Displays the dialog centered on screen |
2 |
26 Feb 07 |
jari |
270 |
*/ |
2 |
26 Feb 07 |
jari |
271 |
public void showDialog() { |
2 |
26 Feb 07 |
jari |
272 |
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); |
2 |
26 Feb 07 |
jari |
273 |
setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2); |
2 |
26 Feb 07 |
jari |
274 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
275 |
updateSelectionText(); |
2 |
26 Feb 07 |
jari |
276 |
show(); |
2 |
26 Feb 07 |
jari |
277 |
} |
2 |
26 Feb 07 |
jari |
278 |
|
2 |
26 Feb 07 |
jari |
279 |
/** |
2 |
26 Feb 07 |
jari |
* Method to re-center the dialog |
2 |
26 Feb 07 |
jari |
281 |
*/ |
2 |
26 Feb 07 |
jari |
282 |
public void centerDialog() { |
2 |
26 Feb 07 |
jari |
283 |
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); |
2 |
26 Feb 07 |
jari |
284 |
setLocation((screenSize.width - getSize().width)/2, (screenSize.height - getSize().height)/2); |
2 |
26 Feb 07 |
jari |
285 |
} |
2 |
26 Feb 07 |
jari |
286 |
|
2 |
26 Feb 07 |
jari |
287 |
/** |
2 |
26 Feb 07 |
jari |
* handles additions to loucs list |
2 |
26 Feb 07 |
jari |
289 |
*/ |
2 |
26 Feb 07 |
jari |
290 |
public void fireLocusAdded() { |
2 |
26 Feb 07 |
jari |
291 |
model.sortByMinLocation(); |
2 |
26 Feb 07 |
jari |
292 |
model.fireRowInserted(); |
2 |
26 Feb 07 |
jari |
293 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
294 |
updateSelectionText(); |
2 |
26 Feb 07 |
jari |
295 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
//validate(); |
2 |
26 Feb 07 |
jari |
297 |
} |
2 |
26 Feb 07 |
jari |
298 |
|
2 |
26 Feb 07 |
jari |
299 |
/** |
2 |
26 Feb 07 |
jari |
* Handles removals from the locus list |
2 |
26 Feb 07 |
jari |
301 |
*/ |
2 |
26 Feb 07 |
jari |
302 |
public void fireLocusRemoved() { |
2 |
26 Feb 07 |
jari |
303 |
model.sortByMinLocation(); |
2 |
26 Feb 07 |
jari |
304 |
model.fireRowDeleted(); |
2 |
26 Feb 07 |
jari |
305 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
306 |
updateSelectionText(); |
2 |
26 Feb 07 |
jari |
307 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
//validate(); |
2 |
26 Feb 07 |
jari |
309 |
} |
2 |
26 Feb 07 |
jari |
310 |
|
2 |
26 Feb 07 |
jari |
311 |
/** |
2 |
26 Feb 07 |
jari |
* Remove a selected loci based on JTable row selection |
2 |
26 Feb 07 |
jari |
313 |
*/ |
2 |
26 Feb 07 |
jari |
314 |
public void removeSelectedLoci() { |
2 |
26 Feb 07 |
jari |
315 |
int [] rows = table.getSelectedRows(); |
2 |
26 Feb 07 |
jari |
316 |
if(rows.length == 0) |
2 |
26 Feb 07 |
jari |
317 |
return; |
2 |
26 Feb 07 |
jari |
318 |
model.removeSelectedRows(rows); |
2 |
26 Feb 07 |
jari |
319 |
lem.repaint(); |
2 |
26 Feb 07 |
jari |
320 |
} |
2 |
26 Feb 07 |
jari |
321 |
|
2 |
26 Feb 07 |
jari |
322 |
/** |
2 |
26 Feb 07 |
jari |
* Clears the list |
2 |
26 Feb 07 |
jari |
* @return true if successful |
2 |
26 Feb 07 |
jari |
325 |
*/ |
2 |
26 Feb 07 |
jari |
326 |
public boolean clearAll() { |
2 |
26 Feb 07 |
jari |
327 |
boolean cleared = false; |
2 |
26 Feb 07 |
jari |
328 |
if(JOptionPane.showConfirmDialog(this, "Are you sure you are ready to clear the list?", "Clear All Selected Loci", JOptionPane.YES_NO_OPTION ) == JOptionPane.YES_OPTION ) { |
2 |
26 Feb 07 |
jari |
329 |
model.removeAllRows(); |
2 |
26 Feb 07 |
jari |
330 |
cleared = true; |
2 |
26 Feb 07 |
jari |
331 |
lem.repaint(); |
2 |
26 Feb 07 |
jari |
332 |
} |
2 |
26 Feb 07 |
jari |
333 |
return cleared; |
2 |
26 Feb 07 |
jari |
334 |
} |
2 |
26 Feb 07 |
jari |
335 |
|
2 |
26 Feb 07 |
jari |
336 |
/** |
2 |
26 Feb 07 |
jari |
* Retruns the locus indices corresponding to selected rows |
2 |
26 Feb 07 |
jari |
* @return array of locus indices |
2 |
26 Feb 07 |
jari |
339 |
*/ |
2 |
26 Feb 07 |
jari |
340 |
private int [] getSelectedLocusIndices() { |
2 |
26 Feb 07 |
jari |
341 |
int [] rows = table.getSelectedRows(); |
2 |
26 Feb 07 |
jari |
342 |
|
2 |
26 Feb 07 |
jari |
343 |
if(rows.length == 0) |
2 |
26 Feb 07 |
jari |
344 |
return new int[0]; |
2 |
26 Feb 07 |
jari |
345 |
|
2 |
26 Feb 07 |
jari |
346 |
return model.getLocusIndices(rows); |
2 |
26 Feb 07 |
jari |
347 |
} |
2 |
26 Feb 07 |
jari |
348 |
|
2 |
26 Feb 07 |
jari |
349 |
/** |
2 |
26 Feb 07 |
jari |
* Saves the selected loci |
2 |
26 Feb 07 |
jari |
351 |
*/ |
2 |
26 Feb 07 |
jari |
352 |
public void saveSelectedLoci() { |
2 |
26 Feb 07 |
jari |
353 |
lem.saveLocusList(getSelectedLocusIndices()); |
2 |
26 Feb 07 |
jari |
354 |
} |
2 |
26 Feb 07 |
jari |
355 |
|
2 |
26 Feb 07 |
jari |
356 |
/** |
2 |
26 Feb 07 |
jari |
* Saves the selected loci, spot level detail |
2 |
26 Feb 07 |
jari |
358 |
*/ |
2 |
26 Feb 07 |
jari |
359 |
public void saveSelectedSpotDetail() { |
2 |
26 Feb 07 |
jari |
360 |
lem.saveSpotsForLocusList(getSelectedLocusIndices()); |
2 |
26 Feb 07 |
jari |
361 |
} |
2 |
26 Feb 07 |
jari |
362 |
|
2 |
26 Feb 07 |
jari |
363 |
/** |
2 |
26 Feb 07 |
jari |
* Saves all loci in the list to file |
2 |
26 Feb 07 |
jari |
365 |
*/ |
2 |
26 Feb 07 |
jari |
366 |
public void saveAllLoci() { |
2 |
26 Feb 07 |
jari |
367 |
lem.saveLocusList(model.getAllLocusIndices()); |
2 |
26 Feb 07 |
jari |
368 |
} |
2 |
26 Feb 07 |
jari |
369 |
|
2 |
26 Feb 07 |
jari |
370 |
/** |
2 |
26 Feb 07 |
jari |
* Saves all loci in the list to file, spot level detail (replicate data) |
2 |
26 Feb 07 |
jari |
372 |
*/ |
2 |
26 Feb 07 |
jari |
373 |
public void saveAllSpotDetai() { |
2 |
26 Feb 07 |
jari |
374 |
lem.saveSpotsForLocusList(model.getAllLocusIndices()); |
2 |
26 Feb 07 |
jari |
375 |
} |
2 |
26 Feb 07 |
jari |
376 |
|
2 |
26 Feb 07 |
jari |
377 |
/** |
2 |
26 Feb 07 |
jari |
* Trigger a selection loci based on a location range |
2 |
26 Feb 07 |
jari |
379 |
*/ |
2 |
26 Feb 07 |
jari |
380 |
public void baseRangeSelection() { |
2 |
26 Feb 07 |
jari |
381 |
if(lem.selectBaseRange()) |
2 |
26 Feb 07 |
jari |
382 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
383 |
} |
2 |
26 Feb 07 |
jari |
384 |
|
2 |
26 Feb 07 |
jari |
385 |
/** |
2 |
26 Feb 07 |
jari |
* Toggles the display of locus graphs |
2 |
26 Feb 07 |
jari |
387 |
*/ |
2 |
26 Feb 07 |
jari |
388 |
private void toggleLocusGraph() { |
2 |
26 Feb 07 |
jari |
//toggle show graph |
2 |
26 Feb 07 |
jari |
390 |
showGraph = !this.showGraph; |
2 |
26 Feb 07 |
jari |
391 |
this.coloredLociBox.setEnabled(showGraph); |
2 |
26 Feb 07 |
jari |
392 |
|
2 |
26 Feb 07 |
jari |
393 |
int componentCount = mainPanel.getComponentCount(); |
2 |
26 Feb 07 |
jari |
//remove graph |
2 |
26 Feb 07 |
jari |
395 |
if(!showGraph) { |
2 |
26 Feb 07 |
jari |
396 |
this.hideGraphItem.setText("Show Locus Graph"); |
2 |
26 Feb 07 |
jari |
//remove table and graph |
2 |
26 Feb 07 |
jari |
398 |
mainpanel.remove(this.locusTablePanel); |
2 |
26 Feb 07 |
jari |
399 |
mainpanel.remove(this.locusGraph); |
2 |
26 Feb 07 |
jari |
400 |
|
2 |
26 Feb 07 |
jari |
//replace table in y pos = 2 |
2 |
26 Feb 07 |
jari |
402 |
mainpanel.add(locusTablePanel, new GridBagConstraints(0,2,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
403 |
} else { |
2 |
26 Feb 07 |
jari |
404 |
this.hideGraphItem.setText("Hide Locus Graph"); |
2 |
26 Feb 07 |
jari |
//remove table |
2 |
26 Feb 07 |
jari |
406 |
mainpanel.remove(this.locusTablePanel); |
2 |
26 Feb 07 |
jari |
407 |
|
2 |
26 Feb 07 |
jari |
408 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
409 |
|
2 |
26 Feb 07 |
jari |
//insert graph and table |
2 |
26 Feb 07 |
jari |
411 |
mainpanel.add(locusGraph, new GridBagConstraints(0,2,1,1,1,0,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
412 |
mainpanel.add(locusTablePanel, new GridBagConstraints(0,3,1,1,1,1,GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
413 |
} |
2 |
26 Feb 07 |
jari |
414 |
validate(); |
2 |
26 Feb 07 |
jari |
415 |
pack(); |
2 |
26 Feb 07 |
jari |
416 |
} |
2 |
26 Feb 07 |
jari |
417 |
|
2 |
26 Feb 07 |
jari |
418 |
|
2 |
26 Feb 07 |
jari |
419 |
/** |
2 |
26 Feb 07 |
jari |
420 |
* |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
422 |
* |
2 |
26 Feb 07 |
jari |
* Selection model for the locus table |
2 |
26 Feb 07 |
jari |
424 |
*/ |
2 |
26 Feb 07 |
jari |
425 |
public class SelectionTableModel extends AbstractTableModel { |
2 |
26 Feb 07 |
jari |
426 |
|
2 |
26 Feb 07 |
jari |
427 |
/** |
2 |
26 Feb 07 |
jari |
* Indices of selected orfs |
2 |
26 Feb 07 |
jari |
429 |
*/ |
2 |
26 Feb 07 |
jari |
430 |
private Vector indices; |
2 |
26 Feb 07 |
jari |
431 |
private Vector headerNames; |
2 |
26 Feb 07 |
jari |
432 |
private int [] sortedIndices; |
2 |
26 Feb 07 |
jari |
433 |
|
2 |
26 Feb 07 |
jari |
434 |
/** |
2 |
26 Feb 07 |
jari |
* Constructor |
2 |
26 Feb 07 |
jari |
* @param data Data Vector |
2 |
26 Feb 07 |
jari |
* @param header header names |
2 |
26 Feb 07 |
jari |
438 |
*/ |
2 |
26 Feb 07 |
jari |
439 |
public SelectionTableModel(Vector data, Vector header) { |
2 |
26 Feb 07 |
jari |
440 |
indices = data; |
2 |
26 Feb 07 |
jari |
441 |
this.headerNames = header; |
2 |
26 Feb 07 |
jari |
442 |
} |
2 |
26 Feb 07 |
jari |
443 |
|
2 |
26 Feb 07 |
jari |
444 |
/** |
2 |
26 Feb 07 |
jari |
* Returns the value at row and col |
2 |
26 Feb 07 |
jari |
446 |
*/ |
2 |
26 Feb 07 |
jari |
447 |
public Object getValueAt(int row, int col) { |
2 |
26 Feb 07 |
jari |
448 |
if(col == 0) |
2 |
26 Feb 07 |
jari |
449 |
return lem.getLocusID(getLocusIndex(row)); |
2 |
26 Feb 07 |
jari |
450 |
else if(col == 1) |
2 |
26 Feb 07 |
jari |
451 |
return new Integer(lem.getStart(getLocusIndex(row))); |
2 |
26 Feb 07 |
jari |
452 |
else if(col == 2) |
2 |
26 Feb 07 |
jari |
453 |
return new Integer(lem.getEnd(getLocusIndex(row))); |
2 |
26 Feb 07 |
jari |
454 |
else |
2 |
26 Feb 07 |
jari |
455 |
return new Integer(lem.getNumReplicates(getLocusIndex(row))); |
2 |
26 Feb 07 |
jari |
456 |
} |
2 |
26 Feb 07 |
jari |
457 |
|
2 |
26 Feb 07 |
jari |
458 |
/** |
2 |
26 Feb 07 |
jari |
* Returns a locus index corresponding to the given row |
2 |
26 Feb 07 |
jari |
* @param row row index |
2 |
26 Feb 07 |
jari |
* @return locus index |
2 |
26 Feb 07 |
jari |
462 |
*/ |
2 |
26 Feb 07 |
jari |
463 |
private int getLocusIndex(int row) { |
2 |
26 Feb 07 |
jari |
464 |
row = sortedIndices[row]; |
2 |
26 Feb 07 |
jari |
465 |
return ((Integer)(indices.get(row))).intValue(); |
2 |
26 Feb 07 |
jari |
466 |
} |
2 |
26 Feb 07 |
jari |
467 |
|
2 |
26 Feb 07 |
jari |
468 |
/** |
2 |
26 Feb 07 |
jari |
* Returns locus indices corresponding the indicated rows |
2 |
26 Feb 07 |
jari |
* @param rows row indices for which to pull locus indices |
2 |
26 Feb 07 |
jari |
* @return list of locus indices |
2 |
26 Feb 07 |
jari |
472 |
*/ |
2 |
26 Feb 07 |
jari |
473 |
public int [] getLocusIndices(int [] rows) { |
2 |
26 Feb 07 |
jari |
474 |
int [] locusIndices = new int[rows.length]; |
2 |
26 Feb 07 |
jari |
475 |
|
2 |
26 Feb 07 |
jari |
476 |
for(int i = 0; i < locusIndices.length; i++) { |
2 |
26 Feb 07 |
jari |
477 |
locusIndices[i] = getLocusIndex(rows[i]); |
2 |
26 Feb 07 |
jari |
478 |
} |
2 |
26 Feb 07 |
jari |
479 |
return locusIndices; |
2 |
26 Feb 07 |
jari |
480 |
} |
2 |
26 Feb 07 |
jari |
481 |
|
2 |
26 Feb 07 |
jari |
482 |
/** |
2 |
26 Feb 07 |
jari |
* Returns all locus indices in the list |
2 |
26 Feb 07 |
jari |
* @return all locus indices |
2 |
26 Feb 07 |
jari |
485 |
*/ |
2 |
26 Feb 07 |
jari |
486 |
public int [] getAllLocusIndices() { |
2 |
26 Feb 07 |
jari |
487 |
int [] locusIndices = new int[getRowCount()]; |
2 |
26 Feb 07 |
jari |
488 |
|
2 |
26 Feb 07 |
jari |
489 |
for(int i = 0; i < locusIndices.length; i++) { |
2 |
26 Feb 07 |
jari |
490 |
locusIndices[i] = getLocusIndex(i); |
2 |
26 Feb 07 |
jari |
491 |
} |
2 |
26 Feb 07 |
jari |
492 |
return locusIndices; |
2 |
26 Feb 07 |
jari |
493 |
} |
2 |
26 Feb 07 |
jari |
494 |
|
2 |
26 Feb 07 |
jari |
495 |
/** |
2 |
26 Feb 07 |
jari |
* Returns the column count of the table |
2 |
26 Feb 07 |
jari |
497 |
*/ |
2 |
26 Feb 07 |
jari |
498 |
public int getColumnCount() { |
2 |
26 Feb 07 |
jari |
499 |
return 4; |
2 |
26 Feb 07 |
jari |
500 |
} |
2 |
26 Feb 07 |
jari |
501 |
|
2 |
26 Feb 07 |
jari |
502 |
/** |
2 |
26 Feb 07 |
jari |
* Returns the number of rows in the table |
2 |
26 Feb 07 |
jari |
504 |
*/ |
2 |
26 Feb 07 |
jari |
505 |
public int getRowCount() { |
2 |
26 Feb 07 |
jari |
506 |
return indices.size(); |
2 |
26 Feb 07 |
jari |
507 |
} |
2 |
26 Feb 07 |
jari |
508 |
|
2 |
26 Feb 07 |
jari |
509 |
/** |
2 |
26 Feb 07 |
jari |
* Returns the column name specified by col |
2 |
26 Feb 07 |
jari |
511 |
*/ |
2 |
26 Feb 07 |
jari |
512 |
public String getColumnName(int col) { |
2 |
26 Feb 07 |
jari |
513 |
return (String)(headerNames.get(col)); |
2 |
26 Feb 07 |
jari |
514 |
} |
2 |
26 Feb 07 |
jari |
515 |
|
2 |
26 Feb 07 |
jari |
516 |
/** |
2 |
26 Feb 07 |
jari |
* updates the table when rows are inserted |
2 |
26 Feb 07 |
jari |
518 |
*/ |
2 |
26 Feb 07 |
jari |
519 |
public void fireRowInserted() { |
2 |
26 Feb 07 |
jari |
520 |
this.fireTableRowsInserted(indices.size()-1, indices.size()-1); |
2 |
26 Feb 07 |
jari |
521 |
} |
2 |
26 Feb 07 |
jari |
522 |
|
2 |
26 Feb 07 |
jari |
523 |
/** |
2 |
26 Feb 07 |
jari |
* updates the table when rows are deleted |
2 |
26 Feb 07 |
jari |
525 |
*/ |
2 |
26 Feb 07 |
jari |
526 |
public void fireRowDeleted() { |
2 |
26 Feb 07 |
jari |
527 |
if(indices.size() > 0) |
2 |
26 Feb 07 |
jari |
//this.fireTableRowsDeleted(row, row); |
2 |
26 Feb 07 |
jari |
529 |
this.fireTableRowsDeleted(indices.size()-1, indices.size()-1); |
2 |
26 Feb 07 |
jari |
530 |
else |
2 |
26 Feb 07 |
jari |
531 |
this.fireTableRowsDeleted(-1, -1); |
2 |
26 Feb 07 |
jari |
532 |
} |
2 |
26 Feb 07 |
jari |
533 |
|
2 |
26 Feb 07 |
jari |
534 |
/** |
2 |
26 Feb 07 |
jari |
* Removes specified rows |
2 |
26 Feb 07 |
jari |
* @param rows table rows to remove |
2 |
26 Feb 07 |
jari |
537 |
*/ |
2 |
26 Feb 07 |
jari |
538 |
public void removeSelectedRows(int [] rows) { |
2 |
26 Feb 07 |
jari |
539 |
Object [] objs = new Object[rows.length]; |
2 |
26 Feb 07 |
jari |
540 |
|
2 |
26 Feb 07 |
jari |
541 |
for(int i = 0; i < rows.length; i++) { |
2 |
26 Feb 07 |
jari |
542 |
objs[i] = indices.get(sortedIndices[rows[i]]); |
2 |
26 Feb 07 |
jari |
543 |
} |
2 |
26 Feb 07 |
jari |
544 |
|
2 |
26 Feb 07 |
jari |
545 |
for(int i = 0; i < rows.length; i++) { |
2 |
26 Feb 07 |
jari |
//let lem mod shared structure, and selected boolean |
2 |
26 Feb 07 |
jari |
547 |
lem.toggleSelectedLocus( ((Integer)objs[i]).intValue() ); |
2 |
26 Feb 07 |
jari |
548 |
fireRowDeleted(); |
2 |
26 Feb 07 |
jari |
549 |
} |
2 |
26 Feb 07 |
jari |
550 |
sortByMinLocation(); |
2 |
26 Feb 07 |
jari |
551 |
} |
2 |
26 Feb 07 |
jari |
552 |
|
2 |
26 Feb 07 |
jari |
553 |
/** |
2 |
26 Feb 07 |
jari |
* Remove all rows |
2 |
26 Feb 07 |
jari |
555 |
*/ |
2 |
26 Feb 07 |
jari |
556 |
public void removeAllRows() { |
2 |
26 Feb 07 |
jari |
557 |
int [] rows = new int[indices.size()]; |
2 |
26 Feb 07 |
jari |
558 |
for(int i = 0; i < rows.length; i++) |
2 |
26 Feb 07 |
jari |
559 |
rows[i] = i; |
2 |
26 Feb 07 |
jari |
560 |
removeSelectedRows(rows); |
2 |
26 Feb 07 |
jari |
561 |
sortByMinLocation(); |
2 |
26 Feb 07 |
jari |
562 |
} |
2 |
26 Feb 07 |
jari |
563 |
|
2 |
26 Feb 07 |
jari |
564 |
/** |
2 |
26 Feb 07 |
jari |
* sorts locus rows by the smaller coordinate of each locus |
2 |
26 Feb 07 |
jari |
566 |
* |
2 |
26 Feb 07 |
jari |
567 |
*/ |
2 |
26 Feb 07 |
jari |
568 |
public void sortByMinLocation() { |
2 |
26 Feb 07 |
jari |
569 |
|
2 |
26 Feb 07 |
jari |
570 |
float [] minCoord = new float[this.getRowCount()]; |
2 |
26 Feb 07 |
jari |
571 |
|
2 |
26 Feb 07 |
jari |
572 |
if(minCoord.length == 0) { |
2 |
26 Feb 07 |
jari |
573 |
sortedIndices = new int[0]; |
2 |
26 Feb 07 |
jari |
574 |
return; |
2 |
26 Feb 07 |
jari |
575 |
} |
2 |
26 Feb 07 |
jari |
576 |
|
2 |
26 Feb 07 |
jari |
577 |
for(int row = 0; row < minCoord.length; row++) |
2 |
26 Feb 07 |
jari |
578 |
minCoord[row]= (float)Math.min(lem.getStart(((Integer)indices.get(row)).intValue()),lem.getEnd(((Integer)indices.get(row)).intValue())); |
2 |
26 Feb 07 |
jari |
579 |
|
2 |
26 Feb 07 |
jari |
580 |
QSort qsort = new QSort(minCoord); |
2 |
26 Feb 07 |
jari |
581 |
sortedIndices = qsort.getOrigIndx(); |
2 |
26 Feb 07 |
jari |
582 |
} |
2 |
26 Feb 07 |
jari |
583 |
} |
2 |
26 Feb 07 |
jari |
584 |
|
2 |
26 Feb 07 |
jari |
585 |
/** |
2 |
26 Feb 07 |
jari |
586 |
* |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
588 |
* |
2 |
26 Feb 07 |
jari |
* LocusGraph zero or more graphs present in the table |
2 |
26 Feb 07 |
jari |
* Two main modes exist, 1.) Monochrom overlay mode and |
2 |
26 Feb 07 |
jari |
* 2.) Multicolored display with key to associate locus with graph line |
2 |
26 Feb 07 |
jari |
592 |
*/ |
2 |
26 Feb 07 |
jari |
593 |
private class LocusGraph extends JPanel { |
2 |
26 Feb 07 |
jari |
594 |
|
2 |
26 Feb 07 |
jari |
595 |
private GraphViewer graph; |
2 |
26 Feb 07 |
jari |
596 |
private Vector lineColorVector; |
2 |
26 Feb 07 |
jari |
597 |
private int numberOfLineColors; |
2 |
26 Feb 07 |
jari |
598 |
private boolean multiColored; |
2 |
26 Feb 07 |
jari |
599 |
private KeyPanel key; |
2 |
26 Feb 07 |
jari |
600 |
|
2 |
26 Feb 07 |
jari |
601 |
private JScrollPane keyPane; |
2 |
26 Feb 07 |
jari |
602 |
|
2 |
26 Feb 07 |
jari |
603 |
/** |
2 |
26 Feb 07 |
jari |
* Constructs a LocusGraph object |
2 |
26 Feb 07 |
jari |
605 |
*/ |
2 |
26 Feb 07 |
jari |
606 |
public LocusGraph() { |
2 |
26 Feb 07 |
jari |
607 |
setLayout(new GridBagLayout()); |
2 |
26 Feb 07 |
jari |
608 |
setBackground(Color.white); |
2 |
26 Feb 07 |
jari |
609 |
setBorder(BorderFactory.createLineBorder(Color.black)); |
2 |
26 Feb 07 |
jari |
610 |
multiColored = false; |
2 |
26 Feb 07 |
jari |
611 |
|
2 |
26 Feb 07 |
jari |
612 |
lineColorVector = new Vector(); |
2 |
26 Feb 07 |
jari |
613 |
lineColorVector.add(Color.magenta); |
2 |
26 Feb 07 |
jari |
614 |
lineColorVector.add(new Color(0, 143, 0)); |
2 |
26 Feb 07 |
jari |
615 |
lineColorVector.add(Color.cyan); |
2 |
26 Feb 07 |
jari |
616 |
lineColorVector.add(Color.blue); |
2 |
26 Feb 07 |
jari |
617 |
lineColorVector.add(Color.red); |
2 |
26 Feb 07 |
jari |
618 |
lineColorVector.add(Color.black); |
2 |
26 Feb 07 |
jari |
619 |
lineColorVector.add(Color.pink); |
2 |
26 Feb 07 |
jari |
620 |
lineColorVector.add(Color.gray); |
2 |
26 Feb 07 |
jari |
621 |
lineColorVector.add(Color.green); |
2 |
26 Feb 07 |
jari |
622 |
numberOfLineColors = lineColorVector.size(); |
2 |
26 Feb 07 |
jari |
623 |
|
2 |
26 Feb 07 |
jari |
624 |
graph = createGraphViewer(); |
2 |
26 Feb 07 |
jari |
625 |
|
2 |
26 Feb 07 |
jari |
626 |
add(graph, new GridBagConstraints(0,0,1,1,1,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
627 |
|
2 |
26 Feb 07 |
jari |
628 |
key = new KeyPanel(); |
2 |
26 Feb 07 |
jari |
629 |
keyPane = new JScrollPane(key); |
2 |
26 Feb 07 |
jari |
630 |
|
2 |
26 Feb 07 |
jari |
631 |
Dimension dim = new Dimension(180, 150); |
2 |
26 Feb 07 |
jari |
632 |
keyPane.setPreferredSize(dim); |
2 |
26 Feb 07 |
jari |
633 |
keyPane.setSize(dim); |
2 |
26 Feb 07 |
jari |
634 |
} |
2 |
26 Feb 07 |
jari |
635 |
|
2 |
26 Feb 07 |
jari |
636 |
/** |
2 |
26 Feb 07 |
jari |
* Constructs a new graph viewer based current selection |
2 |
26 Feb 07 |
jari |
638 |
*/ |
2 |
26 Feb 07 |
jari |
639 |
public void createNewGraph() { |
2 |
26 Feb 07 |
jari |
640 |
GraphViewer newGraph = createGraphViewer(); |
2 |
26 Feb 07 |
jari |
641 |
|
2 |
26 Feb 07 |
jari |
//replace component |
2 |
26 Feb 07 |
jari |
643 |
this.removeAll(); |
2 |
26 Feb 07 |
jari |
644 |
|
2 |
26 Feb 07 |
jari |
645 |
if(multiColored) { |
2 |
26 Feb 07 |
jari |
//share space |
2 |
26 Feb 07 |
jari |
647 |
key.updateSize(); |
2 |
26 Feb 07 |
jari |
648 |
add(newGraph, new GridBagConstraints(0,0,1,1,0.7,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
649 |
add(keyPane, new GridBagConstraints(1,0,1,1,0.3,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
650 |
} else { |
2 |
26 Feb 07 |
jari |
651 |
add(newGraph, new GridBagConstraints(0,0,1,1,1,1, GridBagConstraints.CENTER, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0)); |
2 |
26 Feb 07 |
jari |
652 |
} |
2 |
26 Feb 07 |
jari |
653 |
|
2 |
26 Feb 07 |
jari |
654 |
graph = newGraph; |
2 |
26 Feb 07 |
jari |
655 |
validate(); |
2 |
26 Feb 07 |
jari |
656 |
} |
2 |
26 Feb 07 |
jari |
657 |
|
2 |
26 Feb 07 |
jari |
658 |
/** |
2 |
26 Feb 07 |
jari |
* Refreshes the display, important after locus addition |
2 |
26 Feb 07 |
jari |
660 |
*/ |
2 |
26 Feb 07 |
jari |
661 |
public void refresh() { |
2 |
26 Feb 07 |
jari |
662 |
createNewGraph(); |
2 |
26 Feb 07 |
jari |
663 |
key.updateSize(); |
2 |
26 Feb 07 |
jari |
664 |
} |
2 |
26 Feb 07 |
jari |
665 |
|
2 |
26 Feb 07 |
jari |
666 |
/** |
2 |
26 Feb 07 |
jari |
* Toggles the monochrome/multi-colored option |
2 |
26 Feb 07 |
jari |
668 |
*/ |
2 |
26 Feb 07 |
jari |
669 |
public void toggleMultiColored() { |
2 |
26 Feb 07 |
jari |
670 |
multiColored = !multiColored; |
2 |
26 Feb 07 |
jari |
671 |
refresh(); |
2 |
26 Feb 07 |
jari |
672 |
} |
2 |
26 Feb 07 |
jari |
673 |
|
2 |
26 Feb 07 |
jari |
674 |
/** |
2 |
26 Feb 07 |
jari |
* Returns the line color for the specified table row index |
2 |
26 Feb 07 |
jari |
* @param index row index |
2 |
26 Feb 07 |
jari |
* @return line color |
2 |
26 Feb 07 |
jari |
678 |
*/ |
2 |
26 Feb 07 |
jari |
679 |
public Color getLineColor(int index) { |
2 |
26 Feb 07 |
jari |
680 |
return (Color)(lineColorVector.get(index%numberOfLineColors)); |
2 |
26 Feb 07 |
jari |
681 |
} |
2 |
26 Feb 07 |
jari |
682 |
|
2 |
26 Feb 07 |
jari |
683 |
/** |
2 |
26 Feb 07 |
jari |
* Constructs a new <code>GraphViewer</code> |
2 |
26 Feb 07 |
jari |
* @return new GraphViewer |
2 |
26 Feb 07 |
jari |
686 |
*/ |
2 |
26 Feb 07 |
jari |
687 |
private GraphViewer createGraphViewer() { |
2 |
26 Feb 07 |
jari |
688 |
|
2 |
26 Feb 07 |
jari |
689 |
int locusIndex; |
2 |
26 Feb 07 |
jari |
690 |
String locusName; |
2 |
26 Feb 07 |
jari |
691 |
float [] meanValues; |
2 |
26 Feb 07 |
jari |
692 |
Color lineColor = Color.magenta; |
2 |
26 Feb 07 |
jari |
693 |
String [] names = new String[numSamples]; |
2 |
26 Feb 07 |
jari |
694 |
int rows [] = table.getSelectedRows(); |
2 |
26 Feb 07 |
jari |
695 |
int [] indices = model.getLocusIndices(table.getSelectedRows()); |
2 |
26 Feb 07 |
jari |
696 |
float [] maxAndMin = getMaxAndMin(meanMatrix, indices); |
2 |
26 Feb 07 |
jari |
697 |
|
2 |
26 Feb 07 |
jari |
//constant avoids max = min ==> upperY == lowerY, for flat genes |
2 |
26 Feb 07 |
jari |
699 |
int upperY = (int)Math.ceil(maxAndMin[0]+0.001f); |
2 |
26 Feb 07 |
jari |
700 |
int lowerY = (int)Math.floor(maxAndMin[1]-0.001f); |
2 |
26 Feb 07 |
jari |
701 |
|
2 |
26 Feb 07 |
jari |
702 |
GraphViewer graph = new GraphViewer(null, 0, 425, 0, 300, 0, numSamples, lowerY, upperY, 40, 40, 40, 40, "Mean Locus Expression", "Sample Number", "Log\u2082(Cy5 / Cy3)"); |
2 |
26 Feb 07 |
jari |
703 |
graph.setXAxisValue(lowerY); |
2 |
26 Feb 07 |
jari |
704 |
graph.setShowCoordinates(true); |
2 |
26 Feb 07 |
jari |
705 |
|
2 |
26 Feb 07 |
jari |
706 |
Dimension size = new Dimension(250, 250); |
2 |
26 Feb 07 |
jari |
707 |
|
2 |
26 Feb 07 |
jari |
708 |
graph.setPreferredSize(size); |
2 |
26 Feb 07 |
jari |
709 |
graph.setSize(size); |
2 |
26 Feb 07 |
jari |
710 |
|
2 |
26 Feb 07 |
jari |
711 |
GraphTick tick = new GraphTick(0, 8, Color.black, GC.HORIZONTAL, GC.C, "", Color.black); |
2 |
26 Feb 07 |
jari |
712 |
|
2 |
26 Feb 07 |
jari |
713 |
graph.addGraphElement(tick); |
2 |
26 Feb 07 |
jari |
714 |
|
2 |
26 Feb 07 |
jari |
//zero line |
2 |
26 Feb 07 |
jari |
716 |
graph.addGraphElement(new GraphLine(0, 0, numSamples, 0, Color.black)); |
2 |
26 Feb 07 |
jari |
717 |
|
2 |
26 Feb 07 |
jari |
//ticks, and last tick |
2 |
26 Feb 07 |
jari |
719 |
for(int i = 0; i < numSamples-1; i++) { |
2 |
26 Feb 07 |
jari |
720 |
tick = new GraphTick(i+1, 8, Color.black, GC.HORIZONTAL, GC.C, String.valueOf(i+1), Color.black); |
2 |
26 Feb 07 |
jari |
721 |
graph.addGraphElement(tick); |
2 |
26 Feb 07 |
jari |
722 |
} |
2 |
26 Feb 07 |
jari |
723 |
tick = new GraphTick(numSamples, 8, Color.black, GC.HORIZONTAL, GC.C, String.valueOf(numSamples), Color.black); |
2 |
26 Feb 07 |
jari |
724 |
graph.addGraphElement(tick); |
2 |
26 Feb 07 |
jari |
725 |
|
2 |
26 Feb 07 |
jari |
726 |
|
2 |
26 Feb 07 |
jari |
727 |
for(int locus = 0; locus < indices.length; locus++) { |
2 |
26 Feb 07 |
jari |
728 |
locusIndex = indices[locus]; |
2 |
26 Feb 07 |
jari |
729 |
lineColor = (Color)(lineColorVector.get(locus%numberOfLineColors)); |
2 |
26 Feb 07 |
jari |
730 |
for(int i = 0; i < numSamples-1; i++) { |
2 |
26 Feb 07 |
jari |
731 |
|
2 |
26 Feb 07 |
jari |
732 |
if(!Float.isNaN(meanMatrix.A[indices[locus]][i]) && !Float.isNaN(meanMatrix.A[indices[locus]][i+1])) { |
2 |
26 Feb 07 |
jari |
733 |
if(multiColored) |
2 |
26 Feb 07 |
jari |
734 |
graph.addGraphElement(new GraphLine(i+1, meanMatrix.A[indices[locus]][i], i+2, meanMatrix.A[indices[locus]][i+1], lineColor)); |
2 |
26 Feb 07 |
jari |
735 |
else |
2 |
26 Feb 07 |
jari |
736 |
graph.addGraphElement(new GraphLine(i+1, meanMatrix.A[indices[locus]][i], i+2, meanMatrix.A[indices[locus]][i+1], Color.magenta)); |
2 |
26 Feb 07 |
jari |
737 |
} |
2 |
26 Feb 07 |
jari |
738 |
|
2 |
26 Feb 07 |
jari |
739 |
if(!Float.isNaN(meanMatrix.A[indices[locus]][i])) |
2 |
26 Feb 07 |
jari |
740 |
graph.addGraphElement(new GraphPoint(i+1, meanMatrix.A[indices[locus]][i], Color.blue, 5)); |
2 |
26 Feb 07 |
jari |
741 |
|
2 |
26 Feb 07 |
jari |
742 |
} |
2 |
26 Feb 07 |
jari |
743 |
|
2 |
26 Feb 07 |
jari |
744 |
if(!Float.isNaN(meanMatrix.A[indices[locus]][numSamples-1])) |
2 |
26 Feb 07 |
jari |
745 |
graph.addGraphElement(new GraphPoint(numSamples, meanMatrix.A[indices[locus]][numSamples-1], Color.blue, 5)); |
2 |
26 Feb 07 |
jari |
746 |
|
2 |
26 Feb 07 |
jari |
747 |
} |
2 |
26 Feb 07 |
jari |
748 |
|
2 |
26 Feb 07 |
jari |
749 |
for (int i = lowerY; i <= upperY; i++) { |
2 |
26 Feb 07 |
jari |
750 |
if (i == 0) |
2 |
26 Feb 07 |
jari |
751 |
tick = new GraphTick(i, 8, Color.black, GC.VERTICAL, GC.C, "0", Color.black); |
2 |
26 Feb 07 |
jari |
752 |
else |
2 |
26 Feb 07 |
jari |
753 |
tick = new GraphTick(i, 8, Color.black, GC.VERTICAL, GC.C, "" + i, Color.black); |
2 |
26 Feb 07 |
jari |
754 |
graph.addGraphElement(tick); |
2 |
26 Feb 07 |
jari |
755 |
} |
2 |
26 Feb 07 |
jari |
756 |
|
2 |
26 Feb 07 |
jari |
757 |
return graph; |
2 |
26 Feb 07 |
jari |
758 |
} |
2 |
26 Feb 07 |
jari |
759 |
|
2 |
26 Feb 07 |
jari |
760 |
/** |
2 |
26 Feb 07 |
jari |
* Returns the min and max values, in that order in a two member float array |
2 |
26 Feb 07 |
jari |
* for the float matrix and indicated row indices |
2 |
26 Feb 07 |
jari |
* @param meanMatrix input matrix |
2 |
26 Feb 07 |
jari |
* @param indices row indices |
2 |
26 Feb 07 |
jari |
* @return float array with min value and max value |
2 |
26 Feb 07 |
jari |
766 |
*/ |
2 |
26 Feb 07 |
jari |
767 |
private float [] getMaxAndMin(FloatMatrix meanMatrix, int [] indices) { |
2 |
26 Feb 07 |
jari |
768 |
float [] maxAndMin = new float[2]; |
2 |
26 Feb 07 |
jari |
769 |
maxAndMin[0] = Float.NEGATIVE_INFINITY; |
2 |
26 Feb 07 |
jari |
770 |
maxAndMin[1] = Float.POSITIVE_INFINITY; |
2 |
26 Feb 07 |
jari |
771 |
int index; |
2 |
26 Feb 07 |
jari |
772 |
|
2 |
26 Feb 07 |
jari |
773 |
for(int i = 0; i < indices.length; i++) { |
2 |
26 Feb 07 |
jari |
774 |
index = indices[i]; |
2 |
26 Feb 07 |
jari |
775 |
for(int j = 0; j < meanMatrix.A[index].length; j++) { |
2 |
26 Feb 07 |
jari |
776 |
if(!Float.isNaN(meanMatrix.A[index][j])) { |
2 |
26 Feb 07 |
jari |
777 |
maxAndMin[0] = Math.max(maxAndMin[0], meanMatrix.A[index][j]); |
2 |
26 Feb 07 |
jari |
778 |
maxAndMin[1] = Math.min(maxAndMin[1], meanMatrix.A[index][j]); |
2 |
26 Feb 07 |
jari |
779 |
} |
2 |
26 Feb 07 |
jari |
780 |
} |
2 |
26 Feb 07 |
jari |
781 |
} |
2 |
26 Feb 07 |
jari |
782 |
|
2 |
26 Feb 07 |
jari |
783 |
if(maxAndMin[0] == Float.NEGATIVE_INFINITY) |
2 |
26 Feb 07 |
jari |
784 |
maxAndMin[0] = 0; |
2 |
26 Feb 07 |
jari |
785 |
if(maxAndMin[1] == Float.POSITIVE_INFINITY) |
2 |
26 Feb 07 |
jari |
786 |
maxAndMin[1] = 0; |
2 |
26 Feb 07 |
jari |
787 |
|
2 |
26 Feb 07 |
jari |
788 |
return maxAndMin; |
2 |
26 Feb 07 |
jari |
789 |
} |
2 |
26 Feb 07 |
jari |
790 |
|
2 |
26 Feb 07 |
jari |
791 |
/** |
2 |
26 Feb 07 |
jari |
792 |
* |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
794 |
* |
2 |
26 Feb 07 |
jari |
* The KeyPanel displays the color scheme for locus lines in the display |
2 |
26 Feb 07 |
jari |
* while in the multicolor display mode |
2 |
26 Feb 07 |
jari |
797 |
*/ |
2 |
26 Feb 07 |
jari |
798 |
public class KeyPanel extends JPanel { |
2 |
26 Feb 07 |
jari |
799 |
private JScrollPane pane; |
2 |
26 Feb 07 |
jari |
800 |
private int maxIDWidth; |
2 |
26 Feb 07 |
jari |
801 |
|
2 |
26 Feb 07 |
jari |
802 |
/** |
2 |
26 Feb 07 |
jari |
* Constructs a new key panel |
2 |
26 Feb 07 |
jari |
804 |
*/ |
2 |
26 Feb 07 |
jari |
805 |
public KeyPanel() { |
2 |
26 Feb 07 |
jari |
806 |
super(); |
2 |
26 Feb 07 |
jari |
807 |
setBackground(Color.white); |
2 |
26 Feb 07 |
jari |
808 |
} |
2 |
26 Feb 07 |
jari |
809 |
|
2 |
26 Feb 07 |
jari |
810 |
/** |
2 |
26 Feb 07 |
jari |
* Updates the key panel size, important after locus list changes |
2 |
26 Feb 07 |
jari |
812 |
*/ |
2 |
26 Feb 07 |
jari |
813 |
public void updateSize() { |
2 |
26 Feb 07 |
jari |
814 |
int [] indices = table.getSelectedRows(); |
2 |
26 Feb 07 |
jari |
815 |
|
2 |
26 Feb 07 |
jari |
816 |
FontMetrics fm = getFontMetrics(getFont()); |
2 |
26 Feb 07 |
jari |
817 |
if(fm == null) { |
2 |
26 Feb 07 |
jari |
818 |
return; |
2 |
26 Feb 07 |
jari |
819 |
} |
2 |
26 Feb 07 |
jari |
820 |
|
2 |
26 Feb 07 |
jari |
821 |
int w; |
2 |
26 Feb 07 |
jari |
822 |
int h = (int)(fm.getHeight() * 1.5) * indices.length; |
2 |
26 Feb 07 |
jari |
823 |
h = Math.max(locusGraph.getHeight(), h); |
2 |
26 Feb 07 |
jari |
824 |
|
2 |
26 Feb 07 |
jari |
825 |
int stringWidth = 0; |
2 |
26 Feb 07 |
jari |
826 |
|
2 |
26 Feb 07 |
jari |
827 |
for(int i = 0; i < indices.length; i++) { |
2 |
26 Feb 07 |
jari |
828 |
stringWidth = Math.max(stringWidth, fm.stringWidth((String)(model.getValueAt(indices[i], 0)))); |
2 |
26 Feb 07 |
jari |
829 |
} |
2 |
26 Feb 07 |
jari |
830 |
|
2 |
26 Feb 07 |
jari |
831 |
w = stringWidth + 75; |
2 |
26 Feb 07 |
jari |
832 |
|
2 |
26 Feb 07 |
jari |
833 |
setPreferredSize(new Dimension(w,h)); |
2 |
26 Feb 07 |
jari |
834 |
setSize(w,h); |
2 |
26 Feb 07 |
jari |
835 |
} |
2 |
26 Feb 07 |
jari |
836 |
|
2 |
26 Feb 07 |
jari |
837 |
/** |
2 |
26 Feb 07 |
jari |
* Paints the panel information, line previews, to the specified Graphics object |
2 |
26 Feb 07 |
jari |
839 |
*/ |
2 |
26 Feb 07 |
jari |
840 |
public void paint(Graphics g) { |
2 |
26 Feb 07 |
jari |
841 |
super.paint(g); |
2 |
26 Feb 07 |
jari |
842 |
FontMetrics fm = g.getFontMetrics(); |
2 |
26 Feb 07 |
jari |
843 |
int h = (int)(fm.getHeight() * 1.5); |
2 |
26 Feb 07 |
jari |
844 |
int offset = h; |
2 |
26 Feb 07 |
jari |
845 |
String id; |
2 |
26 Feb 07 |
jari |
846 |
|
2 |
26 Feb 07 |
jari |
847 |
int [] indices = table.getSelectedRows(); |
2 |
26 Feb 07 |
jari |
848 |
|
2 |
26 Feb 07 |
jari |
849 |
for(int i = 0; i < indices.length; i++) { |
2 |
26 Feb 07 |
jari |
//id = (String)(model.getValueAt(indices[i], 0)); |
2 |
26 Feb 07 |
jari |
851 |
id = (String)table.getValueAt(indices[i], 0); |
2 |
26 Feb 07 |
jari |
852 |
|
2 |
26 Feb 07 |
jari |
853 |
g.setColor(getLineColor(i)); |
2 |
26 Feb 07 |
jari |
854 |
g.drawLine(7, offset-3, 55, offset-3); |
2 |
26 Feb 07 |
jari |
855 |
|
2 |
26 Feb 07 |
jari |
856 |
g.setColor(Color.blue); |
2 |
26 Feb 07 |
jari |
857 |
g.fillRect(5, offset-5, 5, 5); |
2 |
26 Feb 07 |
jari |
858 |
g.fillRect(55, offset-5, 5, 5); |
2 |
26 Feb 07 |
jari |
859 |
|
2 |
26 Feb 07 |
jari |
860 |
g.setColor(Color.black); |
2 |
26 Feb 07 |
jari |
861 |
g.drawString(id, 75, offset); |
2 |
26 Feb 07 |
jari |
862 |
|
2 |
26 Feb 07 |
jari |
863 |
offset += h; |
2 |
26 Feb 07 |
jari |
864 |
} |
2 |
26 Feb 07 |
jari |
865 |
} |
2 |
26 Feb 07 |
jari |
866 |
|
2 |
26 Feb 07 |
jari |
867 |
|
2 |
26 Feb 07 |
jari |
868 |
} |
2 |
26 Feb 07 |
jari |
869 |
|
2 |
26 Feb 07 |
jari |
870 |
} |
2 |
26 Feb 07 |
jari |
871 |
|
2 |
26 Feb 07 |
jari |
872 |
|
2 |
26 Feb 07 |
jari |
873 |
/** |
2 |
26 Feb 07 |
jari |
* @author braisted |
2 |
26 Feb 07 |
jari |
875 |
* |
2 |
26 Feb 07 |
jari |
* Listener listens to button and menu <code>ActionEvent</code>s and delegates |
2 |
26 Feb 07 |
jari |
* event handling. |
2 |
26 Feb 07 |
jari |
878 |
*/ |
2 |
26 Feb 07 |
jari |
879 |
private class Listener extends WindowAdapter implements ActionListener, MouseListener, KeyListener |
2 |
26 Feb 07 |
jari |
880 |
{ |
2 |
26 Feb 07 |
jari |
881 |
|
2 |
26 Feb 07 |
jari |
882 |
public void actionPerformed(ActionEvent ae) { |
2 |
26 Feb 07 |
jari |
883 |
String command = ae.getActionCommand(); |
2 |
26 Feb 07 |
jari |
884 |
if(command.equals("ok-command")) { |
2 |
26 Feb 07 |
jari |
885 |
dispose();; |
2 |
26 Feb 07 |
jari |
886 |
} else if(command.equals("cancel-command")) { |
2 |
26 Feb 07 |
jari |
//prompt to check then clear list |
2 |
26 Feb 07 |
jari |
888 |
if(clearAll()) { |
2 |
26 Feb 07 |
jari |
889 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
890 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
891 |
} |
2 |
26 Feb 07 |
jari |
892 |
} else if(command.equals("reset-command")) { |
2 |
26 Feb 07 |
jari |
893 |
removeSelectedLoci(); |
2 |
26 Feb 07 |
jari |
894 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
895 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
896 |
} else if(command.equals("info-command")) { |
2 |
26 Feb 07 |
jari |
897 |
|
2 |
26 Feb 07 |
jari |
898 |
} else if(command.equals("save-selected-spot-detail-command")) { |
2 |
26 Feb 07 |
jari |
899 |
saveSelectedSpotDetail(); |
2 |
26 Feb 07 |
jari |
900 |
} else if(command.equals("save-selected-loci-detail-command")) { |
2 |
26 Feb 07 |
jari |
901 |
saveSelectedLoci(); |
2 |
26 Feb 07 |
jari |
902 |
} else if(command.equals("save-all-loci-detail-command")) { |
2 |
26 Feb 07 |
jari |
903 |
saveAllLoci(); |
2 |
26 Feb 07 |
jari |
904 |
} else if(command.equals("save-all-spot-detail-command")) { |
2 |
26 Feb 07 |
jari |
905 |
saveAllSpotDetai(); |
2 |
26 Feb 07 |
jari |
906 |
} else if(command.equals("loci-list-selection-command")) { |
2 |
26 Feb 07 |
jari |
907 |
|
2 |
26 Feb 07 |
jari |
908 |
} else if(command.equals("base-range-selection-command")) { |
2 |
26 Feb 07 |
jari |
909 |
baseRangeSelection(); |
2 |
26 Feb 07 |
jari |
910 |
} else if(command.equals("toggle-multi-colored-graphs")) { |
2 |
26 Feb 07 |
jari |
911 |
locusGraph.toggleMultiColored(); |
2 |
26 Feb 07 |
jari |
912 |
} else if(command.equals("toggle-hide-graph-command")) { |
2 |
26 Feb 07 |
jari |
913 |
toggleLocusGraph(); |
2 |
26 Feb 07 |
jari |
914 |
} |
2 |
26 Feb 07 |
jari |
915 |
} |
2 |
26 Feb 07 |
jari |
916 |
|
2 |
26 Feb 07 |
jari |
917 |
public void mouseClicked(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
918 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
919 |
} |
2 |
26 Feb 07 |
jari |
920 |
|
2 |
26 Feb 07 |
jari |
921 |
|
2 |
26 Feb 07 |
jari |
922 |
public void mouseEntered(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
923 |
} |
2 |
26 Feb 07 |
jari |
924 |
|
2 |
26 Feb 07 |
jari |
925 |
|
2 |
26 Feb 07 |
jari |
926 |
public void mouseExited(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
927 |
} |
2 |
26 Feb 07 |
jari |
928 |
|
2 |
26 Feb 07 |
jari |
929 |
|
2 |
26 Feb 07 |
jari |
930 |
public void mousePressed(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
931 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
932 |
} |
2 |
26 Feb 07 |
jari |
933 |
|
2 |
26 Feb 07 |
jari |
934 |
|
2 |
26 Feb 07 |
jari |
935 |
public void mouseReleased(MouseEvent e) { |
2 |
26 Feb 07 |
jari |
936 |
validateMenuItemsAndButtons(); |
2 |
26 Feb 07 |
jari |
937 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
938 |
} |
2 |
26 Feb 07 |
jari |
939 |
|
2 |
26 Feb 07 |
jari |
940 |
public void keyPressed(KeyEvent e) { |
2 |
26 Feb 07 |
jari |
941 |
|
2 |
26 Feb 07 |
jari |
942 |
} |
2 |
26 Feb 07 |
jari |
943 |
|
2 |
26 Feb 07 |
jari |
944 |
|
2 |
26 Feb 07 |
jari |
945 |
public void keyReleased(KeyEvent e) { |
2 |
26 Feb 07 |
jari |
946 |
if(e.getKeyCode() == KeyEvent.VK_UP || e.getKeyCode() == KeyEvent.VK_DOWN) { |
2 |
26 Feb 07 |
jari |
947 |
locusGraph.refresh(); |
2 |
26 Feb 07 |
jari |
948 |
} |
2 |
26 Feb 07 |
jari |
949 |
} |
2 |
26 Feb 07 |
jari |
950 |
|
2 |
26 Feb 07 |
jari |
951 |
public void keyTyped(KeyEvent e) { |
2 |
26 Feb 07 |
jari |
952 |
|
2 |
26 Feb 07 |
jari |
953 |
} |
2 |
26 Feb 07 |
jari |
954 |
|
2 |
26 Feb 07 |
jari |
955 |
} |
2 |
26 Feb 07 |
jari |
956 |
|
2 |
26 Feb 07 |
jari |
957 |
} |