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