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