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