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