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