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