No more supergroup, set Sequence name / Description
[jalview.git] / src / jalview / gui / PopupMenu.java
1 /*\r
2  * Jalview - A Sequence Alignment Editor and Viewer\r
3  * Copyright (C) 2005 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 \r
36 /**\r
37  * DOCUMENT ME!\r
38  *\r
39  * @author $author$\r
40  * @version $Revision$\r
41  */\r
42 public class PopupMenu extends JPopupMenu\r
43 {\r
44     JMenu groupMenu = new JMenu();\r
45     JMenuItem groupName = new JMenuItem();\r
46     protected JRadioButtonMenuItem clustalColour = new JRadioButtonMenuItem();\r
47     protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem();\r
48     protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem();\r
49     protected JRadioButtonMenuItem hydrophobicityColour = new JRadioButtonMenuItem();\r
50     protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem();\r
51     protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem();\r
52     protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem();\r
53     protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem();\r
54     protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem();\r
55     protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem();\r
56     protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem();\r
57     protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();\r
58     JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();\r
59     protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();\r
60     AlignmentPanel ap;\r
61     JMenu sequenceMenu = new JMenu();\r
62     JMenuItem sequenceName = new JMenuItem();\r
63     Sequence sequence;\r
64     JMenuItem unGroupMenuItem = new JMenuItem();\r
65     JMenuItem outline = new JMenuItem();\r
66     JRadioButtonMenuItem nucleotideMenuItem = new JRadioButtonMenuItem();\r
67     JMenu colourMenu = new JMenu();\r
68     JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem();\r
69     JCheckBoxMenuItem showText = new JCheckBoxMenuItem();\r
70     JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();\r
71 \r
72     /**\r
73      * Creates a new PopupMenu object.\r
74      *\r
75      * @param ap DOCUMENT ME!\r
76      * @param seq DOCUMENT ME!\r
77      */\r
78     public PopupMenu(final AlignmentPanel ap, Sequence seq)\r
79     {\r
80         ///////////////////////////////////////////////////////////\r
81         // If this is activated from the sequence panel, the user may want to\r
82         // edit or annotate a particular residue. Therefore display the residue menu\r
83         //\r
84         // If from the IDPanel, we must display the sequence menu\r
85         //////////////////////////////////////////////////////////\r
86         this.ap = ap;\r
87         sequence = seq;\r
88 \r
89         ButtonGroup colours = new ButtonGroup();\r
90         colours.add(noColourmenuItem);\r
91         colours.add(clustalColour);\r
92         colours.add(zappoColour);\r
93         colours.add(taylorColour);\r
94         colours.add(hydrophobicityColour);\r
95         colours.add(helixColour);\r
96         colours.add(strandColour);\r
97         colours.add(turnColour);\r
98         colours.add(buriedColour);\r
99         colours.add(abovePIDColour);\r
100         colours.add(userDefinedColour);\r
101         colours.add(PIDColour);\r
102         colours.add(BLOSUM62Colour);\r
103 \r
104         try\r
105         {\r
106             jbInit();\r
107         }\r
108         catch (Exception e)\r
109         {\r
110             e.printStackTrace();\r
111         }\r
112 \r
113 \r
114         if ((seq != null)\r
115             && seq.getDatasetSequence().getPDBId() != null)\r
116         {\r
117           java.util.Enumeration e = seq.getDatasetSequence().getPDBId().elements();\r
118           while(e.hasMoreElements())\r
119           {\r
120             final PDBEntry pdb = (PDBEntry)e.nextElement();\r
121 \r
122             JMenuItem pdbMenuItem = new JMenuItem();\r
123             pdbMenuItem.setText("View PDB entry: "+pdb.getId());\r
124             pdbMenuItem.addActionListener(new java.awt.event.ActionListener()\r
125             {\r
126                 public void actionPerformed(ActionEvent e)\r
127                 {\r
128                   new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas);\r
129                 }\r
130             });\r
131             sequenceMenu.add(pdbMenuItem);\r
132           }\r
133 \r
134         }\r
135 \r
136         SequenceGroup sg = ap.av.getSelectionGroup();\r
137 \r
138         if (sg != null)\r
139         {\r
140             groupName.setText(sg.getName());\r
141 \r
142             if (sg.cs instanceof ZappoColourScheme)\r
143             {\r
144                 zappoColour.setSelected(true);\r
145             }\r
146             else if (sg.cs instanceof TaylorColourScheme)\r
147             {\r
148                 taylorColour.setSelected(true);\r
149             }\r
150             else if (sg.cs instanceof PIDColourScheme)\r
151             {\r
152                 PIDColour.setSelected(true);\r
153             }\r
154             else if (sg.cs instanceof Blosum62ColourScheme)\r
155             {\r
156                 BLOSUM62Colour.setSelected(true);\r
157             }\r
158             else if (sg.cs instanceof UserColourScheme)\r
159             {\r
160                 userDefinedColour.setSelected(true);\r
161             }\r
162             else if (sg.cs instanceof HydrophobicColourScheme)\r
163             {\r
164                 hydrophobicityColour.setSelected(true);\r
165             }\r
166             else if (sg.cs instanceof HelixColourScheme)\r
167             {\r
168                 helixColour.setSelected(true);\r
169             }\r
170             else if (sg.cs instanceof StrandColourScheme)\r
171             {\r
172                 strandColour.setSelected(true);\r
173             }\r
174             else if (sg.cs instanceof TurnColourScheme)\r
175             {\r
176                 turnColour.setSelected(true);\r
177             }\r
178             else if (sg.cs instanceof BuriedColourScheme)\r
179             {\r
180                 buriedColour.setSelected(true);\r
181             }\r
182             else if (sg.cs instanceof ClustalxColourScheme)\r
183             {\r
184                 clustalColour.setSelected(true);\r
185             }\r
186             else\r
187             {\r
188                 noColourmenuItem.setSelected(true);\r
189             }\r
190 \r
191             if (sg.cs!=null && sg.cs.conservationApplied())\r
192             {\r
193                 conservationMenuItem.setSelected(true);\r
194             }\r
195 \r
196             showText.setSelected(sg.getDisplayText());\r
197             showColourText.setSelected(sg.getColourText());\r
198             showBoxes.setSelected(sg.getDisplayBoxes());\r
199         }\r
200 \r
201         if (!ap.av.alignment.getGroups().contains(sg))\r
202         {\r
203             unGroupMenuItem.setVisible(false);\r
204         }\r
205         else\r
206         {\r
207             groupMenu.insertSeparator(3);\r
208         }\r
209 \r
210         if (seq == null)\r
211         {\r
212             sequenceMenu.setVisible(false);\r
213         }\r
214         else\r
215         {\r
216           java.util.Vector links = Preferences.sequenceURLLinks;\r
217 \r
218           JMenu linkMenu = new JMenu("Link");\r
219           JMenuItem item;\r
220           for(int i=0; i<links.size(); i++)\r
221           {\r
222             String link = links.elementAt(i).toString();\r
223 \r
224             item = new JMenuItem(link.substring(0, link.indexOf("|")));\r
225             String id = sequence.getName();\r
226             if(id.indexOf("|")>-1)\r
227               id = id.substring(id.lastIndexOf("|")+1);\r
228 \r
229             final String url = link.substring(link.indexOf("|")+1, link.indexOf("$SEQUENCE_ID$"))\r
230                 + id +\r
231                 link.substring(link.indexOf("$SEQUENCE_ID$") + 13);\r
232 \r
233 \r
234             item.addActionListener(new java.awt.event.ActionListener()\r
235             {\r
236                 public void actionPerformed(ActionEvent e)\r
237                 {\r
238                     showLink(url);\r
239                 }\r
240             });\r
241 \r
242             linkMenu.add(item);\r
243           }\r
244           add(linkMenu);\r
245         }\r
246     }\r
247 \r
248     /**\r
249      * DOCUMENT ME!\r
250      *\r
251      * @throws Exception DOCUMENT ME!\r
252      */\r
253     private void jbInit() throws Exception\r
254     {\r
255         groupMenu.setText("Group");\r
256         groupMenu.setText("Define");\r
257         groupName.setText("Name");\r
258         groupName.addActionListener(new java.awt.event.ActionListener()\r
259             {\r
260                 public void actionPerformed(ActionEvent e)\r
261                 {\r
262                     groupName_actionPerformed(e);\r
263                 }\r
264             });\r
265         sequenceMenu.setText("Sequence");\r
266         sequenceName.setText("Edit Name/Desciption");\r
267         sequenceName.addActionListener(new java.awt.event.ActionListener()\r
268             {\r
269                 public void actionPerformed(ActionEvent e)\r
270                 {\r
271                     sequenceName_actionPerformed(e);\r
272                 }\r
273             });\r
274         PIDColour.setFocusPainted(false);\r
275         unGroupMenuItem.setText("Remove Group");\r
276         unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
277             {\r
278                 public void actionPerformed(ActionEvent e)\r
279                 {\r
280                     unGroupMenuItem_actionPerformed(e);\r
281                 }\r
282             });\r
283 \r
284         outline.setText("Border colour");\r
285         outline.addActionListener(new java.awt.event.ActionListener()\r
286             {\r
287                 public void actionPerformed(ActionEvent e)\r
288                 {\r
289                     outline_actionPerformed(e);\r
290                 }\r
291             });\r
292         nucleotideMenuItem.setText("Nucleotide");\r
293         nucleotideMenuItem.addActionListener(new ActionListener()\r
294             {\r
295                 public void actionPerformed(ActionEvent e)\r
296                 {\r
297                     nucleotideMenuItem_actionPerformed(e);\r
298                 }\r
299             });\r
300         colourMenu.setText("Group Colour");\r
301         showBoxes.setText("Boxes");\r
302         showBoxes.setState(true);\r
303         showBoxes.addActionListener(new ActionListener()\r
304             {\r
305                 public void actionPerformed(ActionEvent e)\r
306                 {\r
307                     showBoxes_actionPerformed(e);\r
308                 }\r
309             });\r
310         showText.setText("Text");\r
311         showText.setState(true);\r
312         showText.addActionListener(new ActionListener()\r
313             {\r
314                 public void actionPerformed(ActionEvent e)\r
315                 {\r
316                     showText_actionPerformed(e);\r
317                 }\r
318             });\r
319         showColourText.setText("Colour Text");\r
320         showColourText.addActionListener(new ActionListener()\r
321             {\r
322                 public void actionPerformed(ActionEvent e)\r
323                 {\r
324                     showColourText_actionPerformed(e);\r
325                 }\r
326             });\r
327         add(groupMenu);\r
328         add(sequenceMenu);\r
329         groupMenu.add(groupName);\r
330         groupMenu.addSeparator();\r
331         groupMenu.add(unGroupMenuItem);\r
332         groupMenu.add(colourMenu);\r
333         groupMenu.addSeparator();\r
334         groupMenu.add(showBoxes);\r
335         groupMenu.add(showText);\r
336         groupMenu.add(showColourText);\r
337         groupMenu.addSeparator();\r
338         groupMenu.add(outline);\r
339         sequenceMenu.add(sequenceName);\r
340         colourMenu.add(noColourmenuItem);\r
341         colourMenu.add(clustalColour);\r
342         colourMenu.add(BLOSUM62Colour);\r
343         colourMenu.add(PIDColour);\r
344         colourMenu.add(zappoColour);\r
345         colourMenu.add(taylorColour);\r
346         colourMenu.add(hydrophobicityColour);\r
347         colourMenu.add(helixColour);\r
348         colourMenu.add(strandColour);\r
349         colourMenu.add(turnColour);\r
350         colourMenu.add(buriedColour);\r
351         colourMenu.add(nucleotideMenuItem);\r
352         colourMenu.add(userDefinedColour);\r
353 \r
354         if(jalview.gui.UserDefinedColours.getUserColourSchemes()!=null)\r
355         {\r
356           java.util.Enumeration userColours = jalview.gui.UserDefinedColours.\r
357               getUserColourSchemes().keys();\r
358 \r
359           while (userColours.hasMoreElements())\r
360           {\r
361             JMenuItem item = new JMenuItem(userColours.\r
362                 nextElement().toString());\r
363             item.addActionListener(new ActionListener()\r
364             {\r
365               public void actionPerformed(ActionEvent evt)\r
366               {\r
367                 userDefinedColour_actionPerformed(evt);\r
368               }\r
369             });\r
370             colourMenu.add(item);\r
371           }\r
372         }\r
373 \r
374 \r
375         colourMenu.addSeparator();\r
376         colourMenu.add(abovePIDColour);\r
377         colourMenu.add(conservationMenuItem);\r
378         noColourmenuItem.setText("None");\r
379         noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
380             {\r
381                 public void actionPerformed(ActionEvent e)\r
382                 {\r
383                     noColourmenuItem_actionPerformed(e);\r
384                 }\r
385             });\r
386 \r
387         clustalColour.setText("Clustalx colours");\r
388         clustalColour.addActionListener(new java.awt.event.ActionListener()\r
389             {\r
390                 public void actionPerformed(ActionEvent e)\r
391                 {\r
392                     clustalColour_actionPerformed(e);\r
393                 }\r
394             });\r
395         zappoColour.setText("Zappo");\r
396         zappoColour.addActionListener(new java.awt.event.ActionListener()\r
397             {\r
398                 public void actionPerformed(ActionEvent e)\r
399                 {\r
400                     zappoColour_actionPerformed(e);\r
401                 }\r
402             });\r
403         taylorColour.setText("Taylor");\r
404         taylorColour.addActionListener(new java.awt.event.ActionListener()\r
405             {\r
406                 public void actionPerformed(ActionEvent e)\r
407                 {\r
408                     taylorColour_actionPerformed(e);\r
409                 }\r
410             });\r
411         hydrophobicityColour.setText("Hydrophobicity");\r
412         hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()\r
413             {\r
414                 public void actionPerformed(ActionEvent e)\r
415                 {\r
416                     hydrophobicityColour_actionPerformed(e);\r
417                 }\r
418             });\r
419         helixColour.setText("Helix propensity");\r
420         helixColour.addActionListener(new java.awt.event.ActionListener()\r
421             {\r
422                 public void actionPerformed(ActionEvent e)\r
423                 {\r
424                     helixColour_actionPerformed(e);\r
425                 }\r
426             });\r
427         strandColour.setText("Strand propensity");\r
428         strandColour.addActionListener(new java.awt.event.ActionListener()\r
429             {\r
430                 public void actionPerformed(ActionEvent e)\r
431                 {\r
432                     strandColour_actionPerformed(e);\r
433                 }\r
434             });\r
435         turnColour.setText("Turn propensity");\r
436         turnColour.addActionListener(new java.awt.event.ActionListener()\r
437             {\r
438                 public void actionPerformed(ActionEvent e)\r
439                 {\r
440                     turnColour_actionPerformed(e);\r
441                 }\r
442             });\r
443         buriedColour.setText("Buried Index");\r
444         buriedColour.addActionListener(new java.awt.event.ActionListener()\r
445             {\r
446                 public void actionPerformed(ActionEvent e)\r
447                 {\r
448                     buriedColour_actionPerformed(e);\r
449                 }\r
450             });\r
451         abovePIDColour.setText("Above % Identity");\r
452         abovePIDColour.addActionListener(new java.awt.event.ActionListener()\r
453             {\r
454                 public void actionPerformed(ActionEvent e)\r
455                 {\r
456                     abovePIDColour_actionPerformed(e);\r
457                 }\r
458             });\r
459         userDefinedColour.setText("User Defined...");\r
460         userDefinedColour.addActionListener(new java.awt.event.ActionListener()\r
461             {\r
462                 public void actionPerformed(ActionEvent e)\r
463                 {\r
464                     userDefinedColour_actionPerformed(e);\r
465                 }\r
466             });\r
467         PIDColour.setText("Percentage Identity");\r
468         PIDColour.addActionListener(new java.awt.event.ActionListener()\r
469             {\r
470                 public void actionPerformed(ActionEvent e)\r
471                 {\r
472                     PIDColour_actionPerformed(e);\r
473                 }\r
474             });\r
475         BLOSUM62Colour.setText("BLOSUM62");\r
476         BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()\r
477             {\r
478                 public void actionPerformed(ActionEvent e)\r
479                 {\r
480                     BLOSUM62Colour_actionPerformed(e);\r
481                 }\r
482             });\r
483         conservationMenuItem.setText("Conservation");\r
484         conservationMenuItem.addActionListener(new java.awt.event.ActionListener()\r
485             {\r
486                 public void actionPerformed(ActionEvent e)\r
487                 {\r
488                     conservationMenuItem_actionPerformed(e);\r
489                 }\r
490             });\r
491     }\r
492 \r
493     /**\r
494      * DOCUMENT ME!\r
495      */\r
496     void refresh()\r
497     {\r
498         if (ap.overviewPanel != null)\r
499           ap.overviewPanel.updateOverviewImage();\r
500 \r
501         ap.seqPanel.repaint();\r
502     }\r
503 \r
504     /**\r
505      * DOCUMENT ME!\r
506      *\r
507      * @param e DOCUMENT ME!\r
508      */\r
509     protected void clustalColour_actionPerformed(ActionEvent e)\r
510     {\r
511         SequenceGroup sg = getGroup();\r
512         sg.cs = new ClustalxColourScheme(sg.sequences,\r
513                 ap.av.alignment.getWidth());\r
514         refresh();\r
515     }\r
516 \r
517     /**\r
518      * DOCUMENT ME!\r
519      *\r
520      * @param e DOCUMENT ME!\r
521      */\r
522     protected void zappoColour_actionPerformed(ActionEvent e)\r
523     {\r
524         getGroup().cs = new ZappoColourScheme();\r
525         refresh();\r
526     }\r
527 \r
528     /**\r
529      * DOCUMENT ME!\r
530      *\r
531      * @param e DOCUMENT ME!\r
532      */\r
533     protected void taylorColour_actionPerformed(ActionEvent e)\r
534     {\r
535         getGroup().cs = new TaylorColourScheme();\r
536         refresh();\r
537     }\r
538 \r
539     /**\r
540      * DOCUMENT ME!\r
541      *\r
542      * @param e DOCUMENT ME!\r
543      */\r
544     protected void hydrophobicityColour_actionPerformed(ActionEvent e)\r
545     {\r
546         getGroup().cs = new HydrophobicColourScheme();\r
547         refresh();\r
548     }\r
549 \r
550     /**\r
551      * DOCUMENT ME!\r
552      *\r
553      * @param e DOCUMENT ME!\r
554      */\r
555     protected void helixColour_actionPerformed(ActionEvent e)\r
556     {\r
557         getGroup().cs = new HelixColourScheme();\r
558         refresh();\r
559     }\r
560 \r
561     /**\r
562      * DOCUMENT ME!\r
563      *\r
564      * @param e DOCUMENT ME!\r
565      */\r
566     protected void strandColour_actionPerformed(ActionEvent e)\r
567     {\r
568         getGroup().cs = new StrandColourScheme();\r
569         refresh();\r
570     }\r
571 \r
572     /**\r
573      * DOCUMENT ME!\r
574      *\r
575      * @param e DOCUMENT ME!\r
576      */\r
577     protected void turnColour_actionPerformed(ActionEvent e)\r
578     {\r
579         getGroup().cs = new TurnColourScheme();\r
580         refresh();\r
581     }\r
582 \r
583     /**\r
584      * DOCUMENT ME!\r
585      *\r
586      * @param e DOCUMENT ME!\r
587      */\r
588     protected void buriedColour_actionPerformed(ActionEvent e)\r
589     {\r
590         getGroup().cs = new BuriedColourScheme();\r
591         refresh();\r
592     }\r
593 \r
594     /**\r
595      * DOCUMENT ME!\r
596      *\r
597      * @param e DOCUMENT ME!\r
598      */\r
599     public void nucleotideMenuItem_actionPerformed(ActionEvent e)\r
600     {\r
601         getGroup().cs = new NucleotideColourScheme();\r
602         refresh();\r
603     }\r
604 \r
605     /**\r
606      * DOCUMENT ME!\r
607      *\r
608      * @param e DOCUMENT ME!\r
609      */\r
610     protected void abovePIDColour_actionPerformed(ActionEvent e)\r
611     {\r
612         SequenceGroup sg = getGroup();\r
613         if(sg.cs==null)\r
614           return;\r
615 \r
616         if (abovePIDColour.isSelected())\r
617         {\r
618             sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
619                     ap.av.alignment.getWidth()));\r
620 \r
621             int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
622                     getGroup().getName());\r
623 \r
624            sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());\r
625 \r
626             SliderPanel.showPIDSlider();\r
627         }\r
628         else // remove PIDColouring\r
629         {\r
630             sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
631         }\r
632 \r
633         refresh();\r
634     }\r
635 \r
636     /**\r
637      * DOCUMENT ME!\r
638      *\r
639      * @param e DOCUMENT ME!\r
640      */\r
641     protected void userDefinedColour_actionPerformed(ActionEvent e)\r
642     {\r
643        SequenceGroup sg = getGroup();\r
644 \r
645        if (e.getActionCommand().equals("User Defined..."))\r
646          new UserDefinedColours(ap, sg);\r
647        else\r
648        {\r
649          UserColourScheme udc = (UserColourScheme) UserDefinedColours.\r
650              getUserColourSchemes().get(e.getActionCommand());\r
651 \r
652          sg.cs = udc;\r
653        }\r
654      }\r
655     /**\r
656      * DOCUMENT ME!\r
657      *\r
658      * @param e DOCUMENT ME!\r
659      */\r
660     protected void PIDColour_actionPerformed(ActionEvent e)\r
661     {\r
662         SequenceGroup sg = getGroup();\r
663         sg.cs = new PIDColourScheme();\r
664         sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
665                 ap.av.alignment.getWidth()));\r
666         refresh();\r
667     }\r
668 \r
669     /**\r
670      * DOCUMENT ME!\r
671      *\r
672      * @param e DOCUMENT ME!\r
673      */\r
674     protected void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
675     {\r
676         SequenceGroup sg = getGroup();\r
677 \r
678         sg.cs = new Blosum62ColourScheme();\r
679 \r
680         sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
681                 ap.av.alignment.getWidth()));\r
682 \r
683         refresh();\r
684     }\r
685 \r
686     /**\r
687      * DOCUMENT ME!\r
688      *\r
689      * @param e DOCUMENT ME!\r
690      */\r
691     protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
692     {\r
693         getGroup().cs = null;\r
694         refresh();\r
695     }\r
696 \r
697     /**\r
698      * DOCUMENT ME!\r
699      *\r
700      * @param e DOCUMENT ME!\r
701      */\r
702     protected void conservationMenuItem_actionPerformed(ActionEvent e)\r
703     {\r
704         SequenceGroup sg = getGroup();\r
705         if(sg.cs==null)\r
706           return;\r
707 \r
708         if (conservationMenuItem.isSelected())\r
709         {\r
710             Conservation c = new Conservation("Group",\r
711                     ResidueProperties.propHash, 3, sg.sequences, 0,\r
712                     ap.av.alignment.getWidth());\r
713 \r
714             c.calculate();\r
715             c.verdict(false, ap.av.ConsPercGaps);\r
716 \r
717             sg.cs.setConservation(c);\r
718 \r
719             SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());\r
720             SliderPanel.showConservationSlider();\r
721         }\r
722         else // remove ConservationColouring\r
723         {\r
724             sg.cs.setConservation(null);\r
725         }\r
726 \r
727         refresh();\r
728     }\r
729 \r
730     /**\r
731      * DOCUMENT ME!\r
732      *\r
733      * @param e DOCUMENT ME!\r
734      */\r
735     protected void groupName_actionPerformed(ActionEvent e)\r
736     {\r
737         SequenceGroup sg = getGroup();\r
738         String reply = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
739                 "Enter new group name", "Edit group name",\r
740                 JOptionPane.QUESTION_MESSAGE);\r
741 \r
742         if (reply == null)\r
743         {\r
744             return;\r
745         }\r
746 \r
747         sg.setName(reply);\r
748         groupName.setText(reply);\r
749     }\r
750 \r
751     /**\r
752      * DOCUMENT ME!\r
753      *\r
754      * @param e DOCUMENT ME!\r
755      */\r
756     protected void analyze_actionPerformed(ActionEvent e)\r
757     {\r
758         CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
759         JInternalFrame frame = new JInternalFrame();\r
760         frame.setContentPane(cap);\r
761         Desktop.addInternalFrame(frame, "Analyze this - ", 400, 300);\r
762 \r
763         SequenceGroup sg = getGroup();\r
764         StringBuffer sb = new StringBuffer();\r
765 \r
766         for (int i = 0; i < sg.sequences.size(); i++)\r
767         {\r
768             Sequence tmp = (Sequence) sg.sequences.get(i);\r
769             sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1));\r
770             sb.append("\n");\r
771         }\r
772 \r
773         sb.append("Something amazing will happen soon");\r
774         cap.setText(sb.toString());\r
775     }\r
776 \r
777     /**\r
778      * DOCUMENT ME!\r
779      *\r
780      * @return DOCUMENT ME!\r
781      */\r
782     SequenceGroup getGroup()\r
783     {\r
784         SequenceGroup sg = ap.av.getSelectionGroup();\r
785       // this method won't add a new group if it already exists\r
786         if(sg!=null)\r
787           ap.av.alignment.addGroup(sg);\r
788 \r
789         return sg;\r
790     }\r
791 \r
792     /**\r
793      * DOCUMENT ME!\r
794      *\r
795      * @param e DOCUMENT ME!\r
796      */\r
797     void sequenceName_actionPerformed(ActionEvent e)\r
798     {\r
799       JLabel idlabel = new JLabel(  "       Sequence Name ");\r
800       JLabel desclabel = new JLabel("Sequence Description ");\r
801       idlabel.setFont(new Font("Courier", Font.PLAIN, 12));\r
802       desclabel.setFont(new Font("Courier", Font.PLAIN, 12));\r
803       JTextField id = new JTextField(sequence.getName(), 40);\r
804       JTextField description = new JTextField(sequence.getDescription(), 40);\r
805       JPanel panel = new JPanel(new BorderLayout());\r
806       JPanel panel2 = new JPanel(new BorderLayout());\r
807       panel2.add(idlabel, BorderLayout.WEST);\r
808       panel2.add(id, BorderLayout.CENTER);\r
809       panel.add(panel2, BorderLayout.NORTH);\r
810       panel2 = new JPanel(new BorderLayout());\r
811       panel2.add(desclabel, BorderLayout.WEST);\r
812       panel2.add(description, BorderLayout.CENTER);\r
813       panel.add(panel2, BorderLayout.SOUTH);\r
814 \r
815 \r
816        int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,\r
817           panel, "Edit Sequence Name/Description",\r
818           JOptionPane.OK_CANCEL_OPTION );\r
819 \r
820 \r
821         if (reply != JOptionPane.OK_OPTION )\r
822         {\r
823             return;\r
824         }\r
825 \r
826         String s = id.getText();\r
827 \r
828         if (s != null)\r
829         {\r
830             if (s.indexOf(" ") > -1)\r
831             {\r
832                 JOptionPane.showMessageDialog(ap,\r
833                     "Spaces have been converted to \"_\"",\r
834                     "No spaces allowed in Sequence Name",\r
835                     JOptionPane.WARNING_MESSAGE);\r
836             }\r
837 \r
838             s = s.replace(' ', '_');\r
839             sequence.getDatasetSequence().setName(s);\r
840             sequence.setName(s);\r
841             ap.repaint();\r
842         }\r
843 \r
844         sequence.getDatasetSequence().setDescription(description.getText());\r
845         sequence.setDescription(description.getText());\r
846     }\r
847 \r
848     /**\r
849      * DOCUMENT ME!\r
850      *\r
851      * @param e DOCUMENT ME!\r
852      */\r
853     void unGroupMenuItem_actionPerformed(ActionEvent e)\r
854     {\r
855         SequenceGroup sg = ap.av.getSelectionGroup();\r
856         ap.av.alignment.deleteGroup(sg);\r
857         ap.av.setSelectionGroup(null);\r
858         refresh();\r
859     }\r
860 \r
861 \r
862     /**\r
863      * DOCUMENT ME!\r
864      *\r
865      * @param e DOCUMENT ME!\r
866      */\r
867     protected void outline_actionPerformed(ActionEvent e)\r
868     {\r
869         SequenceGroup sg = getGroup();\r
870         Color col = JColorChooser.showDialog(this, "Select Outline Colour",\r
871                 Color.BLUE);\r
872 \r
873         if (col != null)\r
874         {\r
875             sg.setOutlineColour(col);\r
876         }\r
877 \r
878         refresh();\r
879     }\r
880 \r
881     /**\r
882      * DOCUMENT ME!\r
883      *\r
884      * @param e DOCUMENT ME!\r
885      */\r
886     public void showBoxes_actionPerformed(ActionEvent e)\r
887     {\r
888         getGroup().setDisplayBoxes(showBoxes.isSelected());\r
889         refresh();\r
890     }\r
891 \r
892     /**\r
893      * DOCUMENT ME!\r
894      *\r
895      * @param e DOCUMENT ME!\r
896      */\r
897     public void showText_actionPerformed(ActionEvent e)\r
898     {\r
899         getGroup().setDisplayText(showText.isSelected());\r
900         refresh();\r
901     }\r
902 \r
903     /**\r
904      * DOCUMENT ME!\r
905      *\r
906      * @param e DOCUMENT ME!\r
907      */\r
908     public void showColourText_actionPerformed(ActionEvent e)\r
909     {\r
910         getGroup().setColourText(showColourText.isSelected());\r
911         refresh();\r
912     }\r
913 \r
914     public void showLink(String url)\r
915     {\r
916       try\r
917       {\r
918         jalview.util.BrowserLauncher.openURL(url);\r
919       }\r
920       catch (Exception ex)\r
921       {\r
922         JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
923             "Unixers: Couldn't find default web browser."\r
924            +"\nAdd the full path to your browser in Preferences.",\r
925            "Web browser not found", JOptionPane.WARNING_MESSAGE );\r
926 \r
927 \r
928         ex.printStackTrace();\r
929       }\r
930     }\r
931 }\r