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