/* * 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.appletgui; import java.awt.*; import java.awt.event.*; import jalview.analysis.*; import jalview.datamodel.*; import jalview.schemes.*; public class APopupMenu extends java.awt.PopupMenu { Menu groupMenu = new Menu(); protected MenuItem clustalColour = new MenuItem(); protected MenuItem zappoColour = new MenuItem(); protected MenuItem taylorColour = new MenuItem(); protected MenuItem hydrophobicityColour = new MenuItem(); protected MenuItem helixColour = new MenuItem(); protected MenuItem strandColour = new MenuItem(); protected MenuItem turnColour = new MenuItem(); protected MenuItem buriedColour = new MenuItem(); protected CheckboxMenuItem abovePIDColour = new CheckboxMenuItem(); protected MenuItem userDefinedColour = new MenuItem(); protected MenuItem PIDColour = new MenuItem(); protected MenuItem BLOSUM62Colour = new MenuItem(); MenuItem noColourmenuItem = new MenuItem(); protected CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem(); AlignmentPanel ap; Menu sequenceMenu = new Menu(); MenuItem sequenceName = new MenuItem(); Sequence sequence; MenuItem unGroupMenuItem = new MenuItem(); MenuItem nucleotideMenuItem = new MenuItem(); Menu colourMenu = new Menu(); CheckboxMenuItem showBoxes = new CheckboxMenuItem(); CheckboxMenuItem showText = new CheckboxMenuItem(); CheckboxMenuItem showColourText = new CheckboxMenuItem(); public APopupMenu(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; try { jbInit(); } catch (Exception e) { e.printStackTrace(); } SequenceGroup sg = ap.av.getSelectionGroup(); if (sg != null) { showText.setState(sg.getDisplayText()); showColourText.setState(sg.getColourText()); showBoxes.setState(sg.getDisplayBoxes()); } if (!ap.av.alignment.getGroups().contains(sg)) { groupMenu.remove(unGroupMenuItem); } if (seq == null) { remove(sequenceMenu); } } private void jbInit() throws Exception { groupMenu.setLabel("Group"); groupMenu.setLabel("Define"); sequenceMenu.setLabel("Sequence"); sequenceName.setLabel("Edit name"); unGroupMenuItem.setLabel("Remove Group"); unGroupMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { unGroupMenuItem_actionPerformed(e); } }); nucleotideMenuItem.setLabel("Nucleotide"); nucleotideMenuItem.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { nucleotideMenuItem_actionPerformed(e); } }); conservationMenuItem.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { conservationMenuItem_itemStateChanged(itemEvent); } }); abovePIDColour.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { abovePIDColour_itemStateChanged(itemEvent); } }); colourMenu.setLabel("Group Colour"); showBoxes.setLabel("Boxes"); showBoxes.setState(true); showBoxes.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { showBoxes_itemStateChanged(itemEvent); } }); showText.setLabel("Text"); showText.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { showText_itemStateChanged(itemEvent); } }); showColourText.setLabel("Colour Text"); showColourText.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent itemEvent) { showColourText_itemStateChanged(itemEvent); } }); add(groupMenu); this.add(sequenceMenu); groupMenu.add(unGroupMenuItem); groupMenu.add(colourMenu); groupMenu.addSeparator(); groupMenu.add(showBoxes); groupMenu.add(showText); groupMenu.add(showColourText); sequenceMenu.add(sequenceName); 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.setLabel("None"); noColourmenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { noColourmenuItem_actionPerformed(e); } }); clustalColour.setLabel("Clustalx colours"); clustalColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { clustalColour_actionPerformed(e); } }); zappoColour.setLabel("Zappo"); zappoColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { zappoColour_actionPerformed(e); } }); taylorColour.setLabel("Taylor"); taylorColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { taylorColour_actionPerformed(e); } }); hydrophobicityColour.setLabel("Hydrophobicity"); hydrophobicityColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { hydrophobicityColour_actionPerformed(e); } }); helixColour.setLabel("Helix propensity"); helixColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { helixColour_actionPerformed(e); } }); strandColour.setLabel("Strand propensity"); strandColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { strandColour_actionPerformed(e); } }); turnColour.setLabel("Turn propensity"); turnColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { turnColour_actionPerformed(e); } }); buriedColour.setLabel("Buried Index"); buriedColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { buriedColour_actionPerformed(e); } }); abovePIDColour.setLabel("Above % Identity"); userDefinedColour.setLabel("User Defined"); userDefinedColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { userDefinedColour_actionPerformed(e); } }); PIDColour.setLabel("Percentage Identity"); PIDColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { PIDColour_actionPerformed(e); } }); BLOSUM62Colour.setLabel("BLOSUM62"); BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { BLOSUM62Colour_actionPerformed(e); } }); conservationMenuItem.setLabel("Conservation"); } void refresh() { SequenceGroup sg = getGroup(); SuperGroup superG = ap.av.alignment.getSuperGroup(sg); if (superG != null) { superG.setSuperGroupProperties(sg); } ap.seqPanel.seqCanvas.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_itemStateChanged(ItemEvent ie) { SequenceGroup sg = getGroup(); if (abovePIDColour.getState()) { 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_itemStateChanged(ItemEvent ie) { SequenceGroup sg = getGroup(); if (conservationMenuItem.getState()) { 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 analyze_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(false); Frame frame = new Frame(); frame.add(cap); jalview.bin.JalviewLite.addFrame(frame, "Analyze this - ", 400, 300); SequenceGroup sg = getGroup(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < sg.sequences.size(); i++) { Sequence tmp = (Sequence) sg.sequences.elementAt(i); sb.append(tmp.getSequence(sg.getStartRes(), sg.getEndRes() + 1)); sb.append("\n"); } sb.append("Something amazing will happen soon"); cap.setText(sb.toString()); } SequenceGroup getGroup() { SequenceGroup sg = ap.av.getSelectionGroup(); // this method won't add a new group if it already exists ap.av.alignment.addGroup(sg); return sg; } void unGroupMenuItem_actionPerformed(ActionEvent e) { SequenceGroup sg = ap.av.getSelectionGroup(); ap.av.alignment.deleteGroup(sg); ap.av.setSelectionGroup(null); ap.repaint(); } public void showColourText_itemStateChanged(ItemEvent itemEvent) { getGroup().setColourText(showColourText.getState()); refresh(); } public void showText_itemStateChanged(ItemEvent itemEvent) { getGroup().setDisplayText(showText.getState()); refresh(); } public void showBoxes_itemStateChanged(ItemEvent itemEvent) { getGroup().setDisplayBoxes(showBoxes.getState()); refresh(); } }