Jalview Imported Sources
[jalview.git] / src / jalview / gui / AlignFrame.java
1 /********************\r
2  * 2004 Jalview Reengineered\r
3  * Barton Group\r
4  * Dundee University\r
5  *\r
6  * AM Waterhouse\r
7  *******************/\r
8 \r
9 \r
10 \r
11 \r
12 package jalview.gui;\r
13 \r
14 import jalview.jbgui.GAlignFrame;\r
15 import jalview.schemes.*;\r
16 import jalview.datamodel.*;\r
17 import jalview.analysis.*;\r
18 import jalview.io.*;\r
19 import java.awt.event.*;\r
20 import java.awt.*;\r
21 import javax.swing.*;\r
22 \r
23 public class AlignFrame extends GAlignFrame\r
24 {\r
25   AlignmentPanel alignPanel;\r
26   AlignViewport viewport;\r
27   public AlignFrame(AlignmentI al)\r
28   {\r
29     super();\r
30     viewport = new AlignViewport(al,true,true,true,false);\r
31     alignPanel = new AlignmentPanel(this, viewport);\r
32     getContentPane().add(alignPanel, java.awt.BorderLayout.CENTER);\r
33     fontNameMenuItem.setText(viewport.getFont().getName());\r
34     fontSizeMenuItem.setText(viewport.getFont().getSize()+"");\r
35   }\r
36 \r
37   protected void saveAs_actionPerformed(ActionEvent e)\r
38   {\r
39     JFileChooser chooser = new JFileChooser(jalview.bin.Cache.LAST_DIRECTORY);\r
40     chooser.setDialogTitle("Save Alignment to file - "+e.getActionCommand() +" format.");\r
41     chooser.setToolTipText("Save");\r
42     int value = chooser.showSaveDialog(this);\r
43     if(value == JFileChooser.APPROVE_OPTION)\r
44     {\r
45       String choice =  chooser.getSelectedFile().getPath();\r
46       jalview.bin.Cache.LAST_DIRECTORY = choice;\r
47       String output = FormatAdapter.get(e.getActionCommand(), viewport.getAlignment().getSequences());\r
48       try{\r
49         java.io.PrintWriter out = new java.io.PrintWriter( new java.io.FileWriter( choice )  );\r
50         out.println(output);\r
51         out.close();\r
52       }\r
53       catch(Exception ex){}\r
54     }\r
55 \r
56   }\r
57 \r
58   protected void outputText_actionPerformed(ActionEvent e)\r
59   {\r
60      CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
61      JInternalFrame frame = new JInternalFrame();\r
62      cap.formatForOutput();\r
63      frame.setContentPane(cap);\r
64      Desktop.addInternalFrame(frame, "Alignment output - "+e.getActionCommand(), 600, 500);\r
65      cap.setText( FormatAdapter.get(e.getActionCommand(), viewport.getAlignment().getSequences()));\r
66   }\r
67 \r
68   protected void htmlMenuItem_actionPerformed(ActionEvent e)\r
69   {\r
70     HTMLOutput htmlOutput = new HTMLOutput(viewport.getAlignment(), alignPanel.seqPanel.getColourScheme());\r
71     htmlOutput = null;\r
72   }\r
73 \r
74   public void saveAsPostscriptMenuItem_actionPerformed(ActionEvent e)\r
75   {\r
76 \r
77   }\r
78 \r
79   public void closeMenuItem_actionPerformed(ActionEvent e)\r
80   {\r
81     try{\r
82       this.setClosed(true);\r
83     }catch(Exception ex){}\r
84   }\r
85 \r
86   public void groupsMenuItem_actionPerformed(ActionEvent e)\r
87   {\r
88 \r
89   }\r
90 \r
91   public void groupEditingMenuItem_actionPerformed(ActionEvent e)\r
92   {\r
93 \r
94   }\r
95 \r
96   public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)\r
97   {\r
98     Selection sel = viewport.getSelection();\r
99     for (int i=0; i<viewport.getAlignment().getSequences().size(); i++)\r
100       sel.addElement( viewport.getAlignment().getSequenceAt(i));\r
101     PaintRefresher.Refresh(null);\r
102   }\r
103 \r
104   public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)\r
105   {\r
106     viewport.getSelection().clear();\r
107     PaintRefresher.Refresh(null);\r
108   }\r
109 \r
110   public void invertSequenceMenuItem_actionPerformed(ActionEvent e)\r
111   {\r
112     Selection sel = viewport.getSelection();\r
113     for (int i=0; i<viewport.getAlignment().getSequences().size(); i++)\r
114     {\r
115       if (sel.contains(viewport.getAlignment().getSequenceAt(i)))\r
116         sel.removeElement(viewport.getAlignment().getSequenceAt(i));\r
117       else\r
118         sel.addElement(viewport.getAlignment().getSequenceAt(i));\r
119     }\r
120     PaintRefresher.Refresh(null);\r
121   }\r
122 \r
123   public void deleteSelectedMenuItem_actionPerformed(ActionEvent e)\r
124   {\r
125     for (int i=0;i < viewport.getSelection().size(); i++)\r
126             viewport.getAlignment().deleteSequence(viewport.getSelection().sequenceAt(i));\r
127 \r
128     viewport.getSelection().clear();\r
129     viewport.resetSeqLimits(alignPanel.seqPanel.seqCanvas.getHeight());\r
130     alignPanel.RefreshPanels();\r
131   }\r
132 \r
133   public void moveSelectedMenuItem_actionPerformed(ActionEvent e)\r
134   {\r
135     copySelectedMenuItem_actionPerformed(null);\r
136     deleteSelectedMenuItem_actionPerformed(null);\r
137     alignPanel.repaint();\r
138   }\r
139 \r
140   public void copySelectedMenuItem_actionPerformed(ActionEvent e)\r
141   {\r
142     if(viewport.getSelection().size()==0)\r
143       return;\r
144 \r
145    SequenceI[] s = new Sequence[viewport.getSelection().size()];\r
146    for (int i=0; i < viewport.getSelection().size(); i++) {\r
147      s[i] = new Sequence(viewport.getSelection().sequenceAt(i));\r
148     }\r
149     AlignFrame af = new AlignFrame(new Alignment(s));\r
150 \r
151     int newHeight = s.length * af.viewport.getCharHeight() + 200;\r
152     if(newHeight>500)\r
153       newHeight=500;\r
154     Desktop.addInternalFrame(af, "Copied sequences", 700,newHeight);\r
155   }\r
156 \r
157   public void deselectAllColumnsMenuItem_actionPerformed(ActionEvent e)\r
158   {\r
159     viewport.getColumnSelection().clear();\r
160     repaint();\r
161   }\r
162 \r
163   public void remove2LeftMenuItem_actionPerformed(ActionEvent e)\r
164   {\r
165     ColumnSelection colSel = viewport.getColumnSelection();\r
166     if (colSel.size() > 0)\r
167     {\r
168       int min = colSel.getMin();\r
169       viewport.getAlignment().trimLeft(min);\r
170       colSel.compensateForEdit(0,min);\r
171       alignPanel.RefreshPanels();\r
172     }\r
173   }\r
174 \r
175   public void remove2RightMenuItem_actionPerformed(ActionEvent e)\r
176   {\r
177     ColumnSelection colSel = viewport.getColumnSelection();\r
178     if (colSel.size() > 0)\r
179     {\r
180       int max = colSel.getMax();\r
181       if(max>1)\r
182         viewport.getAlignment().trimRight(max);\r
183 \r
184       alignPanel.RefreshPanels();\r
185     }\r
186 \r
187   }\r
188 \r
189   public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)\r
190   {\r
191     viewport.getAlignment().removeGaps();\r
192     alignPanel.RefreshPanels();\r
193   }\r
194 \r
195   public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)\r
196   {\r
197     SequenceI current;\r
198     int jSize;\r
199     for (int i=0; i < viewport.getAlignment().getSequences().size();i++)\r
200     {\r
201       current = viewport.getAlignment().getSequenceAt(i);\r
202       jSize = current.getLength();\r
203       for (int j=0; j < jSize; j++)\r
204         if (current.getCharAt(j)=='-' || current.getCharAt(j)=='.' || current.getCharAt(j)==' ')\r
205         {\r
206           current.deleteCharAt(j);\r
207           j--;\r
208           jSize--;\r
209         }\r
210     }\r
211 \r
212     alignPanel.RefreshPanels();\r
213   }\r
214 \r
215   public void setGapCharMenuItem_actionPerformed(ActionEvent e)\r
216   {\r
217     String thisChar = "-";\r
218     String nextChar = ".";\r
219     if(viewport.getGapCharacter().equals("-"))\r
220     {\r
221       thisChar = ".";\r
222       nextChar = "-";\r
223     }\r
224     setGapCharMenuItem.setText("Set gap character to \""+nextChar+"\"");\r
225     viewport.setGapCharacter(thisChar);\r
226   }\r
227 \r
228 \r
229   public void fontNameMenuItem_actionPerformed(ActionEvent e)\r
230   {\r
231     String fonts[] = java.awt.GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames();\r
232 \r
233 \r
234     String selection = JOptionPane.showInputDialog(this,\r
235                                 "Select font",\r
236                                 "Font selection",\r
237                                 JOptionPane.QUESTION_MESSAGE,\r
238                                 null,fonts\r
239                                 ,fontNameMenuItem.getText()).toString();\r
240     if(selection!=null)\r
241     {\r
242        fontNameMenuItem.setText(selection);\r
243        SetFont();\r
244      }\r
245 \r
246   }\r
247 \r
248   public void fontSizeMenuItem_actionPerformed(ActionEvent e)\r
249   {\r
250     String selection = JOptionPane.showInputDialog(this,\r
251                                 "Select font size",\r
252                                 "Font size",\r
253                                 JOptionPane.QUESTION_MESSAGE,\r
254                                 null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}\r
255                                 ,fontSizeMenuItem.getText()).toString();\r
256     if(selection!=null)\r
257      {\r
258        fontSizeMenuItem.setText(selection);\r
259        SetFont();\r
260      }\r
261   }\r
262 \r
263   public void fontStyleMenuItem_actionPerformed(ActionEvent e)\r
264   {\r
265     String selection = JOptionPane.showInputDialog(this,\r
266                                 "Select font style",\r
267                                 "Font style",\r
268                                 JOptionPane.QUESTION_MESSAGE,\r
269                                 null, new String[]{"plain", "bold", "italic"}\r
270                                 ,fontStyleMenuItem.getText()).toString();\r
271     if(selection!=null)\r
272     {\r
273       fontStyleMenuItem.setText(selection);\r
274       SetFont();\r
275     }\r
276 \r
277   }\r
278 \r
279   protected void colourTextMenuItem_actionPerformed(ActionEvent e)\r
280   {\r
281     viewport.setColourText( colourTextMenuItem.isSelected() );\r
282     alignPanel.RefreshPanels();\r
283   }\r
284 \r
285   void SetFont()\r
286   {\r
287       int style = java.awt.Font.PLAIN;\r
288       if(fontStyleMenuItem.getText().equals("bold"))\r
289         style = java.awt.Font.BOLD;\r
290       else if(fontStyleMenuItem.getText().equals("italic"))\r
291         style = java.awt.Font.ITALIC;\r
292 \r
293       viewport.setFont(new java.awt.Font(fontNameMenuItem.getText(),\r
294                                            style,\r
295                                            Integer.parseInt(fontSizeMenuItem.getText())));\r
296       alignPanel.RefreshPanels();\r
297   }\r
298 \r
299   public void viewBoxesMenuItem_actionPerformed(ActionEvent e)\r
300   {\r
301     viewport.setShowBoxes( viewBoxesMenuItem.isSelected() );\r
302     alignPanel.RefreshPanels();\r
303   }\r
304 \r
305   public void viewTextMenuItem_actionPerformed(ActionEvent e)\r
306   {\r
307     viewport.setShowText( viewTextMenuItem.isSelected() );\r
308     alignPanel.RefreshPanels();\r
309   }\r
310 \r
311 \r
312   public void consensusGraphMenuItem_actionPerformed(ActionEvent e)\r
313   {\r
314     alignPanel.setGraphPanelVisible( consensusGraphMenuItem.isSelected() );\r
315   }\r
316 \r
317 \r
318   public void clustalColour_actionPerformed(ActionEvent e)\r
319   {\r
320    // alignPanel.seqPanel.setColourScheme( new ClustalxColourScheme() );\r
321   }\r
322 \r
323   public void zappoColour_actionPerformed(ActionEvent e)\r
324   {\r
325     alignPanel.seqPanel.setColourScheme( new ZappoColourScheme() );\r
326   }\r
327 \r
328   public void taylorColour_actionPerformed(ActionEvent e)\r
329   {\r
330     alignPanel.seqPanel.setColourScheme( new TaylorColourScheme() );\r
331   }\r
332 \r
333 \r
334   public void hydrophobicityColour_actionPerformed(ActionEvent e)\r
335   {\r
336     alignPanel.seqPanel.setColourScheme( new HydrophobicColourScheme() );\r
337   }\r
338 \r
339   public void helixColour_actionPerformed(ActionEvent e)\r
340   {\r
341     alignPanel.seqPanel.setColourScheme( new HelixColourScheme() );\r
342   }\r
343 \r
344   public void strandColour_actionPerformed(ActionEvent e)\r
345   {\r
346     alignPanel.seqPanel.setColourScheme( new StrandColourScheme() );\r
347   }\r
348 \r
349   public void turnColour_actionPerformed(ActionEvent e)\r
350   {\r
351     alignPanel.seqPanel.setColourScheme( new TurnColourScheme() );\r
352   }\r
353 \r
354   public void buriedColour_actionPerformed(ActionEvent e)\r
355   {\r
356     alignPanel.seqPanel.setColourScheme( new BuriedColourScheme() );\r
357   }\r
358 \r
359   public void conservationColour_actionPerformed(ActionEvent e)\r
360   {\r
361 \r
362   }\r
363 \r
364   public void conservationColourIncMenuItem_actionPerformed(ActionEvent e)\r
365  {\r
366 \r
367  }\r
368 \r
369 \r
370   public void abovePIDColour_actionPerformed(ActionEvent e)\r
371   {\r
372     alignPanel.seqPanel.setColourScheme( new PIDColourScheme() );\r
373   }\r
374 \r
375 \r
376   public void userDefinedColour_actionPerformed(ActionEvent e)\r
377   {\r
378     JInternalFrame frame = new JInternalFrame();\r
379     UserDefinedColours chooser = new UserDefinedColours( frame, alignPanel.seqPanel );\r
380     frame.setContentPane(chooser);\r
381     Desktop.addInternalFrame(frame,"User defined colours", 450,540 );\r
382     frame.setResizable(false);\r
383     frame.setIconifiable(false);\r
384     frame.setMaximizable(false);\r
385   }\r
386 \r
387   public void PIDColour_actionPerformed(ActionEvent e)\r
388   {\r
389     alignPanel.seqPanel.setColourScheme( new PIDColourScheme() );\r
390   }\r
391 \r
392   public void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
393   {\r
394     alignPanel.seqPanel.setColourScheme( new Blosum62ColourScheme(viewport) );\r
395   }\r
396 \r
397 \r
398   protected void schemeKeyMenuItem_actionPerformed(ActionEvent e)\r
399   {\r
400     ColourKey colourKey = new ColourKey( alignPanel.seqPanel.getColourScheme() );\r
401     Desktop.addInternalFrame(colourKey, "Colour scheme key", 400, 320);\r
402   }\r
403 \r
404 \r
405   public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)\r
406   {\r
407     AlignmentSorter.sortByPID(viewport.getAlignment(), viewport.getAlignment().getSequenceAt(0));\r
408     alignPanel.RefreshPanels();\r
409   }\r
410 \r
411   public void sortIDMenuItem_actionPerformed(ActionEvent e)\r
412   {\r
413     AlignmentSorter.sortByID( viewport.getAlignment() );\r
414     alignPanel.RefreshPanels();\r
415   }\r
416 \r
417   public void sortGroupMenuItem_actionPerformed(ActionEvent e)\r
418   {\r
419     AlignmentSorter.sortGroups(viewport.getAlignment());\r
420     AlignmentSorter.sortGroups(viewport.getAlignment());\r
421     alignPanel.RefreshPanels();\r
422   }\r
423 \r
424   public void sortTreeOrderMenuItem_actionPerformed(ActionEvent e)\r
425   {\r
426     if(viewport.getCurrentTree()==null)\r
427       return;\r
428 \r
429     AlignmentSorter.sortByTree(viewport.getAlignment(), viewport.getCurrentTree());\r
430     alignPanel.RefreshPanels();\r
431   }\r
432 \r
433   public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)\r
434   {\r
435 \r
436   }\r
437 \r
438   public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)\r
439   {\r
440     if(viewport.getSelection().size()<2)\r
441       JOptionPane.showMessageDialog(this, "You must select at least 2 sequences.", "Invalid Selection", JOptionPane.WARNING_MESSAGE);\r
442     else\r
443     {\r
444       JInternalFrame frame = new JInternalFrame();\r
445       frame.setContentPane(new PairwiseAlignPanel(viewport));\r
446       Desktop.addInternalFrame(frame, "Pairwise Alignment", 600, 500);\r
447     }\r
448   }\r
449 \r
450   public void PCAMenuItem_actionPerformed(ActionEvent e)\r
451   {\r
452     PCAPanel pcaPanel = new PCAPanel(viewport, null);\r
453     JInternalFrame frame = new JInternalFrame();\r
454     frame.setContentPane(pcaPanel);\r
455     Desktop.addInternalFrame(frame, "Principal component analysis", 400,400);\r
456   }\r
457 \r
458   public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)\r
459   {\r
460     NewTreePanel("AV", "PID", "Average distance tree using PID");\r
461   }\r
462 \r
463   public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)\r
464   {\r
465     NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");\r
466   }\r
467 \r
468 \r
469   protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)\r
470   {\r
471     NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");\r
472   }\r
473 \r
474   protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)\r
475   {\r
476     NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62PID");\r
477   }\r
478 \r
479   void NewTreePanel(String type, String pwType, String title)\r
480   {\r
481     JInternalFrame frame = new javax.swing.JInternalFrame();\r
482     TreePanel tp=null;\r
483    if (viewport.getSelection() != null && viewport.getSelection().size() > 3)\r
484    {\r
485      tp = new TreePanel(viewport, viewport.getSelection().asVector(),type, pwType,\r
486                          viewport.getStartRes(), viewport.getEndRes());\r
487    }\r
488    else\r
489    {\r
490      tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
491                          type, pwType, viewport.getStartRes(),\r
492                          viewport.getEndRes());\r
493    }\r
494 \r
495    frame.setContentPane(tp);\r
496    Desktop.addInternalFrame(frame, title, 600, 500);\r
497   }\r
498 \r
499 \r
500 \r
501   public void clustalAlignMenuItem_actionPerformed(ActionEvent e)\r
502   {\r
503     JOptionPane.showMessageDialog(this, "Jalview is currently being reengineered"\r
504                                   +"\nwithin the Barton Group, Dundee University."\r
505                                   +"\nThis will be available as a web service 2005",\r
506                                   "Web service", JOptionPane.INFORMATION_MESSAGE);\r
507   }\r
508 \r
509 }\r