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