Don't parse input id, leave it as it is
[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 = new PDBEntry();\r
121             pdb.setId("pdb");\r
122 \r
123 \r
124               //  (PDBEntry)e.nextElement();\r
125             JMenuItem pdbMenuItem = new JMenuItem();\r
126             pdbMenuItem.setText("View PDB entry: "+pdb.getId());\r
127             pdbMenuItem.addActionListener(new java.awt.event.ActionListener()\r
128             {\r
129                 public void actionPerformed(ActionEvent e)\r
130                 {\r
131                   new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas);\r
132                 }\r
133             });\r
134             sequenceMenu.add(pdbMenuItem);\r
135           }\r
136 \r
137         }\r
138 \r
139         SequenceGroup sg = ap.av.getSelectionGroup();\r
140 \r
141         if (sg != null)\r
142         {\r
143             groupName.setText(sg.getName());\r
144 \r
145             if (sg.cs instanceof ZappoColourScheme)\r
146             {\r
147                 zappoColour.setSelected(true);\r
148             }\r
149             else if (sg.cs instanceof TaylorColourScheme)\r
150             {\r
151                 taylorColour.setSelected(true);\r
152             }\r
153             else if (sg.cs instanceof PIDColourScheme)\r
154             {\r
155                 PIDColour.setSelected(true);\r
156             }\r
157             else if (sg.cs instanceof Blosum62ColourScheme)\r
158             {\r
159                 BLOSUM62Colour.setSelected(true);\r
160             }\r
161             else if (sg.cs instanceof UserColourScheme)\r
162             {\r
163                 userDefinedColour.setSelected(true);\r
164             }\r
165             else if (sg.cs instanceof HydrophobicColourScheme)\r
166             {\r
167                 hydrophobicityColour.setSelected(true);\r
168             }\r
169             else if (sg.cs instanceof HelixColourScheme)\r
170             {\r
171                 helixColour.setSelected(true);\r
172             }\r
173             else if (sg.cs instanceof StrandColourScheme)\r
174             {\r
175                 strandColour.setSelected(true);\r
176             }\r
177             else if (sg.cs instanceof TurnColourScheme)\r
178             {\r
179                 turnColour.setSelected(true);\r
180             }\r
181             else if (sg.cs instanceof BuriedColourScheme)\r
182             {\r
183                 buriedColour.setSelected(true);\r
184             }\r
185             else if (sg.cs instanceof ClustalxColourScheme)\r
186             {\r
187                 clustalColour.setSelected(true);\r
188             }\r
189             else\r
190             {\r
191                 noColourmenuItem.setSelected(true);\r
192             }\r
193 \r
194             if (sg.cs!=null && sg.cs.conservationApplied())\r
195             {\r
196                 conservationMenuItem.setSelected(true);\r
197             }\r
198 \r
199             showText.setSelected(sg.getDisplayText());\r
200             showColourText.setSelected(sg.getColourText());\r
201             showBoxes.setSelected(sg.getDisplayBoxes());\r
202         }\r
203 \r
204         if (!ap.av.alignment.getGroups().contains(sg))\r
205         {\r
206             unGroupMenuItem.setVisible(false);\r
207         }\r
208         else\r
209         {\r
210             groupMenu.insertSeparator(3);\r
211         }\r
212 \r
213         if (seq == null)\r
214         {\r
215             sequenceMenu.setVisible(false);\r
216         }\r
217         else\r
218         {\r
219           java.util.Vector links = Preferences.sequenceURLLinks;\r
220 \r
221           JMenu linkMenu = new JMenu("Link");\r
222           JMenuItem item;\r
223           for(int i=0; i<links.size(); i++)\r
224           {\r
225             String link = links.elementAt(i).toString();\r
226 \r
227             item = new JMenuItem(link.substring(0, link.indexOf("|")));\r
228 \r
229             final String url = link.substring(link.indexOf("|")+1, link.indexOf("$SEQUENCE_ID$"))\r
230                 + sequence.getName() +\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");\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         SequenceGroup sg = getGroup();\r
499         if(sg!=null)\r
500         {\r
501           SuperGroup superG = ap.av.alignment.getSuperGroup(sg);\r
502 \r
503           if (superG != null)\r
504           {\r
505             superG.setSuperGroupProperties(sg);\r
506           }\r
507         }\r
508         if (ap.overviewPanel != null)\r
509           ap.overviewPanel.updateOverviewImage();\r
510 \r
511         ap.seqPanel.repaint();\r
512     }\r
513 \r
514     /**\r
515      * DOCUMENT ME!\r
516      *\r
517      * @param e DOCUMENT ME!\r
518      */\r
519     protected void clustalColour_actionPerformed(ActionEvent e)\r
520     {\r
521         SequenceGroup sg = getGroup();\r
522         sg.cs = new ClustalxColourScheme(sg.sequences,\r
523                 ap.av.alignment.getWidth());\r
524         refresh();\r
525     }\r
526 \r
527     /**\r
528      * DOCUMENT ME!\r
529      *\r
530      * @param e DOCUMENT ME!\r
531      */\r
532     protected void zappoColour_actionPerformed(ActionEvent e)\r
533     {\r
534         getGroup().cs = new ZappoColourScheme();\r
535         refresh();\r
536     }\r
537 \r
538     /**\r
539      * DOCUMENT ME!\r
540      *\r
541      * @param e DOCUMENT ME!\r
542      */\r
543     protected void taylorColour_actionPerformed(ActionEvent e)\r
544     {\r
545         getGroup().cs = new TaylorColourScheme();\r
546         refresh();\r
547     }\r
548 \r
549     /**\r
550      * DOCUMENT ME!\r
551      *\r
552      * @param e DOCUMENT ME!\r
553      */\r
554     protected void hydrophobicityColour_actionPerformed(ActionEvent e)\r
555     {\r
556         getGroup().cs = new HydrophobicColourScheme();\r
557         refresh();\r
558     }\r
559 \r
560     /**\r
561      * DOCUMENT ME!\r
562      *\r
563      * @param e DOCUMENT ME!\r
564      */\r
565     protected void helixColour_actionPerformed(ActionEvent e)\r
566     {\r
567         getGroup().cs = new HelixColourScheme();\r
568         refresh();\r
569     }\r
570 \r
571     /**\r
572      * DOCUMENT ME!\r
573      *\r
574      * @param e DOCUMENT ME!\r
575      */\r
576     protected void strandColour_actionPerformed(ActionEvent e)\r
577     {\r
578         getGroup().cs = new StrandColourScheme();\r
579         refresh();\r
580     }\r
581 \r
582     /**\r
583      * DOCUMENT ME!\r
584      *\r
585      * @param e DOCUMENT ME!\r
586      */\r
587     protected void turnColour_actionPerformed(ActionEvent e)\r
588     {\r
589         getGroup().cs = new TurnColourScheme();\r
590         refresh();\r
591     }\r
592 \r
593     /**\r
594      * DOCUMENT ME!\r
595      *\r
596      * @param e DOCUMENT ME!\r
597      */\r
598     protected void buriedColour_actionPerformed(ActionEvent e)\r
599     {\r
600         getGroup().cs = new BuriedColourScheme();\r
601         refresh();\r
602     }\r
603 \r
604     /**\r
605      * DOCUMENT ME!\r
606      *\r
607      * @param e DOCUMENT ME!\r
608      */\r
609     public void nucleotideMenuItem_actionPerformed(ActionEvent e)\r
610     {\r
611         getGroup().cs = new NucleotideColourScheme();\r
612         refresh();\r
613     }\r
614 \r
615     /**\r
616      * DOCUMENT ME!\r
617      *\r
618      * @param e DOCUMENT ME!\r
619      */\r
620     protected void abovePIDColour_actionPerformed(ActionEvent e)\r
621     {\r
622         SequenceGroup sg = getGroup();\r
623         if(sg.cs==null)\r
624           return;\r
625 \r
626         if (abovePIDColour.isSelected())\r
627         {\r
628             sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
629                     ap.av.alignment.getWidth()));\r
630 \r
631             int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
632                     getGroup().getName());\r
633 \r
634            sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());\r
635 \r
636             SliderPanel.showPIDSlider();\r
637         }\r
638         else // remove PIDColouring\r
639         {\r
640             sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());\r
641         }\r
642 \r
643         refresh();\r
644     }\r
645 \r
646     /**\r
647      * DOCUMENT ME!\r
648      *\r
649      * @param e DOCUMENT ME!\r
650      */\r
651     protected void userDefinedColour_actionPerformed(ActionEvent e)\r
652     {\r
653        SequenceGroup sg = getGroup();\r
654 \r
655        if (e.getActionCommand().equals("User Defined..."))\r
656          new UserDefinedColours(ap, sg);\r
657        else\r
658        {\r
659          UserColourScheme udc = (UserColourScheme) UserDefinedColours.\r
660              getUserColourSchemes().get(e.getActionCommand());\r
661 \r
662          sg.cs = udc;\r
663        }\r
664      }\r
665     /**\r
666      * DOCUMENT ME!\r
667      *\r
668      * @param e DOCUMENT ME!\r
669      */\r
670     protected void PIDColour_actionPerformed(ActionEvent e)\r
671     {\r
672         SequenceGroup sg = getGroup();\r
673         sg.cs = new PIDColourScheme();\r
674         sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
675                 ap.av.alignment.getWidth()));\r
676         refresh();\r
677     }\r
678 \r
679     /**\r
680      * DOCUMENT ME!\r
681      *\r
682      * @param e DOCUMENT ME!\r
683      */\r
684     protected void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
685     {\r
686         SequenceGroup sg = getGroup();\r
687 \r
688         sg.cs = new Blosum62ColourScheme();\r
689 \r
690         sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
691                 ap.av.alignment.getWidth()));\r
692 \r
693         refresh();\r
694     }\r
695 \r
696     /**\r
697      * DOCUMENT ME!\r
698      *\r
699      * @param e DOCUMENT ME!\r
700      */\r
701     protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
702     {\r
703         getGroup().cs = null;\r
704         refresh();\r
705     }\r
706 \r
707     /**\r
708      * DOCUMENT ME!\r
709      *\r
710      * @param e DOCUMENT ME!\r
711      */\r
712     protected void conservationMenuItem_actionPerformed(ActionEvent e)\r
713     {\r
714         SequenceGroup sg = getGroup();\r
715         if(sg.cs==null)\r
716           return;\r
717 \r
718         if (conservationMenuItem.isSelected())\r
719         {\r
720             Conservation c = new Conservation("Group",\r
721                     ResidueProperties.propHash, 3, sg.sequences, 0,\r
722                     ap.av.alignment.getWidth());\r
723 \r
724             c.calculate();\r
725             c.verdict(false, ap.av.ConsPercGaps);\r
726 \r
727             sg.cs.setConservation(c);\r
728 \r
729             SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());\r
730             SliderPanel.showConservationSlider();\r
731         }\r
732         else // remove ConservationColouring\r
733         {\r
734             sg.cs.setConservation(null);\r
735         }\r
736 \r
737         refresh();\r
738     }\r
739 \r
740     /**\r
741      * DOCUMENT ME!\r
742      *\r
743      * @param e DOCUMENT ME!\r
744      */\r
745     protected void groupName_actionPerformed(ActionEvent e)\r
746     {\r
747         SequenceGroup sg = getGroup();\r
748         String reply = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
749                 "Enter new group name", "Edit group name",\r
750                 JOptionPane.QUESTION_MESSAGE);\r
751 \r
752         if (reply == null)\r
753         {\r
754             return;\r
755         }\r
756 \r
757         sg.setName(reply);\r
758         groupName.setText(reply);\r
759     }\r
760 \r
761     /**\r
762      * DOCUMENT ME!\r
763      *\r
764      * @param e DOCUMENT ME!\r
765      */\r
766     protected void analyze_actionPerformed(ActionEvent e)\r
767     {\r
768         CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
769         JInternalFrame frame = new JInternalFrame();\r
770         frame.setContentPane(cap);\r
771         Desktop.addInternalFrame(frame, "Analyze this - ", 400, 300);\r
772 \r
773         SequenceGroup sg = getGroup();\r
774         StringBuffer sb = new StringBuffer();\r
775 \r
776         for (int i = 0; i < sg.sequences.size(); i++)\r
777         {\r
778             Sequence tmp = (Sequence) sg.sequences.get(i);\r
779             sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1));\r
780             sb.append("\n");\r
781         }\r
782 \r
783         sb.append("Something amazing will happen soon");\r
784         cap.setText(sb.toString());\r
785     }\r
786 \r
787     /**\r
788      * DOCUMENT ME!\r
789      *\r
790      * @return DOCUMENT ME!\r
791      */\r
792     SequenceGroup getGroup()\r
793     {\r
794         SequenceGroup sg = ap.av.getSelectionGroup();\r
795       // this method won't add a new group if it already exists\r
796         if(sg!=null)\r
797           ap.av.alignment.addGroup(sg);\r
798 \r
799         return sg;\r
800     }\r
801 \r
802     /**\r
803      * DOCUMENT ME!\r
804      *\r
805      * @param e DOCUMENT ME!\r
806      */\r
807     void sequenceName_actionPerformed(ActionEvent e)\r
808     {\r
809         String id = sequence.getName();\r
810         String s = (String) JOptionPane.showInternalInputDialog(ap,\r
811                 "Edit sequence name",\r
812                 "Edit sequence name (" + sequence.getName() + ")",\r
813                 JOptionPane.PLAIN_MESSAGE, null, null, id);\r
814 \r
815         if (s != null)\r
816         {\r
817             if (s.indexOf(" ") > -1)\r
818             {\r
819                 JOptionPane.showMessageDialog(ap,\r
820                     "Spaces have been converted to \"_\"",\r
821                     "No spaces allowed in Sequence Name",\r
822                     JOptionPane.WARNING_MESSAGE);\r
823             }\r
824 \r
825             s = s.replace(' ', '_');\r
826             sequence.setName(s);\r
827             ap.repaint();\r
828         }\r
829     }\r
830 \r
831     /**\r
832      * DOCUMENT ME!\r
833      *\r
834      * @param e DOCUMENT ME!\r
835      */\r
836     void unGroupMenuItem_actionPerformed(ActionEvent e)\r
837     {\r
838         SequenceGroup sg = ap.av.getSelectionGroup();\r
839         ap.av.alignment.deleteGroup(sg);\r
840         ap.av.setSelectionGroup(null);\r
841         refresh();\r
842     }\r
843 \r
844 \r
845     /**\r
846      * DOCUMENT ME!\r
847      *\r
848      * @param e DOCUMENT ME!\r
849      */\r
850     protected void outline_actionPerformed(ActionEvent e)\r
851     {\r
852         SequenceGroup sg = getGroup();\r
853         Color col = JColorChooser.showDialog(this, "Select Outline Colour",\r
854                 Color.BLUE);\r
855 \r
856         if (col != null)\r
857         {\r
858             sg.setOutlineColour(col);\r
859         }\r
860 \r
861         refresh();\r
862     }\r
863 \r
864     /**\r
865      * DOCUMENT ME!\r
866      *\r
867      * @param e DOCUMENT ME!\r
868      */\r
869     public void showBoxes_actionPerformed(ActionEvent e)\r
870     {\r
871         getGroup().setDisplayBoxes(showBoxes.isSelected());\r
872         refresh();\r
873     }\r
874 \r
875     /**\r
876      * DOCUMENT ME!\r
877      *\r
878      * @param e DOCUMENT ME!\r
879      */\r
880     public void showText_actionPerformed(ActionEvent e)\r
881     {\r
882         getGroup().setDisplayText(showText.isSelected());\r
883         refresh();\r
884     }\r
885 \r
886     /**\r
887      * DOCUMENT ME!\r
888      *\r
889      * @param e DOCUMENT ME!\r
890      */\r
891     public void showColourText_actionPerformed(ActionEvent e)\r
892     {\r
893         getGroup().setColourText(showColourText.isSelected());\r
894         refresh();\r
895     }\r
896 \r
897     public void showLink(String url)\r
898     {\r
899       try\r
900       {\r
901         jalview.util.BrowserLauncher.openURL(url);\r
902       }\r
903       catch (Exception ex)\r
904       {\r
905         JOptionPane.showInternalMessageDialog(Desktop.desktop,\r
906             "Unixers: Couldn't find default web browser."\r
907            +"\nAdd the full path to your browser in Preferences.",\r
908            "Web browser not found", JOptionPane.WARNING_MESSAGE );\r
909 \r
910 \r
911         ex.printStackTrace();\r
912       }\r
913     }\r
914 }\r