2 * Jalview - A Sequence Alignment Editor and Viewer
3 * Copyright (C) 2006 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
23 import jalview.analysis.*;
25 import jalview.datamodel.*;
28 import jalview.schemes.*;
31 import java.awt.event.*;
35 import java.util.Vector;
36 import jalview.io.FormatAdapter;
45 public class PopupMenu extends JPopupMenu
47 JMenu groupMenu = new JMenu();
48 JMenuItem groupName = new JMenuItem();
49 protected JRadioButtonMenuItem clustalColour = new JRadioButtonMenuItem();
50 protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem();
51 protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem();
52 protected JRadioButtonMenuItem hydrophobicityColour = new JRadioButtonMenuItem();
53 protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem();
54 protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem();
55 protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem();
56 protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem();
57 protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem();
58 protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem();
59 protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem();
60 protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem();
61 JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem();
62 protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem();
64 JMenu sequenceMenu = new JMenu();
65 JMenuItem sequenceName = new JMenuItem();
67 JMenuItem unGroupMenuItem = new JMenuItem();
68 JMenuItem outline = new JMenuItem();
69 JRadioButtonMenuItem nucleotideMenuItem = new JRadioButtonMenuItem();
70 JMenu colourMenu = new JMenu();
71 JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem();
72 JCheckBoxMenuItem showText = new JCheckBoxMenuItem();
73 JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem();
74 JMenu editMenu = new JMenu();
75 JMenuItem cut = new JMenuItem();
76 JMenuItem copy = new JMenuItem();
77 JMenuItem upperCase = new JMenuItem();
78 JMenuItem lowerCase = new JMenuItem();
79 JMenuItem toggle = new JMenuItem();
80 JMenu pdbMenu = new JMenu();
81 JMenuItem pdbFromFile = new JMenuItem();
82 JMenuItem enterPDB = new JMenuItem();
83 JMenuItem discoverPDB = new JMenuItem();
84 JMenu outputMenu = new JMenu();
87 * Creates a new PopupMenu object.
89 * @param ap DOCUMENT ME!
90 * @param seq DOCUMENT ME!
92 public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links)
94 ///////////////////////////////////////////////////////////
95 // If this is activated from the sequence panel, the user may want to
96 // edit or annotate a particular residue. Therefore display the residue menu
98 // If from the IDPanel, we must display the sequence menu
99 //////////////////////////////////////////////////////////
103 ButtonGroup colours = new ButtonGroup();
104 colours.add(noColourmenuItem);
105 colours.add(clustalColour);
106 colours.add(zappoColour);
107 colours.add(taylorColour);
108 colours.add(hydrophobicityColour);
109 colours.add(helixColour);
110 colours.add(strandColour);
111 colours.add(turnColour);
112 colours.add(buriedColour);
113 colours.add(abovePIDColour);
114 colours.add(userDefinedColour);
115 colours.add(PIDColour);
116 colours.add(BLOSUM62Colour);
118 for (int i = 0; i < jalview.io.FormatAdapter.WRITEABLE_FORMATS.length; i++)
120 JMenuItem item = new JMenuItem( jalview.io.FormatAdapter.WRITEABLE_FORMATS[i] );
122 item.addActionListener(new java.awt.event.ActionListener()
124 public void actionPerformed(ActionEvent e)
126 outputText_actionPerformed(e);
130 outputMenu.add(item);
146 int start = Math.max(sequence.getName().length()-15, 0);
147 sequenceMenu.setText(sequence.getName().substring(start));
150 if( seq.getDatasetSequence().getPDBId() != null)
152 java.util.Enumeration e = seq.getDatasetSequence().getPDBId().
155 while (e.hasMoreElements())
157 final PDBEntry pdb = (PDBEntry) e.nextElement();
159 menuItem = new JMenuItem();
160 menuItem.setText("View PDB entry: " + pdb.getId());
161 menuItem.addActionListener(new java.awt.event.ActionListener()
163 public void actionPerformed(ActionEvent e)
165 new PDBViewer(pdb, sequence, ap.seqPanel.seqCanvas);
168 sequenceMenu.add(menuItem);
172 menuItem = new JMenuItem("Hide Sequences");
173 menuItem.addActionListener(new java.awt.event.ActionListener()
175 public void actionPerformed(ActionEvent e)
177 hideSequences(false);
182 if(ap.av.getSelectionGroup() !=null
183 && ap.av.getSelectionGroup().getSize(false)>1)
185 menuItem = new JMenuItem("Represent Group with " + seq.getName());
186 menuItem.addActionListener(new java.awt.event.ActionListener()
188 public void actionPerformed(ActionEvent e)
193 sequenceMenu.add(menuItem);
196 if (ap.av.hasHiddenRows)
198 final int index = ap.av.alignment.findIndex(seq);
200 if (ap.av.adjustForHiddenSeqs(index) -
201 ap.av.adjustForHiddenSeqs(index - 1) > 1)
203 menuItem = new JMenuItem("Reveal Sequences");
204 menuItem.addActionListener(new ActionListener()
206 public void actionPerformed(ActionEvent e)
208 ap.av.showSequence(index);
209 if (ap.overviewPanel != null)
210 ap.overviewPanel.updateOverviewImage();
216 menuItem = new JMenuItem("Reveal All");
217 menuItem.addActionListener(new ActionListener()
219 public void actionPerformed(ActionEvent e)
221 ap.av.showAllHiddenSeqs();
222 if (ap.overviewPanel != null)
223 ap.overviewPanel.updateOverviewImage();
235 SequenceGroup sg = ap.av.getSelectionGroup();
239 groupName.setText(sg.getName());
241 if (sg.cs instanceof ZappoColourScheme)
243 zappoColour.setSelected(true);
245 else if (sg.cs instanceof TaylorColourScheme)
247 taylorColour.setSelected(true);
249 else if (sg.cs instanceof PIDColourScheme)
251 PIDColour.setSelected(true);
253 else if (sg.cs instanceof Blosum62ColourScheme)
255 BLOSUM62Colour.setSelected(true);
257 else if (sg.cs instanceof UserColourScheme)
259 userDefinedColour.setSelected(true);
261 else if (sg.cs instanceof HydrophobicColourScheme)
263 hydrophobicityColour.setSelected(true);
265 else if (sg.cs instanceof HelixColourScheme)
267 helixColour.setSelected(true);
269 else if (sg.cs instanceof StrandColourScheme)
271 strandColour.setSelected(true);
273 else if (sg.cs instanceof TurnColourScheme)
275 turnColour.setSelected(true);
277 else if (sg.cs instanceof BuriedColourScheme)
279 buriedColour.setSelected(true);
281 else if (sg.cs instanceof ClustalxColourScheme)
283 clustalColour.setSelected(true);
287 noColourmenuItem.setSelected(true);
290 if (sg.cs!=null && sg.cs.conservationApplied())
292 conservationMenuItem.setSelected(true);
295 showText.setSelected(sg.getDisplayText());
296 showColourText.setSelected(sg.getColourText());
297 showBoxes.setSelected(sg.getDisplayBoxes());
301 groupMenu.setVisible(false);
302 editMenu.setVisible(false);
305 if (!ap.av.alignment.getGroups().contains(sg))
307 unGroupMenuItem.setVisible(false);
313 sequenceMenu.setVisible(false);
314 pdbMenu.setVisible(false);
317 if(links != null && links.size()>0)
319 JMenu linkMenu = new JMenu("Link");
321 for(int i=0; i<links.size(); i++)
323 String link = links.elementAt(i).toString();
324 final String label = link.substring(0, link.indexOf("|"));
325 item = new JMenuItem(label);
328 if (link.indexOf("$SEQUENCE_ID$") > -1)
330 String id = seq.getName();
331 if (id.indexOf("|") > -1)
332 id = id.substring(id.lastIndexOf("|") + 1);
334 url = link.substring(link.indexOf("|") + 1,
335 link.indexOf("$SEQUENCE_ID$"))
337 link.substring(link.indexOf("$SEQUENCE_ID$") + 13);
340 url = link.substring(link.lastIndexOf("|")+1);
343 item.addActionListener(new java.awt.event.ActionListener()
345 public void actionPerformed(ActionEvent e)
354 sequenceMenu.add(linkMenu);
364 * @throws Exception DOCUMENT ME!
366 private void jbInit() throws Exception
368 groupMenu.setText("Group");
369 groupMenu.setText("Selection");
370 groupName.setText("Name");
371 groupName.addActionListener(new java.awt.event.ActionListener()
373 public void actionPerformed(ActionEvent e)
375 groupName_actionPerformed(e);
378 sequenceMenu.setText("Sequence");
379 sequenceName.setText("Edit Name/Description");
380 sequenceName.addActionListener(new java.awt.event.ActionListener()
382 public void actionPerformed(ActionEvent e)
384 sequenceName_actionPerformed(e);
387 PIDColour.setFocusPainted(false);
388 unGroupMenuItem.setText("Remove Group");
389 unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()
391 public void actionPerformed(ActionEvent e)
393 unGroupMenuItem_actionPerformed(e);
397 outline.setText("Border colour");
398 outline.addActionListener(new java.awt.event.ActionListener()
400 public void actionPerformed(ActionEvent e)
402 outline_actionPerformed(e);
405 nucleotideMenuItem.setText("Nucleotide");
406 nucleotideMenuItem.addActionListener(new ActionListener()
408 public void actionPerformed(ActionEvent e)
410 nucleotideMenuItem_actionPerformed(e);
413 colourMenu.setText("Group Colour");
414 showBoxes.setText("Boxes");
415 showBoxes.setState(true);
416 showBoxes.addActionListener(new ActionListener()
418 public void actionPerformed(ActionEvent e)
420 showBoxes_actionPerformed(e);
423 showText.setText("Text");
424 showText.setState(true);
425 showText.addActionListener(new ActionListener()
427 public void actionPerformed(ActionEvent e)
429 showText_actionPerformed(e);
432 showColourText.setText("Colour Text");
433 showColourText.addActionListener(new ActionListener()
435 public void actionPerformed(ActionEvent e)
437 showColourText_actionPerformed(e);
440 editMenu.setText("Edit");
442 cut.addActionListener(new ActionListener()
444 public void actionPerformed(ActionEvent e)
446 cut_actionPerformed(e);
449 upperCase.setText("To Upper Case");
450 upperCase.addActionListener(new ActionListener()
452 public void actionPerformed(ActionEvent e)
454 upperCase_actionPerformed(e);
457 copy.setText("Copy");
458 copy.addActionListener(new ActionListener()
460 public void actionPerformed(ActionEvent e)
462 copy_actionPerformed(e);
465 lowerCase.setText("To Lower Case");
466 lowerCase.addActionListener(new ActionListener()
468 public void actionPerformed(ActionEvent e)
470 lowerCase_actionPerformed(e);
473 toggle.setText("Toggle Case");
474 toggle.addActionListener(new ActionListener()
476 public void actionPerformed(ActionEvent e)
478 toggle_actionPerformed(e);
481 pdbMenu.setText("Associate Structure with Sequence");
482 pdbFromFile.setText("From File");
483 pdbFromFile.addActionListener(new ActionListener()
485 public void actionPerformed(ActionEvent e)
487 pdbFromFile_actionPerformed(e);
490 enterPDB.setText("Enter PDB Id");
491 enterPDB.addActionListener(new ActionListener()
493 public void actionPerformed(ActionEvent e)
495 enterPDB_actionPerformed(e);
498 discoverPDB.setText("Discover PDB ids");
499 discoverPDB.addActionListener(new ActionListener()
501 public void actionPerformed(ActionEvent e)
503 discoverPDB_actionPerformed(e);
506 outputMenu.setText("Output to Textbox...");
510 groupMenu.add(editMenu);
511 groupMenu.add(outputMenu);
512 groupMenu.addSeparator();
513 groupMenu.add(groupName);
514 groupMenu.add(unGroupMenuItem);
515 groupMenu.add(colourMenu);
516 groupMenu.add(showBoxes);
517 groupMenu.add(showText);
518 groupMenu.add(showColourText);
519 groupMenu.add(outline);
520 sequenceMenu.add(sequenceName);
521 sequenceMenu.add(pdbMenu);
522 colourMenu.add(noColourmenuItem);
523 colourMenu.add(clustalColour);
524 colourMenu.add(BLOSUM62Colour);
525 colourMenu.add(PIDColour);
526 colourMenu.add(zappoColour);
527 colourMenu.add(taylorColour);
528 colourMenu.add(hydrophobicityColour);
529 colourMenu.add(helixColour);
530 colourMenu.add(strandColour);
531 colourMenu.add(turnColour);
532 colourMenu.add(buriedColour);
533 colourMenu.add(nucleotideMenuItem);
534 colourMenu.add(userDefinedColour);
536 if(jalview.gui.UserDefinedColours.getUserColourSchemes()!=null)
538 java.util.Enumeration userColours = jalview.gui.UserDefinedColours.
539 getUserColourSchemes().keys();
541 while (userColours.hasMoreElements())
543 JMenuItem item = new JMenuItem(userColours.
544 nextElement().toString());
545 item.addActionListener(new ActionListener()
547 public void actionPerformed(ActionEvent evt)
549 userDefinedColour_actionPerformed(evt);
552 colourMenu.add(item);
557 colourMenu.addSeparator();
558 colourMenu.add(abovePIDColour);
559 colourMenu.add(conservationMenuItem);
562 editMenu.add(upperCase);
563 editMenu.add(lowerCase);
564 editMenu.add(toggle);
565 pdbMenu.add(pdbFromFile);
566 pdbMenu.add(enterPDB);
567 pdbMenu.add(discoverPDB);
568 noColourmenuItem.setText("None");
569 noColourmenuItem.addActionListener(new java.awt.event.ActionListener()
571 public void actionPerformed(ActionEvent e)
573 noColourmenuItem_actionPerformed(e);
577 clustalColour.setText("Clustalx colours");
578 clustalColour.addActionListener(new java.awt.event.ActionListener()
580 public void actionPerformed(ActionEvent e)
582 clustalColour_actionPerformed(e);
585 zappoColour.setText("Zappo");
586 zappoColour.addActionListener(new java.awt.event.ActionListener()
588 public void actionPerformed(ActionEvent e)
590 zappoColour_actionPerformed(e);
593 taylorColour.setText("Taylor");
594 taylorColour.addActionListener(new java.awt.event.ActionListener()
596 public void actionPerformed(ActionEvent e)
598 taylorColour_actionPerformed(e);
601 hydrophobicityColour.setText("Hydrophobicity");
602 hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()
604 public void actionPerformed(ActionEvent e)
606 hydrophobicityColour_actionPerformed(e);
609 helixColour.setText("Helix propensity");
610 helixColour.addActionListener(new java.awt.event.ActionListener()
612 public void actionPerformed(ActionEvent e)
614 helixColour_actionPerformed(e);
617 strandColour.setText("Strand propensity");
618 strandColour.addActionListener(new java.awt.event.ActionListener()
620 public void actionPerformed(ActionEvent e)
622 strandColour_actionPerformed(e);
625 turnColour.setText("Turn propensity");
626 turnColour.addActionListener(new java.awt.event.ActionListener()
628 public void actionPerformed(ActionEvent e)
630 turnColour_actionPerformed(e);
633 buriedColour.setText("Buried Index");
634 buriedColour.addActionListener(new java.awt.event.ActionListener()
636 public void actionPerformed(ActionEvent e)
638 buriedColour_actionPerformed(e);
641 abovePIDColour.setText("Above % Identity");
642 abovePIDColour.addActionListener(new java.awt.event.ActionListener()
644 public void actionPerformed(ActionEvent e)
646 abovePIDColour_actionPerformed(e);
649 userDefinedColour.setText("User Defined...");
650 userDefinedColour.addActionListener(new java.awt.event.ActionListener()
652 public void actionPerformed(ActionEvent e)
654 userDefinedColour_actionPerformed(e);
657 PIDColour.setText("Percentage Identity");
658 PIDColour.addActionListener(new java.awt.event.ActionListener()
660 public void actionPerformed(ActionEvent e)
662 PIDColour_actionPerformed(e);
665 BLOSUM62Colour.setText("BLOSUM62");
666 BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()
668 public void actionPerformed(ActionEvent e)
670 BLOSUM62Colour_actionPerformed(e);
673 conservationMenuItem.setText("Conservation");
674 conservationMenuItem.addActionListener(new java.awt.event.ActionListener()
676 public void actionPerformed(ActionEvent e)
678 conservationMenuItem_actionPerformed(e);
688 if (ap.overviewPanel != null)
689 ap.overviewPanel.updateOverviewImage();
691 ap.seqPanel.repaint();
697 * @param e DOCUMENT ME!
699 protected void clustalColour_actionPerformed(ActionEvent e)
701 SequenceGroup sg = getGroup();
702 sg.cs = new ClustalxColourScheme(sg.getSequences(true),
703 ap.av.alignment.getWidth());
710 * @param e DOCUMENT ME!
712 protected void zappoColour_actionPerformed(ActionEvent e)
714 getGroup().cs = new ZappoColourScheme();
721 * @param e DOCUMENT ME!
723 protected void taylorColour_actionPerformed(ActionEvent e)
725 getGroup().cs = new TaylorColourScheme();
732 * @param e DOCUMENT ME!
734 protected void hydrophobicityColour_actionPerformed(ActionEvent e)
736 getGroup().cs = new HydrophobicColourScheme();
743 * @param e DOCUMENT ME!
745 protected void helixColour_actionPerformed(ActionEvent e)
747 getGroup().cs = new HelixColourScheme();
754 * @param e DOCUMENT ME!
756 protected void strandColour_actionPerformed(ActionEvent e)
758 getGroup().cs = new StrandColourScheme();
765 * @param e DOCUMENT ME!
767 protected void turnColour_actionPerformed(ActionEvent e)
769 getGroup().cs = new TurnColourScheme();
776 * @param e DOCUMENT ME!
778 protected void buriedColour_actionPerformed(ActionEvent e)
780 getGroup().cs = new BuriedColourScheme();
787 * @param e DOCUMENT ME!
789 public void nucleotideMenuItem_actionPerformed(ActionEvent e)
791 getGroup().cs = new NucleotideColourScheme();
798 * @param e DOCUMENT ME!
800 protected void abovePIDColour_actionPerformed(ActionEvent e)
802 SequenceGroup sg = getGroup();
806 if (abovePIDColour.isSelected())
808 sg.cs.setConsensus(AAFrequency.calculate(
809 sg.getSequences(true), 0,
810 ap.av.alignment.getWidth()));
812 int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs,
813 getGroup().getName());
815 sg.cs.setThreshold(threshold, ap.av.getIgnoreGapsConsensus());
817 SliderPanel.showPIDSlider();
819 else // remove PIDColouring
821 sg.cs.setThreshold(0, ap.av.getIgnoreGapsConsensus());
830 * @param e DOCUMENT ME!
832 protected void userDefinedColour_actionPerformed(ActionEvent e)
834 SequenceGroup sg = getGroup();
836 if (e.getActionCommand().equals("User Defined..."))
837 new UserDefinedColours(ap, sg);
840 UserColourScheme udc = (UserColourScheme) UserDefinedColours.
841 getUserColourSchemes().get(e.getActionCommand());
849 * @param e DOCUMENT ME!
851 protected void PIDColour_actionPerformed(ActionEvent e)
853 SequenceGroup sg = getGroup();
854 sg.cs = new PIDColourScheme();
855 sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,
856 ap.av.alignment.getWidth()));
863 * @param e DOCUMENT ME!
865 protected void BLOSUM62Colour_actionPerformed(ActionEvent e)
867 SequenceGroup sg = getGroup();
869 sg.cs = new Blosum62ColourScheme();
871 sg.cs.setConsensus(AAFrequency.calculate(sg.getSequences(true), 0,
872 ap.av.alignment.getWidth()));
880 * @param e DOCUMENT ME!
882 protected void noColourmenuItem_actionPerformed(ActionEvent e)
884 getGroup().cs = null;
891 * @param e DOCUMENT ME!
893 protected void conservationMenuItem_actionPerformed(ActionEvent e)
895 SequenceGroup sg = getGroup();
899 if (conservationMenuItem.isSelected())
901 Conservation c = new Conservation("Group",
902 ResidueProperties.propHash, 3,
903 sg.getSequences(true), 0,
904 ap.av.alignment.getWidth());
907 c.verdict(false, ap.av.ConsPercGaps);
909 sg.cs.setConservation(c);
911 SliderPanel.setConservationSlider(ap, sg.cs, sg.getName());
912 SliderPanel.showConservationSlider();
914 else // remove ConservationColouring
916 sg.cs.setConservation(null);
925 * @param e DOCUMENT ME!
927 protected void groupName_actionPerformed(ActionEvent e)
929 SequenceGroup sg = getGroup();
930 String reply = JOptionPane.showInternalInputDialog(Desktop.desktop,
931 "Enter new group name", "Edit group name",
932 JOptionPane.QUESTION_MESSAGE);
940 groupName.setText(reply);
946 * @param e DOCUMENT ME!
948 protected void analyze_actionPerformed(ActionEvent e)
950 CutAndPasteTransfer cap = new CutAndPasteTransfer();
951 JInternalFrame frame = new JInternalFrame();
952 frame.setContentPane(cap);
953 Desktop.addInternalFrame(frame, "Analyze this - ", 400, 300);
955 SequenceGroup sg = getGroup();
956 StringBuffer sb = new StringBuffer();
958 for (int i = 0; i < sg.getSize(false); i++)
960 Sequence tmp = (Sequence) sg.getSequences(false).elementAt(i);
961 sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1));
965 sb.append("Something amazing will happen soon");
966 cap.setText(sb.toString());
972 * @return DOCUMENT ME!
974 SequenceGroup getGroup()
976 SequenceGroup sg = ap.av.getSelectionGroup();
977 // this method won't add a new group if it already exists
979 ap.av.alignment.addGroup(sg);
987 * @param e DOCUMENT ME!
989 void sequenceName_actionPerformed(ActionEvent e)
991 JLabel idlabel = new JLabel( " Sequence Name ");
992 JLabel desclabel = new JLabel("Sequence Description ");
993 idlabel.setFont(new Font("Courier", Font.PLAIN, 12));
994 desclabel.setFont(new Font("Courier", Font.PLAIN, 12));
995 JTextField id = new JTextField(sequence.getName(), 40);
996 JTextField description = new JTextField(sequence.getDescription(), 40);
997 JPanel panel = new JPanel(new BorderLayout());
998 JPanel panel2 = new JPanel(new BorderLayout());
999 panel2.add(idlabel, BorderLayout.WEST);
1000 panel2.add(id, BorderLayout.CENTER);
1001 panel.add(panel2, BorderLayout.NORTH);
1002 panel2 = new JPanel(new BorderLayout());
1003 panel2.add(desclabel, BorderLayout.WEST);
1004 panel2.add(description, BorderLayout.CENTER);
1005 panel.add(panel2, BorderLayout.SOUTH);
1008 int reply = JOptionPane.showInternalConfirmDialog(Desktop.desktop,
1009 panel, "Edit Sequence Name/Description",
1010 JOptionPane.OK_CANCEL_OPTION );
1013 if (reply != JOptionPane.OK_OPTION )
1018 String s = id.getText();
1022 if (s.indexOf(" ") > -1)
1024 JOptionPane.showMessageDialog(ap,
1025 "Spaces have been converted to \"_\"",
1026 "No spaces allowed in Sequence Name",
1027 JOptionPane.WARNING_MESSAGE);
1030 s = s.replace(' ', '_');
1031 sequence.getDatasetSequence().setName(s);
1032 sequence.setName(s);
1036 sequence.getDatasetSequence().setDescription(description.getText());
1037 sequence.setDescription(description.getText());
1043 * @param e DOCUMENT ME!
1045 void unGroupMenuItem_actionPerformed(ActionEvent e)
1047 SequenceGroup sg = ap.av.getSelectionGroup();
1048 ap.av.alignment.deleteGroup(sg);
1049 ap.av.setSelectionGroup(null);
1057 * @param e DOCUMENT ME!
1059 protected void outline_actionPerformed(ActionEvent e)
1061 SequenceGroup sg = getGroup();
1062 Color col = JColorChooser.showDialog(this, "Select Outline Colour",
1067 sg.setOutlineColour(col);
1076 * @param e DOCUMENT ME!
1078 public void showBoxes_actionPerformed(ActionEvent e)
1080 getGroup().setDisplayBoxes(showBoxes.isSelected());
1087 * @param e DOCUMENT ME!
1089 public void showText_actionPerformed(ActionEvent e)
1091 getGroup().setDisplayText(showText.isSelected());
1098 * @param e DOCUMENT ME!
1100 public void showColourText_actionPerformed(ActionEvent e)
1102 getGroup().setColourText(showColourText.isSelected());
1106 public void showLink(String url)
1110 jalview.util.BrowserLauncher.openURL(url);
1112 catch (Exception ex)
1114 JOptionPane.showInternalMessageDialog(Desktop.desktop,
1115 "Unixers: Couldn't find default web browser."
1116 +"\nAdd the full path to your browser in Preferences.",
1117 "Web browser not found", JOptionPane.WARNING_MESSAGE );
1120 ex.printStackTrace();
1124 void hideSequences(boolean representGroup)
1126 SequenceGroup sg = ap.av.getSelectionGroup();
1127 if(sg==null || sg.getSize(false)<1)
1129 ap.av.hideSequence(sequence);
1134 while(index < sg.getSize(false))
1136 if(representGroup && sg.getSequenceAt(index)!=sequence)
1138 sequence.addHiddenSequence(sg.getSequenceAt(index));
1139 ap.av.hideSequence(sg.getSequenceAt(index));
1141 else if(!representGroup)
1143 ap.av.hideSequence(sg.getSequenceAt(index));
1148 ap.av.setSelectionGroup(null);
1151 public void copy_actionPerformed(ActionEvent e)
1153 ap.alignFrame.copy_actionPerformed(null);
1156 public void cut_actionPerformed(ActionEvent e)
1158 ap.alignFrame.cut_actionPerformed(null);
1161 public void upperCase_actionPerformed(ActionEvent e)
1163 changeCase(e.getSource());
1166 public void lowerCase_actionPerformed(ActionEvent e)
1168 changeCase(e.getSource());
1171 public void toggle_actionPerformed(ActionEvent e)
1173 changeCase(e.getSource());
1176 void changeCase(Object source)
1178 SequenceGroup sg = ap.av.getSelectionGroup();
1181 for (int g = 0; g < sg.getSize(true); g++)
1183 int start = sg.getStartRes();
1184 int end = sg.getEndRes() + 1;
1188 if (ap.av.hasHiddenColumns)
1190 end = ap.av.colSel.getHiddenBoundaryRight(start);
1192 end = sg.getEndRes() + 1;
1193 if (end > sg.getEndRes())
1194 end = sg.getEndRes() + 1;
1197 if (source == toggle)
1198 ( (SequenceI) sg.getSequences(true).elementAt(g))
1199 .toggleCase(start, end);
1201 ( (SequenceI) sg.getSequences(true).elementAt(g))
1202 .changeCase(source == upperCase, start, end);
1204 if (ap.av.hasHiddenColumns)
1206 start = ap.av.colSel.adjustForHiddenColumns(end);
1207 start = ap.av.colSel.getHiddenBoundaryLeft(start) + 1;
1211 while (end < sg.getEndRes());
1217 public void outputText_actionPerformed(ActionEvent e)
1219 CutAndPasteTransfer cap = new CutAndPasteTransfer();
1220 Desktop.addInternalFrame(cap,
1221 "Alignment output - " + e.getActionCommand(), 600,
1224 String [] omitHidden = null;
1226 if(ap.av.hasHiddenColumns)
1228 System.out.println("PROMPT USER HERE");
1229 omitHidden = ap.av.getViewAsString(true);
1232 cap.setText(new FormatAdapter().formatSequences(
1233 e.getActionCommand(),
1234 ap.av.getSelectionAsNewSequence(),
1239 public void pdbFromFile_actionPerformed(ActionEvent e)
1241 jalview.io.JalviewFileChooser chooser
1242 = new jalview.io.JalviewFileChooser(jalview.bin.Cache.
1245 chooser.setFileView(new jalview.io.JalviewFileView());
1246 chooser.setDialogTitle("Select a PDB file");
1247 chooser.setToolTipText("Load a PDB file");
1249 int value = chooser.showOpenDialog(null);
1251 if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION)
1253 PDBEntry entry = new PDBEntry();
1254 String choice = chooser.getSelectedFile().getPath();
1255 jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice);
1258 MCview.PDBfile pdbfile = new MCview.PDBfile(choice,
1259 jalview.io.AppletFormatAdapter.FILE);
1261 if (pdbfile.id == null)
1263 String reply = JOptionPane.showInternalInputDialog(
1265 "Couldn't find a PDB id in the file supplied."
1266 + "Please enter an Id to identify this structure.",
1267 "No PDB Id in File", JOptionPane.QUESTION_MESSAGE);
1274 entry.setId(pdbfile.id);
1276 catch (java.io.IOException ex)
1278 ex.printStackTrace();
1281 entry.setFile(choice);
1282 sequence.getDatasetSequence().addPDBId(entry);
1287 public void enterPDB_actionPerformed(ActionEvent e)
1289 String id = JOptionPane.showInternalInputDialog(Desktop.desktop,
1290 "Enter PDB Id", "Enter PDB Id", JOptionPane.QUESTION_MESSAGE);
1292 if (id != null && id.length() > 0)
1294 PDBEntry entry = new PDBEntry();
1296 sequence.getDatasetSequence()
1301 public void discoverPDB_actionPerformed(ActionEvent e)
1303 new jalview.io.DBRefFetcher(
1304 ap.av.getAlignment(), ap.alignFrame).fetchDBRefs(false);