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