/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.gui; import jalview.datamodel.*; import jalview.analysis.*; import jalview.schemes.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; import jalview.io.*; import MCview.*; public class PopupMenu extends JPopupMenu { JMenu groupMenu = new JMenu(); JMenuItem groupName = new JMenuItem(); protected JRadioButtonMenuItem clustalColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem zappoColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem taylorColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem hydrophobicityColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem helixColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem strandColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem turnColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem buriedColour = new JRadioButtonMenuItem(); protected JCheckBoxMenuItem abovePIDColour = new JCheckBoxMenuItem(); protected JRadioButtonMenuItem userDefinedColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem PIDColour = new JRadioButtonMenuItem(); protected JRadioButtonMenuItem BLOSUM62Colour = new JRadioButtonMenuItem(); JRadioButtonMenuItem noColourmenuItem = new JRadioButtonMenuItem(); protected JCheckBoxMenuItem conservationMenuItem = new JCheckBoxMenuItem(); AlignmentPanel ap; JMenu sequenceMenu = new JMenu(); JMenuItem sequenceName = new JMenuItem(); Sequence sequence; JMenuItem unGroupMenuItem = new JMenuItem(); JMenuItem pdbMenuItem = new JMenuItem(); JMenuItem outline = new JMenuItem(); JRadioButtonMenuItem nucleotideMenuItem = new JRadioButtonMenuItem(); JMenu colourMenu = new JMenu(); JCheckBoxMenuItem showBoxes = new JCheckBoxMenuItem(); JCheckBoxMenuItem showText = new JCheckBoxMenuItem(); JCheckBoxMenuItem showColourText = new JCheckBoxMenuItem(); public PopupMenu(AlignmentPanel ap, Sequence seq) { /////////////////////////////////////////////////////////// // If this is activated from the sequence panel, the user may want to // edit or annotate a particular residue. Therefore display the residue menu // // If from the IDPanel, we must display the sequence menu ////////////////////////////////////////////////////////// this.ap = ap; sequence = seq; ButtonGroup colours = new ButtonGroup(); colours.add(noColourmenuItem); colours.add(clustalColour); colours.add(zappoColour); colours.add(taylorColour); colours.add(hydrophobicityColour); colours.add(helixColour); colours.add(strandColour); colours.add(turnColour); colours.add(buriedColour); colours.add(abovePIDColour); colours.add(userDefinedColour); colours.add(PIDColour); colours.add(BLOSUM62Colour); try { jbInit(); } catch(Exception e) { e.printStackTrace(); } SequenceGroup sg = ap.av.getSelectionGroup(); if(sg!=null) { groupName.setText(sg.getName()); if(sg.cs instanceof ZappoColourScheme) zappoColour.setSelected(true); else if(sg.cs instanceof TaylorColourScheme) taylorColour.setSelected(true); else if (sg.cs instanceof PIDColourScheme) PIDColour.setSelected(true); else if (sg.cs instanceof Blosum62ColourScheme) BLOSUM62Colour.setSelected(true); else if (sg.cs instanceof UserColourScheme) userDefinedColour.setSelected(true); else if (sg.cs instanceof HydrophobicColourScheme) hydrophobicityColour.setSelected(true); else if (sg.cs instanceof HelixColourScheme) helixColour.setSelected(true); else if (sg.cs instanceof StrandColourScheme) strandColour.setSelected(true); else if (sg.cs instanceof TurnColourScheme) turnColour.setSelected(true); else if (sg.cs instanceof BuriedColourScheme) buriedColour.setSelected(true); else if (sg.cs instanceof ClustalxColourScheme) clustalColour.setSelected(true); else noColourmenuItem.setSelected(true); if (sg.cs instanceof ConservationColourScheme) conservationMenuItem.setSelected(true); showText.setSelected(sg.getDisplayText()); showColourText.setSelected(sg.getColourText()); showBoxes.setSelected(sg.getDisplayBoxes()); } if( !ap.av.alignment.getGroups().contains(sg)) unGroupMenuItem.setVisible(false); else groupMenu.insertSeparator(3); if(seq==null) sequenceMenu.setVisible(false); } private void jbInit() throws Exception { groupMenu.setText("Group"); groupMenu.setText("Define"); groupName.setText("Name"); groupName.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { groupName_actionPerformed(e); } }); sequenceMenu.setText("Sequence"); sequenceName.setText("Edit name"); sequenceName.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { sequenceName_actionPerformed(e); } }); PIDColour.setFocusPainted(false); unGroupMenuItem.setText("Remove Group"); unGroupMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { unGroupMenuItem_actionPerformed(e); } }); pdbMenuItem.setText("View PDB structure"); pdbMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { pdbMenuItem_actionPerformed(e); } }); outline.setText("Border colour"); outline.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { outline_actionPerformed(e); } }); nucleotideMenuItem.setText("Nucleotide"); nucleotideMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { nucleotideMenuItem_actionPerformed(e); } }); colourMenu.setText("Group Colour"); showBoxes.setText("Boxes"); showBoxes.setState(true); showBoxes.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showBoxes_actionPerformed(e); } }); showText.setText("Text"); showText.setState(true); showText.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showText_actionPerformed(e); } }); showColourText.setText("Colour Text"); showColourText.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { showColourText_actionPerformed(e); } }); add(groupMenu); add(sequenceMenu); groupMenu.add(groupName); groupMenu.addSeparator(); groupMenu.add(unGroupMenuItem); groupMenu.add(colourMenu); groupMenu.addSeparator(); groupMenu.add(showBoxes); groupMenu.add(showText); groupMenu.add(showColourText); groupMenu.addSeparator(); groupMenu.add(outline); sequenceMenu.add(sequenceName); sequenceMenu.add(pdbMenuItem); colourMenu.add(noColourmenuItem); colourMenu.add(clustalColour); colourMenu.add(BLOSUM62Colour); colourMenu.add(PIDColour); colourMenu.add(zappoColour); colourMenu.add(taylorColour); colourMenu.add(hydrophobicityColour); colourMenu.add(helixColour); colourMenu.add(strandColour); colourMenu.add(turnColour); colourMenu.add(buriedColour); colourMenu.add(nucleotideMenuItem); colourMenu.add(userDefinedColour); colourMenu.addSeparator(); colourMenu.add(abovePIDColour); colourMenu.add(conservationMenuItem); noColourmenuItem.setText("None"); noColourmenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { noColourmenuItem_actionPerformed(e); } }); clustalColour.setText("Clustalx colours"); clustalColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { clustalColour_actionPerformed(e); } }); zappoColour.setText("Zappo"); zappoColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { zappoColour_actionPerformed(e); } }); taylorColour.setText("Taylor"); taylorColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { taylorColour_actionPerformed(e); } }); hydrophobicityColour.setText("Hydrophobicity"); hydrophobicityColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { hydrophobicityColour_actionPerformed(e); } }); helixColour.setText("Helix propensity"); helixColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { helixColour_actionPerformed(e); } }); strandColour.setText("Strand propensity"); strandColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { strandColour_actionPerformed(e); } }); turnColour.setText("Turn propensity"); turnColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { turnColour_actionPerformed(e); } }); buriedColour.setText("Buried Index"); buriedColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { buriedColour_actionPerformed(e); } }); abovePIDColour.setText("Above % Identity"); abovePIDColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { abovePIDColour_actionPerformed(e); } }); userDefinedColour.setText("User Defined"); userDefinedColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { userDefinedColour_actionPerformed(e); } }); PIDColour.setText("Percentage Identity"); PIDColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { PIDColour_actionPerformed(e); } }); BLOSUM62Colour.setText("BLOSUM62"); BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { BLOSUM62Colour_actionPerformed(e); } }); conservationMenuItem.setText("Conservation"); conservationMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { conservationMenuItem_actionPerformed(e); } }); } void refresh() { SequenceGroup sg = getGroup(); SuperGroup superG = ap.av.alignment.getSuperGroup( sg ); if( superG !=null) superG.setSuperGroupProperties( sg ); ap.seqPanel.repaint(); } protected void clustalColour_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); sg.cs = new ClustalxColourScheme(sg.sequences, ap.av.alignment.getWidth()); refresh(); } protected void zappoColour_actionPerformed(ActionEvent e) { getGroup().cs = new ZappoColourScheme(); refresh(); } protected void taylorColour_actionPerformed(ActionEvent e) { getGroup().cs = new TaylorColourScheme(); refresh(); } protected void hydrophobicityColour_actionPerformed(ActionEvent e) { getGroup().cs = new HydrophobicColourScheme(); refresh(); } protected void helixColour_actionPerformed(ActionEvent e) { getGroup().cs = new HelixColourScheme(); refresh(); } protected void strandColour_actionPerformed(ActionEvent e) { getGroup().cs = new StrandColourScheme(); refresh(); } protected void turnColour_actionPerformed(ActionEvent e) { getGroup().cs = new TurnColourScheme(); refresh(); } protected void buriedColour_actionPerformed(ActionEvent e) { getGroup().cs = new BuriedColourScheme(); refresh(); } public void nucleotideMenuItem_actionPerformed(ActionEvent e) { getGroup().cs = new NucleotideColourScheme(); refresh(); } protected void abovePIDColour_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); if (abovePIDColour.isSelected()) { sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, ap.av.alignment.getWidth())); int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup().getName()); if (sg.cs instanceof ResidueColourScheme) ( (ResidueColourScheme)sg. cs).setThreshold(threshold); else if (sg.cs instanceof ScoreColourScheme) ( (ScoreColourScheme) sg.cs).setThreshold(threshold); SliderPanel.showPIDSlider(); } else // remove PIDColouring { ResidueColourScheme rcs = (ResidueColourScheme) sg.cs; rcs.setThreshold(0); sg.cs = rcs; } refresh(); } protected void userDefinedColour_actionPerformed(ActionEvent e) { new UserDefinedColours( ap, getGroup()); } protected void PIDColour_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); sg.cs = new PIDColourScheme(); sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, ap.av.alignment.getWidth())); refresh(); } protected void BLOSUM62Colour_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); sg.cs = new Blosum62ColourScheme(); sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, ap.av.alignment.getWidth())); refresh(); } protected void noColourmenuItem_actionPerformed(ActionEvent e) { getGroup().cs = null; refresh(); } protected void conservationMenuItem_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); if(conservationMenuItem.isSelected()) { Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, sg.sequences, 0, ap.av.alignment.getWidth()); c.calculate(); c.verdict(false, ap.av.ConsPercGaps); ConservationColourScheme ccs = new ConservationColourScheme(c, sg.cs); sg.cs = ccs; SliderPanel.setConservationSlider(ap, ccs, sg.getName()); SliderPanel.showConservationSlider(); } else // remove ConservationColouring { ConservationColourScheme ccs = (ConservationColourScheme)sg.cs; sg.cs = ccs.cs; } refresh(); } protected void groupName_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); String reply = JOptionPane.showInternalInputDialog(Desktop.desktop, "Enter new group name", "Edit group name", JOptionPane.QUESTION_MESSAGE); if(reply==null) return; sg.setName(reply); groupName.setText(reply); } protected void analyze_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(); JInternalFrame frame = new JInternalFrame(); frame.setContentPane(cap); Desktop.addInternalFrame(frame, "Analyze this - ", 400, 300); SequenceGroup sg = getGroup(); StringBuffer sb = new StringBuffer(); for(int i=0; i