package jalview.gui; import jalview.datamodel.*; import jalview.analysis.*; import jalview.schemes.*; import javax.swing.*; import java.awt.event.*; public class PopupMenu extends JPopupMenu { JMenu groupMenu = new JMenu(); JMenuItem copyGroup = new JMenuItem(); JMenuItem moveGroup = new JMenuItem(); JMenuItem deleteSequences = new JMenuItem(); JMenuItem analyze = new JMenuItem(); JMenu defineMenu = new JMenu(); JMenuItem groupName = new JMenuItem(); JMenuItem groupAnnotation = 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(); JMenu residueMenu = new JMenu(); JMenuItem annotateResidue = new JMenuItem(); SequenceI sequence; public PopupMenu(AlignmentPanel ap, SequenceI 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.getRubberbandGroup(); 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); } if(seq!=null) { residueMenu.setVisible(false); sequenceName.setText( sequence.getName() ); } else sequenceMenu.setVisible(false); } private void jbInit() throws Exception { groupMenu.setText("Group"); copyGroup.setText("Copy region to new Alignment"); copyGroup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { copyGroup_actionPerformed(e); } }); moveGroup.setText("Move sequences to new Alignment"); moveGroup.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { moveGroup_actionPerformed(e); } }); deleteSequences.setText("Delete sequences"); deleteSequences.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { deleteSequences_actionPerformed(e); } }); analyze.setText("Analyze"); analyze.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { analyze_actionPerformed(e); } }); defineMenu.setText("Define"); groupName.setText("Name"); groupName.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { groupName_actionPerformed(e); } }); groupAnnotation.setText("Annotation"); groupAnnotation.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { groupAnnotation_actionPerformed(e); } }); sequenceMenu.setText("Sequence"); sequenceName.setText("sequenceName"); sequenceName.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { sequenceName_actionPerformed(e); } }); residueMenu.setText("Residue"); annotateResidue.setText("annotate residue???"); PIDColour.setFocusPainted(false); add(groupMenu); this.add(sequenceMenu); this.add(residueMenu); groupMenu.add(defineMenu); groupMenu.addSeparator(); groupMenu.add(copyGroup); groupMenu.add(moveGroup); groupMenu.add(deleteSequences); groupMenu.addSeparator(); groupMenu.add(analyze); defineMenu.add(groupName); defineMenu.add(groupAnnotation); defineMenu.addSeparator(); defineMenu.add(noColourmenuItem); defineMenu.add(clustalColour); defineMenu.add(zappoColour); defineMenu.add(taylorColour); defineMenu.add(hydrophobicityColour); defineMenu.add(helixColour); defineMenu.add(strandColour); defineMenu.add(turnColour); defineMenu.add(buriedColour); defineMenu.add(userDefinedColour); defineMenu.add(PIDColour); defineMenu.add(BLOSUM62Colour); defineMenu.addSeparator(); defineMenu.add(abovePIDColour); defineMenu.add(conservationMenuItem); sequenceMenu.add(sequenceName); residueMenu.add(annotateResidue); 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 colour scheme"); zappoColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { zappoColour_actionPerformed(e); } }); taylorColour.setText("Taylor colour scheme"); taylorColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { taylorColour_actionPerformed(e); } }); hydrophobicityColour.setText("By 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 PID threshold only"); abovePIDColour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { abovePIDColour_actionPerformed(e); } }); userDefinedColour.setText("User defined colours"); 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 score"); BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { BLOSUM62Colour_actionPerformed(e); } }); conservationMenuItem.setText("By conservation"); conservationMenuItem.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) { conservationMenuItem_actionPerformed(e); } }); } void refresh() { ap.seqPanel.seqCanvas.paintFlag=true; ap.seqPanel.repaint(); } protected void clustalColour_actionPerformed(ActionEvent e) { getGroup().cs = new ClustalxColourScheme(); 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 conservationColourIncMenuItem_actionPerformed(ActionEvent e) { ConservationIncrementPanel cip = new ConservationIncrementPanel(viewport, alignPanel); JInternalFrame frame = new JInternalFrame(); frame.setContentPane(cip); Desktop.addInternalFrame(frame, "Conservation Colour Increment", 400,90); frame.setMaximizable(false); }*/ protected void abovePIDColour_actionPerformed(ActionEvent e) { SliderPanel sp = new SliderPanel(ap, 70, false, getGroup().cs ); JInternalFrame frame = new JInternalFrame(); frame.setContentPane(sp); Desktop.addInternalFrame(frame, "Percentage Identity Threshold ("+getGroup().getName()+")" , 400,90); frame.setMaximizable(false); } protected void userDefinedColour_actionPerformed(ActionEvent e) { JInternalFrame frame = new JInternalFrame(); UserDefinedColours chooser = new UserDefinedColours( frame, ap, getGroup()); frame.setContentPane(chooser); Desktop.addInternalFrame(frame,"User defined colours ("+getGroup().getName()+")", 450,540 ); frame.setResizable(false); frame.setIconifiable(false); frame.setMaximizable(false); } protected void PIDColour_actionPerformed(ActionEvent e) { } protected void BLOSUM62Colour_actionPerformed(ActionEvent e) { getGroup().cs = new Blosum62ColourScheme(ap.av); refresh(); } protected void noColourmenuItem_actionPerformed(ActionEvent e) { getGroup().cs = null; refresh(); } protected void conservationMenuItem_actionPerformed(ActionEvent e) { SequenceGroup sg = getGroup(); Conservation c = new Conservation("Group", ResidueProperties.propHash, 3, sg.sequences, sg.getStartRes(), sg.getEndRes() ); c.calculate(); c.verdict(false, 100); ConservationColourScheme ccs = new ConservationColourScheme(c, sg.cs); sg.cs = ccs; refresh(); } /* protected void noColourmenuItem_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme( null ); changeColour(); } public void clustalColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme(new ClustalxColourScheme( )); conservationMenuItem.setSelected(false); abovePIDThreshold.setSelected(false); changeColour(); } public void zappoColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme(new ZappoColourScheme() ); changeColour(); } public void taylorColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme(new TaylorColourScheme() ); changeColour(); } public void hydrophobicityColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme( new HydrophobicColourScheme() ); changeColour(); } public void helixColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme( new HelixColourScheme() ); changeColour(); } public void strandColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme(new StrandColourScheme() ); changeColour(); } public void turnColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme(new TurnColourScheme() ); changeColour(); } public void buriedColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme( new BuriedColourScheme() ); changeColour(); } void changeColour() { if(abovePIDThreshold.isSelected()) abovePIDThreshold_actionPerformed(null); else if(conservationMenuItem.isSelected()) conservationMenuItem_actionPerformed(null); alignPanel.seqPanel.seqCanvas.paintFlag = true; alignPanel.repaint(); } void addConservationOrPIDColour() { int x=0, y=0, threshold = 70; if(sliderFrame!=null) try { x = sliderFrame.getX(); y = sliderFrame.getY(); SliderPanel sp = (SliderPanel) sliderFrame.getContentPane(); threshold = sp.getValue(); sliderFrame.setClosed(true); } catch (Exception ex) { ex.printStackTrace(); } ColourSchemeI oldCs = viewport.getGlobalColourScheme(); ConservationColourScheme ccs = null; if (oldCs instanceof ConservationColourScheme) ccs = (ConservationColourScheme) oldCs; if(conservationMenuItem.isSelected()) { Alignment al = (Alignment)viewport.alignment; Conservation c = new Conservation("All", ResidueProperties.propHash, 3, al.getSequences(), 0, al.getWidth() ); c.calculate(); c.verdict(false, 100); if(ccs!=null) ccs = new ConservationColourScheme(c, ccs.cs); else ccs = new ConservationColourScheme(c, oldCs); viewport.setGlobalColourScheme( ccs ); } else if(oldCs instanceof ConservationColourScheme) { oldCs = ccs.cs; viewport.setGlobalColourScheme( oldCs ); } if( conservationMenuItem.isSelected() || abovePIDThreshold.isSelected() ) { sliderFrame = new JInternalFrame(); sliderFrame.setMaximizable(false); sliderFrame.setResizable(false); SliderPanel sp = null; if (conservationMenuItem.isSelected()) { if(threshold > 50) threshold = 30; sp = new SliderPanel(alignPanel, threshold, true,ccs); Desktop.addInternalFrame(sliderFrame, "Conservation Colour Increment (Global colour)", 400, 90); threshold = 0; } else if (abovePIDThreshold.isSelected()) { sp = new SliderPanel(alignPanel, threshold, false, oldCs); sp.cs = oldCs; Desktop.addInternalFrame(sliderFrame, "Percentage Identity Threshold (Global colour)", 400, 90); } sliderFrame.setContentPane(sp); if(x!=0 && y!=0) sliderFrame.setLocation(x,y); } else threshold = 0; if (oldCs instanceof ResidueColourScheme) { ResidueColourScheme rcs = (ResidueColourScheme) oldCs; rcs.setThreshold(threshold); } else if (oldCs instanceof ScoreColourScheme) { ScoreColourScheme scs = (ScoreColourScheme) oldCs; scs.setThreshold(threshold); } alignPanel.seqPanel.seqCanvas.paintFlag = true; alignPanel.repaint(); } protected void conservationMenuItem_actionPerformed(ActionEvent e) { if(abovePIDThreshold.isSelected()) abovePIDThreshold.setSelected(false); viewport.setConservationSelected(conservationMenuItem.isSelected()); addConservationOrPIDColour(); } JInternalFrame sliderFrame; public void abovePIDThreshold_actionPerformed(ActionEvent e) { if(conservationMenuItem.isSelected()) conservationMenuItem.setSelected(false); addConservationOrPIDColour(); } public void userDefinedColour_actionPerformed(ActionEvent e) { JInternalFrame frame = new JInternalFrame(); UserDefinedColours chooser = new UserDefinedColours( frame, alignPanel, null); frame.setContentPane(chooser); Desktop.addInternalFrame(frame,"User defined colours", 450,540 ); frame.setResizable(false); frame.setIconifiable(false); frame.setMaximizable(false); } public void PIDColour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme( new PIDColourScheme() ); alignPanel.setColourScheme( ); } public void BLOSUM62Colour_actionPerformed(ActionEvent e) { viewport.setGlobalColourScheme( new Blosum62ColourScheme(viewport) ); alignPanel.setColourScheme(); } */ ////////////////////////////////////// protected void groupAnnotation_actionPerformed(ActionEvent e) { } 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 copyGroup_actionPerformed(ActionEvent e) { SequenceGroup sg = ap.av.getRubberbandGroup(); SequenceI[] s = new Sequence[sg.sequences.size()]; for (int i=0; i < sg.sequences.size(); i++) { s[i] = new Sequence( sg.getSequenceAt(i)); s[i].setSequence( s[i].getSequence(sg.getStartRes(), sg.getEndRes()+1) ); } AlignFrame af = new AlignFrame(new Alignment(s)); int newHeight = s.length * af.viewport.getCharHeight() + 200; if (newHeight > 500) newHeight = 500; Desktop.addInternalFrame(af, "Copied sequences", 700, newHeight); } protected void moveGroup_actionPerformed(ActionEvent e) { SequenceGroup sg = ap.av.getRubberbandGroup(); SequenceI[] s = new Sequence[sg.sequences.size()]; for (int i=0; i < sg.sequences.size(); i++) s[i] = new Sequence( sg.getSequenceAt(i)); AlignFrame af = new AlignFrame(new Alignment(s)); int newHeight = s.length * af.viewport.getCharHeight() + 200; if(newHeight>500) newHeight=500; Desktop.addInternalFrame(af, "Copied sequences", 700,newHeight); for (int i=0; i < sg.sequences.size(); i++) ap.av.alignment.deleteSequence(sg.getSequenceAt(i)); ap.av.resetSeqLimits(ap.seqPanel.seqCanvas.getHeight()); ap.RefreshPanels(); } protected void deleteSequences_actionPerformed(ActionEvent e) { SequenceGroup sg = ap.av.getRubberbandGroup(); for (int i=0;i < sg.sequences.size(); i++) ap.av.getAlignment().deleteSequence(sg.getSequenceAt(i)); ap.av.alignment.deleteGroup(sg); ap.av.resetSeqLimits(ap.seqPanel.seqCanvas.getHeight()); ap.seqPanel.parent.RefreshPanels(); } protected void analyze_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(false); JInternalFrame frame = new JInternalFrame(); cap.formatForOutput(); frame.setContentPane(cap); Desktop.addInternalFrame(frame, "Analyze this - ", 400, 300); SequenceGroup sg = getGroup(); StringBuffer sb = new StringBuffer(); for(int i=0; i