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