Test out new arrangement
[jalview.git] / src / jalview / gui / PopupMenu.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2007 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle\r
4  *\r
5  * This program is free software; you can redistribute it and/or\r
6  * modify it under the terms of the GNU General Public License\r
7  * as published by the Free Software Foundation; either version 2\r
8  * of the License, or (at your option) any later version.\r
9  *\r
10  * This program is distributed in the hope that it will be useful,\r
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13  * GNU General Public License for more details.\r
14  *\r
15  * You should have received a copy of the GNU General Public License\r
16  * along with this program; if not, write to the Free Software\r
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA\r
18  */\r
19 package jalview.gui;\r
20 \r
21 import java.util.*;\r
22 \r
23 import java.awt.*;\r
24 import java.awt.event.*;\r
25 import javax.swing.*;\r
26 \r
27 import MCview.*;\r
28 import jalview.analysis.*;\r
29 import jalview.commands.*;\r
30 import jalview.datamodel.*;\r
31 import jalview.io.*;\r
32 import jalview.schemes.*;\r
33 \r
34 /**\r
35  * DOCUMENT ME!\r
36  *\r
37  * @author $author$\r
38  * @version $Revision$\r
39  */\r
40 public class PopupMenu\r
41     extends JPopupMenu\r
42 {\r
43   JMenu groupMenu = new JMenu();\r
44   JMenuItem groupName = new JMenuItem();\r
45   protected JRadioButtonMenuItem clustalColour = new JRadioButtonMenuItem();\r
46   protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem();\r
47   protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem();\r
48   protected JRadioButtonMenuItem hydrophobicityColour = new\r
49       JRadioButtonMenuItem();\r
50   protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem();\r
51   protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem();\r
52   protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem();\r
53   protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem();\r
54   protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem();\r
55   protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem();\r
56   protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem();\r
57   protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();\r
58   JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();\r
59   protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();\r
60   AlignmentPanel ap;\r
61   JMenu sequenceMenu = new JMenu();\r
62   JMenuItem sequenceName = new JMenuItem();\r
63   Sequence sequence;\r
64   JMenuItem unGroupMenuItem = new JMenuItem();\r
65   JMenuItem outline = new JMenuItem();\r
66   JRadioButtonMenuItem nucleotideMenuItem = new JRadioButtonMenuItem();\r
67   JMenu colourMenu = new JMenu();\r
68   JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem();\r
69   JCheckBoxMenuItem showText = new JCheckBoxMenuItem();\r
70   JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();\r
71   JMenu editMenu = new JMenu();\r
72   JMenuItem cut = new JMenuItem();\r
73   JMenuItem copy = new JMenuItem();\r
74   JMenuItem upperCase = new JMenuItem();\r
75   JMenuItem lowerCase = new JMenuItem();\r
76   JMenuItem toggle = new JMenuItem();\r
77   JMenu pdbMenu = new JMenu();\r
78   JMenuItem pdbFromFile = new JMenuItem();\r
79   JMenuItem enterPDB = new JMenuItem();\r
80   JMenuItem discoverPDB = new JMenuItem();\r
81   JMenu outputMenu = new JMenu();\r
82   JMenuItem sequenceFeature = new JMenuItem();\r
83   JMenuItem textColour = new JMenuItem();\r
84   JMenu jMenu1 = new JMenu();\r
85   JMenu structureMenu = new JMenu();\r
86   JMenu viewStructureMenu = new JMenu();\r
87   JMenu colStructureMenu = new JMenu();\r
88 \r
89   /**\r
90    * Creates a new PopupMenu object.\r
91    *\r
92    * @param ap DOCUMENT ME!\r
93    * @param seq DOCUMENT ME!\r
94    */\r
95   public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links)\r
96   {\r
97     ///////////////////////////////////////////////////////////\r
98     // If this is activated from the sequence panel, the user may want to\r
99     // edit or annotate a particular residue. Therefore display the residue menu\r
100     //\r
101     // If from the IDPanel, we must display the sequence menu\r
102     //////////////////////////////////////////////////////////\r
103     this.ap = ap;\r
104     sequence = seq;\r
105 \r
106     ButtonGroup colours = new ButtonGroup();\r
107     colours.add(noColourmenuItem);\r
108     colours.add(clustalColour);\r
109     colours.add(zappoColour);\r
110     colours.add(taylorColour);\r
111     colours.add(hydrophobicityColour);\r
112     colours.add(helixColour);\r
113     colours.add(strandColour);\r
114     colours.add(turnColour);\r
115     colours.add(buriedColour);\r
116     colours.add(abovePIDColour);\r
117     colours.add(userDefinedColour);\r
118     colours.add(PIDColour);\r
119     colours.add(BLOSUM62Colour);\r
120 \r
121     for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++)\r
122     {\r
123       JMenuItem item = new JMenuItem(jalview.io.FormatAdapter.WRITEABLE_FORMATS[\r
124                                      i]);\r
125 \r
126       item.addActionListener(new java.awt.event.ActionListener()\r
127       {\r
128         public void actionPerformed(ActionEvent e)\r
129         {\r
130           outputText_actionPerformed(e);\r
131         }\r
132       });\r
133 \r
134       outputMenu.add(item);\r
135     }\r
136 \r
137     try\r
138     {\r
139       jbInit();\r
140     }\r
141     catch (Exception e)\r
142     {\r
143       e.printStackTrace();\r
144     }\r
145 \r
146     if (seq != null)\r
147     {\r
148       sequenceMenu.setText(sequence.getName());\r
149 \r
150       JMenuItem menuItem;\r
151       if (seq.getDatasetSequence().getPDBId() != null)\r
152       {\r
153         java.util.Enumeration e = seq.getDatasetSequence().getPDBId().\r
154             elements();\r
155 \r
156         while (e.hasMoreElements())\r
157         {\r
158           final PDBEntry pdb = (PDBEntry) e.nextElement();\r
159 \r
160           menuItem = new JMenuItem();\r
161           menuItem.setText(pdb.getId());\r
162           menuItem.addActionListener(new java.awt.event.ActionListener()\r
163           {\r
164             public void actionPerformed(ActionEvent e)\r
165             {\r
166               Vector seqs = new Vector();\r
167               for (int i = 0; i < ap.av.alignment.getHeight(); i++)\r
168               {\r
169                 Vector pdbs = ap.av.alignment.getSequenceAt(i).getDatasetSequence().getPDBId();\r
170                 if(pdbs==null)\r
171                   continue;\r
172 \r
173                 for(int p=0; p<pdbs.size(); p++)\r
174                 {\r
175                   PDBEntry p1 = (PDBEntry)pdbs.elementAt(p);\r
176                   if(p1.getId().equals(pdb.getId()))\r
177                   {\r
178                     if (!seqs.contains(ap.av.alignment.getSequenceAt(i)))\r
179                         seqs.addElement(ap.av.alignment.getSequenceAt(i));\r
180 \r
181                       continue;\r
182                   }\r
183                 }\r
184               }\r
185 \r
186               SequenceI [] seqs2 = new SequenceI[seqs.size()];\r
187               seqs.toArray(seqs2);\r
188 \r
189               new AppJMol(pdb, seqs2, ap);\r
190             }\r
191           });\r
192           viewStructureMenu.add(menuItem);\r
193 \r
194           menuItem = new JMenuItem();\r
195           menuItem.setText(pdb.getId());\r
196           menuItem.addActionListener(new java.awt.event.ActionListener()\r
197           {\r
198             public void actionPerformed(ActionEvent e)\r
199             {\r
200               colourByStructure(pdb.getId());\r
201             }\r
202           });\r
203           colStructureMenu.add(menuItem);\r
204         }\r
205       }\r
206 \r
207       menuItem = new JMenuItem("Hide Sequences");\r
208       menuItem.addActionListener(new java.awt.event.ActionListener()\r
209       {\r
210         public void actionPerformed(ActionEvent e)\r
211         {\r
212           hideSequences(false);\r
213         }\r
214       });\r
215       add(menuItem);\r
216 \r
217       if (ap.av.getSelectionGroup() != null\r
218           && ap.av.getSelectionGroup().getSize() > 1)\r
219       {\r
220         menuItem = new JMenuItem("Represent Group with " + seq.getName());\r
221         menuItem.addActionListener(new java.awt.event.ActionListener()\r
222         {\r
223           public void actionPerformed(ActionEvent e)\r
224           {\r
225             hideSequences(true);\r
226           }\r
227         });\r
228         sequenceMenu.add(menuItem);\r
229       }\r
230 \r
231       if (ap.av.hasHiddenRows)\r
232       {\r
233         final int index = ap.av.alignment.findIndex(seq);\r
234 \r
235         if (ap.av.adjustForHiddenSeqs(index) -\r
236             ap.av.adjustForHiddenSeqs(index - 1) > 1)\r
237         {\r
238           menuItem = new JMenuItem("Reveal Sequences");\r
239           menuItem.addActionListener(new ActionListener()\r
240           {\r
241             public void actionPerformed(ActionEvent e)\r
242             {\r
243               ap.av.showSequence(index);\r
244               if (ap.overviewPanel != null)\r
245               {\r
246                 ap.overviewPanel.updateOverviewImage();\r
247               }\r
248             }\r
249           });\r
250           add(menuItem);\r
251         }\r
252 \r
253         menuItem = new JMenuItem("Reveal All");\r
254         menuItem.addActionListener(new ActionListener()\r
255         {\r
256           public void actionPerformed(ActionEvent e)\r
257           {\r
258             ap.av.showAllHiddenSeqs();\r
259             if (ap.overviewPanel != null)\r
260             {\r
261               ap.overviewPanel.updateOverviewImage();\r
262             }\r
263           }\r
264         });\r
265 \r
266         add(menuItem);\r
267       }\r
268 \r
269     }\r
270 \r
271     SequenceGroup sg = ap.av.getSelectionGroup();\r
272 \r
273     if (sg != null)\r
274     {\r
275       groupName.setText(sg.getName());\r
276 \r
277       if (sg.cs instanceof ZappoColourScheme)\r
278       {\r
279         zappoColour.setSelected(true);\r
280       }\r
281       else if (sg.cs instanceof TaylorColourScheme)\r
282       {\r
283         taylorColour.setSelected(true);\r
284       }\r
285       else if (sg.cs instanceof PIDColourScheme)\r
286       {\r
287         PIDColour.setSelected(true);\r
288       }\r
289       else if (sg.cs instanceof Blosum62ColourScheme)\r
290       {\r
291         BLOSUM62Colour.setSelected(true);\r
292       }\r
293       else if (sg.cs instanceof UserColourScheme)\r
294       {\r
295         userDefinedColour.setSelected(true);\r
296       }\r
297       else if (sg.cs instanceof HydrophobicColourScheme)\r
298       {\r
299         hydrophobicityColour.setSelected(true);\r
300       }\r
301       else if (sg.cs instanceof HelixColourScheme)\r
302       {\r
303         helixColour.setSelected(true);\r
304       }\r
305       else if (sg.cs instanceof StrandColourScheme)\r
306       {\r
307         strandColour.setSelected(true);\r
308       }\r
309       else if (sg.cs instanceof TurnColourScheme)\r
310       {\r
311         turnColour.setSelected(true);\r
312       }\r
313       else if (sg.cs instanceof BuriedColourScheme)\r
314       {\r
315         buriedColour.setSelected(true);\r
316       }\r
317       else if (sg.cs instanceof ClustalxColourScheme)\r
318       {\r
319         clustalColour.setSelected(true);\r
320       }\r
321       else\r
322       {\r
323         noColourmenuItem.setSelected(true);\r
324       }\r
325 \r
326       if (sg.cs != null && sg.cs.conservationApplied())\r
327       {\r
328         conservationMenuItem.setSelected(true);\r
329       }\r
330 \r
331       showText.setSelected(sg.getDisplayText());\r
332       showColourText.setSelected(sg.getColourText());\r
333       showBoxes.setSelected(sg.getDisplayBoxes());\r
334     }\r
335     else\r
336     {\r
337       groupMenu.setVisible(false);\r
338       editMenu.setVisible(false);\r
339     }\r
340 \r
341     if (!ap.av.alignment.getGroups().contains(sg))\r
342     {\r
343       unGroupMenuItem.setVisible(false);\r
344     }\r
345 \r
346     if (seq == null)\r
347     {\r
348       sequenceMenu.setVisible(false);\r
349       structureMenu.setVisible(false);\r
350     }\r
351 \r
352     if (links != null && links.size() > 0)\r
353     {\r
354       JMenu linkMenu = new JMenu("Link");\r
355       JMenuItem item;\r
356       for (int i = 0; i < links.size(); i++)\r
357       {\r
358         String link = links.elementAt(i).toString();\r
359         final String label = link.substring(0, link.indexOf("|"));\r
360         item = new JMenuItem(label);\r
361         final String url;\r
362 \r
363         if (link.indexOf("$SEQUENCE_ID$") > -1)\r
364         {\r
365           String id = seq.getName();\r
366           if (id.indexOf("|") > -1)\r
367           {\r
368             id = id.substring(id.lastIndexOf("|") + 1);\r
369           }\r
370 \r
371           url = link.substring(link.indexOf("|") + 1,\r
372                                link.indexOf("$SEQUENCE_ID$"))\r
373               + id +\r
374               link.substring(link.indexOf("$SEQUENCE_ID$") + 13);\r
375         }\r
376         else\r
377         {\r
378           url = link.substring(link.lastIndexOf("|") + 1);\r
379         }\r
380 \r
381         item.addActionListener(new java.awt.event.ActionListener()\r
382         {\r
383           public void actionPerformed(ActionEvent e)\r
384           {\r
385             showLink(url);\r
386           }\r
387         });\r
388 \r
389         linkMenu.add(item);\r
390       }\r
391       if (sequence != null)\r
392       {\r
393         sequenceMenu.add(linkMenu);\r
394       }\r
395       else\r
396       {\r
397         add(linkMenu);\r
398       }\r
399     }\r
400   }\r
401 \r
402   /**\r
403    * DOCUMENT ME!\r
404    *\r
405    * @throws Exception DOCUMENT ME!\r
406    */\r
407   private void jbInit()\r
408       throws Exception\r
409   {\r
410     groupMenu.setText("Group");\r
411     groupMenu.setText("Selection");\r
412     groupName.setText("Name");\r
413     groupName.addActionListener(new java.awt.event.ActionListener()\r
414     {\r
415       public void actionPerformed(ActionEvent e)\r
416       {\r
417         groupName_actionPerformed();\r
418       }\r
419     });\r
420     sequenceMenu.setText("Sequence");\r
421     sequenceName.setText("Edit Name/Description");\r
422     sequenceName.addActionListener(new java.awt.event.ActionListener()\r
423     {\r
424       public void actionPerformed(ActionEvent e)\r
425       {\r
426         sequenceName_actionPerformed();\r
427       }\r
428     });\r
429     PIDColour.setFocusPainted(false);\r
430     unGroupMenuItem.setText("Remove Group");\r
431     unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
432     {\r
433       public void actionPerformed(ActionEvent e)\r
434       {\r
435         unGroupMenuItem_actionPerformed();\r
436       }\r
437     });\r
438 \r
439     outline.setText("Border colour");\r
440     outline.addActionListener(new java.awt.event.ActionListener()\r
441     {\r
442       public void actionPerformed(ActionEvent e)\r
443       {\r
444         outline_actionPerformed();\r
445       }\r
446     });\r
447     nucleotideMenuItem.setText("Nucleotide");\r
448     nucleotideMenuItem.addActionListener(new ActionListener()\r
449     {\r
450       public void actionPerformed(ActionEvent e)\r
451       {\r
452         nucleotideMenuItem_actionPerformed();\r
453       }\r
454     });\r
455     colourMenu.setText("Group Colour");\r
456     showBoxes.setText("Boxes");\r
457     showBoxes.setState(true);\r
458     showBoxes.addActionListener(new ActionListener()\r
459     {\r
460       public void actionPerformed(ActionEvent e)\r
461       {\r
462         showBoxes_actionPerformed();\r
463       }\r
464     });\r
465     showText.setText("Text");\r
466     showText.setState(true);\r
467     showText.addActionListener(new ActionListener()\r
468     {\r
469       public void actionPerformed(ActionEvent e)\r
470       {\r
471         showText_actionPerformed();\r
472       }\r
473     });\r
474     showColourText.setText("Colour Text");\r
475     showColourText.addActionListener(new ActionListener()\r
476     {\r
477       public void actionPerformed(ActionEvent e)\r
478       {\r
479         showColourText_actionPerformed();\r
480       }\r
481     });\r
482     editMenu.setText("Edit");\r
483     cut.setText("Cut");\r
484     cut.addActionListener(new ActionListener()\r
485     {\r
486       public void actionPerformed(ActionEvent e)\r
487       {\r
488         cut_actionPerformed();\r
489       }\r
490     });\r
491     upperCase.setText("To Upper Case");\r
492     upperCase.addActionListener(new ActionListener()\r
493     {\r
494       public void actionPerformed(ActionEvent e)\r
495       {\r
496         changeCase(e);\r
497       }\r
498     });\r
499     copy.setText("Copy");\r
500     copy.addActionListener(new ActionListener()\r
501     {\r
502       public void actionPerformed(ActionEvent e)\r
503       {\r
504         copy_actionPerformed();\r
505       }\r
506     });\r
507     lowerCase.setText("To Lower Case");\r
508     lowerCase.addActionListener(new ActionListener()\r
509     {\r
510       public void actionPerformed(ActionEvent e)\r
511       {\r
512         changeCase(e);\r
513       }\r
514     });\r
515     toggle.setText("Toggle Case");\r
516     toggle.addActionListener(new ActionListener()\r
517     {\r
518       public void actionPerformed(ActionEvent e)\r
519       {\r
520         changeCase(e);\r
521       }\r
522     });\r
523     pdbMenu.setText("Associate Structure with Sequence");\r
524     pdbFromFile.setText("From File");\r
525     pdbFromFile.addActionListener(new ActionListener()\r
526     {\r
527       public void actionPerformed(ActionEvent e)\r
528       {\r
529         pdbFromFile_actionPerformed();\r
530       }\r
531     });\r
532     enterPDB.setText("Enter PDB Id");\r
533     enterPDB.addActionListener(new ActionListener()\r
534     {\r
535       public void actionPerformed(ActionEvent e)\r
536       {\r
537         enterPDB_actionPerformed();\r
538       }\r
539     });\r
540     discoverPDB.setText("Discover PDB ids");\r
541     discoverPDB.addActionListener(new ActionListener()\r
542     {\r
543       public void actionPerformed(ActionEvent e)\r
544       {\r
545         discoverPDB_actionPerformed();\r
546       }\r
547     });\r
548     outputMenu.setText("Output to Textbox...");\r
549     sequenceFeature.setText("Create Sequence Feature");\r
550     sequenceFeature.addActionListener(new ActionListener()\r
551     {\r
552       public void actionPerformed(ActionEvent e)\r
553       {\r
554         sequenceFeature_actionPerformed();\r
555       }\r
556     });\r
557     textColour.setText("Text Colour");\r
558     textColour.addActionListener(new ActionListener()\r
559     {\r
560       public void actionPerformed(ActionEvent e)\r
561       {\r
562         textColour_actionPerformed();\r
563       }\r
564     });\r
565     jMenu1.setText("Group");\r
566     structureMenu.setText("Structure");\r
567     viewStructureMenu.setText("View Structure");\r
568     colStructureMenu.setText("Colour By Structure");\r
569 \r
570     add(groupMenu);\r
571 \r
572     add(sequenceMenu);\r
573     this.add(structureMenu);\r
574     groupMenu.add(editMenu);\r
575     groupMenu.add(outputMenu);\r
576     groupMenu.add(sequenceFeature);\r
577     groupMenu.add(jMenu1);\r
578     sequenceMenu.add(sequenceName);\r
579     colourMenu.add(textColour);\r
580     colourMenu.add(noColourmenuItem);\r
581     colourMenu.add(clustalColour);\r
582     colourMenu.add(BLOSUM62Colour);\r
583     colourMenu.add(PIDColour);\r
584     colourMenu.add(zappoColour);\r
585     colourMenu.add(taylorColour);\r
586     colourMenu.add(hydrophobicityColour);\r
587     colourMenu.add(helixColour);\r
588     colourMenu.add(strandColour);\r
589     colourMenu.add(turnColour);\r
590     colourMenu.add(buriedColour);\r
591     colourMenu.add(nucleotideMenuItem);\r
592     colourMenu.add(userDefinedColour);\r
593 \r
594     if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)\r
595     {\r
596       java.util.Enumeration userColours = jalview.gui.UserDefinedColours.\r
597           getUserColourSchemes().keys();\r
598 \r
599       while (userColours.hasMoreElements())\r
600       {\r
601         JMenuItem item = new JMenuItem(userColours.\r
602                                        nextElement().toString());\r
603         item.addActionListener(new ActionListener()\r
604         {\r
605           public void actionPerformed(ActionEvent evt)\r
606           {\r
607             userDefinedColour_actionPerformed(evt);\r
608           }\r
609         });\r
610         colourMenu.add(item);\r
611       }\r
612     }\r
613 \r
614     colourMenu.addSeparator();\r
615     colourMenu.add(abovePIDColour);\r
616     colourMenu.add(conservationMenuItem);\r
617     editMenu.add(copy);\r
618     editMenu.add(cut);\r
619     editMenu.add(upperCase);\r
620     editMenu.add(lowerCase);\r
621     editMenu.add(toggle);\r
622     pdbMenu.add(pdbFromFile);\r
623     pdbMenu.add(enterPDB);\r
624     pdbMenu.add(discoverPDB);\r
625     jMenu1.add(groupName);\r
626     jMenu1.add(unGroupMenuItem);\r
627     jMenu1.add(colourMenu);\r
628     jMenu1.add(showBoxes);\r
629     jMenu1.add(showText);\r
630     jMenu1.add(showColourText);\r
631     jMenu1.add(outline);\r
632     structureMenu.add(pdbMenu);\r
633     structureMenu.add(viewStructureMenu);\r
634     structureMenu.add(colStructureMenu);\r
635     noColourmenuItem.setText("None");\r
636     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
637     {\r
638       public void actionPerformed(ActionEvent e)\r
639       {\r
640         noColourmenuItem_actionPerformed();\r
641       }\r
642     });\r
643 \r
644     clustalColour.setText("Clustalx colours");\r
645     clustalColour.addActionListener(new java.awt.event.ActionListener()\r
646     {\r
647       public void actionPerformed(ActionEvent e)\r
648       {\r
649         clustalColour_actionPerformed();\r
650       }\r
651     });\r
652     zappoColour.setText("Zappo");\r
653     zappoColour.addActionListener(new java.awt.event.ActionListener()\r
654     {\r
655       public void actionPerformed(ActionEvent e)\r
656       {\r
657         zappoColour_actionPerformed();\r
658       }\r
659     });\r
660     taylorColour.setText("Taylor");\r
661     taylorColour.addActionListener(new java.awt.event.ActionListener()\r
662     {\r
663       public void actionPerformed(ActionEvent e)\r
664       {\r
665         taylorColour_actionPerformed();\r
666       }\r
667     });\r
668     hydrophobicityColour.setText("Hydrophobicity");\r
669     hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()\r
670     {\r
671       public void actionPerformed(ActionEvent e)\r
672       {\r
673         hydrophobicityColour_actionPerformed();\r
674       }\r
675     });\r
676     helixColour.setText("Helix propensity");\r
677     helixColour.addActionListener(new java.awt.event.ActionListener()\r
678     {\r
679       public void actionPerformed(ActionEvent e)\r
680       {\r
681         helixColour_actionPerformed();\r
682       }\r
683     });\r
684     strandColour.setText("Strand propensity");\r
685     strandColour.addActionListener(new java.awt.event.ActionListener()\r
686     {\r
687       public void actionPerformed(ActionEvent e)\r
688       {\r
689         strandColour_actionPerformed();\r
690       }\r
691     });\r
692     turnColour.setText("Turn propensity");\r
693     turnColour.addActionListener(new java.awt.event.ActionListener()\r
694     {\r
695       public void actionPerformed(ActionEvent e)\r
696       {\r
697         turnColour_actionPerformed();\r
698       }\r
699     });\r
700     buriedColour.setText("Buried Index");\r
701     buriedColour.addActionListener(new java.awt.event.ActionListener()\r
702     {\r
703       public void actionPerformed(ActionEvent e)\r
704       {\r
705         buriedColour_actionPerformed();\r
706       }\r
707     });\r
708     abovePIDColour.setText("Above % Identity");\r
709     abovePIDColour.addActionListener(new java.awt.event.ActionListener()\r
710     {\r
711       public void actionPerformed(ActionEvent e)\r
712       {\r
713         abovePIDColour_actionPerformed();\r
714       }\r
715     });\r
716     userDefinedColour.setText("User Defined...");\r
717     userDefinedColour.addActionListener(new java.awt.event.ActionListener()\r
718     {\r
719       public void actionPerformed(ActionEvent e)\r
720       {\r
721         userDefinedColour_actionPerformed(e);\r
722       }\r
723     });\r
724     PIDColour.setText("Percentage Identity");\r
725     PIDColour.addActionListener(new java.awt.event.ActionListener()\r
726     {\r
727       public void actionPerformed(ActionEvent e)\r
728       {\r
729         PIDColour_actionPerformed();\r
730       }\r
731     });\r
732     BLOSUM62Colour.setText("BLOSUM62");\r
733     BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()\r
734     {\r
735       public void actionPerformed(ActionEvent e)\r
736       {\r
737         BLOSUM62Colour_actionPerformed();\r
738       }\r
739     });\r
740     conservationMenuItem.setText("Conservation");\r
741     conservationMenuItem.addActionListener(new java.awt.event.ActionListener()\r
742     {\r
743       public void actionPerformed(ActionEvent e)\r
744       {\r
745         conservationMenuItem_actionPerformed();\r
746       }\r
747     });\r
748   }\r
749 \r
750   /**\r
751    * DOCUMENT ME!\r
752    */\r
753   void refresh()\r
754   {\r
755     ap.paintAlignment(true);\r
756 \r
757     PaintRefresher.Refresh(this, ap.av.getSequenceSetId());\r
758   }\r
759 \r
760   /**\r
761    * DOCUMENT ME!\r
762    *\r
763    * @param e DOCUMENT ME!\r
764    */\r
765   protected void clustalColour_actionPerformed()\r
766   {\r
767     SequenceGroup sg = getGroup();\r
768     sg.cs = new ClustalxColourScheme(sg.getSequences(ap.av.hiddenRepSequences),\r
769                                      ap.av.alignment.getWidth());\r
770     refresh();\r
771   }\r
772 \r
773   /**\r
774    * DOCUMENT ME!\r
775    *\r
776    * @param e DOCUMENT ME!\r
777    */\r
778   protected void zappoColour_actionPerformed()\r
779   {\r
780     getGroup().cs = new ZappoColourScheme();\r
781     refresh();\r
782   }\r
783 \r
784   /**\r
785    * DOCUMENT ME!\r
786    *\r
787    * @param e DOCUMENT ME!\r
788    */\r
789   protected void taylorColour_actionPerformed()\r
790   {\r
791     getGroup().cs = new TaylorColourScheme();\r
792     refresh();\r
793   }\r
794 \r
795   /**\r
796    * DOCUMENT ME!\r
797    *\r
798    * @param e DOCUMENT ME!\r
799    */\r
800   protected void hydrophobicityColour_actionPerformed()\r
801   {\r
802     getGroup().cs = new HydrophobicColourScheme();\r
803     refresh();\r
804   }\r
805 \r
806   /**\r
807    * DOCUMENT ME!\r
808    *\r
809    * @param e DOCUMENT ME!\r
810    */\r
811   protected void helixColour_actionPerformed()\r
812   {\r
813     getGroup().cs = new HelixColourScheme();\r
814     refresh();\r
815   }\r
816 \r
817   /**\r
818    * DOCUMENT ME!\r
819    *\r
820    * @param e DOCUMENT ME!\r
821    */\r
822   protected void strandColour_actionPerformed()\r
823   {\r
824     getGroup().cs = new StrandColourScheme();\r
825     refresh();\r
826   }\r
827 \r
828   /**\r
829    * DOCUMENT ME!\r
830    *\r
831    * @param e DOCUMENT ME!\r
832    */\r
833   protected void turnColour_actionPerformed()\r
834   {\r
835     getGroup().cs = new TurnColourScheme();\r
836     refresh();\r
837   }\r
838 \r
839   /**\r
840    * DOCUMENT ME!\r
841    *\r
842    * @param e DOCUMENT ME!\r
843    */\r
844   protected void buriedColour_actionPerformed()\r
845   {\r
846     getGroup().cs = new BuriedColourScheme();\r
847     refresh();\r
848   }\r
849 \r
850   /**\r
851    * DOCUMENT ME!\r
852    *\r
853    * @param e DOCUMENT ME!\r
854    */\r
855   public void nucleotideMenuItem_actionPerformed()\r
856   {\r
857     getGroup().cs = new NucleotideColourScheme();\r
858     refresh();\r
859   }\r
860 \r
861   /**\r
862    * DOCUMENT ME!\r
863    *\r
864    * @param e DOCUMENT ME!\r
865    */\r
866   protected void abovePIDColour_actionPerformed()\r
867   {\r
868     SequenceGroup sg = getGroup();\r
869     if (sg.cs == null)\r
870     {\r
871       return;\r
872     }\r
873 \r
874     if (abovePIDColour.isSelected())\r
875     {\r
876       sg.cs.setConsensus(AAFrequency.calculate(\r
877           sg.getSequences(ap.av.hiddenRepSequences), sg.getStartRes(),\r
878           sg.getEndRes() + 1));\r
879 \r
880       int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
881           getGroup().getName());\r
882 \r
883       sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());\r
884 \r
885       SliderPanel.showPIDSlider();\r
886     }\r
887     else // remove PIDColouring\r
888     {\r
889       sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
890     }\r
891 \r
892     refresh();\r
893   }\r
894 \r
895   /**\r
896    * DOCUMENT ME!\r
897    *\r
898    * @param e DOCUMENT ME!\r
899    */\r
900   protected void userDefinedColour_actionPerformed(ActionEvent e)\r
901   {\r
902     SequenceGroup sg = getGroup();\r
903 \r
904     if (e.getActionCommand().equals("User Defined..."))\r
905     {\r
906       new UserDefinedColours(ap, sg);\r
907     }\r
908     else\r
909     {\r
910       UserColourScheme udc = (UserColourScheme) UserDefinedColours.\r
911           getUserColourSchemes().get(e.getActionCommand());\r
912 \r
913       sg.cs = udc;\r
914     }\r
915     refresh();\r
916   }\r
917 \r
918   /**\r
919    * DOCUMENT ME!\r
920    *\r
921    * @param e DOCUMENT ME!\r
922    */\r
923   protected void PIDColour_actionPerformed()\r
924   {\r
925     SequenceGroup sg = getGroup();\r
926     sg.cs = new PIDColourScheme();\r
927     sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.\r
928         hiddenRepSequences),\r
929                                              sg.getStartRes(),\r
930                                              sg.getEndRes() + 1));\r
931     refresh();\r
932   }\r
933 \r
934   /**\r
935    * DOCUMENT ME!\r
936    *\r
937    * @param e DOCUMENT ME!\r
938    */\r
939   protected void BLOSUM62Colour_actionPerformed()\r
940   {\r
941     SequenceGroup sg = getGroup();\r
942 \r
943     sg.cs = new Blosum62ColourScheme();\r
944 \r
945     sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(ap.av.\r
946         hiddenRepSequences),\r
947                                              sg.getStartRes(),\r
948                                              sg.getEndRes() + 1));\r
949 \r
950     refresh();\r
951   }\r
952 \r
953   /**\r
954    * DOCUMENT ME!\r
955    *\r
956    * @param e DOCUMENT ME!\r
957    */\r
958   protected void noColourmenuItem_actionPerformed()\r
959   {\r
960     getGroup().cs = null;\r
961     refresh();\r
962   }\r
963 \r
964   /**\r
965    * DOCUMENT ME!\r
966    *\r
967    * @param e DOCUMENT ME!\r
968    */\r
969   protected void conservationMenuItem_actionPerformed()\r
970   {\r
971     SequenceGroup sg = getGroup();\r
972     if (sg.cs == null)\r
973     {\r
974       return;\r
975     }\r
976 \r
977     if (conservationMenuItem.isSelected())\r
978     {\r
979       Conservation c = new Conservation("Group",\r
980                                         ResidueProperties.propHash, 3,\r
981                                         sg.getSequences(ap.av.\r
982           hiddenRepSequences),\r
983                                         sg.getStartRes(),\r
984                                         sg.getEndRes() + 1);\r
985 \r
986       c.calculate();\r
987       c.verdict(false, ap.av.ConsPercGaps);\r
988 \r
989       sg.cs.setConservation(c);\r
990 \r
991       SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());\r
992       SliderPanel.showConservationSlider();\r
993     }\r
994     else // remove ConservationColouring\r
995     {\r
996       sg.cs.setConservation(null);\r
997     }\r
998 \r
999     refresh();\r
1000   }\r
1001 \r
1002   /**\r
1003    * DOCUMENT ME!\r
1004    *\r
1005    * @param e DOCUMENT ME!\r
1006    */\r
1007   protected void groupName_actionPerformed()\r
1008   {\r
1009 \r
1010     SequenceGroup sg = getGroup();\r
1011     EditNameDialog dialog = new EditNameDialog(sg.getName(),\r
1012                                                sg.getDescription(),\r
1013                                                "       Group Name ",\r
1014                                                "Group Description ",\r
1015                                                "Edit Group Name/Description");\r
1016 \r
1017     if (!dialog.accept)\r
1018     {\r
1019       return;\r
1020     }\r
1021 \r
1022     sg.setName(dialog.getName());\r
1023     sg.setDescription(dialog.getDescription());\r
1024   }\r
1025 \r
1026   /**\r
1027    * DOCUMENT ME!\r
1028    *\r
1029    * @return DOCUMENT ME!\r
1030    */\r
1031   SequenceGroup getGroup()\r
1032   {\r
1033     SequenceGroup sg = ap.av.getSelectionGroup();\r
1034     // this method won't add a new group if it already exists\r
1035     if (sg != null)\r
1036     {\r
1037       ap.av.alignment.addGroup(sg);\r
1038     }\r
1039 \r
1040     return sg;\r
1041   }\r
1042 \r
1043   /**\r
1044    * DOCUMENT ME!\r
1045    *\r
1046    * @param e DOCUMENT ME!\r
1047    */\r
1048   void sequenceName_actionPerformed()\r
1049   {\r
1050     EditNameDialog dialog = new EditNameDialog(sequence.getName(),\r
1051                                                sequence.getDescription(),\r
1052                                                "       Sequence Name ",\r
1053                                                "Sequence Description ",\r
1054                                                "Edit Sequence Name/Description");\r
1055 \r
1056     if (!dialog.accept)\r
1057     {\r
1058       return;\r
1059     }\r
1060 \r
1061     if (dialog.getName() != null)\r
1062     {\r
1063       if (dialog.getName().indexOf(" ") > -1)\r
1064       {\r
1065         JOptionPane.showMessageDialog(ap,\r
1066                                       "Spaces have been converted to \"_\"",\r
1067                                       "No spaces allowed in Sequence Name",\r
1068                                       JOptionPane.WARNING_MESSAGE);\r
1069       }\r
1070 \r
1071       sequence.setName(dialog.getName().replace(' ', '_'));\r
1072       ap.paintAlignment(false);\r
1073     }\r
1074 \r
1075     sequence.setDescription(dialog.getDescription());\r
1076 \r
1077     ap.av.firePropertyChange("alignment", null,\r
1078                              ap.av.getAlignment().getSequences());\r
1079 \r
1080   }\r
1081 \r
1082   /**\r
1083    * DOCUMENT ME!\r
1084    *\r
1085    * @param e DOCUMENT ME!\r
1086    */\r
1087   void unGroupMenuItem_actionPerformed()\r
1088   {\r
1089     SequenceGroup sg = ap.av.getSelectionGroup();\r
1090     ap.av.alignment.deleteGroup(sg);\r
1091     ap.av.setSelectionGroup(null);\r
1092     refresh();\r
1093   }\r
1094 \r
1095   /**\r
1096    * DOCUMENT ME!\r
1097    *\r
1098    * @param e DOCUMENT ME!\r
1099    */\r
1100   protected void outline_actionPerformed()\r
1101   {\r
1102     SequenceGroup sg = getGroup();\r
1103     Color col = JColorChooser.showDialog(this, "Select Outline Colour",\r
1104                                          Color.BLUE);\r
1105 \r
1106     if (col != null)\r
1107     {\r
1108       sg.setOutlineColour(col);\r
1109     }\r
1110 \r
1111     refresh();\r
1112   }\r
1113 \r
1114   /**\r
1115    * DOCUMENT ME!\r
1116    *\r
1117    * @param e DOCUMENT ME!\r
1118    */\r
1119   public void showBoxes_actionPerformed()\r
1120   {\r
1121     getGroup().setDisplayBoxes(showBoxes.isSelected());\r
1122     refresh();\r
1123   }\r
1124 \r
1125   /**\r
1126    * DOCUMENT ME!\r
1127    *\r
1128    * @param e DOCUMENT ME!\r
1129    */\r
1130   public void showText_actionPerformed()\r
1131   {\r
1132     getGroup().setDisplayText(showText.isSelected());\r
1133     refresh();\r
1134   }\r
1135 \r
1136   /**\r
1137    * DOCUMENT ME!\r
1138    *\r
1139    * @param e DOCUMENT ME!\r
1140    */\r
1141   public void showColourText_actionPerformed()\r
1142   {\r
1143     getGroup().setColourText(showColourText.isSelected());\r
1144     refresh();\r
1145   }\r
1146 \r
1147   public void showLink(String url)\r
1148   {\r
1149     try\r
1150     {\r
1151       jalview.util.BrowserLauncher.openURL(url);\r
1152     }\r
1153     catch (Exception ex)\r
1154     {\r
1155       JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
1156                                             "Unixers: Couldn't find default web browser."\r
1157                                             +\r
1158           "\nAdd the full path to your browser in Preferences.",\r
1159                                             "Web browser not found",\r
1160                                             JOptionPane.WARNING_MESSAGE);\r
1161 \r
1162       ex.printStackTrace();\r
1163     }\r
1164   }\r
1165 \r
1166   void hideSequences(boolean representGroup)\r
1167   {\r
1168     SequenceGroup sg = ap.av.getSelectionGroup();\r
1169     if (sg == null || sg.getSize() < 1)\r
1170     {\r
1171       ap.av.hideSequence(new SequenceI[]\r
1172                          {sequence});\r
1173       return;\r
1174     }\r
1175 \r
1176     ap.av.setSelectionGroup(null);\r
1177 \r
1178     if (representGroup)\r
1179     {\r
1180       ap.av.hideRepSequences(sequence, sg);\r
1181 \r
1182       return;\r
1183     }\r
1184 \r
1185     int gsize = sg.getSize();\r
1186     SequenceI[] hseqs;\r
1187 \r
1188     hseqs = new SequenceI[gsize];\r
1189 \r
1190     int index = 0;\r
1191     for (int i = 0; i < gsize; i++)\r
1192     {\r
1193       hseqs[index++] = sg.getSequenceAt(i);\r
1194     }\r
1195 \r
1196     ap.av.hideSequence(hseqs);\r
1197   }\r
1198 \r
1199   public void copy_actionPerformed()\r
1200   {\r
1201     ap.alignFrame.copy_actionPerformed(null);\r
1202   }\r
1203 \r
1204   public void cut_actionPerformed()\r
1205   {\r
1206     ap.alignFrame.cut_actionPerformed(null);\r
1207   }\r
1208 \r
1209   void changeCase(ActionEvent e)\r
1210   {\r
1211     Object source = e.getSource();\r
1212     SequenceGroup sg = ap.av.getSelectionGroup();\r
1213 \r
1214     if (sg != null)\r
1215     {\r
1216       int[][] startEnd = ap.av.getVisibleRegionBoundaries(\r
1217           sg.getStartRes(), sg.getEndRes() + 1);\r
1218 \r
1219       String description;\r
1220       int caseChange;\r
1221 \r
1222       if (source == toggle)\r
1223       {\r
1224         description = "Toggle Case";\r
1225         caseChange = ChangeCaseCommand.TOGGLE_CASE;\r
1226       }\r
1227       else if (source == upperCase)\r
1228       {\r
1229         description = "To Upper Case";\r
1230         caseChange = ChangeCaseCommand.TO_UPPER;\r
1231       }\r
1232       else\r
1233       {\r
1234         description = "To Lower Case";\r
1235         caseChange = ChangeCaseCommand.TO_LOWER;\r
1236       }\r
1237 \r
1238       ChangeCaseCommand caseCommand = new ChangeCaseCommand(\r
1239           description, sg.getSequencesAsArray(ap.av.hiddenRepSequences),\r
1240           startEnd, caseChange\r
1241           );\r
1242 \r
1243       ap.alignFrame.addHistoryItem(caseCommand);\r
1244 \r
1245       ap.av.firePropertyChange("alignment", null,\r
1246                                ap.av.getAlignment().getSequences());\r
1247 \r
1248     }\r
1249   }\r
1250 \r
1251   public void outputText_actionPerformed(ActionEvent e)\r
1252   {\r
1253     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
1254     cap.setForInput(null);\r
1255     Desktop.addInternalFrame(cap,\r
1256                              "Alignment output - " + e.getActionCommand(), 600,\r
1257                              500);\r
1258 \r
1259     String[] omitHidden = null;\r
1260 \r
1261     if (ap.av.hasHiddenColumns)\r
1262     {\r
1263       System.out.println("PROMPT USER HERE");\r
1264       omitHidden = ap.av.getViewAsString(true);\r
1265     }\r
1266 \r
1267     cap.setText(new FormatAdapter().formatSequences(\r
1268         e.getActionCommand(),\r
1269         ap.av.getSelectionAsNewSequence(),\r
1270         omitHidden));\r
1271   }\r
1272 \r
1273   public void pdbFromFile_actionPerformed()\r
1274   {\r
1275     jalview.io.JalviewFileChooser chooser\r
1276         = new jalview.io.JalviewFileChooser(jalview.bin.Cache.\r
1277                                             getProperty(\r
1278                                                 "LAST_DIRECTORY"));\r
1279     chooser.setFileView(new jalview.io.JalviewFileView());\r
1280     chooser.setDialogTitle("Select a PDB file");\r
1281     chooser.setToolTipText("Load a PDB file");\r
1282 \r
1283     int value = chooser.showOpenDialog(null);\r
1284 \r
1285     if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)\r
1286     {\r
1287       PDBEntry entry = new PDBEntry();\r
1288       String choice = chooser.getSelectedFile().getPath();\r
1289       jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);\r
1290       try\r
1291       {\r
1292         MCview.PDBfile pdbfile = new MCview.PDBfile(choice,\r
1293             jalview.io.AppletFormatAdapter.FILE);\r
1294 \r
1295         if (pdbfile.id == null)\r
1296         {\r
1297           String reply = JOptionPane.showInternalInputDialog(\r
1298               Desktop.desktop,\r
1299               "Couldn't find a PDB id in the file supplied."\r
1300               + "Please enter an Id to identify this structure.",\r
1301               "No PDB Id in File", JOptionPane.QUESTION_MESSAGE);\r
1302           if (reply == null)\r
1303           {\r
1304             return;\r
1305           }\r
1306 \r
1307           entry.setId(reply);\r
1308         }\r
1309         else\r
1310         {\r
1311           entry.setId(pdbfile.id);\r
1312         }\r
1313       }\r
1314       catch (java.io.IOException ex)\r
1315       {\r
1316         ex.printStackTrace();\r
1317       }\r
1318 \r
1319       entry.setFile(choice);\r
1320       sequence.getDatasetSequence().addPDBId(entry);\r
1321     }\r
1322 \r
1323   }\r
1324 \r
1325   public void enterPDB_actionPerformed()\r
1326   {\r
1327     String id = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
1328         "Enter PDB Id", "Enter PDB Id", JOptionPane.QUESTION_MESSAGE);\r
1329 \r
1330     if (id != null && id.length() > 0)\r
1331     {\r
1332       PDBEntry entry = new PDBEntry();\r
1333       entry.setId(id);\r
1334       sequence.getDatasetSequence()\r
1335           .addPDBId(entry);\r
1336     }\r
1337   }\r
1338 \r
1339   public void discoverPDB_actionPerformed()\r
1340   {\r
1341     SequenceI[] sequences =\r
1342          ap.av.selectionGroup == null ?\r
1343            new Sequence[]{sequence}\r
1344          : ap.av.selectionGroup.getSequencesInOrder(ap.av.alignment);\r
1345 \r
1346     new jalview.io.DBRefFetcher(sequences,\r
1347         ap.alignFrame).fetchDBRefs(false);\r
1348   }\r
1349 \r
1350   public void sequenceFeature_actionPerformed()\r
1351   {\r
1352     SequenceGroup sg = ap.av.getSelectionGroup();\r
1353     if (sg == null)\r
1354     {\r
1355       return;\r
1356     }\r
1357 \r
1358     int gSize = sg.getSize();\r
1359     SequenceI[] seqs = new SequenceI[gSize];\r
1360     SequenceFeature[] features = new SequenceFeature[gSize];\r
1361 \r
1362     for (int i = 0; i < gSize; i++)\r
1363     {\r
1364       seqs[i] = sg.getSequenceAt(i).getDatasetSequence();\r
1365       int start = sg.getSequenceAt(i).findPosition(sg.getStartRes());\r
1366       int end = sg.findEndRes(sg.getSequenceAt(i));\r
1367       features[i] = new SequenceFeature(null, null, null, start, end, "Jalview");\r
1368     }\r
1369 \r
1370     if (ap.seqPanel.seqCanvas.getFeatureRenderer()\r
1371         .amendFeatures(seqs, features, true, ap))\r
1372     {\r
1373       ap.alignFrame.showSeqFeatures.setSelected(true);\r
1374       ap.av.setShowSequenceFeatures(true);\r
1375       ap.highlightSearchResults(null);\r
1376     }\r
1377   }\r
1378 \r
1379   public void textColour_actionPerformed()\r
1380   {\r
1381     SequenceGroup sg = getGroup();\r
1382     if (sg != null)\r
1383     {\r
1384       new TextColourChooser().chooseColour(ap, sg);\r
1385     }\r
1386   }\r
1387 \r
1388   public void colourByStructure(String pdbid)\r
1389   {\r
1390     Annotation [] anots = jalview.structure.StructureSelectionManager.getStructureSelectionManager()\r
1391         .colourSequenceFromStructure(sequence, pdbid);\r
1392 \r
1393     AlignmentAnnotation an = new AlignmentAnnotation(\r
1394       "Structure", "Coloured by "+pdbid, anots);\r
1395 \r
1396     ap.av.alignment.addAnnotation(an);\r
1397     an.createSequenceMapping(sequence, 0, true);\r
1398     //an.adjustForAlignment();\r
1399     ap.av.alignment.setAnnotationIndex(an,0);\r
1400 \r
1401     ap.adjustAnnotationHeight();\r
1402 \r
1403     sequence.addAlignmentAnnotation(an);\r
1404 \r
1405     }\r
1406 }\r