Formatted source
[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 java.awt.*;\r
22 import java.awt.event.*;\r
23 import javax.swing.*;\r
24 \r
25 import MCview.*;\r
26 import jalview.analysis.*;\r
27 import jalview.datamodel.*;\r
28 import jalview.io.*;\r
29 import jalview.schemes.*;\r
30 \r
31 public class PopupMenu\r
32     extends JPopupMenu\r
33 {\r
34   JMenu groupMenu = new JMenu();\r
35   JMenuItem groupName = new JMenuItem();\r
36   protected JRadioButtonMenuItem clustalColour = new JRadioButtonMenuItem();\r
37   protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem();\r
38   protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem();\r
39   protected JRadioButtonMenuItem hydrophobicityColour = new\r
40       JRadioButtonMenuItem();\r
41   protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem();\r
42   protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem();\r
43   protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem();\r
44   protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem();\r
45   protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem();\r
46   protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem();\r
47   protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem();\r
48   protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();\r
49   JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();\r
50   protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();\r
51   AlignmentPanel ap;\r
52   JMenu sequenceMenu = new JMenu();\r
53   JMenuItem sequenceName = new JMenuItem();\r
54   Sequence sequence;\r
55   JMenuItem unGroupMenuItem = new JMenuItem();\r
56   JMenuItem pdbMenuItem = new JMenuItem();\r
57   JMenuItem outline = new JMenuItem();\r
58   JRadioButtonMenuItem nucleotideMenuItem = new JRadioButtonMenuItem();\r
59   JMenu colourMenu = new JMenu();\r
60   JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem();\r
61   JCheckBoxMenuItem showText = new JCheckBoxMenuItem();\r
62   JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();\r
63 \r
64   public PopupMenu(AlignmentPanel ap, Sequence seq)\r
65   {\r
66     ///////////////////////////////////////////////////////////\r
67     // If this is activated from the sequence panel, the user may want to\r
68     // edit or annotate a particular residue. Therefore display the residue menu\r
69     //\r
70     // If from the IDPanel, we must display the sequence menu\r
71     //////////////////////////////////////////////////////////\r
72     this.ap = ap;\r
73     sequence = seq;\r
74 \r
75     ButtonGroup colours = new ButtonGroup();\r
76     colours.add(noColourmenuItem);\r
77     colours.add(clustalColour);\r
78     colours.add(zappoColour);\r
79     colours.add(taylorColour);\r
80     colours.add(hydrophobicityColour);\r
81     colours.add(helixColour);\r
82     colours.add(strandColour);\r
83     colours.add(turnColour);\r
84     colours.add(buriedColour);\r
85     colours.add(abovePIDColour);\r
86     colours.add(userDefinedColour);\r
87     colours.add(PIDColour);\r
88     colours.add(BLOSUM62Colour);\r
89 \r
90     try\r
91     {\r
92       jbInit();\r
93     }\r
94     catch (Exception e)\r
95     {\r
96       e.printStackTrace();\r
97     }\r
98 \r
99     SequenceGroup sg = ap.av.getSelectionGroup();\r
100 \r
101     if (sg != null)\r
102     {\r
103       groupName.setText(sg.getName());\r
104 \r
105       if (sg.cs instanceof ZappoColourScheme)\r
106       {\r
107         zappoColour.setSelected(true);\r
108       }\r
109       else if (sg.cs instanceof TaylorColourScheme)\r
110       {\r
111         taylorColour.setSelected(true);\r
112       }\r
113       else if (sg.cs instanceof PIDColourScheme)\r
114       {\r
115         PIDColour.setSelected(true);\r
116       }\r
117       else if (sg.cs instanceof Blosum62ColourScheme)\r
118       {\r
119         BLOSUM62Colour.setSelected(true);\r
120       }\r
121       else if (sg.cs instanceof UserColourScheme)\r
122       {\r
123         userDefinedColour.setSelected(true);\r
124       }\r
125       else if (sg.cs instanceof HydrophobicColourScheme)\r
126       {\r
127         hydrophobicityColour.setSelected(true);\r
128       }\r
129       else if (sg.cs instanceof HelixColourScheme)\r
130       {\r
131         helixColour.setSelected(true);\r
132       }\r
133       else if (sg.cs instanceof StrandColourScheme)\r
134       {\r
135         strandColour.setSelected(true);\r
136       }\r
137       else if (sg.cs instanceof TurnColourScheme)\r
138       {\r
139         turnColour.setSelected(true);\r
140       }\r
141       else if (sg.cs instanceof BuriedColourScheme)\r
142       {\r
143         buriedColour.setSelected(true);\r
144       }\r
145       else if (sg.cs instanceof ClustalxColourScheme)\r
146       {\r
147         clustalColour.setSelected(true);\r
148       }\r
149       else\r
150       {\r
151         noColourmenuItem.setSelected(true);\r
152       }\r
153 \r
154       if (sg.cs instanceof ConservationColourScheme)\r
155       {\r
156         conservationMenuItem.setSelected(true);\r
157       }\r
158 \r
159       showText.setSelected(sg.getDisplayText());\r
160       showColourText.setSelected(sg.getColourText());\r
161       showBoxes.setSelected(sg.getDisplayBoxes());\r
162     }\r
163 \r
164     if (!ap.av.alignment.getGroups().contains(sg))\r
165     {\r
166       unGroupMenuItem.setVisible(false);\r
167     }\r
168     else\r
169     {\r
170       groupMenu.insertSeparator(3);\r
171     }\r
172 \r
173     if (seq == null)\r
174     {\r
175       sequenceMenu.setVisible(false);\r
176     }\r
177   }\r
178 \r
179   private void jbInit()\r
180       throws Exception\r
181   {\r
182     groupMenu.setText("Group");\r
183     groupMenu.setText("Define");\r
184     groupName.setText("Name");\r
185     groupName.addActionListener(new java.awt.event.ActionListener()\r
186     {\r
187       public void actionPerformed(ActionEvent e)\r
188       {\r
189         groupName_actionPerformed(e);\r
190       }\r
191     });\r
192     sequenceMenu.setText("Sequence");\r
193     sequenceName.setText("Edit name");\r
194     sequenceName.addActionListener(new java.awt.event.ActionListener()\r
195     {\r
196       public void actionPerformed(ActionEvent e)\r
197       {\r
198         sequenceName_actionPerformed(e);\r
199       }\r
200     });\r
201     PIDColour.setFocusPainted(false);\r
202     unGroupMenuItem.setText("Remove Group");\r
203     unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
204     {\r
205       public void actionPerformed(ActionEvent e)\r
206       {\r
207         unGroupMenuItem_actionPerformed(e);\r
208       }\r
209     });\r
210     pdbMenuItem.setText("View PDB structure");\r
211     pdbMenuItem.addActionListener(new java.awt.event.ActionListener()\r
212     {\r
213       public void actionPerformed(ActionEvent e)\r
214       {\r
215         pdbMenuItem_actionPerformed(e);\r
216       }\r
217     });\r
218     outline.setText("Border colour");\r
219     outline.addActionListener(new java.awt.event.ActionListener()\r
220     {\r
221       public void actionPerformed(ActionEvent e)\r
222       {\r
223         outline_actionPerformed(e);\r
224       }\r
225     });\r
226     nucleotideMenuItem.setText("Nucleotide");\r
227     nucleotideMenuItem.addActionListener(new ActionListener()\r
228     {\r
229       public void actionPerformed(ActionEvent e)\r
230       {\r
231         nucleotideMenuItem_actionPerformed(e);\r
232       }\r
233     });\r
234     colourMenu.setText("Group Colour");\r
235     showBoxes.setText("Boxes");\r
236     showBoxes.setState(true);\r
237     showBoxes.addActionListener(new ActionListener()\r
238     {\r
239       public void actionPerformed(ActionEvent e)\r
240       {\r
241         showBoxes_actionPerformed(e);\r
242       }\r
243     });\r
244     showText.setText("Text");\r
245     showText.setState(true);\r
246     showText.addActionListener(new ActionListener()\r
247     {\r
248       public void actionPerformed(ActionEvent e)\r
249       {\r
250         showText_actionPerformed(e);\r
251       }\r
252     });\r
253     showColourText.setText("Colour Text");\r
254     showColourText.addActionListener(new ActionListener()\r
255     {\r
256       public void actionPerformed(ActionEvent e)\r
257       {\r
258         showColourText_actionPerformed(e);\r
259       }\r
260     });\r
261     add(groupMenu);\r
262     add(sequenceMenu);\r
263     groupMenu.add(groupName);\r
264     groupMenu.addSeparator();\r
265     groupMenu.add(unGroupMenuItem);\r
266     groupMenu.add(colourMenu);\r
267     groupMenu.addSeparator();\r
268     groupMenu.add(showBoxes);\r
269     groupMenu.add(showText);\r
270     groupMenu.add(showColourText);\r
271     groupMenu.addSeparator();\r
272     groupMenu.add(outline);\r
273     sequenceMenu.add(sequenceName);\r
274     sequenceMenu.add(pdbMenuItem);\r
275     colourMenu.add(noColourmenuItem);\r
276     colourMenu.add(clustalColour);\r
277     colourMenu.add(BLOSUM62Colour);\r
278     colourMenu.add(PIDColour);\r
279     colourMenu.add(zappoColour);\r
280     colourMenu.add(taylorColour);\r
281     colourMenu.add(hydrophobicityColour);\r
282     colourMenu.add(helixColour);\r
283     colourMenu.add(strandColour);\r
284     colourMenu.add(turnColour);\r
285     colourMenu.add(buriedColour);\r
286     colourMenu.add(nucleotideMenuItem);\r
287     colourMenu.add(userDefinedColour);\r
288     colourMenu.addSeparator();\r
289     colourMenu.add(abovePIDColour);\r
290     colourMenu.add(conservationMenuItem);\r
291     noColourmenuItem.setText("None");\r
292     noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
293     {\r
294       public void actionPerformed(ActionEvent e)\r
295       {\r
296         noColourmenuItem_actionPerformed(e);\r
297       }\r
298     });\r
299 \r
300     clustalColour.setText("Clustalx colours");\r
301     clustalColour.addActionListener(new java.awt.event.ActionListener()\r
302     {\r
303       public void actionPerformed(ActionEvent e)\r
304       {\r
305         clustalColour_actionPerformed(e);\r
306       }\r
307     });\r
308     zappoColour.setText("Zappo");\r
309     zappoColour.addActionListener(new java.awt.event.ActionListener()\r
310     {\r
311       public void actionPerformed(ActionEvent e)\r
312       {\r
313         zappoColour_actionPerformed(e);\r
314       }\r
315     });\r
316     taylorColour.setText("Taylor");\r
317     taylorColour.addActionListener(new java.awt.event.ActionListener()\r
318     {\r
319       public void actionPerformed(ActionEvent e)\r
320       {\r
321         taylorColour_actionPerformed(e);\r
322       }\r
323     });\r
324     hydrophobicityColour.setText("Hydrophobicity");\r
325     hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()\r
326     {\r
327       public void actionPerformed(ActionEvent e)\r
328       {\r
329         hydrophobicityColour_actionPerformed(e);\r
330       }\r
331     });\r
332     helixColour.setText("Helix propensity");\r
333     helixColour.addActionListener(new java.awt.event.ActionListener()\r
334     {\r
335       public void actionPerformed(ActionEvent e)\r
336       {\r
337         helixColour_actionPerformed(e);\r
338       }\r
339     });\r
340     strandColour.setText("Strand propensity");\r
341     strandColour.addActionListener(new java.awt.event.ActionListener()\r
342     {\r
343       public void actionPerformed(ActionEvent e)\r
344       {\r
345         strandColour_actionPerformed(e);\r
346       }\r
347     });\r
348     turnColour.setText("Turn propensity");\r
349     turnColour.addActionListener(new java.awt.event.ActionListener()\r
350     {\r
351       public void actionPerformed(ActionEvent e)\r
352       {\r
353         turnColour_actionPerformed(e);\r
354       }\r
355     });\r
356     buriedColour.setText("Buried Index");\r
357     buriedColour.addActionListener(new java.awt.event.ActionListener()\r
358     {\r
359       public void actionPerformed(ActionEvent e)\r
360       {\r
361         buriedColour_actionPerformed(e);\r
362       }\r
363     });\r
364     abovePIDColour.setText("Above % Identity");\r
365     abovePIDColour.addActionListener(new java.awt.event.ActionListener()\r
366     {\r
367       public void actionPerformed(ActionEvent e)\r
368       {\r
369         abovePIDColour_actionPerformed(e);\r
370       }\r
371     });\r
372     userDefinedColour.setText("User Defined");\r
373     userDefinedColour.addActionListener(new java.awt.event.ActionListener()\r
374     {\r
375       public void actionPerformed(ActionEvent e)\r
376       {\r
377         userDefinedColour_actionPerformed(e);\r
378       }\r
379     });\r
380     PIDColour.setText("Percentage Identity");\r
381     PIDColour.addActionListener(new java.awt.event.ActionListener()\r
382     {\r
383       public void actionPerformed(ActionEvent e)\r
384       {\r
385         PIDColour_actionPerformed(e);\r
386       }\r
387     });\r
388     BLOSUM62Colour.setText("BLOSUM62");\r
389     BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()\r
390     {\r
391       public void actionPerformed(ActionEvent e)\r
392       {\r
393         BLOSUM62Colour_actionPerformed(e);\r
394       }\r
395     });\r
396     conservationMenuItem.setText("Conservation");\r
397     conservationMenuItem.addActionListener(new java.awt.event.ActionListener()\r
398     {\r
399       public void actionPerformed(ActionEvent e)\r
400       {\r
401         conservationMenuItem_actionPerformed(e);\r
402       }\r
403     });\r
404   }\r
405 \r
406   void refresh()\r
407   {\r
408     SequenceGroup sg = getGroup();\r
409     SuperGroup superG = ap.av.alignment.getSuperGroup(sg);\r
410 \r
411     if (superG != null)\r
412     {\r
413       superG.setSuperGroupProperties(sg);\r
414     }\r
415 \r
416     ap.seqPanel.repaint();\r
417   }\r
418 \r
419   protected void clustalColour_actionPerformed(ActionEvent e)\r
420   {\r
421     SequenceGroup sg = getGroup();\r
422     sg.cs = new ClustalxColourScheme(sg.sequences,\r
423                                      ap.av.alignment.getWidth());\r
424     refresh();\r
425   }\r
426 \r
427   protected void zappoColour_actionPerformed(ActionEvent e)\r
428   {\r
429     getGroup().cs = new ZappoColourScheme();\r
430     refresh();\r
431   }\r
432 \r
433   protected void taylorColour_actionPerformed(ActionEvent e)\r
434   {\r
435     getGroup().cs = new TaylorColourScheme();\r
436     refresh();\r
437   }\r
438 \r
439   protected void hydrophobicityColour_actionPerformed(ActionEvent e)\r
440   {\r
441     getGroup().cs = new HydrophobicColourScheme();\r
442     refresh();\r
443   }\r
444 \r
445   protected void helixColour_actionPerformed(ActionEvent e)\r
446   {\r
447     getGroup().cs = new HelixColourScheme();\r
448     refresh();\r
449   }\r
450 \r
451   protected void strandColour_actionPerformed(ActionEvent e)\r
452   {\r
453     getGroup().cs = new StrandColourScheme();\r
454     refresh();\r
455   }\r
456 \r
457   protected void turnColour_actionPerformed(ActionEvent e)\r
458   {\r
459     getGroup().cs = new TurnColourScheme();\r
460     refresh();\r
461   }\r
462 \r
463   protected void buriedColour_actionPerformed(ActionEvent e)\r
464   {\r
465     getGroup().cs = new BuriedColourScheme();\r
466     refresh();\r
467   }\r
468 \r
469   public void nucleotideMenuItem_actionPerformed(ActionEvent e)\r
470   {\r
471     getGroup().cs = new NucleotideColourScheme();\r
472     refresh();\r
473   }\r
474 \r
475   protected void abovePIDColour_actionPerformed(ActionEvent e)\r
476   {\r
477     SequenceGroup sg = getGroup();\r
478 \r
479     if (abovePIDColour.isSelected())\r
480     {\r
481       sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
482                                                ap.av.alignment.getWidth()));\r
483 \r
484       int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,\r
485           getGroup().getName());\r
486 \r
487       if (sg.cs instanceof ResidueColourScheme)\r
488       {\r
489         ( (ResidueColourScheme) sg.cs).setThreshold(threshold);\r
490       }\r
491       else if (sg.cs instanceof ScoreColourScheme)\r
492       {\r
493         ( (ScoreColourScheme) sg.cs).setThreshold(threshold);\r
494       }\r
495 \r
496       SliderPanel.showPIDSlider();\r
497     }\r
498     else // remove PIDColouring\r
499     {\r
500       ResidueColourScheme rcs = (ResidueColourScheme) sg.cs;\r
501       rcs.setThreshold(0);\r
502       sg.cs = rcs;\r
503     }\r
504 \r
505     refresh();\r
506   }\r
507 \r
508   protected void userDefinedColour_actionPerformed(ActionEvent e)\r
509   {\r
510     new UserDefinedColours(ap, getGroup());\r
511   }\r
512 \r
513   protected void PIDColour_actionPerformed(ActionEvent e)\r
514   {\r
515     SequenceGroup sg = getGroup();\r
516     sg.cs = new PIDColourScheme();\r
517     sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
518                                              ap.av.alignment.getWidth()));\r
519     refresh();\r
520   }\r
521 \r
522   protected void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
523   {\r
524     SequenceGroup sg = getGroup();\r
525 \r
526     sg.cs = new Blosum62ColourScheme();\r
527 \r
528     sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
529                                              ap.av.alignment.getWidth()));\r
530 \r
531     refresh();\r
532   }\r
533 \r
534   protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
535   {\r
536     getGroup().cs = null;\r
537     refresh();\r
538   }\r
539 \r
540   protected void conservationMenuItem_actionPerformed(ActionEvent e)\r
541   {\r
542     SequenceGroup sg = getGroup();\r
543 \r
544     if (conservationMenuItem.isSelected())\r
545     {\r
546       Conservation c = new Conservation("Group",\r
547                                         ResidueProperties.propHash, 3,\r
548                                         sg.sequences, 0,\r
549                                         ap.av.alignment.getWidth());\r
550 \r
551       c.calculate();\r
552       c.verdict(false, ap.av.ConsPercGaps);\r
553 \r
554       ConservationColourScheme ccs = new ConservationColourScheme(c, sg.cs);\r
555 \r
556       sg.cs = ccs;\r
557 \r
558       SliderPanel.setConservationSlider(ap, ccs, sg.getName());\r
559       SliderPanel.showConservationSlider();\r
560     }\r
561     else // remove ConservationColouring\r
562     {\r
563       ConservationColourScheme ccs = (ConservationColourScheme) sg.cs;\r
564       sg.cs = ccs.cs;\r
565     }\r
566 \r
567     refresh();\r
568   }\r
569 \r
570   protected void groupName_actionPerformed(ActionEvent e)\r
571   {\r
572     SequenceGroup sg = getGroup();\r
573     String reply = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
574         "Enter new group name", "Edit group name",\r
575         JOptionPane.QUESTION_MESSAGE);\r
576 \r
577     if (reply == null)\r
578     {\r
579       return;\r
580     }\r
581 \r
582     sg.setName(reply);\r
583     groupName.setText(reply);\r
584   }\r
585 \r
586   protected void analyze_actionPerformed(ActionEvent e)\r
587   {\r
588     CutAndPasteTransfer cap = new CutAndPasteTransfer();\r
589     JInternalFrame frame = new JInternalFrame();\r
590     frame.setContentPane(cap);\r
591     Desktop.addInternalFrame(frame, "Analyze this - ", 400, 300);\r
592 \r
593     SequenceGroup sg = getGroup();\r
594     StringBuffer sb = new StringBuffer();\r
595 \r
596     for (int i = 0; i < sg.sequences.size(); i++)\r
597     {\r
598       Sequence tmp = (Sequence) sg.sequences.get(i);\r
599       sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1));\r
600       sb.append("\n");\r
601     }\r
602 \r
603     sb.append("Something amazing will happen soon");\r
604     cap.setText(sb.toString());\r
605   }\r
606 \r
607   SequenceGroup getGroup()\r
608   {\r
609     SequenceGroup sg = ap.av.getSelectionGroup();\r
610 \r
611     // this method won't add a new group if it already exists\r
612     ap.av.alignment.addGroup(sg);\r
613 \r
614     return sg;\r
615   }\r
616 \r
617   void sequenceName_actionPerformed(ActionEvent e)\r
618   {\r
619     String id = sequence.getName();\r
620     String s = (String) JOptionPane.showInternalInputDialog(ap,\r
621         "Edit sequence name",\r
622         "Edit sequence name (" + sequence.getName() + ")",\r
623         JOptionPane.PLAIN_MESSAGE, null, null, id);\r
624 \r
625     if (s != null)\r
626     {\r
627       sequence.setName(s);\r
628       ap.repaint();\r
629     }\r
630   }\r
631 \r
632   void unGroupMenuItem_actionPerformed(ActionEvent e)\r
633   {\r
634     SequenceGroup sg = ap.av.getSelectionGroup();\r
635     ap.av.alignment.deleteGroup(sg);\r
636     ap.av.setSelectionGroup(null);\r
637     ap.repaint();\r
638   }\r
639 \r
640   void pdbMenuItem_actionPerformed(ActionEvent e)\r
641   {\r
642     if (sequence.getPDBId() == null)\r
643     {\r
644       return;\r
645     }\r
646 \r
647     try\r
648     {\r
649       EBIFetchClient ebi = new EBIFetchClient();\r
650       String[] result = ebi.fetchData("pdb:" + sequence.getPDBId(), null,\r
651                                       null);\r
652 \r
653       PDBfile pdb = new PDBfile(result);\r
654 \r
655       rotCanvas rc = new rotCanvas(pdb, sequence, ap.av);\r
656       JInternalFrame frame = new JInternalFrame();\r
657       frame.setContentPane(rc);\r
658       Desktop.addInternalFrame(frame,\r
659                                sequence.getName() + " " + sequence.getPDBId(),\r
660                                400, 400);\r
661     }\r
662     catch (Exception ex)\r
663     {\r
664       ex.printStackTrace();\r
665     }\r
666   }\r
667 \r
668   protected void outline_actionPerformed(ActionEvent e)\r
669   {\r
670     SequenceGroup sg = getGroup();\r
671     Color col = JColorChooser.showDialog(this, "Select Outline Colour",\r
672                                          Color.BLUE);\r
673 \r
674     if (col != null)\r
675     {\r
676       sg.setOutlineColour(col);\r
677     }\r
678 \r
679     ap.repaint();\r
680   }\r
681 \r
682   public void showBoxes_actionPerformed(ActionEvent e)\r
683   {\r
684     getGroup().setDisplayBoxes(showBoxes.isSelected());\r
685     refresh();\r
686   }\r
687 \r
688   public void showText_actionPerformed(ActionEvent e)\r
689   {\r
690     getGroup().setDisplayText(showText.isSelected());\r
691     refresh();\r
692   }\r
693 \r
694   public void showColourText_actionPerformed(ActionEvent e)\r
695   {\r
696     getGroup().setColourText(showColourText.isSelected());\r
697     refresh();\r
698   }\r
699 }\r