2 * Jalview - A Sequence Alignment Editor and Viewer (Version 2.4)
3 * Copyright (C) 2008 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle
5 * This program is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU General Public License
7 * as published by the Free Software Foundation; either version 2
8 * of the License, or (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
24 import java.awt.event.*;
28 import jalview.analysis.*;
29 import jalview.commands.*;
30 import jalview.datamodel.*;
32 import jalview.schemes.*;
33 import jalview.util.UrlLink;
41 public class PopupMenu extends JPopupMenu
43 JMenu groupMenu = new JMenu();
45 JMenuItem groupName = new JMenuItem();
47 protected JRadioButtonMenuItem clustalColour = new JRadioButtonMenuItem();
49 protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem();
51 protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem();
53 protected JRadioButtonMenuItem hydrophobicityColour = new JRadioButtonMenuItem();
55 protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem();
57 protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem();
59 protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem();
61 protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem();
63 protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem();
65 protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem();
67 protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem();
69 protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();
71 JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();
73 protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();
77 JMenu sequenceMenu = new JMenu();
79 JMenuItem sequenceName = new JMenuItem();
83 JMenuItem unGroupMenuItem = new JMenuItem();
85 JMenuItem outline = new JMenuItem();
87 JRadioButtonMenuItem nucleotideMenuItem = new JRadioButtonMenuItem();
89 JMenu colourMenu = new JMenu();
91 JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem();
93 JCheckBoxMenuItem showText = new JCheckBoxMenuItem();
95 JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();
97 JCheckBoxMenuItem displayNonconserved = new JCheckBoxMenuItem();
99 JMenu editMenu = new JMenu();
101 JMenuItem cut = new JMenuItem();
103 JMenuItem copy = new JMenuItem();
105 JMenuItem upperCase = new JMenuItem();
107 JMenuItem lowerCase = new JMenuItem();
109 JMenuItem toggle = new JMenuItem();
111 JMenu pdbMenu = new JMenu();
113 JMenuItem pdbFromFile = new JMenuItem();
115 JMenuItem enterPDB = new JMenuItem();
117 JMenuItem discoverPDB = new JMenuItem();
119 JMenu outputMenu = new JMenu();
121 JMenuItem sequenceFeature = new JMenuItem();
123 JMenuItem textColour = new JMenuItem();
125 JMenu jMenu1 = new JMenu();
127 JMenu structureMenu = new JMenu();
129 JMenu viewStructureMenu = new JMenu();
131 // JMenu colStructureMenu = new JMenu();
132 JMenuItem editSequence = new JMenuItem();
134 // JMenuItem annotationMenuItem = new JMenuItem();
137 * Creates a new PopupMenu object.
144 public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links)
146 // /////////////////////////////////////////////////////////
147 // If this is activated from the sequence panel, the user may want to
148 // edit or annotate a particular residue. Therefore display the residue menu
150 // If from the IDPanel, we must display the sequence menu
151 // ////////////////////////////////////////////////////////
155 ButtonGroup colours = new ButtonGroup();
156 colours.add(noColourmenuItem);
157 colours.add(clustalColour);
158 colours.add(zappoColour);
159 colours.add(taylorColour);
160 colours.add(hydrophobicityColour);
161 colours.add(helixColour);
162 colours.add(strandColour);
163 colours.add(turnColour);
164 colours.add(buriedColour);
165 colours.add(abovePIDColour);
166 colours.add(userDefinedColour);
167 colours.add(PIDColour);
168 colours.add(BLOSUM62Colour);
170 for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++)
172 JMenuItem item = new JMenuItem(
173 jalview.io.FormatAdapter.WRITEABLE_FORMATS[i]);
175 item.addActionListener(new java.awt.event.ActionListener()
177 public void actionPerformed(ActionEvent e)
179 outputText_actionPerformed(e);
183 outputMenu.add(item);
189 } catch (Exception e)
196 sequenceMenu.setText(sequence.getName());
199 if (seq.getDatasetSequence().getPDBId() != null
200 && seq.getDatasetSequence().getPDBId().size() > 0)
202 java.util.Enumeration e = seq.getDatasetSequence().getPDBId()
205 while (e.hasMoreElements())
207 final PDBEntry pdb = (PDBEntry) e.nextElement();
209 menuItem = new JMenuItem();
210 menuItem.setText(pdb.getId());
211 menuItem.addActionListener(new java.awt.event.ActionListener()
213 public void actionPerformed(ActionEvent e)
215 Vector seqs = new Vector();
216 for (int i = 0; i < ap.av.alignment.getHeight(); i++)
218 Vector pdbs = ap.av.alignment.getSequenceAt(i)
219 .getDatasetSequence().getPDBId();
223 for (int p = 0; p < pdbs.size(); p++)
225 PDBEntry p1 = (PDBEntry) pdbs.elementAt(p);
226 if (p1.getId().equals(pdb.getId()))
228 if (!seqs.contains(ap.av.alignment.getSequenceAt(i)))
229 seqs.addElement(ap.av.alignment.getSequenceAt(i));
236 SequenceI[] seqs2 = new SequenceI[seqs.size()];
239 new AppJmol(pdb, seqs2, null, ap);
240 // new PDBViewer(pdb, seqs2, null, ap, AppletFormatAdapter.FILE);
243 viewStructureMenu.add(menuItem);
246 * menuItem = new JMenuItem(); menuItem.setText(pdb.getId());
247 * menuItem.addActionListener(new java.awt.event.ActionListener() {
248 * public void actionPerformed(ActionEvent e) {
249 * colourByStructure(pdb.getId()); } });
250 * colStructureMenu.add(menuItem);
256 structureMenu.remove(viewStructureMenu);
257 // structureMenu.remove(colStructureMenu);
260 menuItem = new JMenuItem("Hide Sequences");
261 menuItem.addActionListener(new java.awt.event.ActionListener()
263 public void actionPerformed(ActionEvent e)
265 hideSequences(false);
270 if (ap.av.getSelectionGroup() != null
271 && ap.av.getSelectionGroup().getSize() > 1)
273 menuItem = new JMenuItem("Represent Group with " + seq.getName());
274 menuItem.addActionListener(new java.awt.event.ActionListener()
276 public void actionPerformed(ActionEvent e)
281 sequenceMenu.add(menuItem);
284 if (ap.av.hasHiddenRows)
286 final int index = ap.av.alignment.findIndex(seq);
288 if (ap.av.adjustForHiddenSeqs(index)
289 - ap.av.adjustForHiddenSeqs(index - 1) > 1)
291 menuItem = new JMenuItem("Reveal Sequences");
292 menuItem.addActionListener(new ActionListener()
294 public void actionPerformed(ActionEvent e)
296 ap.av.showSequence(index);
297 if (ap.overviewPanel != null)
299 ap.overviewPanel.updateOverviewImage();
306 menuItem = new JMenuItem("Reveal All");
307 menuItem.addActionListener(new ActionListener()
309 public void actionPerformed(ActionEvent e)
311 ap.av.showAllHiddenSeqs();
312 if (ap.overviewPanel != null)
314 ap.overviewPanel.updateOverviewImage();
324 SequenceGroup sg = ap.av.getSelectionGroup();
328 groupName.setText(sg.getName());
330 if (sg.cs instanceof ZappoColourScheme)
332 zappoColour.setSelected(true);
334 else if (sg.cs instanceof TaylorColourScheme)
336 taylorColour.setSelected(true);
338 else if (sg.cs instanceof PIDColourScheme)
340 PIDColour.setSelected(true);
342 else if (sg.cs instanceof Blosum62ColourScheme)
344 BLOSUM62Colour.setSelected(true);
346 else if (sg.cs instanceof UserColourScheme)
348 userDefinedColour.setSelected(true);
350 else if (sg.cs instanceof HydrophobicColourScheme)
352 hydrophobicityColour.setSelected(true);
354 else if (sg.cs instanceof HelixColourScheme)
356 helixColour.setSelected(true);
358 else if (sg.cs instanceof StrandColourScheme)
360 strandColour.setSelected(true);
362 else if (sg.cs instanceof TurnColourScheme)
364 turnColour.setSelected(true);
366 else if (sg.cs instanceof BuriedColourScheme)
368 buriedColour.setSelected(true);
370 else if (sg.cs instanceof ClustalxColourScheme)
372 clustalColour.setSelected(true);
376 noColourmenuItem.setSelected(true);
379 if (sg.cs != null && sg.cs.conservationApplied())
381 conservationMenuItem.setSelected(true);
383 displayNonconserved.setSelected(sg.getShowunconserved());
384 showText.setSelected(sg.getDisplayText());
385 showColourText.setSelected(sg.getColourText());
386 showBoxes.setSelected(sg.getDisplayBoxes());
390 groupMenu.setVisible(false);
391 editMenu.setVisible(false);
394 if (!ap.av.alignment.getGroups().contains(sg))
396 unGroupMenuItem.setVisible(false);
401 sequenceMenu.setVisible(false);
402 structureMenu.setVisible(false);
405 if (links != null && links.size() > 0)
407 JMenu linkMenu = new JMenu("Link");
409 for (int i = 0; i < links.size(); i++)
411 String link = links.elementAt(i).toString();
412 UrlLink urlLink = null;
415 urlLink = new UrlLink(link);
416 } catch (Exception foo)
418 jalview.bin.Cache.log.error("Exception for URLLink '" + link
423 if (!urlLink.isValid())
425 jalview.bin.Cache.log.error(urlLink.getInvalidMessage());
428 final String label = urlLink.getLabel();
429 if (urlLink.isDynamic())
432 // collect matching db-refs
433 DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(seq
434 .getDBRef(), new String[]
435 { urlLink.getTarget() });
436 // collect id string too
437 String id = seq.getName();
438 String descr = seq.getDescription();
439 if (descr!=null && descr.length()<1)
446 for (int r = 0; r < dbr.length; r++)
448 if (id != null && dbr[r].getAccessionId().equals(id))
450 // suppress duplicate link creation for the bare sequence ID
451 // string with this link
454 // create Bare ID link for this RUL
455 String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(),
459 for (int u = 0; u < urls.length; u += 2)
461 addshowLink(linkMenu, label + "|" + urls[u], urls[u + 1]);
468 // create Bare ID link for this RUL
469 String[] urls = urlLink.makeUrls(id, true);
472 for (int u = 0; u < urls.length; u += 2)
474 addshowLink(linkMenu, label, urls[u + 1]);
478 // Create urls from description but only for URL links which are regex links
479 if (descr != null && urlLink.getRegexReplace()!=null)
481 // create link for this URL from description where regex matches
482 String[] urls = urlLink.makeUrls(descr, true);
485 for (int u = 0; u < urls.length; u += 2)
487 addshowLink(linkMenu, label, urls[u + 1]);
494 // Add a non-dynamic link
495 addshowLink(linkMenu, label, urlLink.getUrl_prefix());
498 if (sequence != null)
500 sequenceMenu.add(linkMenu);
510 * add a show URL menu item to the given linkMenu
518 private void addshowLink(JMenu linkMenu, String label, final String url)
520 JMenuItem item = new JMenuItem(label);
521 item.setToolTipText("open URL: " + url);
522 item.addActionListener(new java.awt.event.ActionListener()
524 public void actionPerformed(ActionEvent e)
526 new Thread(new Runnable()
547 private void jbInit() throws Exception
549 groupMenu.setText("Group");
550 groupMenu.setText("Selection");
551 groupName.setText("Name");
552 groupName.addActionListener(new java.awt.event.ActionListener()
554 public void actionPerformed(ActionEvent e)
556 groupName_actionPerformed();
559 sequenceMenu.setText("Sequence");
560 sequenceName.setText("Edit Name/Description");
561 sequenceName.addActionListener(new java.awt.event.ActionListener()
563 public void actionPerformed(ActionEvent e)
565 sequenceName_actionPerformed();
568 PIDColour.setFocusPainted(false);
569 unGroupMenuItem.setText("Remove Group");
570 unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()
572 public void actionPerformed(ActionEvent e)
574 unGroupMenuItem_actionPerformed();
578 outline.setText("Border colour");
579 outline.addActionListener(new java.awt.event.ActionListener()
581 public void actionPerformed(ActionEvent e)
583 outline_actionPerformed();
586 nucleotideMenuItem.setText("Nucleotide");
587 nucleotideMenuItem.addActionListener(new ActionListener()
589 public void actionPerformed(ActionEvent e)
591 nucleotideMenuItem_actionPerformed();
594 colourMenu.setText("Group Colour");
595 showBoxes.setText("Boxes");
596 showBoxes.setState(true);
597 showBoxes.addActionListener(new ActionListener()
599 public void actionPerformed(ActionEvent e)
601 showBoxes_actionPerformed();
604 showText.setText("Text");
605 showText.setState(true);
606 showText.addActionListener(new ActionListener()
608 public void actionPerformed(ActionEvent e)
610 showText_actionPerformed();
613 showColourText.setText("Colour Text");
614 showColourText.addActionListener(new ActionListener()
616 public void actionPerformed(ActionEvent e)
618 showColourText_actionPerformed();
621 displayNonconserved.setText("Show Nonconserved");
622 displayNonconserved.setState(true);
623 displayNonconserved.addActionListener(new ActionListener()
625 public void actionPerformed(ActionEvent e)
627 showNonconserved_actionPerformed();
630 editMenu.setText("Edit");
632 cut.addActionListener(new ActionListener()
634 public void actionPerformed(ActionEvent e)
636 cut_actionPerformed();
639 upperCase.setText("To Upper Case");
640 upperCase.addActionListener(new ActionListener()
642 public void actionPerformed(ActionEvent e)
647 copy.setText("Copy");
648 copy.addActionListener(new ActionListener()
650 public void actionPerformed(ActionEvent e)
652 copy_actionPerformed();
655 lowerCase.setText("To Lower Case");
656 lowerCase.addActionListener(new ActionListener()
658 public void actionPerformed(ActionEvent e)
663 toggle.setText("Toggle Case");
664 toggle.addActionListener(new ActionListener()
666 public void actionPerformed(ActionEvent e)
671 pdbMenu.setText("Associate Structure with Sequence");
672 pdbFromFile.setText("From File");
673 pdbFromFile.addActionListener(new ActionListener()
675 public void actionPerformed(ActionEvent e)
677 pdbFromFile_actionPerformed();
680 enterPDB.setText("Enter PDB Id");
681 enterPDB.addActionListener(new ActionListener()
683 public void actionPerformed(ActionEvent e)
685 enterPDB_actionPerformed();
688 discoverPDB.setText("Discover PDB ids");
689 discoverPDB.addActionListener(new ActionListener()
691 public void actionPerformed(ActionEvent e)
693 discoverPDB_actionPerformed();
696 outputMenu.setText("Output to Textbox...");
697 sequenceFeature.setText("Create Sequence Feature");
698 sequenceFeature.addActionListener(new ActionListener()
700 public void actionPerformed(ActionEvent e)
702 sequenceFeature_actionPerformed();
705 textColour.setText("Text Colour");
706 textColour.addActionListener(new ActionListener()
708 public void actionPerformed(ActionEvent e)
710 textColour_actionPerformed();
713 jMenu1.setText("Group");
714 structureMenu.setText("Structure");
715 viewStructureMenu.setText("View Structure");
716 // colStructureMenu.setText("Colour By Structure");
717 editSequence.setText("Edit Sequence...");
718 editSequence.addActionListener(new ActionListener()
720 public void actionPerformed(ActionEvent actionEvent)
722 editSequence_actionPerformed(actionEvent);
726 * annotationMenuItem.setText("By Annotation");
727 * annotationMenuItem.addActionListener(new ActionListener() { public void
728 * actionPerformed(ActionEvent actionEvent) {
729 * annotationMenuItem_actionPerformed(actionEvent); } });
735 this.add(structureMenu);
736 groupMenu.add(editMenu);
737 groupMenu.add(outputMenu);
738 groupMenu.add(sequenceFeature);
739 groupMenu.add(jMenu1);
740 sequenceMenu.add(sequenceName);
741 colourMenu.add(textColour);
742 colourMenu.add(noColourmenuItem);
743 colourMenu.add(clustalColour);
744 colourMenu.add(BLOSUM62Colour);
745 colourMenu.add(PIDColour);
746 colourMenu.add(zappoColour);
747 colourMenu.add(taylorColour);
748 colourMenu.add(hydrophobicityColour);
749 colourMenu.add(helixColour);
750 colourMenu.add(strandColour);
751 colourMenu.add(turnColour);
752 colourMenu.add(buriedColour);
753 colourMenu.add(nucleotideMenuItem);
754 colourMenu.add(userDefinedColour);
756 if (jalview.gui.UserDefinedColours.getUserColourSchemes() != null)
758 java.util.Enumeration userColours = jalview.gui.UserDefinedColours
759 .getUserColourSchemes().keys();
761 while (userColours.hasMoreElements())
763 JMenuItem item = new JMenuItem(userColours.nextElement().toString());
764 item.addActionListener(new ActionListener()
766 public void actionPerformed(ActionEvent evt)
768 userDefinedColour_actionPerformed(evt);
771 colourMenu.add(item);
775 colourMenu.addSeparator();
776 colourMenu.add(abovePIDColour);
777 colourMenu.add(conservationMenuItem);
778 // colourMenu.add(annotationMenuItem);
781 editMenu.add(editSequence);
782 editMenu.add(upperCase);
783 editMenu.add(lowerCase);
784 editMenu.add(toggle);
785 pdbMenu.add(pdbFromFile);
786 pdbMenu.add(enterPDB);
787 pdbMenu.add(discoverPDB);
788 jMenu1.add(groupName);
789 jMenu1.add(unGroupMenuItem);
790 jMenu1.add(colourMenu);
791 jMenu1.add(showBoxes);
792 jMenu1.add(showText);
793 jMenu1.add(showColourText);
795 jMenu1.add(displayNonconserved);
796 structureMenu.add(pdbMenu);
797 structureMenu.add(viewStructureMenu);
798 // structureMenu.add(colStructureMenu);
799 noColourmenuItem.setText("None");
800 noColourmenuItem.addActionListener(new java.awt.event.ActionListener()
802 public void actionPerformed(ActionEvent e)
804 noColourmenuItem_actionPerformed();
808 clustalColour.setText("Clustalx colours");
809 clustalColour.addActionListener(new java.awt.event.ActionListener()
811 public void actionPerformed(ActionEvent e)
813 clustalColour_actionPerformed();
816 zappoColour.setText("Zappo");
817 zappoColour.addActionListener(new java.awt.event.ActionListener()
819 public void actionPerformed(ActionEvent e)
821 zappoColour_actionPerformed();
824 taylorColour.setText("Taylor");
825 taylorColour.addActionListener(new java.awt.event.ActionListener()
827 public void actionPerformed(ActionEvent e)
829 taylorColour_actionPerformed();
832 hydrophobicityColour.setText("Hydrophobicity");
834 .addActionListener(new java.awt.event.ActionListener()
836 public void actionPerformed(ActionEvent e)
838 hydrophobicityColour_actionPerformed();
841 helixColour.setText("Helix propensity");
842 helixColour.addActionListener(new java.awt.event.ActionListener()
844 public void actionPerformed(ActionEvent e)
846 helixColour_actionPerformed();
849 strandColour.setText("Strand propensity");
850 strandColour.addActionListener(new java.awt.event.ActionListener()
852 public void actionPerformed(ActionEvent e)
854 strandColour_actionPerformed();
857 turnColour.setText("Turn propensity");
858 turnColour.addActionListener(new java.awt.event.ActionListener()
860 public void actionPerformed(ActionEvent e)
862 turnColour_actionPerformed();
865 buriedColour.setText("Buried Index");
866 buriedColour.addActionListener(new java.awt.event.ActionListener()
868 public void actionPerformed(ActionEvent e)
870 buriedColour_actionPerformed();
873 abovePIDColour.setText("Above % Identity");
874 abovePIDColour.addActionListener(new java.awt.event.ActionListener()
876 public void actionPerformed(ActionEvent e)
878 abovePIDColour_actionPerformed();
881 userDefinedColour.setText("User Defined...");
882 userDefinedColour.addActionListener(new java.awt.event.ActionListener()
884 public void actionPerformed(ActionEvent e)
886 userDefinedColour_actionPerformed(e);
889 PIDColour.setText("Percentage Identity");
890 PIDColour.addActionListener(new java.awt.event.ActionListener()
892 public void actionPerformed(ActionEvent e)
894 PIDColour_actionPerformed();
897 BLOSUM62Colour.setText("BLOSUM62");
898 BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()
900 public void actionPerformed(ActionEvent e)
902 BLOSUM62Colour_actionPerformed();
905 conservationMenuItem.setText("Conservation");
907 .addActionListener(new java.awt.event.ActionListener()
909 public void actionPerformed(ActionEvent e)
911 conservationMenuItem_actionPerformed();
916 protected void showNonconserved_actionPerformed()
918 getGroup().setShowunconserved(displayNonconserved.isSelected());
923 * call to refresh view after settings change
927 ap.paintAlignment(true);
929 PaintRefresher.Refresh(this, ap.av.getSequenceSetId());
938 protected void clustalColour_actionPerformed()
940 SequenceGroup sg = getGroup();
941 sg.cs = new ClustalxColourScheme(sg
942 .getSequences(ap.av.hiddenRepSequences), ap.av.alignment
953 protected void zappoColour_actionPerformed()
955 getGroup().cs = new ZappoColourScheme();
965 protected void taylorColour_actionPerformed()
967 getGroup().cs = new TaylorColourScheme();
977 protected void hydrophobicityColour_actionPerformed()
979 getGroup().cs = new HydrophobicColourScheme();
989 protected void helixColour_actionPerformed()
991 getGroup().cs = new HelixColourScheme();
1001 protected void strandColour_actionPerformed()
1003 getGroup().cs = new StrandColourScheme();
1013 protected void turnColour_actionPerformed()
1015 getGroup().cs = new TurnColourScheme();
1025 protected void buriedColour_actionPerformed()
1027 getGroup().cs = new BuriedColourScheme();
1037 public void nucleotideMenuItem_actionPerformed()
1039 getGroup().cs = new NucleotideColourScheme();
1049 protected void abovePIDColour_actionPerformed()
1051 SequenceGroup sg = getGroup();
1057 if (abovePIDColour.isSelected())
1059 sg.cs.setConsensus(AAFrequency.calculate(sg
1060 .getSequences(ap.av.hiddenRepSequences), sg.getStartRes(), sg
1063 int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup()
1066 sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());
1068 SliderPanel.showPIDSlider();
1071 // remove PIDColouring
1073 sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());
1085 protected void userDefinedColour_actionPerformed(ActionEvent e)
1087 SequenceGroup sg = getGroup();
1089 if (e.getActionCommand().equals("User Defined..."))
1091 new UserDefinedColours(ap, sg);
1095 UserColourScheme udc = (UserColourScheme) UserDefinedColours
1096 .getUserColourSchemes().get(e.getActionCommand());
1109 protected void PIDColour_actionPerformed()
1111 SequenceGroup sg = getGroup();
1112 sg.cs = new PIDColourScheme();
1113 sg.cs.setConsensus(AAFrequency.calculate(sg
1114 .getSequences(ap.av.hiddenRepSequences), sg.getStartRes(), sg
1125 protected void BLOSUM62Colour_actionPerformed()
1127 SequenceGroup sg = getGroup();
1129 sg.cs = new Blosum62ColourScheme();
1131 sg.cs.setConsensus(AAFrequency.calculate(sg
1132 .getSequences(ap.av.hiddenRepSequences), sg.getStartRes(), sg
1144 protected void noColourmenuItem_actionPerformed()
1146 getGroup().cs = null;
1156 protected void conservationMenuItem_actionPerformed()
1158 SequenceGroup sg = getGroup();
1164 if (conservationMenuItem.isSelected())
1166 Conservation c = new Conservation("Group",
1167 ResidueProperties.propHash, 3, sg
1168 .getSequences(ap.av.hiddenRepSequences), sg
1169 .getStartRes(), sg.getEndRes() + 1);
1172 c.verdict(false, ap.av.ConsPercGaps);
1174 sg.cs.setConservation(c);
1176 SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());
1177 SliderPanel.showConservationSlider();
1180 // remove ConservationColouring
1182 sg.cs.setConservation(null);
1188 public void annotationMenuItem_actionPerformed(ActionEvent actionEvent)
1190 SequenceGroup sg = getGroup();
1196 AnnotationColourGradient acg = new AnnotationColourGradient(sequence
1197 .getAnnotation()[0], null,
1198 AnnotationColourGradient.NO_THRESHOLD);
1200 acg.predefinedColours = true;
1212 protected void groupName_actionPerformed()
1215 SequenceGroup sg = getGroup();
1216 EditNameDialog dialog = new EditNameDialog(sg.getName(), sg
1217 .getDescription(), " Group Name ", "Group Description ",
1218 "Edit Group Name/Description");
1225 sg.setName(dialog.getName());
1226 sg.setDescription(dialog.getDescription());
1232 * @return DOCUMENT ME!
1234 SequenceGroup getGroup()
1236 SequenceGroup sg = ap.av.getSelectionGroup();
1237 // this method won't add a new group if it already exists
1240 ap.av.alignment.addGroup(sg);
1252 void sequenceName_actionPerformed()
1254 EditNameDialog dialog = new EditNameDialog(sequence.getName(), sequence
1255 .getDescription(), " Sequence Name ",
1256 "Sequence Description ", "Edit Sequence Name/Description");
1263 if (dialog.getName() != null)
1265 if (dialog.getName().indexOf(" ") > -1)
1267 JOptionPane.showMessageDialog(ap,
1268 "Spaces have been converted to \"_\"",
1269 "No spaces allowed in Sequence Name",
1270 JOptionPane.WARNING_MESSAGE);
1273 sequence.setName(dialog.getName().replace(' ', '_'));
1274 ap.paintAlignment(false);
1277 sequence.setDescription(dialog.getDescription());
1279 ap.av.firePropertyChange("alignment", null, ap.av.getAlignment()
1290 void unGroupMenuItem_actionPerformed()
1292 SequenceGroup sg = ap.av.getSelectionGroup();
1293 ap.av.alignment.deleteGroup(sg);
1294 ap.av.setSelectionGroup(null);
1304 protected void outline_actionPerformed()
1306 SequenceGroup sg = getGroup();
1307 Color col = JColorChooser.showDialog(this, "Select Outline Colour",
1312 sg.setOutlineColour(col);
1324 public void showBoxes_actionPerformed()
1326 getGroup().setDisplayBoxes(showBoxes.isSelected());
1336 public void showText_actionPerformed()
1338 getGroup().setDisplayText(showText.isSelected());
1348 public void showColourText_actionPerformed()
1350 getGroup().setColourText(showColourText.isSelected());
1354 public void showLink(String url)
1358 jalview.util.BrowserLauncher.openURL(url);
1359 } catch (Exception ex)
1362 .showInternalMessageDialog(
1364 "Unixers: Couldn't find default web browser."
1365 + "\nAdd the full path to your browser in Preferences.",
1366 "Web browser not found", JOptionPane.WARNING_MESSAGE);
1368 ex.printStackTrace();
1372 void hideSequences(boolean representGroup)
1374 SequenceGroup sg = ap.av.getSelectionGroup();
1375 if (sg == null || sg.getSize() < 1)
1377 ap.av.hideSequence(new SequenceI[]
1382 ap.av.setSelectionGroup(null);
1386 ap.av.hideRepSequences(sequence, sg);
1391 int gsize = sg.getSize();
1394 hseqs = new SequenceI[gsize];
1397 for (int i = 0; i < gsize; i++)
1399 hseqs[index++] = sg.getSequenceAt(i);
1402 ap.av.hideSequence(hseqs);
1403 ap.av.sendSelection();
1406 public void copy_actionPerformed()
1408 ap.alignFrame.copy_actionPerformed(null);
1411 public void cut_actionPerformed()
1413 ap.alignFrame.cut_actionPerformed(null);
1416 void changeCase(ActionEvent e)
1418 Object source = e.getSource();
1419 SequenceGroup sg = ap.av.getSelectionGroup();
1423 int[][] startEnd = ap.av.getVisibleRegionBoundaries(sg.getStartRes(),
1424 sg.getEndRes() + 1);
1429 if (source == toggle)
1431 description = "Toggle Case";
1432 caseChange = ChangeCaseCommand.TOGGLE_CASE;
1434 else if (source == upperCase)
1436 description = "To Upper Case";
1437 caseChange = ChangeCaseCommand.TO_UPPER;
1441 description = "To Lower Case";
1442 caseChange = ChangeCaseCommand.TO_LOWER;
1445 ChangeCaseCommand caseCommand = new ChangeCaseCommand(description, sg
1446 .getSequencesAsArray(ap.av.hiddenRepSequences), startEnd,
1449 ap.alignFrame.addHistoryItem(caseCommand);
1451 ap.av.firePropertyChange("alignment", null, ap.av.getAlignment()
1457 public void outputText_actionPerformed(ActionEvent e)
1459 CutAndPasteTransfer cap = new CutAndPasteTransfer();
1460 cap.setForInput(null);
1461 Desktop.addInternalFrame(cap, "Alignment output - "
1462 + e.getActionCommand(), 600, 500);
1464 String[] omitHidden = null;
1466 System.out.println("PROMPT USER HERE"); // TODO: decide if a prompt happens
1467 // or we simply trust the user wants
1468 // wysiwig behaviour
1469 SequenceGroup sg = ap.av.getSelectionGroup();
1470 ColumnSelection csel = new ColumnSelection(ap.av.getColumnSelection());
1471 omitHidden = ap.av.getViewAsString(true);
1472 Alignment oal = new Alignment(ap.av.getSequenceSelection());
1473 AlignmentAnnotation[] nala = ap.av.alignment.getAlignmentAnnotation();
1474 for (int i = 0; i < nala.length; i++)
1476 AlignmentAnnotation na = nala[i];
1477 oal.addAnnotation(na);
1479 cap.setText(new FormatAdapter().formatSequences(e.getActionCommand(),
1480 oal, omitHidden, csel, sg));
1484 public void pdbFromFile_actionPerformed()
1486 jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser(
1487 jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
1488 chooser.setFileView(new jalview.io.JalviewFileView());
1489 chooser.setDialogTitle("Select a PDB file");
1490 chooser.setToolTipText("Load a PDB file");
1492 int value = chooser.showOpenDialog(null);
1494 if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
1496 PDBEntry entry = new PDBEntry();
1497 String choice = chooser.getSelectedFile().getPath();
1498 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
1501 MCview.PDBfile pdbfile = new MCview.PDBfile(choice,
1502 jalview.io.AppletFormatAdapter.FILE);
1504 if (pdbfile.id == null)
1506 String reply = JOptionPane
1507 .showInternalInputDialog(
1509 "Couldn't find a PDB id in the file supplied."
1510 + "Please enter an Id to identify this structure.",
1511 "No PDB Id in File", JOptionPane.QUESTION_MESSAGE);
1521 entry.setId(pdbfile.id);
1523 } catch (java.io.IOException ex)
1525 ex.printStackTrace();
1528 entry.setFile(choice);
1529 sequence.getDatasetSequence().addPDBId(entry);
1534 public void enterPDB_actionPerformed()
1536 String id = JOptionPane.showInternalInputDialog(Desktop.desktop,
1537 "Enter PDB Id", "Enter PDB Id", JOptionPane.QUESTION_MESSAGE);
1539 if (id != null && id.length() > 0)
1541 PDBEntry entry = new PDBEntry();
1542 entry.setId(id.toUpperCase());
1543 sequence.getDatasetSequence().addPDBId(entry);
1547 public void discoverPDB_actionPerformed()
1550 final SequenceI[] sequences = ((ap.av.selectionGroup == null) ? new Sequence[]
1552 : ap.av.selectionGroup.getSequencesInOrder(ap.av.alignment));
1553 Thread discpdb = new Thread(new Runnable()
1558 new jalview.ws.DBRefFetcher(sequences, ap.alignFrame)
1559 .fetchDBRefs(false);
1566 public void sequenceFeature_actionPerformed()
1568 SequenceGroup sg = ap.av.getSelectionGroup();
1574 int gSize = sg.getSize();
1575 SequenceI[] seqs = new SequenceI[gSize];
1576 SequenceFeature[] features = new SequenceFeature[gSize];
1578 for (int i = 0; i < gSize; i++)
1580 seqs[i] = sg.getSequenceAt(i).getDatasetSequence();
1581 int start = sg.getSequenceAt(i).findPosition(sg.getStartRes());
1582 int end = sg.findEndRes(sg.getSequenceAt(i));
1583 features[i] = new SequenceFeature(null, null, null, start, end,
1587 if (ap.seqPanel.seqCanvas.getFeatureRenderer().amendFeatures(seqs,
1588 features, true, ap))
1590 ap.alignFrame.setShowSeqFeatures(true);
1591 ap.highlightSearchResults(null);
1595 public void textColour_actionPerformed()
1597 SequenceGroup sg = getGroup();
1600 new TextColourChooser().chooseColour(ap, sg);
1604 public void colourByStructure(String pdbid)
1606 Annotation[] anots = jalview.structure.StructureSelectionManager
1607 .getStructureSelectionManager().colourSequenceFromStructure(
1610 AlignmentAnnotation an = new AlignmentAnnotation("Structure",
1611 "Coloured by " + pdbid, anots);
1613 ap.av.alignment.addAnnotation(an);
1614 an.createSequenceMapping(sequence, 0, true);
1615 // an.adjustForAlignment();
1616 ap.av.alignment.setAnnotationIndex(an, 0);
1618 ap.adjustAnnotationHeight();
1620 sequence.addAlignmentAnnotation(an);
1624 public void editSequence_actionPerformed(ActionEvent actionEvent)
1626 SequenceGroup sg = ap.av.getSelectionGroup();
1630 if (sequence == null)
1631 sequence = (Sequence) sg.getSequenceAt(0);
1633 EditNameDialog dialog = new EditNameDialog(sequence
1634 .getSequenceAsString(sg.getStartRes(), sg.getEndRes() + 1),
1635 null, "Edit Sequence ", null, "Edit Sequence");
1639 EditCommand editCommand = new EditCommand("Edit Sequences",
1640 EditCommand.REPLACE, dialog.getName().replace(' ',
1641 ap.av.getGapCharacter()), sg
1642 .getSequencesAsArray(ap.av.hiddenRepSequences), sg
1643 .getStartRes(), sg.getEndRes() + 1, ap.av.alignment);
1645 ap.alignFrame.addHistoryItem(editCommand);
1647 ap.av.firePropertyChange("alignment", null, ap.av.getAlignment()