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