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