--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import jalview.analysis.*;\r
+import jalview.schemes.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class APopupMenu extends java.awt.PopupMenu\r
+{\r
+ Menu groupMenu = new Menu();\r
+ Menu analyze = new Menu();\r
+ Menu defineMenu = new Menu();\r
+ Menu groupName = new Menu();\r
+ Menu groupAnnotation = new Menu();\r
+ protected MenuItem clustalColour = new MenuItem();\r
+ protected MenuItem zappoColour = new MenuItem();\r
+ protected MenuItem taylorColour = new MenuItem();\r
+ protected MenuItem hydrophobicityColour = new MenuItem();\r
+ protected MenuItem helixColour = new MenuItem();\r
+ protected MenuItem strandColour = new MenuItem();\r
+ protected MenuItem turnColour = new MenuItem();\r
+ protected MenuItem buriedColour = new MenuItem();\r
+ protected CheckboxMenuItem abovePIDColour = new CheckboxMenuItem();\r
+ protected MenuItem userDefinedColour = new MenuItem();\r
+ protected MenuItem PIDColour = new MenuItem();\r
+ protected MenuItem BLOSUM62Colour = new MenuItem();\r
+ MenuItem noColourmenuItem = new MenuItem();\r
+ protected CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();\r
+\r
+\r
+ AlignmentPanel ap;\r
+ Menu sequenceMenu = new Menu();\r
+ MenuItem sequenceName = new MenuItem();\r
+ Menu residueMenu = new Menu();\r
+ MenuItem annotateResidue = new MenuItem();\r
+\r
+ Sequence sequence;\r
+ MenuItem unGroupMenuItem = new MenuItem();\r
+ MenuItem outline = new MenuItem();\r
+ MenuItem nucleotideMenuItem = new MenuItem();\r
+\r
+ public APopupMenu(AlignmentPanel ap, Sequence seq)\r
+ {\r
+ ///////////////////////////////////////////////////////////\r
+ // If this is activated from the sequence panel, the user may want to\r
+ // edit or annotate a particular residue. Therefore display the residue menu\r
+ //\r
+ // If from the IDPanel, we must display the sequence menu\r
+ //////////////////////////////////////////////////////////\r
+\r
+ this.ap = ap;\r
+ sequence = seq;\r
+\r
+ try\r
+ { jbInit(); }\r
+ catch(Exception e)\r
+ { e.printStackTrace(); }\r
+\r
+\r
+ if(seq!=null)\r
+ residueMenu.setEnabled(false);\r
+ else\r
+ sequenceMenu.setEnabled(false);\r
+\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ groupMenu.setLabel("Group");\r
+ analyze.setLabel("Analyze");\r
+ analyze.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ analyze_actionPerformed(e);\r
+ }\r
+ });\r
+ defineMenu.setLabel("Define");\r
+ groupName.setLabel("Name");\r
+ groupName.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ groupName_actionPerformed(e);\r
+ }\r
+ });\r
+ groupAnnotation.setEnabled(false);\r
+ groupAnnotation.setLabel("Annotation");\r
+ groupAnnotation.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ groupAnnotation_actionPerformed(e);\r
+ }\r
+ });\r
+ sequenceMenu.setLabel("Sequence");\r
+ sequenceName.setLabel("Edit name");\r
+ sequenceName.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sequenceName_actionPerformed(e);\r
+ }\r
+ });\r
+ residueMenu.setLabel("Residue");\r
+ annotateResidue.setEnabled(false);\r
+ annotateResidue.setActionCommand("annotate residue");\r
+ annotateResidue.setLabel("annotate residue???");\r
+ unGroupMenuItem.setLabel("Remove Group");\r
+ unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ unGroupMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ outline.setLabel("Border colour");\r
+ outline.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ outline_actionPerformed(e);\r
+ }\r
+ });\r
+ nucleotideMenuItem.setLabel("Nucleotide");\r
+ nucleotideMenuItem.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ nucleotideMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ add(groupMenu);\r
+ this.add(sequenceMenu);\r
+ this.add(residueMenu);\r
+ groupMenu.add(defineMenu);\r
+ groupMenu.add(unGroupMenuItem);\r
+ groupMenu.addSeparator();\r
+ groupMenu.add(analyze);\r
+ defineMenu.add(groupName);\r
+ defineMenu.add(groupAnnotation);\r
+ defineMenu.addSeparator();\r
+ defineMenu.add(outline);\r
+ defineMenu.addSeparator();\r
+ defineMenu.add(noColourmenuItem);\r
+ defineMenu.add(clustalColour);\r
+ defineMenu.add(BLOSUM62Colour);\r
+ defineMenu.add(PIDColour);\r
+\r
+ defineMenu.add(zappoColour);\r
+ defineMenu.add(taylorColour);\r
+ defineMenu.add(hydrophobicityColour);\r
+ defineMenu.add(helixColour);\r
+ defineMenu.add(strandColour);\r
+ defineMenu.add(turnColour);\r
+ defineMenu.add(buriedColour);\r
+ defineMenu.add(nucleotideMenuItem);\r
+\r
+ defineMenu.add(userDefinedColour);\r
+\r
+ defineMenu.addSeparator();\r
+ defineMenu.add(abovePIDColour);\r
+ defineMenu.add(conservationMenuItem);\r
+\r
+ sequenceMenu.add(sequenceName);\r
+ residueMenu.add(annotateResidue);\r
+\r
+ noColourmenuItem.setLabel("None");\r
+ noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ noColourmenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ clustalColour.setLabel("Clustalx colours");\r
+ clustalColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ clustalColour_actionPerformed(e);\r
+ }\r
+ });\r
+ zappoColour.setLabel("Zappo");\r
+ zappoColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ zappoColour_actionPerformed(e);\r
+ }\r
+ });\r
+ taylorColour.setLabel("Taylor");\r
+ taylorColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ taylorColour_actionPerformed(e);\r
+ }\r
+ });\r
+ hydrophobicityColour.setLabel("Hydrophobicity");\r
+ hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ hydrophobicityColour_actionPerformed(e);\r
+ }\r
+ });\r
+ helixColour.setLabel("Helix propensity");\r
+ helixColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ helixColour_actionPerformed(e);\r
+ }\r
+ });\r
+ strandColour.setLabel("Strand propensity");\r
+ strandColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ strandColour_actionPerformed(e);\r
+ }\r
+ });\r
+ turnColour.setLabel("Turn propensity");\r
+ turnColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ turnColour_actionPerformed(e);\r
+ }\r
+ });\r
+ buriedColour.setLabel("Buried Index");\r
+ buriedColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ buriedColour_actionPerformed(e);\r
+ }\r
+ });\r
+ abovePIDColour.setLabel("Above % Identity");\r
+ abovePIDColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ abovePIDColour_actionPerformed(e);\r
+ }\r
+ });\r
+ userDefinedColour.setLabel("User Defined");\r
+ userDefinedColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ userDefinedColour_actionPerformed(e);\r
+ }\r
+ });\r
+ PIDColour.setLabel("Percentage Identity");\r
+ PIDColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ PIDColour_actionPerformed(e);\r
+ }\r
+ });\r
+ BLOSUM62Colour.setLabel("BLOSUM62");\r
+ BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ BLOSUM62Colour_actionPerformed(e);\r
+ }\r
+ });\r
+ conservationMenuItem.setLabel("Conservation");\r
+ conservationMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ conservationMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+\r
+\r
+ }\r
+\r
+ void refresh()\r
+ {\r
+ SequenceGroup sg = getGroup();\r
+ SuperGroup superG = ap.av.alignment.getSuperGroup( sg );\r
+ if( superG !=null)\r
+ superG.setSuperGroupProperties( sg );\r
+\r
+ ap.seqPanel.repaint();\r
+ }\r
+\r
+ protected void clustalColour_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = getGroup();\r
+ sg.cs = new ClustalxColourScheme(sg.sequences, ap.av.alignment.getWidth());\r
+ refresh();\r
+ }\r
+\r
+ protected void zappoColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new ZappoColourScheme();\r
+ refresh();\r
+ }\r
+\r
+ protected void taylorColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new TaylorColourScheme();\r
+ refresh();\r
+ }\r
+\r
+\r
+ protected void hydrophobicityColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new HydrophobicColourScheme();\r
+ refresh();\r
+ }\r
+\r
+ protected void helixColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new HelixColourScheme();\r
+ refresh();\r
+ }\r
+\r
+ protected void strandColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new StrandColourScheme();\r
+ refresh();\r
+ }\r
+\r
+ protected void turnColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new TurnColourScheme();\r
+ refresh();\r
+ }\r
+\r
+ protected void buriedColour_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new BuriedColourScheme();\r
+ refresh();\r
+ }\r
+\r
+ public void nucleotideMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = new NucleotideColourScheme();\r
+ refresh();\r
+ }\r
+\r
+\r
+\r
+ protected void abovePIDColour_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = getGroup();\r
+ if (abovePIDColour.getState())\r
+ {\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ ap.av.alignment.getWidth()));\r
+ int threshold = SliderPanel.setPIDSliderSource(ap, sg.cs, getGroup().getName());\r
+ if (sg.cs instanceof ResidueColourScheme)\r
+ ( (ResidueColourScheme)sg. cs).setThreshold(threshold);\r
+ else if (sg.cs instanceof ScoreColourScheme)\r
+ ( (ScoreColourScheme) sg.cs).setThreshold(threshold);\r
+\r
+ SliderPanel.showPIDSlider();\r
+\r
+\r
+ }\r
+ else // remove PIDColouring\r
+ {\r
+ ResidueColourScheme rcs = (ResidueColourScheme) sg.cs;\r
+ rcs.setThreshold(0);\r
+ sg.cs = rcs;\r
+ }\r
+\r
+ refresh();\r
+\r
+ }\r
+\r
+\r
+ protected void userDefinedColour_actionPerformed(ActionEvent e)\r
+ {\r
+ UserDefinedColours chooser = new UserDefinedColours( ap, getGroup());\r
+ }\r
+\r
+ protected void PIDColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = getGroup();\r
+\r
+ sg.cs = new Blosum62ColourScheme();\r
+\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0,\r
+ ap.av.alignment.getWidth()));\r
+\r
+ refresh();\r
+ }\r
+\r
+\r
+ protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ getGroup().cs = null;\r
+ refresh();\r
+ }\r
+\r
+ protected void conservationMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = getGroup();\r
+\r
+ if(conservationMenuItem.getState())\r
+ {\r
+\r
+ Conservation c = new Conservation("Group",\r
+ ResidueProperties.propHash, 3,\r
+ sg.sequences, 0,\r
+ ap.av.alignment.getWidth());\r
+\r
+ c.calculate();\r
+ c.verdict(false, ap.av.ConsPercGaps);\r
+ ConservationColourScheme ccs = new ConservationColourScheme(c, sg.cs);\r
+\r
+\r
+ sg.cs = ccs;\r
+\r
+ SliderPanel.setConservationSlider(ap, ccs, sg.getName());\r
+ SliderPanel.showConservationSlider();\r
+ }\r
+ else // remove ConservationColouring\r
+ {\r
+ ConservationColourScheme ccs = (ConservationColourScheme)sg.cs;\r
+ sg.cs = ccs.cs;\r
+ }\r
+\r
+ refresh();\r
+ }\r
+\r
+ protected void groupAnnotation_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void groupName_actionPerformed(ActionEvent e)\r
+ {\r
+ /* SequenceGroup sg = getGroup();\r
+ String reply = JOptionPane.showInternalInputDialog(Desktop.desktop, "Enter new group name", "Edit group name", JOptionPane.QUESTION_MESSAGE);\r
+ if(reply==null)\r
+ return;\r
+\r
+ sg.setName(reply);\r
+ groupName.setLabel(reply);*/\r
+ }\r
+\r
+\r
+ protected void analyze_actionPerformed(ActionEvent e)\r
+ {\r
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
+ Frame frame = new Frame();\r
+ frame.add(cap);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Analyze this - ", 400, 300);\r
+ SequenceGroup sg = getGroup();\r
+ StringBuffer sb = new StringBuffer();\r
+\r
+ for(int i=0; i<sg.sequences.size(); i++)\r
+ {\r
+ Sequence tmp = (Sequence)sg.sequences.elementAt(i);\r
+ sb.append( tmp.getSequence(sg.getStartRes(), sg.getEndRes()+1));\r
+ sb.append("\n");\r
+ }\r
+\r
+ sb.append("Something amazing will happen soon");\r
+ cap.setText( sb.toString() );\r
+\r
+ }\r
+\r
+ SequenceGroup getGroup()\r
+ {\r
+ SequenceGroup sg = ap.av.getSelectionGroup();\r
+\r
+ // this method won't add a new group if it already exists\r
+ ap.av.alignment.addGroup(sg);\r
+\r
+ return sg;\r
+ }\r
+\r
+ void sequenceName_actionPerformed(ActionEvent e)\r
+ {\r
+ /* String id = sequence.getName();\r
+ String s = (String)JOptionPane.showInternalInputDialog(\r
+ ap,\r
+ "Edit sequence name",\r
+ "Edit sequence name ("+sequence.getName()+")",\r
+ JOptionPane.PLAIN_MESSAGE,\r
+ null,\r
+ null,\r
+ id);\r
+\r
+ if(s!=null)\r
+ {\r
+ sequence.setName(s);\r
+ ap.repaint();\r
+ }*/\r
+\r
+ }\r
+\r
+ void unGroupMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = ap.av.getSelectionGroup();\r
+ ap.av.alignment.deleteGroup(sg);\r
+ ap.av.setSelectionGroup(null);\r
+ ap.repaint();\r
+ }\r
+\r
+\r
+ protected void outline_actionPerformed(ActionEvent e)\r
+ {\r
+ /* SequenceGroup sg = getGroup();\r
+ Color col = JColorChooser.showDialog(this, "Select Outline Colour", Color.BLUE);\r
+ if(col!=null)\r
+ sg.setOutlineColour(col);*/\r
+ }\r
+\r
+}\r
--- /dev/null
+/********************\r
+ * 2004 Jalview Reengineered\r
+ * Barton Group\r
+ * Dundee University\r
+ *\r
+ * AM Waterhouse\r
+ *******************/\r
+\r
+\r
+\r
+\r
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.GAlignFrame;\r
+import jalview.schemes.*;\r
+import jalview.datamodel.*;\r
+import jalview.analysis.*;\r
+import jalview.io.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class AlignFrame extends GAlignFrame\r
+{\r
+ final AlignmentPanel alignPanel;\r
+ final AlignViewport viewport;\r
+ public static final int NEW_WINDOW_WIDTH = 700;\r
+ public static final int NEW_WINDOW_HEIGHT = 500;\r
+ jalview.bin.JalviewLite applet;\r
+\r
+ public AlignFrame(AlignmentI al)\r
+ {\r
+ this.applet = null;\r
+ viewport = new AlignViewport(al, null);\r
+ alignPanel = new AlignmentPanel(this, viewport);\r
+ add(alignPanel);\r
+ alignPanel.validate();\r
+ }\r
+\r
+ public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet)\r
+ {\r
+ this.applet = applet;\r
+ viewport = new AlignViewport(al, applet);\r
+ alignPanel = new AlignmentPanel(this, viewport);\r
+ add(alignPanel);\r
+ alignPanel.validate();\r
+ }\r
+\r
+ public void inputText_actionPerformed(ActionEvent e)\r
+ {\r
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(true);\r
+ Frame frame = new Frame();\r
+ frame.add(cap);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Cut & Paste Input", 500,500);\r
+ }\r
+\r
+\r
+ protected void outputText_actionPerformed(ActionEvent e)\r
+ {\r
+ CutAndPasteTransfer cap = new CutAndPasteTransfer(false);\r
+ Frame frame = new Frame();\r
+ frame.add(cap);\r
+ jalview.bin.JalviewLite.addFrame(frame,"Alignment output - "+e.getActionCommand(),600, 500);\r
+ cap.setText( FormatAdapter.formatSequences(e.getActionCommand(), viewport.getAlignment().getSequences()));\r
+ }\r
+\r
+ public void closeMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ dispose();\r
+ }\r
+\r
+ Stack historyList = new Stack();\r
+ Stack redoList = new Stack();\r
+\r
+ void updateEditMenuBar()\r
+ {\r
+ if(historyList.size()>0)\r
+ {\r
+ undoMenuItem.setEnabled(true);\r
+ Object [] history = (Object[])historyList.elementAt(0);\r
+ undoMenuItem.setLabel("Undo "+history[0]);\r
+ }\r
+ else\r
+ {\r
+ undoMenuItem.setEnabled(false);\r
+ undoMenuItem.setLabel("Undo");\r
+ }\r
+\r
+ if(redoList.size()>0)\r
+ {\r
+ redoMenuItem.setEnabled(true);\r
+ Object [] history = (Object[])redoList.elementAt(0);\r
+ redoMenuItem.setLabel("Redo "+history[0]);\r
+ }\r
+ else\r
+ {\r
+ redoMenuItem.setEnabled(false);\r
+ redoMenuItem.setLabel("Redo");\r
+ }\r
+ }\r
+\r
+ public void addHistoryItem(String type)\r
+ {\r
+ // must make sure we add new sequence objects her, not refs to the existing sequences\r
+ redoList.removeAllElements();\r
+ SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()];\r
+ for(int i=0; i<viewport.getAlignment().getHeight(); i++)\r
+ {\r
+ seq[i] = new Sequence( viewport.getAlignment().getSequenceAt(i).getName(),\r
+ viewport.getAlignment().getSequenceAt(i).getSequence());\r
+ }\r
+\r
+ historyList.addElement(new Object[]{type, seq} );\r
+ updateEditMenuBar();\r
+ }\r
+\r
+ protected void undoMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ Object [] history = (Object[])historyList.elementAt(0);\r
+ historyList.removeElementAt(0);\r
+ // add the redo state before continuing!!\r
+ SequenceI[] seq = new SequenceI[viewport.getAlignment().getHeight()];\r
+ for (int i = 0; i < viewport.getAlignment().getHeight(); i++)\r
+ {\r
+ seq[i] = new Sequence(viewport.getAlignment().getSequenceAt(i).getName(),\r
+ viewport.getAlignment().getSequenceAt(i).\r
+ getSequence());\r
+ }\r
+ /////////\r
+\r
+ redoList.addElement(new Object[] {history[0], seq});\r
+\r
+ seq = (SequenceI[]) history[1];\r
+\r
+ AlignmentAnnotation[] old = viewport.alignment.getAlignmentAnnotation();\r
+ viewport.setAlignment(new Alignment(seq));\r
+ updateEditMenuBar();\r
+ for (int i = 0; i < old.length; i++)\r
+ viewport.alignment.addAnnotation(old[i]);\r
+\r
+ viewport.updateConservation();\r
+ viewport.updateConsensus();\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void moveSelectedSequences(boolean up)\r
+ {\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+ if (sg == null)\r
+ return;\r
+\r
+ if (up)\r
+ {\r
+ for (int i = 1; i < viewport.alignment.getHeight(); i++)\r
+ {\r
+ SequenceI seq = viewport.alignment.getSequenceAt(i);\r
+ if (!sg.sequences.contains(seq))\r
+ continue;\r
+\r
+ SequenceI temp = viewport.alignment.getSequenceAt(i - 1);\r
+ if (sg.sequences.contains(temp))\r
+ continue;\r
+\r
+ viewport.alignment.getSequences().setElementAt(temp, i);\r
+ viewport.alignment.getSequences().setElementAt(seq, i - 1);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for (int i = viewport.alignment.getHeight() - 2; i > -1; i--)\r
+ {\r
+ SequenceI seq = viewport.alignment.getSequenceAt(i);\r
+ if (!sg.sequences.contains(seq))\r
+ continue;\r
+\r
+ SequenceI temp = viewport.alignment.getSequenceAt(i + 1);\r
+ if (sg.sequences.contains(temp))\r
+ continue;\r
+\r
+ viewport.alignment.getSequences().setElementAt(temp, i);\r
+ viewport.alignment.getSequences().setElementAt(seq, i + 1);\r
+ }\r
+ }\r
+\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+ StringBuffer copiedSequences;\r
+ protected void copy_actionPerformed(ActionEvent e)\r
+ {\r
+ if(viewport.getSelectionGroup()==null)\r
+ return;\r
+\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+ copiedSequences = new StringBuffer();\r
+\r
+ for(int i=0; i<sg.getSize(); i++)\r
+ {\r
+ SequenceI seq = sg.getSequenceAt(i);\r
+ copiedSequences.append( seq.getName()+"\t"+seq.findPosition( sg.getStartRes() ) +"\t"\r
+ +seq.findPosition( sg.getEndRes() )+ "\t"\r
+ +sg.getSequenceAt(i).getSequence(sg.getStartRes(), sg.getEndRes()+1)+"\n");\r
+ }\r
+\r
+ }\r
+\r
+\r
+ protected void pasteNew_actionPerformed(ActionEvent e)\r
+ {\r
+ paste(true);\r
+ }\r
+\r
+ protected void pasteThis_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("Paste");\r
+ paste(false);\r
+ }\r
+\r
+ void paste(boolean newAlignment)\r
+ {\r
+ try{\r
+ if (copiedSequences == null)\r
+ return;\r
+\r
+ StringTokenizer st = new StringTokenizer(copiedSequences.toString());\r
+ Vector seqs = new Vector();\r
+ while (st.hasMoreElements())\r
+ {\r
+ String name = st.nextToken();\r
+ int start = Integer.parseInt(st.nextToken());\r
+ int end = Integer.parseInt(st.nextToken());\r
+ Sequence sequence = new Sequence(name,st.nextToken(), start, end);\r
+\r
+ if(!newAlignment)\r
+ viewport.alignment.addSequence(sequence);\r
+ else\r
+ seqs.addElement(sequence);\r
+ }\r
+\r
+ if(newAlignment)\r
+ {\r
+ SequenceI[] newSeqs = new SequenceI[seqs.size()];\r
+ for(int i=0; i<seqs.size(); i++)\r
+ newSeqs[i] = (SequenceI)seqs.elementAt(i);\r
+\r
+ AlignFrame af = new AlignFrame(new Alignment(newSeqs), applet);\r
+ jalview.bin.JalviewLite.addFrame(af, "Copied sequences", NEW_WINDOW_WIDTH, NEW_WINDOW_HEIGHT);\r
+ }\r
+ else\r
+ {\r
+ viewport.setEndSeq(viewport.alignment.getHeight());\r
+ viewport.alignment.getWidth();\r
+ viewport.updateConservation();\r
+ viewport.updateConsensus();\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ }catch(Exception ex){}// could be anything being pasted in here\r
+\r
+ }\r
+\r
+\r
+ protected void cut_actionPerformed(ActionEvent e)\r
+ {\r
+ copy_actionPerformed(null);\r
+ delete_actionPerformed(null);\r
+ }\r
+\r
+ protected void delete_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("Delete");\r
+ if (viewport.getSelectionGroup() == null)\r
+ return;\r
+\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+ for (int i=0;i < sg.sequences.size(); i++)\r
+ {\r
+ SequenceI seq = sg.getSequenceAt(i);\r
+ int index = viewport.getAlignment().findIndex(seq);\r
+ seq.deleteChars(sg.getStartRes(), sg.getEndRes()+1);\r
+\r
+ if(seq.getSequence().length()<1)\r
+ viewport.getAlignment().deleteSequence(seq);\r
+ else\r
+ viewport.getAlignment().getSequences().setElementAt(seq, index);\r
+ }\r
+\r
+ viewport.setSelectionGroup(null);\r
+ viewport.alignment.deleteGroup(sg);\r
+ viewport.resetSeqLimits( alignPanel.seqPanel.seqCanvas.getSize().height);\r
+ if(viewport.getAlignment().getHeight()<1)\r
+ try\r
+ {\r
+ this.setVisible(false);\r
+ }catch(Exception ex){}\r
+ viewport.updateConservation();\r
+ viewport.updateConsensus();\r
+ alignPanel.repaint();\r
+\r
+ }\r
+\r
+\r
+\r
+ protected void redoMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ Object [] history = (Object[])redoList.pop();\r
+ SequenceI[] seq = (SequenceI[]) history[1];\r
+\r
+ AlignmentAnnotation[] old = viewport.alignment.getAlignmentAnnotation();\r
+ viewport.setAlignment(new Alignment(seq));\r
+ for (int i = 0; i < old.length; i++)\r
+ viewport.alignment.addAnnotation(old[i]);\r
+\r
+ viewport.updateConservation();\r
+ viewport.updateConsensus();\r
+ updateEditMenuBar();\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+ protected void deleteGroups_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.alignment.deleteAllGroups();\r
+ viewport.setSelectionGroup(null);\r
+\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+\r
+ public void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = new SequenceGroup();\r
+ for (int i=0; i<viewport.getAlignment().getSequences().size(); i++)\r
+ sg.addSequence( viewport.getAlignment().getSequenceAt(i));\r
+ sg.setEndRes(viewport.alignment.getWidth());\r
+ viewport.setSelectionGroup(sg);\r
+ alignPanel.repaint();\r
+ PaintRefresher.Refresh(null);\r
+ }\r
+\r
+ public void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setSelectionGroup(null);\r
+ viewport.getColumnSelection().clear();\r
+ viewport.setSelectionGroup(null);\r
+ PaintRefresher.Refresh(null);\r
+ }\r
+\r
+ public void invertSequenceMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ SequenceGroup sg = viewport.getSelectionGroup();\r
+ for (int i=0; i<viewport.getAlignment().getSequences().size(); i++)\r
+ sg.addOrRemove (viewport.getAlignment().getSequenceAt(i));\r
+\r
+ PaintRefresher.Refresh(null);\r
+ }\r
+\r
+ public void remove2LeftMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("delete columns");\r
+ ColumnSelection colSel = viewport.getColumnSelection();\r
+ if (colSel.size() > 0)\r
+ {\r
+ int min = colSel.getMin();\r
+ viewport.getAlignment().trimLeft(min);\r
+ colSel.compensateForEdit(0,min);\r
+\r
+ if(viewport.getSelectionGroup()!=null)\r
+ viewport.getSelectionGroup().adjustForRemoveLeft(min);\r
+\r
+ Vector groups = viewport.alignment.getGroups();\r
+ for(int i=0; i<groups.size(); i++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
+ if(!sg.adjustForRemoveLeft(min))\r
+ viewport.alignment.deleteGroup(sg);\r
+ }\r
+\r
+ alignPanel.repaint();\r
+ }\r
+ }\r
+\r
+ public void remove2RightMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("delete columns");\r
+ ColumnSelection colSel = viewport.getColumnSelection();\r
+ if (colSel.size() > 0)\r
+ {\r
+ int max = colSel.getMax();\r
+ viewport.getAlignment().trimRight(max);\r
+ if(viewport.getSelectionGroup()!=null)\r
+ viewport.getSelectionGroup().adjustForRemoveRight(max);\r
+\r
+ Vector groups = viewport.alignment.getGroups();\r
+ for(int i=0; i<groups.size(); i++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup) groups.elementAt(i);\r
+ if(!sg.adjustForRemoveRight(max))\r
+ viewport.alignment.deleteGroup(sg);\r
+ }\r
+\r
+\r
+\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ }\r
+\r
+ public void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("delete gapped columns");\r
+ viewport.getAlignment().removeGaps();\r
+ viewport.updateConservation();\r
+ viewport.updateConsensus();\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void removeAllGapsMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("delete all gaps");\r
+ SequenceI current;\r
+ int jSize;\r
+ for (int i=0; i < viewport.getAlignment().getSequences().size();i++)\r
+ {\r
+ current = viewport.getAlignment().getSequenceAt(i);\r
+ jSize = current.getLength();\r
+ for (int j=0; j < jSize; j++)\r
+ if(jalview.util.Comparison.isGap(current.getCharAt(j)))\r
+ {\r
+ current.deleteCharAt(j);\r
+ j--;\r
+ jSize--;\r
+ }\r
+ }\r
+ viewport.updateConservation();\r
+ viewport.updateConsensus();\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+ public void findMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ Finder finder = new Finder(alignPanel);\r
+ }\r
+\r
+\r
+ public void font_actionPerformed(ActionEvent e)\r
+ {\r
+ Frame frame = new Frame();\r
+ FontChooser fc = new FontChooser( alignPanel, frame);\r
+ frame.add(fc);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Change Font", 440,100);\r
+\r
+ }\r
+\r
+ protected void fullSeqId_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setShowFullId( fullSeqId.getState() );\r
+ alignPanel.idPanel.idCanvas.setSize( alignPanel.calculateIdWidth() );\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ protected void colourTextMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setColourText( colourTextMenuItem.getState() );\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ protected void wrapMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setWrapAlignment( wrapMenuItem.getState() );\r
+ alignPanel.setWrapAlignment( wrapMenuItem.getState() );\r
+ scaleAbove.setEnabled( wrapMenuItem.getState() );\r
+ scaleLeft.setEnabled( wrapMenuItem.getState());\r
+ scaleRight.setEnabled( wrapMenuItem.getState());\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ protected void scaleAbove_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setScaleAboveWrapped(scaleAbove.getState());\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ protected void scaleLeft_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setScaleLeftWrapped(scaleLeft.getState());\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ protected void scaleRight_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setScaleRightWrapped(scaleRight.getState());\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+\r
+ public void viewBoxesMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setShowBoxes( viewBoxesMenuItem.getState() );\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void viewTextMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setShowText( viewTextMenuItem.getState() );\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+ protected void renderGapsMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setRenderGaps(renderGapsMenuItem.getState());\r
+ alignPanel.repaint();\r
+ }\r
+\r
+\r
+ public void annotationPanelMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ if(annotationPanelMenuItem.getState() && viewport.getWrapAlignment())\r
+ {\r
+ annotationPanelMenuItem.setState(false);\r
+ return;\r
+ }\r
+ viewport.setShowAnnotation( annotationPanelMenuItem.getState() );\r
+ alignPanel.setAnnotationVisible( annotationPanelMenuItem.getState() );\r
+ }\r
+\r
+ public void overviewMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ if (alignPanel.overviewPanel != null)\r
+ return;\r
+\r
+ Frame frame = new Frame();\r
+ OverviewPanel overview = new OverviewPanel(alignPanel);\r
+ frame.add(overview);\r
+ // +50 must allow for applet frame window\r
+ jalview.bin.JalviewLite.addFrame(frame, "Overview " + this.getTitle(),\r
+ overview.preferredSize().width, overview.preferredSize().height+50);\r
+\r
+ frame.pack();\r
+ frame.addWindowListener(new WindowAdapter()\r
+ { public void windowClosing(WindowEvent e)\r
+ {\r
+ alignPanel.setOverviewPanel(null);\r
+ };\r
+ });\r
+\r
+ alignPanel.setOverviewPanel( overview );\r
+\r
+\r
+ }\r
+\r
+ protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour( null );\r
+ }\r
+\r
+\r
+ public void clustalColour_actionPerformed(ActionEvent e)\r
+ {\r
+ abovePIDThreshold.setState(false);\r
+ changeColour(new ClustalxColourScheme(viewport.alignment.getSequences(), viewport.alignment.getWidth()));\r
+ }\r
+\r
+ public void zappoColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new ZappoColourScheme());\r
+ }\r
+\r
+ public void taylorColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new TaylorColourScheme());\r
+ }\r
+\r
+\r
+ public void hydrophobicityColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour( new HydrophobicColourScheme() );\r
+ }\r
+\r
+ public void helixColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new HelixColourScheme() );\r
+ }\r
+\r
+\r
+ public void strandColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new StrandColourScheme());\r
+ }\r
+\r
+\r
+ public void turnColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new TurnColourScheme());\r
+ }\r
+\r
+\r
+ public void buriedColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new BuriedColourScheme() );\r
+ }\r
+\r
+ public void nucleotideColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new NucleotideColourScheme());\r
+ }\r
+\r
+\r
+ protected void applyToAllGroups_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setColourAppliesToAllGroups(applyToAllGroups.getState());\r
+ }\r
+\r
+\r
+\r
+ void changeColour(ColourSchemeI cs)\r
+ {\r
+ int threshold = 0;\r
+\r
+ if ( viewport.getAbovePIDThreshold() )\r
+ {\r
+ threshold = SliderPanel.setPIDSliderSource(alignPanel, cs, "Background");\r
+\r
+ if (cs instanceof ResidueColourScheme)\r
+ ( (ResidueColourScheme) cs).setThreshold(threshold);\r
+ else if (cs instanceof ScoreColourScheme)\r
+ ( (ScoreColourScheme) cs).setThreshold(threshold);\r
+\r
+ viewport.setGlobalColourScheme(cs);\r
+ }\r
+ else if (cs instanceof ResidueColourScheme)\r
+ ( (ResidueColourScheme) cs).setThreshold(0);\r
+ else if (cs instanceof ScoreColourScheme)\r
+ ( (ScoreColourScheme) cs).setThreshold(0);\r
+\r
+\r
+\r
+ if (viewport.getConservationSelected())\r
+ {\r
+ ConservationColourScheme ccs = null;\r
+\r
+ Alignment al = (Alignment) viewport.alignment;\r
+ Conservation c = new Conservation("All",\r
+ ResidueProperties.propHash, 3,\r
+ al.getSequences(), 0,\r
+ al.getWidth() - 1);\r
+\r
+ c.calculate();\r
+ c.verdict(false, viewport.ConsPercGaps);\r
+\r
+ ccs = new ConservationColourScheme(c, cs);\r
+\r
+ // MUST NOTIFY THE COLOURSCHEME OF CONSENSUS!\r
+ ccs.setConsensus( viewport.vconsensus );\r
+ viewport.setGlobalColourScheme(ccs);\r
+\r
+ SliderPanel.setConservationSlider(alignPanel, ccs, "Background");\r
+\r
+ }\r
+ else\r
+ {\r
+ // MUST NOTIFY THE COLOURSCHEME OF CONSENSUS!\r
+ if (cs != null)\r
+ cs.setConsensus(viewport.vconsensus);\r
+ viewport.setGlobalColourScheme(cs);\r
+ }\r
+\r
+\r
+ if(viewport.getColourAppliesToAllGroups())\r
+ {\r
+ Vector groups = viewport.alignment.getGroups();\r
+ for(int i=0; i<groups.size(); i++)\r
+ {\r
+ SequenceGroup sg = (SequenceGroup)groups.elementAt(i);\r
+\r
+ if (cs instanceof ClustalxColourScheme)\r
+ {\r
+ sg.cs = new ClustalxColourScheme(sg.sequences, sg.getWidth());\r
+ }\r
+ else\r
+ try\r
+ {\r
+ sg.cs = (ColourSchemeI) cs.getClass().newInstance();\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ ex.printStackTrace();\r
+ sg.cs = cs;\r
+ }\r
+\r
+ if(viewport.getAbovePIDThreshold())\r
+ {\r
+ if (sg.cs instanceof ResidueColourScheme)\r
+ ( (ResidueColourScheme) sg.cs).setThreshold(threshold);\r
+ else if (sg.cs instanceof ScoreColourScheme)\r
+ ( (ScoreColourScheme) sg.cs).setThreshold(threshold);\r
+\r
+ sg.cs.setConsensus( AAFrequency.calculate(sg.sequences, 0, sg.getWidth()) );\r
+ }\r
+\r
+ if( viewport.getConservationSelected() )\r
+ {\r
+ Conservation c = new Conservation("Group",\r
+ ResidueProperties.propHash, 3,\r
+ sg.sequences, 0, viewport.alignment.getWidth()-1);\r
+ c.calculate();\r
+ c.verdict(false, viewport.ConsPercGaps);\r
+ ConservationColourScheme ccs = new ConservationColourScheme(c, sg.cs);\r
+\r
+ // MUST NOTIFY THE COLOURSCHEME OF CONSENSUS!\r
+ ccs.setConsensus( AAFrequency.calculate(sg.sequences, 0, sg.getWidth()));\r
+ sg.cs = ccs;\r
+ }\r
+ else\r
+ {\r
+ // MUST NOTIFY THE COLOURSCHEME OF CONSENSUS!\r
+ sg.cs.setConsensus(AAFrequency.calculate(sg.sequences, 0, sg.getWidth()));\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+ if(alignPanel.getOverviewPanel()!=null)\r
+ alignPanel.getOverviewPanel().updateOverviewImage();\r
+\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ protected void modifyPID_actionPerformed(ActionEvent e)\r
+ {\r
+ if(viewport.getAbovePIDThreshold())\r
+ {\r
+ SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(),\r
+ "Background");\r
+ SliderPanel.showPIDSlider();\r
+ }\r
+ }\r
+\r
+ protected void modifyConservation_actionPerformed(ActionEvent e)\r
+ {\r
+ if(viewport.getConservationSelected())\r
+ {\r
+ SliderPanel.setConservationSlider(alignPanel, viewport.globalColourScheme,\r
+ "Background");\r
+ SliderPanel.showConservationSlider();\r
+ }\r
+ }\r
+\r
+\r
+ protected void conservationMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setConservationSelected(conservationMenuItem.getState());\r
+\r
+ viewport.setAbovePIDThreshold(false);\r
+ abovePIDThreshold.setState(false);\r
+\r
+ ColourSchemeI cs = viewport.getGlobalColourScheme();\r
+ if(cs instanceof ConservationColourScheme )\r
+ changeColour( ((ConservationColourScheme)cs).cs );\r
+ else\r
+ changeColour( cs );\r
+\r
+ modifyConservation_actionPerformed(null);\r
+ }\r
+\r
+ public void abovePIDThreshold_actionPerformed(ActionEvent e)\r
+ {\r
+ viewport.setAbovePIDThreshold(abovePIDThreshold.getState());\r
+\r
+ conservationMenuItem.setState(false);\r
+ viewport.setConservationSelected(false);\r
+\r
+ ColourSchemeI cs = viewport.getGlobalColourScheme();\r
+\r
+ if(cs instanceof ConservationColourScheme )\r
+ changeColour( ((ConservationColourScheme)cs).cs );\r
+ else\r
+ changeColour( cs );\r
+\r
+ modifyPID_actionPerformed(null);\r
+ }\r
+\r
+\r
+\r
+ public void userDefinedColour_actionPerformed(ActionEvent e)\r
+ {\r
+ UserDefinedColours chooser = new UserDefinedColours( alignPanel, null);\r
+ }\r
+\r
+ public void PIDColour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour( new PIDColourScheme() );\r
+ }\r
+\r
+\r
+ public void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
+ {\r
+ changeColour(new Blosum62ColourScheme() );\r
+ }\r
+\r
+\r
+\r
+ public void sortPairwiseMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("sort");\r
+ AlignmentSorter.sortByPID(viewport.getAlignment(), viewport.getAlignment().getSequenceAt(0));\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void sortIDMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("sort");\r
+ AlignmentSorter.sortByID( viewport.getAlignment() );\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void sortGroupMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("sort");\r
+ AlignmentSorter.sortByGroup(viewport.getAlignment());\r
+ AlignmentSorter.sortGroups(viewport.getAlignment());\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void removeRedundancyMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ RedundancyPanel sp = new RedundancyPanel(alignPanel);\r
+ Frame frame = new Frame();\r
+ frame.add(sp);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Redundancy threshold selection", 400, 120);\r
+\r
+ }\r
+\r
+ public void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ if(viewport.getSelectionGroup().getSize()>1)\r
+ {\r
+ Frame frame = new Frame();\r
+ frame.add(new PairwiseAlignPanel(viewport));\r
+ jalview.bin.JalviewLite.addFrame(frame, "Pairwise Alignment", 600, 500);\r
+ }\r
+ }\r
+\r
+ public void PCAMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ if( (viewport.getSelectionGroup()!=null && viewport.getSelectionGroup().getSize()<4 && viewport.getSelectionGroup().getSize()>0)\r
+ || viewport.getAlignment().getHeight()<4)\r
+ {\r
+ return;\r
+ }\r
+\r
+ try{\r
+ PCAPanel pcaPanel = new PCAPanel(viewport, null);\r
+ Frame frame = new Frame();\r
+ frame.add(pcaPanel);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Principal component analysis", 400, 400);\r
+ }catch(java.lang.OutOfMemoryError ex)\r
+ {\r
+ }\r
+\r
+\r
+ }\r
+\r
+ public void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ NewTreePanel("AV", "PID", "Average distance tree using PID");\r
+ }\r
+\r
+ public void neighbourTreeMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ NewTreePanel("NJ", "PID", "Neighbour joining tree using PID");\r
+ }\r
+\r
+\r
+ protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ NewTreePanel("NJ", "BL", "Neighbour joining tree using BLOSUM62");\r
+ }\r
+\r
+ protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+ NewTreePanel("AV", "BL", "Average distance tree using BLOSUM62PID");\r
+ }\r
+\r
+ void NewTreePanel(String type, String pwType, String title)\r
+ {\r
+ //are the sequences aligned?\r
+ if(!viewport.alignment.isAligned())\r
+ {\r
+ return;\r
+ }\r
+\r
+ final TreePanel tp;\r
+ if (viewport.getSelectionGroup() != null &&\r
+ viewport.getSelectionGroup().getSize() > 3)\r
+ {\r
+ tp = new TreePanel(viewport, viewport.getSelectionGroup().sequences, type,\r
+ pwType,\r
+ 0, viewport.alignment.getWidth());\r
+ }\r
+ else\r
+ {\r
+ tp = new TreePanel(viewport, viewport.getAlignment().getSequences(),\r
+ type, pwType, 0, viewport.alignment.getWidth());\r
+ }\r
+\r
+ addTreeMenuItem(tp, title);\r
+\r
+ jalview.bin.JalviewLite.addFrame(tp, title, 600, 500);\r
+ }\r
+\r
+ void addTreeMenuItem(final TreePanel treePanel, String title)\r
+ {\r
+ final MenuItem item = new MenuItem(title);\r
+ sortByTreeMenu.add(item);\r
+ item.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ addHistoryItem("sort");\r
+ AlignmentSorter.sortByTree(viewport.getAlignment(), treePanel.getTree());\r
+ alignPanel.repaint();\r
+ }\r
+ });\r
+\r
+ treePanel.addWindowListener(new WindowAdapter()\r
+ {\r
+ public void windowClosing(WindowEvent e)\r
+ {\r
+ sortByTreeMenu.remove(item);\r
+ };\r
+ });\r
+ }\r
+\r
+ protected void documentation_actionPerformed(ActionEvent e) {\r
+\r
+ jalview.bin.JalviewLite.showURL("http://www.jalview.org");\r
+\r
+ }\r
+\r
+ protected void about_actionPerformed(ActionEvent e)\r
+ {\r
+ class AboutPanel extends Canvas\r
+ {\r
+ public void paint(Graphics g)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0,getSize().width, getSize().height);\r
+ g.setFont(new Font("Helvetica", Font.PLAIN, 12));\r
+ FontMetrics fm = g.getFontMetrics();\r
+ int fh = fm.getHeight();\r
+ int y=20, x=7;\r
+ g.setColor(Color.black);\r
+ g.setFont(new Font("Helvetica", Font.BOLD, 14));\r
+ g.drawString("JalView 2005", 200,y+=fh);\r
+ g.setFont(new Font("Helvetica", Font.PLAIN, 12));\r
+ g.drawString("Authors: Michele Clamp, James Cuff, Steve Searle, Andrew Waterhouse, Jim Procter & Geoff Barton.",x,y+=fh*2);\r
+ g.drawString("Current development managed by Andrew Waterhouse; Barton Group, University of Dundee.",x,y+=fh);\r
+ g.drawString("If you use JalView, please cite:",x,y+=fh+8);\r
+ g.drawString("\"Clamp, M., Cuff, J., Searle, S. M. and Barton, G. J. (2004), The Jalview Java Alignment Editor\"",x,y+=fh);\r
+ g.drawString("Bioinformatics, 2004 12;426-7.",x,y+=fh);\r
+ }\r
+ }\r
+ Frame frame = new Frame();\r
+ frame.add(new AboutPanel());\r
+ jalview.bin.JalviewLite.addFrame(frame, "Jalview 2005", 580,200);\r
+\r
+\r
+\r
+ }\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.*;\r
+import jalview.bin.*;\r
+import jalview.analysis.*;\r
+import jalview.datamodel.*;\r
+import jalview.schemes.*;\r
+import java.util.*;\r
+\r
+public class AlignViewport\r
+{\r
+ int startRes;\r
+ int endRes;\r
+\r
+ int startSeq;\r
+ int endSeq;\r
+\r
+ boolean showFullId = true;\r
+ boolean showText=true;\r
+ boolean showColourText=false;\r
+ boolean showBoxes=true;\r
+ boolean wrapAlignment=false;\r
+ boolean renderGaps = true;\r
+ boolean showSequenceFeatures = false;\r
+ boolean showAnnotation = true;\r
+ boolean showConservation = true;\r
+ boolean showQuality = true;\r
+ boolean showConsensus = true;\r
+\r
+ boolean colourAppliesToAllGroups = true;\r
+ ColourSchemeI globalColourScheme = null;\r
+ boolean conservationColourSelected = false;\r
+ boolean abovePIDThreshold = false;\r
+\r
+ SequenceGroup selectionGroup = new SequenceGroup();\r
+\r
+ int charHeight;\r
+ int charWidth;\r
+ int chunkWidth;\r
+ int chunkHeight;\r
+\r
+ Font font = new Font("SansSerif",Font.PLAIN,10);\r
+ AlignmentI alignment;\r
+\r
+ ColumnSelection colSel = new ColumnSelection();\r
+\r
+ int threshold;\r
+ int increment;\r
+\r
+ NJTree currentTree = null;\r
+\r
+ boolean scaleAboveWrapped = true;\r
+ boolean scaleLeftWrapped = true;\r
+ boolean scaleRightWrapped = true;\r
+\r
+ public AlignViewport(AlignmentI al, JalviewLite applet)\r
+ {\r
+ setAlignment(al);\r
+ this.startRes = 0;\r
+ this.endRes = al.getWidth()-1;\r
+ this.startSeq = 0;\r
+ this.endSeq = al.getHeight()-1;\r
+ setFont(font);\r
+\r
+\r
+ if(applet!=null)\r
+ {\r
+ String param = applet.getParameter("showFullId");\r
+ if (param != null)\r
+ showFullId = Boolean.valueOf(param).booleanValue();\r
+\r
+ param = applet.getParameter("showAnnotation");\r
+ if (param != null)\r
+ showAnnotation = Boolean.valueOf(param).booleanValue();\r
+\r
+ param = applet.getParameter("showConservation");\r
+ if (param != null)\r
+ showConservation = Boolean.valueOf(param).booleanValue();\r
+\r
+ param = applet.getParameter("showQuality");\r
+ if (param != null)\r
+ showQuality = Boolean.valueOf(param).booleanValue();\r
+\r
+ param = applet.getParameter("showConsensus");\r
+ if (param != null)\r
+ showConsensus = Boolean.valueOf(param).booleanValue();\r
+ }\r
+ // We must set conservation and consensus before setting colour,\r
+ // as Blosum and Clustal require this to be done\r
+ updateConservation();\r
+ updateConsensus();\r
+\r
+ if(applet!=null && applet.getParameter("defaultColour")!=null)\r
+ {\r
+ globalColourScheme = ColourSchemeProperty.getColour(alignment,\r
+ applet.getParameter("defaultColour"));\r
+ if(globalColourScheme!=null)\r
+ globalColourScheme.setConsensus( vconsensus );\r
+ }\r
+ }\r
+\r
+\r
+ public void showSequenceFeatures(boolean b)\r
+ {\r
+ showSequenceFeatures = b;\r
+ }\r
+\r
+ public Vector vconsensus;\r
+ AlignmentAnnotation consensus;\r
+ AlignmentAnnotation conservation;\r
+ AlignmentAnnotation quality;\r
+\r
+ public int ConsPercGaps = 25; // JBPNote : This should be a scalable property!\r
+\r
+ public void updateConservation()\r
+ {\r
+ Conservation cons = new jalview.analysis.Conservation("All",\r
+ jalview.schemes.ResidueProperties.propHash, 3,\r
+ alignment.getSequences(), 0,\r
+ alignment.getWidth()-1);\r
+ cons.calculate();\r
+ cons.verdict(false, ConsPercGaps);\r
+ cons.findQuality();\r
+ int alWidth = alignment.getWidth();\r
+ Annotation [] annotations = new Annotation[alWidth];\r
+ Annotation [] qannotations = new Annotation[alWidth];\r
+ String sequence = cons.getConsSequence().getSequence();\r
+ float minR,minG,minB, maxR,maxG,maxB;\r
+ minR = 0.3f;\r
+ minG = 0.0f;\r
+ minB = 0f;\r
+ maxR = 1.0f-minR; maxG=0.9f-minG; maxB=0f-minB; // scalable range for colouring both Conservation and Quality\r
+ float min = 0f;\r
+ float max = 11f;\r
+ float qmin = cons.qualityRange[0].floatValue();\r
+ float qmax = cons.qualityRange[1].floatValue();\r
+\r
+ for (int i = 0; i < alWidth; i++)\r
+ {\r
+ float value = 0;\r
+ try\r
+ {\r
+ value = Integer.parseInt(sequence.charAt(i) + "");\r
+ }\r
+ catch (Exception ex)\r
+ {\r
+ if (sequence.charAt(i) == '*') value = 11;\r
+ if (sequence.charAt(i) == '+') value = 10;\r
+ }\r
+ float vprop = value-min;\r
+ vprop/=max;\r
+ annotations[i] = new Annotation(sequence.charAt(i) + "",\r
+ "Conservation graph", ' ', value, new Color(minR+maxR*vprop, minG+maxG*vprop, minB+maxB*vprop));\r
+ // Quality calc\r
+ value = ((Double) cons.quality.elementAt(i)).floatValue();\r
+ vprop = value - qmin;\r
+ vprop/=qmax;\r
+ qannotations[i] = new Annotation(" ",\r
+ String.valueOf(value), ' ', value, new Color(minR+maxR*vprop, minG+maxG*vprop, minB+maxB*vprop));\r
+ }\r
+\r
+ if(conservation==null)\r
+ {\r
+ conservation = new AlignmentAnnotation("Conservation",\r
+ "Conservation of total alignment less than "+ConsPercGaps+"% gaps",\r
+ annotations,\r
+ 0f, // cons.qualityRange[0].floatValue(),\r
+ 11f, // cons.qualityRange[1].floatValue()\r
+ 1);\r
+ if(showConservation)\r
+ alignment.addAnnotation(conservation);\r
+ quality = new AlignmentAnnotation("Quality",\r
+ "Alignment Quality based on Blosum62 scores",\r
+ qannotations,\r
+ cons.qualityRange[0].floatValue(),\r
+ cons.qualityRange[1].floatValue(),\r
+ 1);\r
+ if(showQuality)\r
+ alignment.addAnnotation(quality);\r
+ }\r
+ else {\r
+ conservation.annotations = annotations;\r
+ quality.annotations = qannotations;\r
+ quality.graphMax = cons.qualityRange[1].floatValue();\r
+ }\r
+\r
+\r
+ }\r
+\r
+ public void updateConsensus()\r
+ {\r
+ Annotation [] annotations = new Annotation[alignment.getWidth()];\r
+\r
+ // this routine prevents vconsensus becoming a new object each time\r
+ // consenus is calculated. Important for speed of Blosum62\r
+ // and PID colouring of alignment\r
+ if(vconsensus == null)\r
+ vconsensus = alignment.getAAFrequency();\r
+ else\r
+ {\r
+ Vector temp = alignment.getAAFrequency();\r
+ vconsensus.removeAllElements();\r
+ Enumeration e = temp.elements();\r
+ while(e.hasMoreElements())\r
+ {\r
+ vconsensus.addElement(e.nextElement());\r
+ }\r
+ }\r
+ Hashtable hash = null;\r
+ for (int i = 0; i<alignment.getWidth(); i++)\r
+ {\r
+ hash = (Hashtable) vconsensus.elementAt(i);\r
+ float value = new Float(hash.get("maxCount").toString()).floatValue();\r
+ value /= new Float(hash.get("size").toString()).floatValue();\r
+\r
+ value *= 100;\r
+ String maxRes = hash.get("maxResidue")+" ";\r
+ String mouseOver = hash.get("maxResidue")+" ";\r
+ if(maxRes.length()>2)\r
+ {\r
+ mouseOver = "["+maxRes+"] ";\r
+ maxRes = "+ ";\r
+ }\r
+\r
+ mouseOver += (int)value+"%";\r
+ annotations[i] = new Annotation(maxRes, mouseOver, ' ', value);\r
+\r
+ }\r
+\r
+ if(consensus==null)\r
+ {\r
+ consensus = new AlignmentAnnotation("Consensus",\r
+ "PID", annotations, 0f, 100f, 1);\r
+ if(showConsensus)\r
+ alignment.addAnnotation(consensus);\r
+ }\r
+ else\r
+ consensus.annotations = annotations;\r
+\r
+ }\r
+\r
+\r
+ public SequenceGroup getSelectionGroup()\r
+ {\r
+ return selectionGroup;\r
+ }\r
+\r
+ public void setSelectionGroup(SequenceGroup sg)\r
+ {\r
+ selectionGroup = sg;\r
+ }\r
+\r
+\r
+ public boolean getConservationSelected()\r
+ {\r
+ return conservationColourSelected;\r
+ }\r
+\r
+ public void setConservationSelected(boolean b)\r
+ {\r
+ conservationColourSelected = b;\r
+ }\r
+\r
+ public boolean getAbovePIDThreshold()\r
+ {\r
+ return abovePIDThreshold;\r
+ }\r
+\r
+ public void setAbovePIDThreshold(boolean b)\r
+ {\r
+ abovePIDThreshold = b;\r
+ }\r
+\r
+ public int getStartRes() {\r
+ return startRes;\r
+ }\r
+\r
+ public int getEndRes() {\r
+ return endRes;\r
+ }\r
+\r
+ public int getStartSeq() {\r
+ return startSeq;\r
+ }\r
+\r
+ public void setGlobalColourScheme(ColourSchemeI cs)\r
+ {\r
+ globalColourScheme = cs;\r
+ }\r
+\r
+ public ColourSchemeI getGlobalColourScheme()\r
+ {\r
+ return globalColourScheme;\r
+ }\r
+\r
+\r
+ public void setStartRes(int res) {\r
+ this.startRes = res;\r
+ }\r
+ public void setStartSeq(int seq) {\r
+ this.startSeq = seq;\r
+ }\r
+ public void setEndRes(int res) {\r
+ if (res > alignment.getWidth()-1) {\r
+ System.out.println(" Corrected res from " + res + " to maximum " + (alignment.getWidth()-1));\r
+ res = alignment.getWidth()-1;\r
+ }\r
+ if (res < 0) {\r
+ res = 0;\r
+ }\r
+ this.endRes = res;\r
+ }\r
+ public void setEndSeq(int seq) {\r
+ if (seq > alignment.getHeight()) {\r
+ seq = alignment.getHeight();\r
+ }\r
+ if (seq < 0) {\r
+ seq = 0;\r
+ }\r
+ this.endSeq = seq;\r
+ }\r
+ public int getEndSeq() {\r
+ return endSeq;\r
+ }\r
+\r
+ public void setFont(Font f) {\r
+ font = f;\r
+ java.awt.Frame temp = new java.awt.Frame();\r
+ temp.addNotify();\r
+ java.awt.FontMetrics fm = temp.getGraphics().getFontMetrics(font);\r
+ setCharHeight(fm.getHeight());\r
+ setCharWidth(fm.charWidth('M'));\r
+ }\r
+\r
+ public Font getFont() {\r
+ return font;\r
+ }\r
+ public void setCharWidth(int w) {\r
+ this.charWidth = w;\r
+ }\r
+ public int getCharWidth() {\r
+ return charWidth;\r
+ }\r
+ public void setCharHeight(int h) {\r
+ this.charHeight = h;\r
+ }\r
+ public int getCharHeight() {\r
+ return charHeight;\r
+ }\r
+ public void setChunkWidth(int w) {\r
+ this.chunkWidth = w;\r
+ }\r
+ public int getChunkWidth() {\r
+ return chunkWidth;\r
+ }\r
+ public void setChunkHeight(int h) {\r
+ this.chunkHeight = h;\r
+ }\r
+ public int getChunkHeight() {\r
+ return chunkHeight;\r
+ }\r
+ public AlignmentI getAlignment() {\r
+ return alignment;\r
+ }\r
+ public void setAlignment(AlignmentI align) {\r
+ this.alignment = align;\r
+ }\r
+\r
+ public void setWrapAlignment(boolean state) {\r
+ wrapAlignment = state;\r
+ }\r
+ public void setShowText(boolean state) {\r
+ showText = state;\r
+ }\r
+\r
+ public void setRenderGaps(boolean state){\r
+ renderGaps = state;\r
+ }\r
+\r
+\r
+ public boolean getColourText()\r
+ {\r
+ return showColourText;\r
+ }\r
+\r
+ public void setColourText(boolean state)\r
+ {\r
+ showColourText = state;\r
+ }\r
+\r
+ public void setShowBoxes(boolean state) {\r
+ showBoxes = state;\r
+ }\r
+\r
+ public boolean getWrapAlignment() {\r
+ return wrapAlignment;\r
+ }\r
+ public boolean getShowText() {\r
+ return showText;\r
+ }\r
+ public boolean getShowBoxes() {\r
+ return showBoxes;\r
+ }\r
+\r
+ public char getGapCharacter() {\r
+ return getAlignment().getGapCharacter();\r
+ }\r
+ public void setGapCharacter(char gap) {\r
+ if (getAlignment() != null) {\r
+ getAlignment().setGapCharacter(gap);\r
+ }\r
+ }\r
+ public void setThreshold(int thresh) {\r
+ threshold = thresh;\r
+ }\r
+ public int getThreshold() {\r
+ return threshold;\r
+ }\r
+ public void setIncrement(int inc) {\r
+ increment = inc;\r
+ }\r
+ public int getIncrement() {\r
+ return increment;\r
+ }\r
+ public int getIndex(int y) {\r
+ int y1 = 0;\r
+ int starty = getStartSeq();\r
+ int endy = getEndSeq();\r
+\r
+ for (int i = starty; i <= endy; i++) {\r
+ if (i < alignment.getHeight() && alignment.getSequenceAt(i) != null) {\r
+ int y2 = y1 + getCharHeight();\r
+\r
+ if (y>=y1 && y <=y2) {\r
+ return i;\r
+ }\r
+ y1 = y2;\r
+ } else {\r
+ return -1;\r
+ }\r
+ }\r
+ return -1;\r
+ }\r
+\r
+ public ColumnSelection getColumnSelection() {\r
+ return colSel;\r
+ }\r
+\r
+ public void resetSeqLimits(int height) {\r
+ setEndSeq(height/getCharHeight());\r
+ }\r
+ public void setCurrentTree(NJTree tree) {\r
+ currentTree = tree;\r
+ }\r
+ public NJTree getCurrentTree() {\r
+ return currentTree;\r
+ }\r
+\r
+\r
+ public void setColourAppliesToAllGroups(boolean b)\r
+ { colourAppliesToAllGroups = b; }\r
+\r
+ public boolean getColourAppliesToAllGroups()\r
+ {return colourAppliesToAllGroups; }\r
+\r
+ public boolean getShowFullId()\r
+ {\r
+ return showFullId;\r
+ }\r
+\r
+ public void setShowFullId(boolean b)\r
+ {\r
+ showFullId = b;\r
+ }\r
+\r
+ public boolean getShowAnnotation()\r
+ {\r
+ return showAnnotation;\r
+ }\r
+\r
+ public void setShowAnnotation(boolean b)\r
+ {\r
+ showAnnotation = b;\r
+ }\r
+\r
+ public boolean getScaleAboveWrapped()\r
+ { return scaleAboveWrapped;}\r
+\r
+ public boolean getScaleLeftWrapped()\r
+ { return scaleLeftWrapped; }\r
+\r
+ public boolean getScaleRightWrapped()\r
+ { return scaleRightWrapped; }\r
+\r
+ public void setScaleAboveWrapped(boolean b)\r
+ { scaleAboveWrapped = b; }\r
+\r
+ public void setScaleLeftWrapped(boolean b)\r
+ { scaleLeftWrapped = b; }\r
+\r
+ public void setScaleRightWrapped(boolean b)\r
+ { scaleRightWrapped = b; }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.GAlignmentPanel;\r
+import jalview.schemes.*;\r
+import jalview.analysis.*;\r
+import jalview.datamodel.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class AlignmentPanel extends GAlignmentPanel implements AdjustmentListener\r
+{\r
+\r
+ AlignViewport av;\r
+ OverviewPanel overviewPanel;\r
+ SeqPanel seqPanel;\r
+ IdPanel idPanel;\r
+ IdwidthAdjuster idwidthAdjuster;\r
+ public AlignFrame alignFrame;\r
+ ScalePanel scalePanel;\r
+ AnnotationPanel annotationPanel;\r
+ AnnotationLabels alabels;\r
+\r
+ // this value is set false when selection area being dragged\r
+ boolean fastPaint = true;\r
+\r
+ public AlignmentPanel(AlignFrame af, final AlignViewport av)\r
+ {\r
+ alignFrame = af;\r
+ this.av = av;\r
+ seqPanel = new SeqPanel (av, this);\r
+ idPanel = new IdPanel (av, this);\r
+ scalePanel = new ScalePanel(av, this);\r
+ idwidthAdjuster = new IdwidthAdjuster(this);\r
+ annotationPanel = new AnnotationPanel(this);\r
+ alabels = new AnnotationLabels(this);\r
+\r
+\r
+ idPanelHolder.add(idPanel, BorderLayout.CENTER);\r
+ idSpaceFillerPanel1.add(idwidthAdjuster, BorderLayout.CENTER);\r
+ annotationScroller.add(annotationPanel);\r
+ annotationSpaceFillerHolder.add(alabels, BorderLayout.CENTER);\r
+ scalePanelHolder.add(scalePanel, BorderLayout.CENTER);\r
+ seqPanelHolder.add(seqPanel, BorderLayout.CENTER);\r
+\r
+ fontChanged();\r
+ setScrollValues(0, 0);\r
+\r
+ hscroll.addAdjustmentListener(this);\r
+ vscroll.addAdjustmentListener(this);\r
+\r
+ seqPanel.seqCanvas.addKeyListener( new MyKeyAdapter() );\r
+ idPanel.idCanvas.addKeyListener( new MyKeyAdapter() );\r
+\r
+ addComponentListener(new ComponentAdapter()\r
+ {\r
+ public void componentResized(ComponentEvent evt)\r
+ {\r
+ setScrollValues(av.getStartRes(), av.getStartSeq());\r
+ repaint();\r
+ }\r
+ });\r
+\r
+ Dimension d = calculateIdWidth();\r
+ idPanel.idCanvas.setSize(d);\r
+\r
+ hscrollFillerPanel.setSize(d.width, annotationPanel.getSize().height);\r
+ annotationScroller.setSize(annotationPanel.getSize());\r
+\r
+ idPanel.idCanvas.setSize(d.width, seqPanel.seqCanvas.getSize().height);\r
+ annotationSpaceFillerHolder.setSize(d.width,annotationPanel.getSize().height);\r
+ alabels.setSize(d.width,annotationPanel.getSize().height);\r
+\r
+ }\r
+\r
+ class MyKeyAdapter extends KeyAdapter\r
+ {\r
+ public void keyPressed(KeyEvent evt)\r
+ {\r
+ switch(evt.getKeyCode())\r
+ {\r
+ case 27: // escape key\r
+ av.setSelectionGroup(null);\r
+ alignFrame.alignPanel.repaint();\r
+ break;\r
+ case KeyEvent.VK_X:\r
+ if(evt.isControlDown())\r
+ alignFrame.cut_actionPerformed(null);\r
+ break;\r
+ case KeyEvent.VK_C:\r
+ if(evt.isControlDown())\r
+ alignFrame.copy_actionPerformed(null);\r
+ break;\r
+ case KeyEvent.VK_V:\r
+ if(evt.isControlDown())\r
+ alignFrame.paste(true);\r
+ break;\r
+ case KeyEvent.VK_A:\r
+ if(evt.isControlDown())\r
+ alignFrame.selectAllSequenceMenuItem_actionPerformed(null);\r
+ break;\r
+ case KeyEvent.VK_DOWN:\r
+ alignFrame.moveSelectedSequences(false);\r
+ break;\r
+ case KeyEvent.VK_UP:\r
+ alignFrame.moveSelectedSequences(true);\r
+ break;\r
+ case KeyEvent.VK_F:\r
+ if(evt.isControlDown())\r
+ alignFrame.findMenuItem_actionPerformed(null);\r
+ break;\r
+ }\r
+ }\r
+ }\r
+\r
+ public void fontChanged()\r
+ {\r
+ // set idCanvas bufferedImage to null\r
+ // to prevent drawing old image\r
+ FontMetrics fm = getFontMetrics(av.getFont());\r
+\r
+ scalePanel.setSize(new Dimension(10, av.charHeight+fm.getDescent()));\r
+ idwidthAdjuster.setSize(new Dimension(10, av.charHeight+fm.getDescent()));\r
+\r
+ annotationPanel.adjustPanelHeight();\r
+ annotationPanel.repaint();\r
+ Dimension d = calculateIdWidth();\r
+ d.setSize(d.width + 4, seqPanel.seqCanvas.getSize().height);\r
+ idPanel.idCanvas.setSize(d);\r
+ hscrollFillerPanel.setSize(d);\r
+\r
+ alignFrame.pack();\r
+ }\r
+\r
+ public void setIdWidth(int w, int h)\r
+ {\r
+ idPanel.idCanvas.setSize(w,h);\r
+ idPanelHolder.setSize(w,idPanelHolder.getSize().height);\r
+ alabels.setSize(w,alabels.getSize().height);\r
+ validate();\r
+ }\r
+ Dimension calculateIdWidth()\r
+ {\r
+ Frame frame = new Frame();\r
+ frame.addNotify();\r
+ Graphics g = frame.getGraphics();\r
+ if(g==null)\r
+ {\r
+ Frame f = new Frame();\r
+ f.addNotify();\r
+ g = f.getGraphics();\r
+ }\r
+\r
+ FontMetrics fm = g.getFontMetrics(av.font);\r
+ AlignmentI al = av.getAlignment();\r
+\r
+ int i = 0;\r
+ int idWidth = 0;\r
+ String id;\r
+ while (i < al.getHeight() && al.getSequenceAt(i) != null)\r
+ {\r
+ SequenceI s = al.getSequenceAt(i);\r
+ if(av.getShowFullId())\r
+ id = s.getDisplayId();\r
+ else\r
+ id = s.getName();\r
+\r
+ if (fm.stringWidth(id) > idWidth)\r
+ idWidth = fm.stringWidth(id);\r
+ i++;\r
+ }\r
+\r
+ // Also check annotation label widths\r
+ i=0;\r
+ if(al.getAlignmentAnnotation()!=null)\r
+ {\r
+ fm = g.getFontMetrics(frame.getFont());\r
+ while (i < al.getAlignmentAnnotation().length)\r
+ {\r
+ String label = al.getAlignmentAnnotation()[i].label;\r
+ if (fm.stringWidth(label) > idWidth)\r
+ idWidth = fm.stringWidth(label);\r
+ i++;\r
+ }\r
+ }\r
+\r
+ return new Dimension(idWidth, idPanel.idCanvas.getSize().height);\r
+ }\r
+\r
+\r
+ public void highlightSearchResults(int [] results)\r
+ {\r
+ seqPanel.seqCanvas.highlightSearchResults( results );\r
+\r
+ // do we need to scroll the panel?\r
+ if(results!=null && (av.getStartSeq()>results[0]\r
+ || av.getEndSeq()<results[0]\r
+ || av.getStartRes()>results[1]\r
+ || av.getEndRes()<results[2]))\r
+ setScrollValues(results[1], results[0]);\r
+\r
+\r
+ }\r
+\r
+\r
+ public OverviewPanel getOverviewPanel()\r
+ {\r
+ return overviewPanel;\r
+ }\r
+\r
+ public void setOverviewPanel(OverviewPanel op)\r
+ {\r
+ overviewPanel = op;\r
+ }\r
+\r
+\r
+ public void setAnnotationVisible(boolean b)\r
+ {\r
+ annotationSpaceFillerHolder.setVisible(b);\r
+ annotationScroller.setVisible(b);\r
+ }\r
+\r
+\r
+ public void setWrapAlignment(boolean wrap)\r
+ {\r
+ scalePanelHolder.setVisible(!wrap);\r
+ hscroll.setVisible(!wrap);\r
+ idwidthAdjuster.setVisible(!wrap);\r
+\r
+ av.setShowAnnotation(!wrap);\r
+ annotationScroller.setVisible(!wrap);\r
+ annotationSpaceFillerHolder.setVisible(!wrap);\r
+ idSpaceFillerPanel1.setVisible(!wrap);\r
+\r
+ repaint();\r
+\r
+ }\r
+\r
+\r
+ public void setColourScheme()\r
+ {\r
+ ColourSchemeI cs = av.getGlobalColourScheme();\r
+\r
+ if(av.getConservationSelected())\r
+ {\r
+\r
+ Alignment al = (Alignment)av.getAlignment();\r
+ Conservation c = new Conservation("All",\r
+ ResidueProperties.propHash, 3, al.getSequences(), 0,\r
+ al.getWidth() );\r
+\r
+ c.calculate();\r
+ c.verdict(false, av.ConsPercGaps);\r
+ ConservationColourScheme ccs = new ConservationColourScheme(c, cs);\r
+\r
+ av.setGlobalColourScheme( ccs );\r
+\r
+ }\r
+\r
+ repaint();\r
+ }\r
+\r
+\r
+ int hextent = 0;\r
+ int vextent = 0;\r
+\r
+ // return value is true if the scroll is valid\r
+ public boolean scrollUp(boolean up)\r
+ {\r
+ if(up)\r
+ {\r
+ if(vscroll.getValue()<1)\r
+ return false;\r
+ fastPaint = false;\r
+ vscroll.setValue(vscroll.getValue() - 1);\r
+ }\r
+ else\r
+ {\r
+ if(vextent+vscroll.getValue() >= av.getAlignment().getHeight())\r
+ return false;\r
+ fastPaint = false;\r
+ vscroll.setValue(vscroll.getValue() + 1);\r
+ }\r
+ fastPaint = true;\r
+ return true;\r
+ }\r
+\r
+ public boolean scrollRight(boolean right)\r
+ {\r
+\r
+ if (right)\r
+ {\r
+ if (hscroll.getValue() < 1)\r
+ return false;\r
+ fastPaint = false;\r
+ hscroll.setValue(hscroll.getValue() - 1);\r
+ }\r
+ else\r
+ {\r
+ if (hextent + hscroll.getValue() >= av.getAlignment().getWidth())\r
+ return false;\r
+ fastPaint = false;\r
+ hscroll.setValue(hscroll.getValue() + 1);\r
+ }\r
+ fastPaint = true;\r
+ return true;\r
+ }\r
+\r
+\r
+ public void setScrollValues(int x, int y)\r
+ {\r
+\r
+ av.setStartRes(x);\r
+ av.setStartSeq(y);\r
+ av.setEndRes(x + seqPanel.seqCanvas.getSize().width/av.getCharWidth()-1);\r
+\r
+ hextent = seqPanel.seqCanvas.getSize().width/av.charWidth;\r
+ vextent = seqPanel.seqCanvas.getSize().height/av.charHeight;\r
+\r
+ if(hextent > av.alignment.getWidth())\r
+ hextent = av.alignment.getWidth();\r
+ if(vextent > av.alignment.getHeight())\r
+ vextent = av.alignment.getHeight();\r
+\r
+ if(hextent+x > av.getAlignment().getWidth())\r
+ x = av.getAlignment().getWidth()- hextent;\r
+\r
+ if(vextent+y > av.getAlignment().getHeight())\r
+ y = av.getAlignment().getHeight() - vextent;\r
+\r
+ if(y<0)\r
+ y = 0;\r
+\r
+ if(x<0)\r
+ x=0;\r
+\r
+\r
+ int endSeq = y + vextent;\r
+ if(endSeq>av.alignment.getHeight())\r
+ endSeq = av.alignment.getHeight();\r
+\r
+\r
+ av.setEndSeq( endSeq );\r
+ hscroll.setValues(x,hextent,0,av.getAlignment().getWidth());\r
+ vscroll.setValues(y,vextent,0,av.getAlignment().getHeight() );\r
+\r
+ }\r
+\r
+\r
+ public void adjustmentValueChanged(AdjustmentEvent evt)\r
+ {\r
+ int oldX = av.getStartRes();\r
+ int oldY = av.getStartSeq();\r
+\r
+ if (evt.getSource() == hscroll)\r
+ {\r
+ int x = hscroll.getValue();\r
+ av.setStartRes(x);\r
+ av.setEndRes(x + seqPanel.seqCanvas.getSize().width/av.getCharWidth()-1);\r
+ }\r
+\r
+ if (evt.getSource() == vscroll)\r
+ {\r
+ int offy = vscroll.getValue();\r
+ if (av.getWrapAlignment())\r
+ {\r
+ int rowSize = seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getSize().width);\r
+ av.setStartRes( vscroll.getValue() * rowSize );\r
+ av.setEndRes( (vscroll.getValue()+1) * rowSize );\r
+ }\r
+ else\r
+ {\r
+ av.setStartSeq(offy);\r
+ av.setEndSeq(offy + seqPanel.seqCanvas.getSize().height / av.getCharHeight());\r
+ }\r
+ }\r
+\r
+ if(overviewPanel!=null)\r
+ overviewPanel.setBoxPosition();\r
+\r
+ if(av.getWrapAlignment() || !fastPaint)\r
+ repaint();\r
+ else\r
+ {\r
+ idPanel.idCanvas.fastPaint(av.getStartSeq() - oldY);\r
+ seqPanel.seqCanvas.fastPaint(av.getStartRes() - oldX,\r
+ av.getStartSeq() - oldY);\r
+\r
+ scalePanel.repaint();\r
+ if (av.getShowAnnotation())\r
+ annotationPanel.fastPaint(av.getStartRes() - oldX);\r
+ }\r
+\r
+ }\r
+\r
+ public void update(Graphics g)\r
+ {\r
+ paint (g);\r
+ }\r
+\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ Dimension d = idPanel.idCanvas.getSize();\r
+ idPanel.idCanvas.setSize(d.width, seqPanel.seqCanvas.getSize().height);\r
+ annotationSpaceFillerHolder.setSize(d.width,annotationPanel.getSize().height);\r
+ alabels.setSize(d.width,annotationPanel.getSize().height);\r
+\r
+ alabels.repaint();\r
+ idPanel.idCanvas.repaint();\r
+ seqPanel.seqCanvas.repaint();\r
+ scalePanel.repaint();\r
+ annotationPanel.repaint();\r
+\r
+\r
+ if (av.getWrapAlignment())\r
+ {\r
+ int max = av.alignment.getWidth() / seqPanel.seqCanvas.getWrappedCanvasWidth(seqPanel.seqCanvas.getSize().width);\r
+ vscroll.setMaximum(max);\r
+ vscroll.setUnitIncrement(1);\r
+ vscroll.setVisibleAmount(1);\r
+ }\r
+ else\r
+ {\r
+ setScrollValues(av.getStartRes(), av.getStartSeq());\r
+ }\r
+\r
+\r
+\r
+ }\r
+}\r
--- /dev/null
+\r
+package jalview.appletgui;\r
+\r
+import java.awt.event.*;\r
+import java.awt.*;\r
+import jalview.datamodel.*;\r
+\r
+public class AnnotationLabels extends Panel\r
+{\r
+ boolean active = false;\r
+ Image image;\r
+ AlignmentPanel ap ;\r
+ boolean resizing = false;\r
+ int oldY, mouseX;\r
+ static String ADDNEW = "Add new row";\r
+ static String HIDE = "Hide this row";\r
+ static String DELETE = "Delete this row";\r
+ static String SHOWALL="Show all hidden rows";\r
+ int selectedRow = 0;\r
+ int scrollOffset = 0;\r
+\r
+ public AnnotationLabels(AlignmentPanel ap)\r
+ {\r
+ this.ap = ap;\r
+ setLayout(null);\r
+\r
+ java.net.URL url = getClass().getResource("/images/idwidth.gif");\r
+ if (url != null)\r
+ image = java.awt.Toolkit.getDefaultToolkit().getImage(url);\r
+\r
+ try\r
+ {\r
+ MediaTracker mt = new MediaTracker(this);\r
+ mt.addImage(image, 0);\r
+ mt.waitForID(0);\r
+ }\r
+ catch (Exception ex) {}\r
+ }\r
+\r
+ public void setScrollOffset(int y)\r
+ {\r
+ scrollOffset = y;\r
+ repaint();\r
+ }\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ drawComponent(g);\r
+ }\r
+\r
+ public void drawComponent(Graphics g)\r
+ {\r
+ FontMetrics fm = g.getFontMetrics(g.getFont());\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0, getSize().width, getSize().height);\r
+\r
+ g.translate(0, scrollOffset);\r
+ g.setColor(Color.black);\r
+\r
+ AlignmentAnnotation[] aa = ap.av.alignment.getAlignmentAnnotation();\r
+ int y = g.getFont().getSize();\r
+ int x = 0;\r
+\r
+ if(aa!=null)\r
+ for(int i=0; i<aa.length; i++)\r
+ {\r
+ if(!aa[i].visible)\r
+ continue;\r
+\r
+ x = getSize().width - fm.stringWidth(aa[i].label)-3;\r
+\r
+ if(aa[i].isGraph)\r
+ y+=(aa[i].height/3);\r
+\r
+ g.drawString(aa[i].label, x, y);\r
+\r
+ if(aa[i].isGraph)\r
+ y+=(2*aa[i].height/3);\r
+ else\r
+ y+=aa[i].height;\r
+ }\r
+\r
+ if (active)\r
+ {\r
+ if (image != null)\r
+ g.drawImage(image, 2, 0, this);\r
+ }\r
+\r
+ if (aa == null || aa.length<1)\r
+ {\r
+ g.drawString("Right click", 2, 8);\r
+ g.drawString("to add annotation", 2, 18);\r
+ }\r
+\r
+\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+public class AnnotationPanel extends Panel implements AdjustmentListener\r
+{\r
+ AlignViewport av;\r
+ AlignmentPanel ap;\r
+ int activeRow =-1;\r
+\r
+ Vector activeRes;\r
+ static String HELIX ="Helix";\r
+ static String SHEET ="Sheet";\r
+ static String LABEL ="Label";\r
+ static String REMOVE="Remove Annotation";\r
+ static String COLOUR="Colour";\r
+ static Color HELIX_COLOUR = Color.red.darker();\r
+ static Color SHEET_COLOUR = Color.green.darker().darker();\r
+\r
+\r
+ Image image;\r
+ Graphics gg;\r
+ FontMetrics fm;\r
+ int imgWidth=0;\r
+\r
+ boolean fastPaint = false;\r
+\r
+ public static int GRAPH_HEIGHT = 40;\r
+\r
+\r
+\r
+ public AnnotationPanel(AlignmentPanel ap)\r
+ {\r
+ this.ap = ap;\r
+ av = ap.av;\r
+ this.setLayout(null);\r
+ adjustPanelHeight();\r
+\r
+\r
+ ap.annotationScroller.getVAdjustable().addAdjustmentListener( this );\r
+ }\r
+\r
+ public void adjustmentValueChanged(AdjustmentEvent evt)\r
+ {\r
+ ap.alabels.setScrollOffset( -evt.getValue() );\r
+ }\r
+\r
+ public void adjustPanelHeight()\r
+ {\r
+ // setHeight of panels\r
+ AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();\r
+ int height = 0;\r
+ if(aa!=null)\r
+ for (int i = 0; i < aa.length; i++)\r
+ {\r
+ if(!aa[i].visible)\r
+ continue;\r
+\r
+ aa[i].height = 0;\r
+\r
+ if(aa[i].hasText)\r
+ aa[i].height += av.charHeight;\r
+ if (aa[i].hasIcons)\r
+ aa[i].height += 16;\r
+\r
+ if (aa[i].isGraph)\r
+ aa[i].height += GRAPH_HEIGHT;\r
+\r
+ if(aa[i].height==0)\r
+ aa[i].height = 20;\r
+ height += aa[i].height;\r
+ }\r
+ else height=20;\r
+ this.setSize(new Dimension(1, height));\r
+\r
+ }\r
+\r
+ public void addEditableColumn(int i)\r
+ {\r
+ if(activeRow==-1)\r
+ {\r
+ AlignmentAnnotation [] aa = av.alignment.getAlignmentAnnotation();\r
+ for(int j=0; j<aa.length; j++)\r
+ if(aa[j].editable)\r
+ {\r
+ activeRow = j;\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(activeRes==null)\r
+ {\r
+ activeRes = new Vector();\r
+ activeRes.addElement(String.valueOf(i));\r
+ return;\r
+ }\r
+\r
+ activeRes.addElement(String.valueOf(i));\r
+\r
+ }\r
+\r
+ public void update(Graphics g)\r
+ {\r
+ paint(g);\r
+ }\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ imgWidth = (av.endRes-av.startRes+1) *av.charWidth;\r
+\r
+ if(image==null || imgWidth != image.getWidth(this))\r
+ {\r
+ image = createImage(imgWidth, ap.annotationPanel.getSize().height);\r
+ gg = image.getGraphics();\r
+ gg.setFont(av.getFont());\r
+ fm = gg.getFontMetrics();\r
+ fastPaint = false;\r
+ }\r
+\r
+ if(fastPaint)\r
+ {\r
+ g.drawImage(image, 0, 0, this);\r
+ fastPaint = false;\r
+ return;\r
+ }\r
+\r
+ drawComponent( gg, av.startRes, av.endRes+1);\r
+ g.drawImage( image, 0, 0, this);\r
+\r
+ }\r
+\r
+ public void fastPaint(int horizontal)\r
+{\r
+ if( horizontal == 0\r
+ || av.alignment.getAlignmentAnnotation()==null\r
+ || av.alignment.getAlignmentAnnotation().length<1\r
+ )\r
+ {\r
+ repaint();\r
+ return;\r
+ }\r
+\r
+ gg.copyArea( 0,0, imgWidth, getSize().height, -horizontal*av.charWidth, 0 );\r
+ int sr=av.startRes, er=av.endRes+1, transX=0;\r
+\r
+ if(horizontal>0) // scrollbar pulled right, image to the left\r
+ {\r
+ transX = (er-sr-horizontal)*av.charWidth;\r
+ sr = er - horizontal ;\r
+ }\r
+ else if(horizontal<0)\r
+ {\r
+ er = sr-horizontal;\r
+ }\r
+\r
+\r
+ gg.translate(transX, 0);\r
+\r
+ drawComponent(gg, sr, er);\r
+\r
+ gg.translate( -transX, 0 );\r
+\r
+ fastPaint = true;\r
+ repaint();\r
+}\r
+\r
+\r
+ public void drawComponent(Graphics g, int startRes, int endRes)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0,(endRes-startRes) *av.charWidth, getSize().height);\r
+ if(av.alignment.getAlignmentAnnotation()==null || av.alignment.getAlignmentAnnotation().length<1)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0,getSize().width, getSize().height);\r
+ g.setColor(Color.black);\r
+ g.drawString("Alignment has no annotations",20,15);\r
+ return;\r
+ }\r
+\r
+ AlignmentAnnotation [] aa = av.alignment.getAlignmentAnnotation();\r
+\r
+ int j, x=0, y=0;\r
+ char [] lastSS = new char[aa.length];\r
+ int [] lastSSX= new int[aa.length] ;\r
+ int iconOffset = av.charHeight/2;\r
+ boolean validRes = false;\r
+ //\u03B2 \u03B1\r
+\r
+ for(int i=0; i<aa.length; i++)\r
+ {\r
+ AlignmentAnnotation row = aa[i];\r
+ if(!row.visible)\r
+ continue;\r
+\r
+ if(row.isGraph)\r
+ {\r
+ // this is so that we draw the characters below the graph\r
+ y += row.height;\r
+ if(row.hasText)\r
+ y -= av.charHeight;\r
+ }\r
+ if(row.hasText)\r
+ iconOffset = av.charHeight/2;\r
+ else\r
+ iconOffset = 0;\r
+\r
+ for(j=startRes; j<endRes; j++)\r
+ {\r
+ validRes = row.annotations[j]==null?false:true;\r
+\r
+ x = (j-startRes)*av.charWidth;\r
+\r
+\r
+ if(activeRow==i)\r
+ {\r
+\r
+ g.setColor(Color.red);\r
+\r
+ if(activeRes!=null)\r
+ for (int n = 0; n < activeRes.size(); n++)\r
+ {\r
+ int v = Integer.parseInt(activeRes.elementAt(n).toString()) ;\r
+ if (v == j)\r
+ g.fillRect( (j-startRes) * av.charWidth, y, av.charWidth, row.height);\r
+ }\r
+ }\r
+\r
+\r
+\r
+ if(validRes && row.annotations[j].displayCharacter.length()>0)\r
+ {\r
+ int charOffset = (av.charWidth - fm.charWidth(row.annotations[j].displayCharacter.charAt(0)))/2;\r
+ g.setColor( row.annotations[j].colour);\r
+ if(j==0)\r
+ {\r
+ if (row.annotations[0].secondaryStructure == 'H'\r
+ || row.annotations[0].secondaryStructure == 'E')\r
+ g.drawString(row.annotations[j].displayCharacter, x,\r
+ y + iconOffset + 2);\r
+ }\r
+ else if( (row.annotations[j].secondaryStructure=='H'\r
+ || row.annotations[j].secondaryStructure=='E') &&\r
+ (row.annotations[j-1]==null ||\r
+ row.annotations[j].secondaryStructure!=row.annotations[j-1].secondaryStructure))\r
+\r
+ g.drawString(row.annotations[j].displayCharacter, x, y + iconOffset + 2);\r
+\r
+ if(!row.hasIcons)\r
+ g.drawString(row.annotations[j].displayCharacter, x + charOffset,\r
+ y + iconOffset + 2);\r
+ }\r
+\r
+ if(row.hasIcons)\r
+ if(!validRes || row.annotations[j].secondaryStructure!=lastSS[i])\r
+ {\r
+ switch (lastSS[i])\r
+ {\r
+ case 'H':\r
+ g.setColor(HELIX_COLOUR);\r
+ g.fillRoundRect(lastSSX[i], y+4 + iconOffset, x-lastSSX[i], 7, 8, 8);\r
+ break;\r
+ case 'E':\r
+ g.setColor(SHEET_COLOUR);\r
+ g.fillRect(lastSSX[i], y + 4 + iconOffset, x-lastSSX[i]-4, 7);\r
+ g.fillPolygon(new int[] {x - 4, x- 4, x }\r
+ , new int[]{y+ iconOffset, y + 14+ iconOffset, y + 8+ iconOffset}, 3);\r
+ break;\r
+ case 'C':\r
+ break;\r
+ default :\r
+ g.setColor(Color.gray);\r
+ g.fillRect(lastSSX[i], y+6+ iconOffset, x-lastSSX[i], 2);\r
+ break;\r
+ }\r
+\r
+ if(validRes)\r
+ lastSS[i] = row.annotations[j].secondaryStructure;\r
+ else\r
+ lastSS[i] = ' ';\r
+ lastSSX[i] = x;\r
+ }\r
+\r
+ if (validRes && row.isGraph)\r
+ {\r
+ g.setColor(new Color(0,0,180));\r
+ int height = (int)((row.annotations[j].value / row.graphMax)*GRAPH_HEIGHT);\r
+\r
+ if(row.windowLength>1)\r
+ {\r
+ int total =0;\r
+ for(int i2=j- (row.windowLength/2); i2<j+(row.windowLength/2); i2++)\r
+ {\r
+ if(i2<0 || i2>=av.alignment.getWidth())\r
+ continue;\r
+\r
+ total += row.annotations[i2].value;\r
+ }\r
+\r
+ total/=row.windowLength;\r
+ height = (int)( (total / row.graphMax) *GRAPH_HEIGHT);\r
+\r
+ }\r
+ g.setColor(row.annotations[j].colour);\r
+ g.fillRect(x, y-height, av.charWidth, height );\r
+ }\r
+\r
+\r
+ }\r
+\r
+ x+=av.charWidth;\r
+\r
+ if(row.hasIcons)\r
+ switch (lastSS[i])\r
+ {\r
+ case 'H':\r
+ g.setColor(HELIX_COLOUR);\r
+ g.fillRoundRect(lastSSX[i], y+4+ iconOffset, x - lastSSX[i], 7, 8, 8);\r
+ break;\r
+ case 'E':\r
+ g.setColor(SHEET_COLOUR);\r
+ g.fillRect(lastSSX[i], y + 4+ iconOffset, x - lastSSX[i] - 4, 7);\r
+ g.fillPolygon(new int[]\r
+ {x - 4, x - 4, x}\r
+ , new int[]\r
+ {y + iconOffset, y + 14+ iconOffset, y + 7+ iconOffset}\r
+ , 3);\r
+ break;\r
+ case 'C':\r
+ break;\r
+ default:\r
+ g.setColor(Color.gray);\r
+ g.fillRect(lastSSX[i], y+6+ iconOffset, x-lastSSX[i], 2);\r
+ break;\r
+\r
+ }\r
+\r
+ if(row.isGraph && row.hasText)\r
+ y+=av.charHeight;\r
+ if(!row.isGraph)\r
+ y+=aa[i].height;\r
+ }\r
+ }\r
+\r
+ // used by overview window\r
+ public void drawGraph(Graphics g, AlignmentAnnotation aa,int width, int y)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0,width, y);\r
+ g.setColor(new Color(0,0,180));\r
+ int x = 0;\r
+ for(int j=0; j<aa.annotations.length; j++)\r
+ {\r
+ g.setColor(new Color(0, 0, 180));\r
+ int height = (int) ( (aa.annotations[j].value / aa.graphMax) * GRAPH_HEIGHT );\r
+ g.fillRect(x, y - height, av.charWidth, height);\r
+ x+=av.charWidth;\r
+ }\r
+ }\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.util.*;\r
+\r
+/**\r
+ * NOTE: Columns are zero based.\r
+ */\r
+public class ColumnSelection{\r
+ Vector selected = new Vector();\r
+\r
+ public void addElement(int col) {\r
+ selected.addElement(new Integer(col));\r
+ }\r
+\r
+ public void clear() {\r
+ selected.removeAllElements();\r
+ }\r
+\r
+ public void removeElement(int col) {\r
+ Integer colInt = new Integer(col);\r
+ if (selected.contains(colInt)) {\r
+ selected.removeElement(colInt);\r
+ } else {\r
+ System.err.println("WARNING: Tried to remove Integer NOT in ColumnSelection");\r
+ }\r
+ }\r
+\r
+ public boolean contains(int col) {\r
+ return selected.contains(new Integer(col));\r
+ }\r
+\r
+ public int columnAt(int i) {\r
+ return ((Integer)selected.elementAt(i)).intValue();\r
+ }\r
+\r
+ public int size() {\r
+ return selected.size();\r
+ }\r
+\r
+ public int getMax() {\r
+ int max = -1;\r
+\r
+ for (int i=0;i<selected.size();i++) {\r
+ if (columnAt(i) > max) {\r
+ max = columnAt(i);\r
+ }\r
+ }\r
+ return max;\r
+ }\r
+\r
+ public int getMin() {\r
+ int min = 1000000000;\r
+\r
+ for (int i=0;i<selected.size();i++) {\r
+ if (columnAt(i) < min) {\r
+ min = columnAt(i);\r
+ }\r
+ }\r
+ return min;\r
+ }\r
+\r
+ public Vector asVector() {\r
+ return selected;\r
+ }\r
+\r
+ public void compensateForEdit(int start, int change) {\r
+ for (int i=0; i < size();i++) {\r
+ int temp = columnAt(i);\r
+\r
+ if (temp >= start)\r
+ selected.setElementAt(new Integer(temp-change),i);\r
+ }\r
+ }\r
+}\r
--- /dev/null
+/********************\r
+ * 2004 Jalview Reengineered\r
+ * Barton Group\r
+ * Dundee University\r
+ *\r
+ * AM Waterhouse\r
+ *******************/\r
+\r
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.GCutAndPasteTransfer;\r
+import jalview.datamodel.*;\r
+import jalview.io.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class CutAndPasteTransfer extends GCutAndPasteTransfer\r
+{\r
+ public CutAndPasteTransfer(boolean forImport)\r
+ {\r
+ super();\r
+\r
+ if(!forImport)\r
+ {\r
+ buttonPanel.setVisible(false);\r
+ }\r
+ }\r
+\r
+\r
+ public String getText()\r
+ {\r
+ return textarea.getText();\r
+ }\r
+\r
+ public void setText(String text)\r
+ {\r
+ textarea.setText(text);\r
+ }\r
+\r
+\r
+ protected void ok_actionPerformed(ActionEvent e)\r
+ {\r
+ String text = getText();\r
+ SequenceI [] sequences = null;\r
+\r
+ String format = IdentifyFile.Identify(text, "Paste");\r
+\r
+ // if (FormatProperties.contains( format ))\r
+ sequences = FormatAdapter.readFile(text, "Paste", format);\r
+\r
+ if(sequences!=null)\r
+ {\r
+ AlignFrame af = new AlignFrame(new Alignment(sequences));\r
+ jalview.bin.JalviewLite.addFrame(af, "Cut & Paste input - "+format,\r
+ AlignFrame.NEW_WINDOW_WIDTH,\r
+ AlignFrame.NEW_WINDOW_HEIGHT);\r
+ af.statusBar.setText("Successfully pasted alignment file");\r
+ }\r
+\r
+ Frame frame = (Frame)this.getParent();\r
+ frame.setVisible(false);\r
+ }\r
+\r
+ protected void cancel_actionPerformed(ActionEvent e) {\r
+ Frame frame = (Frame)this.getParent();\r
+ frame.setVisible(false);\r
+ }\r
+\r
+\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import java.awt.*;\r
+import java.util.*;\r
+\r
+public class FeatureRenderer\r
+{\r
+ AlignViewport av;\r
+\r
+ SequenceGroup currentSequenceGroup = null;\r
+ SequenceGroup [] allGroups = null;\r
+ Color resBoxColour;\r
+ Graphics graphics;\r
+\r
+ public FeatureRenderer(AlignViewport av)\r
+ {\r
+ this.av = av;\r
+ }\r
+\r
+\r
+ public void drawSequence(Graphics g,SequenceI seq,SequenceGroup [] sg, int start, int end, int x1, int y1, int width, int height)\r
+ {\r
+ Vector features = seq.getSequenceFeatures();\r
+ Enumeration e = features.elements();\r
+ while( e.hasMoreElements() )\r
+ {\r
+ SequenceFeature sf = (SequenceFeature)e.nextElement();\r
+ if(sf.getStart()>seq.getEnd())\r
+ continue;\r
+\r
+ int fstart = seq.findIndex(sf.getStart())-1;\r
+ int fend = seq.findIndex(sf.getEnd())-1;\r
+\r
+ if( (fstart<=end && fend>=start) )\r
+ {\r
+ if(fstart<0) // fix for if the feature we have starts before the sequence start,\r
+ fstart = 0;// but the feature end is still valid!!\r
+\r
+ if(fstart==fend)\r
+ {\r
+ g.setColor(Color.red);\r
+ g.fillRoundRect( (fstart - start) * width, y1, width, height, 4,4);\r
+ g.setColor(Color.white);\r
+\r
+ char s = seq.getSequence().charAt(fstart);\r
+ FontMetrics fm = g.getFontMetrics();\r
+ int charOffset = (width - fm.charWidth(s))/2;\r
+ int pady = height/5;\r
+ g.drawString(String.valueOf(s), charOffset + x1 + width * (fstart - start), y1 + height - pady);\r
+\r
+ }\r
+ else\r
+ {\r
+ for (int i = fstart; i <= fend; i++)\r
+ {\r
+ char s = seq.getSequence().charAt(i);\r
+ if( jalview.util.Comparison.isGap(s) )\r
+ continue;\r
+\r
+ g.setColor(Color.blue);\r
+ g.fillRect( (i-start) * width, y1, width, height);\r
+\r
+ g.setColor(Color.white);\r
+\r
+ FontMetrics fm = g.getFontMetrics();\r
+ int charOffset = (width - fm.charWidth(s)) / 2;\r
+ int pady = height / 5;\r
+ g.drawString(String.valueOf(s),\r
+ charOffset + x1 + width * (i-start),\r
+ y1 + height - pady);\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.GFinder;\r
+import jalview.datamodel.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+import java.awt.*;\r
+\r
+public class Finder extends GFinder\r
+{\r
+ AlignViewport av;\r
+ AlignmentPanel ap;\r
+ Frame frame;\r
+ SuperGroup searchGroup;\r
+\r
+ int seqIndex = 0;\r
+ int resIndex = 0;\r
+ public Finder(final AlignmentPanel ap)\r
+ {\r
+ this.av = ap.av;\r
+ this.ap = ap;\r
+ frame = new Frame();\r
+ frame.add(this);\r
+ jalview.bin.JalviewLite.addFrame(frame, "Find", 340,120);\r
+ frame.repaint();\r
+ frame.addWindowListener(new WindowAdapter()\r
+ {public void windowClosing(WindowEvent evt)\r
+ { ap.highlightSearchResults( null ); }\r
+ });\r
+ }\r
+\r
+ public void textfield_actionPerformed(ActionEvent e)\r
+ {\r
+ doSearch(false);\r
+ }\r
+\r
+ public void findNext_actionPerformed(ActionEvent e)\r
+ {\r
+ doSearch(false);\r
+ }\r
+\r
+ public void findAll_actionPerformed(ActionEvent e)\r
+ {\r
+ resIndex=0;\r
+ seqIndex=0;\r
+ doSearch(true);\r
+ }\r
+\r
+ public void cancel_actionPerformed(ActionEvent e)\r
+ {\r
+ try{\r
+ // if allResults is null, this effectively switches displaySearch flag in seqCanvas\r
+ ap.highlightSearchResults( null );\r
+ ap.idPanel.highlightSearchResults( null );\r
+ // frame.setClosed(true);\r
+ }catch(Exception ex){ }\r
+ }\r
+\r
+\r
+ public void createNewGroup_actionPerformed(ActionEvent e)\r
+ {\r
+ for(int i=0; i<searchGroup.getSize(); i++)\r
+ av.alignment.addGroup( searchGroup.getGroupeAt(i));\r
+\r
+ ap.av.alignment.addSuperGroup(searchGroup);\r
+ ap.highlightSearchResults( null );\r
+ }\r
+\r
+\r
+ void doSearch(boolean findAll)\r
+ {\r
+ createNewGroup.setEnabled(false);\r
+\r
+ String searchString = textfield.getText().toUpperCase();\r
+\r
+ com.stevesoft.pat.Regex regex = new com.stevesoft.pat.Regex(searchString);\r
+\r
+ Vector searchResults = new Vector();\r
+ int [] allResults = null;\r
+\r
+ Sequence seq;\r
+ String item=null;\r
+ boolean found = false;\r
+\r
+ ////// is the searchString a residue number?\r
+ try{\r
+ int res = Integer.parseInt(searchString);\r
+ found = true;\r
+\r
+ if(av.getSelectionGroup().getSize()>0)\r
+ seq = (Sequence)(av.getSelectionGroup().getSequenceAt(0));\r
+ else\r
+ seq = (Sequence)av.getAlignment().getSequenceAt(0);\r
+\r
+ searchResults.addElement( Integer.toString( av.getAlignment().findIndex(seq) ) );\r
+ searchResults.addElement( Integer.toString( seq.findIndex(res)-1 ) );\r
+ searchResults.addElement( Integer.toString( seq.findIndex(res)-1 ) );\r
+\r
+ }catch(NumberFormatException ex){}\r
+ ///////////////////////////////////////////////\r
+\r
+\r
+ jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme();\r
+ Color [] newColors = new Color[24];\r
+ for(int i=0; i<24; i++)\r
+ newColors[i] = new Color(60,160,115);\r
+\r
+ ucs.setColourScheme(newColors);\r
+\r
+ searchGroup = new SuperGroup(searchString, ucs , true, true, false);\r
+\r
+ int end = av.alignment.getHeight();\r
+\r
+ SequenceGroup selection = av.getSelectionGroup();\r
+ if(selection!=null)\r
+ if(selection.getSize()<1 || (selection.getEndRes()-selection.getStartRes()<2))\r
+ selection = null;\r
+\r
+ while( !found && seqIndex<end)\r
+ {\r
+ seq = (Sequence)av.alignment.getSequenceAt(seqIndex);\r
+\r
+\r
+ if(selection!=null && !selection.sequences.contains(seq))\r
+ {\r
+ seqIndex++;\r
+ resIndex=0;\r
+ continue;\r
+ }\r
+\r
+ item = seq.getSequence().toUpperCase();\r
+\r
+ if(selection!=null && selection.getEndRes()<av.alignment.getWidth())\r
+ item = item.substring(0, selection.getEndRes()+1);\r
+\r
+ ///Shall we ignore gaps????\r
+ StringBuffer noGaps = new StringBuffer();\r
+ int insertCount=0;\r
+ Vector spaces = new Vector();\r
+\r
+ for (int j=0; j < item.length(); j++)\r
+ {\r
+\r
+ if(!jalview.util.Comparison.isGap(item.charAt(j)))\r
+ {\r
+ noGaps.append(item.charAt(j));\r
+ spaces.addElement(new Integer(insertCount));\r
+ }\r
+ else\r
+ insertCount++;\r
+ }\r
+\r
+\r
+\r
+ for(int r = resIndex; r<noGaps.length(); r++)\r
+ {\r
+\r
+ if( regex.searchFrom( noGaps.toString(), r ) )\r
+ {\r
+ resIndex = regex.matchedFrom();\r
+ if(selection!=null && ( resIndex+ Integer.parseInt(spaces.elementAt(resIndex).toString()) )<selection.getStartRes())\r
+ continue;\r
+\r
+ searchResults.addElement( Integer.toString( seqIndex) );\r
+ searchResults.addElement( Integer.toString( resIndex+ Integer.parseInt(spaces.elementAt(resIndex).toString()) ) );\r
+ searchResults.addElement( Integer.toString( regex.matchedTo()-1 + Integer.parseInt(spaces.elementAt(regex.matchedTo()-1).toString()) ) );\r
+\r
+ SequenceGroup sg = new SequenceGroup(searchString, ucs, true, true, false,\r
+ resIndex+ Integer.parseInt(spaces.elementAt(resIndex).toString()) ,\r
+ regex.matchedTo()-1 + Integer.parseInt(spaces.elementAt(regex.matchedTo()-1).toString())\r
+ );\r
+ sg.addSequence((Sequence)av.getAlignment().getSequenceAt(seqIndex));\r
+ searchGroup.addGroup( sg );\r
+\r
+ if(!findAll)\r
+ {\r
+ // thats enough, break and display the result\r
+ found = true;\r
+ resIndex++;\r
+ break;\r
+ }\r
+\r
+ r=resIndex;\r
+ }\r
+ }\r
+ if(!found)\r
+ {\r
+ seqIndex++;\r
+ resIndex = 0;\r
+ }\r
+ }\r
+\r
+\r
+ Vector idMatch = new Vector();\r
+ for(int id = 0; id<av.alignment.getHeight(); id++)\r
+ {\r
+ if( regex.search( av.alignment.getSequenceAt(id).getName() ) )\r
+ idMatch.addElement( av.alignment.getSequenceAt(id) );\r
+ }\r
+\r
+ if(searchResults.size()==0 && idMatch.size()>0)\r
+ ap.idPanel.highlightSearchResults( idMatch );\r
+\r
+\r
+ if(searchResults.size()>0)\r
+ {\r
+ allResults = new int[searchResults.size()];\r
+ for(int i=0; i<searchResults.size(); i++)\r
+ allResults[i] = Integer.parseInt(searchResults.elementAt(i).toString());\r
+\r
+ createNewGroup.setEnabled(true);\r
+ }\r
+ else\r
+ {\r
+ resIndex=0;\r
+ seqIndex=0;\r
+ }\r
+\r
+ // if allResults is null, this effectively switches displaySearch flag in seqCanvas\r
+ ap.highlightSearchResults( allResults );\r
+\r
+ if (findAll)\r
+ {\r
+ String message = (searchResults.size()/3) + " matches found.";\r
+ System.out.println(message);\r
+ }\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.GFontChooser;\r
+import jalview.appletgui.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+\r
+public class FontChooser extends GFontChooser\r
+{\r
+ AlignmentPanel ap;\r
+ Font oldFont;\r
+ boolean init = true;\r
+ Frame frame;\r
+\r
+ public FontChooser(AlignmentPanel ap, Frame frame)\r
+ {\r
+ super();\r
+ this.frame = frame;\r
+\r
+ this.ap = ap;\r
+ String fonts[] = Toolkit.getDefaultToolkit().getFontList();\r
+ for(int i=0; i<fonts.length; i++)\r
+ fontName.addItem(fonts[i]);\r
+\r
+ for(int i=1; i<31; i++)\r
+ fontSize.addItem(i+"");\r
+\r
+ fontStyle.addItem("plain");\r
+ fontStyle.addItem("bold");\r
+ fontStyle.addItem("italic");\r
+\r
+ oldFont = ap.av.getFont();\r
+ fontName.select(oldFont.getName());\r
+ fontSize.select(oldFont.getSize()+"");\r
+ fontStyle.select(oldFont.getStyle());\r
+\r
+ init = false;\r
+ }\r
+\r
+ protected void ok_actionPerformed(ActionEvent e)\r
+ {\r
+ frame.setVisible(false);\r
+ if(ap.getOverviewPanel()!=null)\r
+ ap.getOverviewPanel().updateOverviewImage();\r
+ }\r
+\r
+ protected void cancel_actionPerformed(ActionEvent e)\r
+ {\r
+ ap.av.setFont(oldFont);\r
+ ap.repaint();\r
+ fontName.select(oldFont.getName());\r
+ fontSize.select(oldFont.getSize()+"");\r
+ fontStyle.select(oldFont.getStyle());\r
+\r
+ frame.setVisible(false);\r
+ }\r
+\r
+ void changeFont()\r
+ {\r
+ Font newFont = new Font(fontName.getSelectedItem().toString(),\r
+ fontStyle.getSelectedIndex(),\r
+ Integer.parseInt(fontSize.getSelectedItem().toString())\r
+ );\r
+ ap.av.setFont(newFont);\r
+ ap.fontChanged();\r
+ }\r
+\r
+ protected void fontName_actionPerformed(ItemEvent e)\r
+ {\r
+ if(init) return;\r
+ changeFont();\r
+ }\r
+\r
+ protected void fontSize_actionPerformed(ItemEvent e)\r
+ {\r
+ if(init) return;\r
+ changeFont();\r
+ }\r
+\r
+ protected void fontStyle_actionPerformed(ItemEvent e)\r
+ {\r
+ if(init) return;\r
+ changeFont();\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.*;\r
+import jalview.datamodel.*;\r
+import jalview.analysis.*;\r
+public class IdCanvas extends Panel\r
+{\r
+ protected AlignViewport av;\r
+\r
+ protected boolean showScores = true;\r
+\r
+ protected int maxIdLength = -1;\r
+ protected String maxIdStr = null;\r
+ Image image;\r
+ Graphics gg;\r
+ int imgHeight=0;\r
+ boolean fastPaint = false;\r
+\r
+ java.util.Vector searchResults;\r
+\r
+ public IdCanvas(AlignViewport av)\r
+ {\r
+ setLayout(null);\r
+ this.av = av;\r
+ PaintRefresher.Register(this);\r
+ }\r
+\r
+ public void drawIdString(Graphics gg,SequenceI s,int i, int starty, int ypos) {\r
+ int charHeight = av.getCharHeight();\r
+\r
+ if(searchResults!=null && searchResults.contains(s))\r
+ {\r
+ gg.setColor(Color.black);\r
+ gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getSize().width,charHeight);\r
+ gg.setColor(Color.white);\r
+ }\r
+ else if (av.getSelectionGroup()!=null && av.getSelectionGroup().sequences.contains(s)) {\r
+ gg.setColor(Color.lightGray);\r
+ gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getSize().width,charHeight);\r
+ gg.setColor(Color.white);\r
+ } else {\r
+ gg.setColor(s.getColor());\r
+ gg.fillRect(0,AlignmentUtil.getPixelHeight(starty,i,charHeight)+ ypos,getSize().width,charHeight);\r
+ gg.setColor(Color.black);\r
+ }\r
+\r
+ String string = s.getName();\r
+ if(av.getShowFullId())\r
+ string = s.getDisplayId();\r
+\r
+ gg.drawString(string,0,AlignmentUtil.getPixelHeight(starty,i,charHeight) + ypos + charHeight- (charHeight/5));\r
+\r
+ }\r
+\r
+ public void fastPaint(int vertical)\r
+ {\r
+ if(gg==null)\r
+ { repaint(); return;}\r
+\r
+ gg.copyArea( 0,0, getSize().width, imgHeight, 0, -vertical*av.charHeight );\r
+\r
+ int ss=av.startSeq, es=av.endSeq, transY = 0;\r
+ if (vertical > 0) // scroll down\r
+ {\r
+ ss = es - vertical;\r
+ if(ss<av.startSeq) // ie scrolling too fast, more than a page at a time\r
+ ss = av.startSeq;\r
+ else\r
+ transY = imgHeight - vertical * av.charHeight;\r
+ }\r
+ else if (vertical < 0)\r
+ {\r
+ es = ss - vertical;\r
+ if(es > av.endSeq)\r
+ es = av.endSeq;\r
+ }\r
+\r
+\r
+\r
+ gg.translate(0, transY);\r
+\r
+ drawIds(ss, es);\r
+\r
+ gg.translate( 0, -transY );\r
+\r
+\r
+ fastPaint = true;\r
+ repaint();\r
+ }\r
+\r
+ public void update(Graphics g)\r
+ {\r
+ paint(g);\r
+ }\r
+ public void paint(Graphics g)\r
+ {\r
+ if(getSize().height<0 || getSize().width<0)\r
+ return;\r
+ if (fastPaint)\r
+ {\r
+ fastPaint = false;\r
+ g.drawImage(image, 0, 0, this);\r
+ return;\r
+ }\r
+\r
+ imgHeight = getSize().height;\r
+ imgHeight -= imgHeight % av.charHeight;\r
+\r
+ if(image==null || imgHeight!=image.getHeight(this))\r
+ {\r
+ image = createImage(getSize().width, imgHeight);\r
+ gg = image.getGraphics();\r
+ gg.setFont(av.getFont());\r
+ }\r
+\r
+ //Fill in the background\r
+ gg.setColor(Color.white);\r
+ Font italic = new Font(av.getFont().getName(), Font.ITALIC,\r
+ av.getFont().getSize());\r
+ gg.setFont(italic);\r
+\r
+ gg.fillRect(0, 0, getSize().width, getSize().height);\r
+ drawIds( av.getStartSeq(), av.endSeq);\r
+ g.drawImage(image, 0, 0, this);\r
+ }\r
+\r
+ void drawIds(int starty, int endy)\r
+ {\r
+ Color currentColor = Color.white;\r
+ Color currentTextColor = Color.black;\r
+\r
+ if (av.getWrapAlignment())\r
+ {\r
+\r
+ int rowSize = av.getEndRes() - av.getStartRes();\r
+ // Draw the rest of the panels\r
+\r
+ for(int ypos=2*av.charHeight, row=av.getEndRes()-rowSize;\r
+ ypos <= getSize().height && row<av.alignment.getWidth();\r
+ ypos += av.chunkHeight, row+=rowSize )\r
+ {\r
+ for (int i = starty; i < av.alignment.getHeight(); i++)\r
+ {\r
+ SequenceI s = av.alignment.getSequenceAt(i);\r
+ drawIdString(gg, s, i, 0, ypos);\r
+ }\r
+ }\r
+\r
+\r
+ } else\r
+ {\r
+\r
+ //Now draw the id strings\r
+ for (int i = starty; i < endy; i++)\r
+ {\r
+ // Selected sequence colours\r
+\r
+ if(searchResults!=null && searchResults.contains(av.alignment.getSequenceAt(i)))\r
+ {\r
+ gg.setColor(Color.black);\r
+ currentColor = Color.black;\r
+ currentTextColor = Color.white;\r
+ }\r
+ else if (av.getSelectionGroup()!= null\r
+ && av.getSelectionGroup().sequences.contains(av.alignment.getSequenceAt(i)))\r
+ {\r
+ currentColor = Color.lightGray;\r
+ currentTextColor = Color.black;\r
+ }\r
+ else\r
+ {\r
+ currentColor = av.alignment.getSequenceAt(i).getColor();\r
+ currentTextColor = Color.black;\r
+ }\r
+\r
+ gg.setColor(currentColor);\r
+\r
+ gg.fillRect(0,\r
+ AlignmentUtil.getPixelHeight(starty, i, av.charHeight),\r
+ getSize().width,\r
+ av.charHeight);\r
+\r
+ gg.setColor(currentTextColor);\r
+ String string = av.alignment.getSequenceAt(i).getName();\r
+ if(av.getShowFullId())\r
+ string = av.alignment.getSequenceAt(i).getDisplayId();\r
+ gg.drawString(string, 0,\r
+ AlignmentUtil.getPixelHeight(starty, i, av.charHeight) +\r
+ av.charHeight - (av.charHeight / 5));\r
+ }\r
+\r
+ // add a border\r
+ gg.setColor(Color.white);\r
+ gg.fillRect(getSize().width-4,0,4,getSize().height);\r
+ }\r
+\r
+ }\r
+\r
+ public void setHighlighted(java.util.Vector found)\r
+ {\r
+ searchResults = found;\r
+ repaint();\r
+ }\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+import jalview.datamodel.*;\r
+\r
+public class IdPanel extends Panel implements MouseListener, MouseMotionListener {\r
+\r
+ protected IdCanvas idCanvas;\r
+ protected AlignViewport av;\r
+ protected AlignmentPanel alignPanel;\r
+ ScrollThread scrollThread = null;\r
+\r
+ int offy;\r
+ int width;\r
+ int lastid = -1;\r
+ boolean mouseDragging = false;\r
+\r
+ public IdPanel(AlignViewport av, AlignmentPanel parent)\r
+ {\r
+ this.av = av;\r
+ alignPanel = parent;\r
+ idCanvas = new IdCanvas(av);\r
+ setLayout(new BorderLayout());\r
+ add(idCanvas, BorderLayout.CENTER);\r
+ idCanvas.addMouseListener(this);\r
+ idCanvas.addMouseMotionListener(this);\r
+ }\r
+\r
+ public void mouseMoved(MouseEvent e) {}\r
+\r
+\r
+ public void mouseDragged(MouseEvent e) {\r
+ mouseDragging = true;\r
+\r
+ int y = e.getY();\r
+ if(av.getWrapAlignment())\r
+ y-=2*av.charHeight;\r
+ int seq = av.getIndex(y);\r
+\r
+ if(seq<0)\r
+ return;\r
+\r
+ if (seq < lastid)\r
+ selectSeqs(lastid - 1, seq);\r
+ else if (seq > lastid)\r
+ selectSeqs(lastid + 1, seq);\r
+\r
+ lastid = seq;\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ public void mouseClicked(MouseEvent e)\r
+ {\r
+ if (e.getClickCount() == 2)\r
+ {\r
+ int y = e.getY();\r
+ if(av.getWrapAlignment())\r
+ y-=2*av.charHeight;\r
+\r
+ int seq = av.getIndex(y);\r
+ String id = av.getAlignment().getSequenceAt(seq).getName();\r
+\r
+ try{\r
+ jalview.bin.JalviewLite.showURL(\r
+ "http://srs.ebi.ac.uk/srs7bin/cgi-bin/wgetz?-e+[swall-id:" + id +\r
+ "]+-vn+2");\r
+ }catch(Exception ex){ex.printStackTrace();}\r
+ }\r
+\r
+ }\r
+ public void mouseEntered(MouseEvent e)\r
+ {\r
+ if(scrollThread!=null)\r
+ scrollThread.running = false;\r
+ }\r
+\r
+ public void mouseExited (MouseEvent e)\r
+ {\r
+ if(av.getWrapAlignment())\r
+ return;\r
+\r
+ if(mouseDragging && e.getY()<0 && av.getStartSeq()>0)\r
+ {\r
+ scrollThread = new ScrollThread(true);\r
+ }\r
+\r
+ if(mouseDragging && e.getY()>=getSize().height && av.alignment.getHeight()>av.getEndSeq())\r
+ {\r
+ scrollThread = new ScrollThread(false);\r
+ }\r
+ }\r
+\r
+\r
+ public void mousePressed(MouseEvent e) {\r
+ if (e.getClickCount() == 2)\r
+ return;\r
+\r
+ int y = e.getY();\r
+ if(av.getWrapAlignment())\r
+ y-=2*av.charHeight;\r
+\r
+ int seq = av.getIndex(y);\r
+ if (seq == -1)\r
+ return;\r
+\r
+ if ( (e.getModifiers() & InputEvent.BUTTON3_MASK) == InputEvent.BUTTON3_MASK)\r
+ {\r
+ APopupMenu popup = new APopupMenu(alignPanel, null);\r
+ this.add(popup);\r
+ popup.show(this, e.getX(), e.getY());\r
+ return;\r
+ }\r
+\r
+\r
+ if(!e.isControlDown() && !e.isShiftDown() && av.alignment.findGroup( av.alignment.getSequenceAt(seq))!=null)\r
+ {\r
+\r
+ SequenceGroup selection = new SequenceGroup();\r
+ SequenceGroup sg = av.alignment.findGroup(av.alignment.getSequenceAt(seq));\r
+ selection.setStartRes(0);\r
+ selection.setEndRes(av.alignment.getWidth()-1);\r
+ for (int i =0; i< sg.getSize(); i++)\r
+ selection.addSequence(sg.getSequenceAt(i));\r
+\r
+ av.setSelectionGroup(selection);\r
+ return;\r
+ }\r
+\r
+ if(av.getSelectionGroup()==null || ( !e.isControlDown() && av.getSelectionGroup()!=null))\r
+ av.setSelectionGroup(new SequenceGroup());\r
+\r
+ av.getSelectionGroup().setStartRes(0);\r
+ av.getSelectionGroup().setEndRes(av.alignment.getWidth()-1);\r
+\r
+ if(e.isShiftDown() && lastid!=-1)\r
+ selectSeqs(lastid, seq);\r
+ else\r
+ selectSeq(seq);\r
+\r
+ alignPanel.repaint();\r
+ }\r
+\r
+ void selectSeq(int seq)\r
+ {\r
+ lastid = seq;\r
+ SequenceI pickedSeq = av.getAlignment().getSequenceAt(seq);\r
+ av.getSelectionGroup().addOrRemove(pickedSeq);\r
+ }\r
+\r
+ void selectSeqs(int start, int end) {\r
+\r
+ lastid = start;\r
+ if (end < start)\r
+ {\r
+ int tmp = start;\r
+ start = end;\r
+ end = tmp;\r
+ lastid = end;\r
+ }\r
+\r
+ for (int i = start; i <= end; i++)\r
+ av.getSelectionGroup().addSequence(av.getAlignment().getSequenceAt(i));\r
+\r
+ }\r
+\r
+\r
+ public void mouseReleased(MouseEvent e)\r
+ {\r
+ if(scrollThread!=null)\r
+ scrollThread.running = false;\r
+\r
+ mouseDragging = false;\r
+ PaintRefresher.Refresh(this);\r
+ }\r
+\r
+ public void highlightSearchResults( java.util.Vector found )\r
+ {\r
+ idCanvas.setHighlighted( found );\r
+\r
+ if(found == null)\r
+ return;\r
+\r
+ int index = av.alignment.findIndex( (SequenceI)found.elementAt(0));\r
+\r
+ // do we need to scroll the panel?\r
+ if(av.getStartSeq()>index || av.getEndSeq()<index)\r
+ alignPanel.setScrollValues( av.getStartRes(), index);\r
+ }\r
+\r
+ // this class allows scrolling off the bottom of the visible alignment\r
+ class ScrollThread\r
+ extends Thread\r
+ {\r
+ boolean running = false;\r
+ boolean up = true;\r
+ public ScrollThread(boolean up)\r
+ {\r
+ this.up = up;\r
+ start();\r
+ }\r
+\r
+ public void stopScrolling()\r
+ {\r
+ running = false;\r
+ }\r
+\r
+ public void run()\r
+ {\r
+ running = true;\r
+ while (running)\r
+ {\r
+ if(alignPanel.scrollUp(up))\r
+ {\r
+ // scroll was ok, so add new sequence to selection\r
+ int seq = av.getStartSeq();\r
+ if(!up)\r
+ seq = av.getEndSeq();\r
+\r
+ if (seq < lastid)\r
+ selectSeqs(lastid - 1, seq);\r
+ else if (seq > lastid)\r
+ selectSeqs(lastid + 1, seq);\r
+\r
+ lastid = seq;\r
+ }\r
+ else\r
+ running = false;\r
+\r
+ alignPanel.repaint();\r
+ try\r
+ {\r
+ Thread.sleep(100);\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+ }\r
+ }\r
+}\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.event.*;\r
+import java.awt.*;\r
+\r
+\r
+public class IdwidthAdjuster extends Panel implements MouseListener, MouseMotionListener\r
+{\r
+ boolean active = false;\r
+ int oldX=0;\r
+ Image image;\r
+ AlignmentPanel ap ;\r
+\r
+ public IdwidthAdjuster(AlignmentPanel ap)\r
+ {\r
+ setLayout(null);\r
+ this.ap = ap;\r
+ java.net.URL url = getClass().getResource("/images/idwidth.gif");\r
+ if (url != null)\r
+ image = java.awt.Toolkit.getDefaultToolkit().getImage(url);\r
+\r
+ addMouseListener(this);\r
+ addMouseMotionListener(this);\r
+ }\r
+\r
+ public void mousePressed(MouseEvent evt)\r
+ { oldX = evt.getX(); }\r
+\r
+ public void mouseReleased(MouseEvent evt){ active = false; repaint(); }\r
+ public void mouseEntered(MouseEvent evt) { active = true; repaint();}\r
+ public void mouseExited(MouseEvent evt) { active = false; repaint();}\r
+ public void mouseDragged(MouseEvent evt)\r
+ {\r
+ active = true;\r
+ Dimension d = ap.idPanel.idCanvas.getSize();\r
+ int dif = evt.getX() - oldX;\r
+\r
+ if(d.width+dif>20 || dif>0)\r
+ {\r
+ ap.setIdWidth(d.width + dif,d.height);\r
+ this.setSize(d.width + dif, getSize().height);\r
+ }\r
+\r
+ oldX = evt.getX();\r
+ }\r
+\r
+ public void mouseMoved(MouseEvent evt) {}\r
+ public void mouseClicked(MouseEvent evt) {}\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0, getSize().width, getSize().height);\r
+ if(active)\r
+ {\r
+ if(image!=null)\r
+ g.drawImage(image, getSize().width-20, 2, this);\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.event.*;\r
+import java.awt.*;\r
+\r
+public class OverviewPanel extends Panel implements Runnable\r
+{\r
+ Image miniMe;\r
+ AlignViewport av;\r
+ AlignmentPanel ap;\r
+ float scalew = 1f;\r
+ float scaleh = 1f;\r
+\r
+ public int width, sequencesHeight;\r
+ int graphHeight=30;\r
+ int boxX=-1, boxY=-1, boxWidth=-1, boxHeight=-1;\r
+\r
+ boolean resizing = false;\r
+\r
+ Frame nullFrame;\r
+\r
+ public OverviewPanel(AlignmentPanel ap)\r
+ {\r
+ this.av = ap.av;\r
+ this.ap = ap;\r
+ setLayout(null);\r
+ nullFrame = new Frame();\r
+ nullFrame.addNotify();\r
+\r
+ // scale the initial size of overviewpanel to shape of alignment\r
+ float initialScale = (float)av.alignment.getWidth()/(float)av.alignment.getHeight();\r
+ if(av.alignment.getWidth() > av.alignment.getHeight())\r
+ {\r
+ // wider\r
+ width = 400;\r
+ sequencesHeight = (int)(400f/initialScale);\r
+ }\r
+ else\r
+ {\r
+ // taller\r
+ width = (int)(400f*initialScale);\r
+ sequencesHeight = 300;\r
+ if(width<120)\r
+ width = 120;\r
+ }\r
+\r
+ setSize (new Dimension(width, sequencesHeight+graphHeight));\r
+ addComponentListener(new ComponentAdapter()\r
+ {\r
+\r
+ public void componentResized(ComponentEvent evt)\r
+ {\r
+ if( getSize().width!=width || getSize().height!=sequencesHeight+graphHeight)\r
+ {\r
+ updateOverviewImage();\r
+ }\r
+ }\r
+ });\r
+\r
+ addMouseMotionListener(new MouseMotionAdapter()\r
+ {\r
+ public void mouseDragged(MouseEvent evt)\r
+ { doMouseDragged(evt);}\r
+ });\r
+\r
+ addMouseListener(new MouseAdapter()\r
+ {\r
+ public void mousePressed(MouseEvent evt)\r
+ { doMousePressed(evt);}\r
+ public void mouseReleased(MouseEvent evt)\r
+ { doMouseReleased(evt);}\r
+ });\r
+\r
+ updateOverviewImage();\r
+\r
+ }\r
+\r
+ public void doMousePressed(MouseEvent evt)\r
+ {\r
+ boxX = evt.getX();\r
+ boxY = evt.getY();\r
+\r
+ checkValid();\r
+ repaint();\r
+ }\r
+\r
+ public void doMouseReleased(MouseEvent evt)\r
+ {\r
+ boxX = evt.getX();\r
+ boxY = evt.getY();\r
+ checkValid();\r
+ if(!resizing)\r
+ ap.setScrollValues( (int)(boxX/scalew/av.getCharWidth()),\r
+ (int)(boxY/scaleh/av.getCharHeight()) );\r
+ }\r
+\r
+ public void doMouseDragged(MouseEvent evt)\r
+ {\r
+ boxX = evt.getX();\r
+ boxY = evt.getY();\r
+ checkValid();\r
+ if(!resizing)\r
+ ap.setScrollValues( (int)(boxX/scalew/av.getCharWidth()),\r
+ (int)(boxY/scaleh/av.getCharHeight()) );\r
+ repaint();\r
+ ap.repaint();\r
+ }\r
+\r
+ void checkValid()\r
+ {\r
+ if (boxY < 0)\r
+ boxY = 0;\r
+\r
+ if (boxY > sequencesHeight - boxHeight)\r
+ boxY = sequencesHeight - boxHeight+1;\r
+\r
+ if (boxX < 0)\r
+ boxX = 0;\r
+\r
+ if (boxX > width - boxWidth)\r
+ boxX = width - boxWidth;\r
+ }\r
+\r
+ public void updateOverviewImage()\r
+ {\r
+ if(resizing)\r
+ {\r
+ return;\r
+ }\r
+\r
+ resizing = true;\r
+ Thread thread = new Thread(this);\r
+ thread.start();\r
+ repaint();\r
+ }\r
+\r
+ public void run()\r
+ {\r
+ miniMe = null;\r
+ int alwidth = av.alignment.getWidth();\r
+ int alheight = av.alignment.getHeight();\r
+\r
+ if(getSize().width>0 && getSize().height>0)\r
+ {\r
+ width = getSize().width;\r
+ sequencesHeight = getSize().height - graphHeight;\r
+ }\r
+\r
+ setSize (new Dimension(width, sequencesHeight+graphHeight));\r
+\r
+ int fullsizeWidth = alwidth * av.getCharWidth();\r
+ int fullsizeHeight = alheight * av.getCharHeight();\r
+\r
+ scalew = (float) width / (float) fullsizeWidth;\r
+ scaleh = (float) sequencesHeight / (float) fullsizeHeight;\r
+\r
+ miniMe = nullFrame.createImage(width, sequencesHeight + graphHeight);\r
+\r
+ Graphics mg = miniMe.getGraphics();\r
+ Image consensus = nullFrame.createImage(fullsizeWidth, 60);\r
+ Graphics g = consensus.getGraphics();\r
+ ap.annotationPanel.drawGraph(g, av.conservation, fullsizeWidth, 60);\r
+ mg.drawImage(consensus, 0, sequencesHeight, width,\r
+ sequencesHeight + graphHeight, 0, 0, fullsizeWidth, 60, this);\r
+\r
+\r
+ boolean oldRenderGaps = av.renderGaps;\r
+ try{\r
+ // We'll have to draw the full size alignment in chunks, as an image of the\r
+ // whole alignment requires too much memory\r
+\r
+ // Max size depends on the font size, the following is a\r
+ // guess at a size which works\r
+ int maxSize = 2000 / av.getFont().getSize();\r
+ Image block;\r
+ int blockx=0, blocky=0, blockw=0, blockh=0, eRes=0, eSeq=0;\r
+\r
+ av.setRenderGaps(false);\r
+ for(int sRes=0, chunkx=0; sRes<alwidth; sRes+=maxSize, chunkx++)\r
+ {\r
+ eSeq = 0;\r
+ eRes+=maxSize;\r
+ if(eRes>alwidth)\r
+ eRes = alwidth;\r
+\r
+ for(int sSeq=0, chunky=0; sSeq<alheight; sSeq+=maxSize, chunky++)\r
+ {\r
+ eSeq+=maxSize;\r
+ if(eSeq>alheight)\r
+ eSeq = alheight;\r
+\r
+ blocky = 0;\r
+ blockx = (int)((float)sRes/(float)alwidth * width);\r
+\r
+ block = nullFrame.createImage((eRes-sRes)*av.charWidth, (eSeq-sSeq)*av.charHeight);\r
+ g = block.getGraphics();\r
+\r
+ ap.seqPanel.seqCanvas.drawPanel(g, sRes, eRes, sSeq, eSeq, sRes, sSeq, 0);\r
+\r
+ blockh = (int)( (float)(eSeq-sSeq)/(float)alheight * sequencesHeight )+1 ;\r
+ blockw = (int)( (float)(eRes-sRes)/(float)alwidth * width )+1;\r
+\r
+ blocky += (int) ((float)sSeq/(float)alheight* sequencesHeight);\r
+\r
+ mg.drawImage(block, blockx,\r
+ blocky ,\r
+ blockx + blockw,\r
+ blocky + blockh,\r
+\r
+ 0, 0, block.getWidth(null),block.getHeight(null), this);\r
+\r
+ block = null;\r
+ }\r
+\r
+ }\r
+\r
+ }catch(OutOfMemoryError error)\r
+ { System.out.println("out of memory"); }\r
+\r
+\r
+ av.setRenderGaps(oldRenderGaps);\r
+ resizing = false;\r
+\r
+ setBoxPosition();\r
+ }\r
+\r
+ public void setBoxPosition()\r
+ {\r
+ boxX = (int) (av.getStartRes() * av.getCharWidth() * scalew);\r
+ boxY = (int) (av.getStartSeq() * av.getCharHeight() * scaleh);\r
+ boxWidth = (int) ((av.getEndRes()-av.getStartRes()+1)* av.getCharWidth() * scalew) ;\r
+ boxHeight = (int) (av.getEndSeq() * av.getCharHeight() * scaleh) - boxY;\r
+ repaint();\r
+ }\r
+\r
+ public void update(Graphics g)\r
+ {\r
+ paint(g);\r
+ }\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ if(resizing)\r
+ {\r
+ g.setColor(Color.white);\r
+ g.fillRect(0, 0, getSize().width, getSize().height);\r
+ g.setColor(Color.black);\r
+\r
+ g.setFont(new Font("Verdana", Font.BOLD, 15));\r
+ g.drawString("Recalculating", 5, sequencesHeight/2);\r
+ g.drawString("Overview.....", 5, sequencesHeight/2 +20);\r
+ }\r
+ else\r
+ {\r
+ if(miniMe!=null)\r
+ g.drawImage(miniMe, 0,0,this);\r
+\r
+ g.setColor(Color.red);\r
+ g.drawRect(boxX, boxY, boxWidth, boxHeight);\r
+ g.drawRect(boxX+1, boxY+1, boxWidth-2, boxHeight-2);\r
+ }\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import jalview.analysis.PCA;\r
+import jalview.jbappletgui.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class PCAPanel extends GPCAPanel implements Runnable\r
+{\r
+ PCA pca;\r
+ int top;\r
+ RotatableCanvas rc;\r
+ AlignViewport av;\r
+\r
+ public void run()\r
+ {\r
+ // do stuff\r
+ }\r
+\r
+ public PCAPanel(AlignViewport av, SequenceI[] s) {\r
+\r
+ this.av = av;\r
+ if(av.getSelectionGroup().getSize()>3)\r
+ {\r
+ s = new Sequence[av.getSelectionGroup().getSize()];\r
+ for(int i=0; i<s.length; i++)\r
+ s[i] = av.getSelectionGroup().getSequenceAt(i);\r
+ }\r
+\r
+\r
+ if(s==null)\r
+ {\r
+ s = new Sequence[av.getAlignment().getHeight()];\r
+ for (int i = 0; i < av.getAlignment().getHeight(); i++)\r
+ s[i] = av.getAlignment().getSequenceAt(i);\r
+ }\r
+\r
+//////////////////////This part was done in PCATHread originally. Is it too slow???\r
+ pca = new PCA(s);\r
+ pca.run();\r
+\r
+ // Now find the component coordinates\r
+ int ii=0;\r
+ while (ii < s.length && s[ii] != null)\r
+ {\r
+ ii++;\r
+ }\r
+\r
+ double[][] comps = new double[ii][ii];\r
+\r
+ for (int i=0; i < ii; i++ )\r
+ {\r
+ if (pca.getEigenvalue(i) > 1e-4)\r
+ {\r
+ comps[i] = pca.component(i);\r
+ }\r
+ }\r
+\r
+ //////////////////\r
+\r
+ xCombobox.select(0);\r
+ yCombobox.select(1);\r
+ zCombobox.select(2);\r
+\r
+ top = pca.getM().rows-1;\r
+\r
+ Vector points = new Vector();\r
+ float[][] scores = pca.getComponents(top-1,top-2,top-3,100);\r
+\r
+ for (int i =0; i < pca.getM().rows; i++ )\r
+ {\r
+ SequencePoint sp = new SequencePoint(s[i],scores[i]);\r
+ points.addElement(sp);\r
+ }\r
+\r
+ rc = new RotatableCanvas(av,points,pca.getM().rows);\r
+\r
+ //rc.printPoints();\r
+\r
+ add(rc, BorderLayout.CENTER);\r
+ }\r
+\r
+\r
+ void doDimensionChange()\r
+ {\r
+ if(top==0)\r
+ return;\r
+\r
+ int dim1 = top - xCombobox.getSelectedIndex();\r
+ int dim2 = top - yCombobox.getSelectedIndex();\r
+ int dim3 = top - zCombobox.getSelectedIndex();\r
+\r
+ float[][] scores = pca.getComponents(dim1,dim2,dim3,100);\r
+ for (int i=0; i < pca.getM().rows; i++) {\r
+ ((SequencePoint)rc.points.elementAt(i)).coord = scores[i];\r
+ }\r
+\r
+ rc.img = null;\r
+ rc.rotmat.setIdentity();\r
+ rc.initAxes();\r
+ rc.paint(rc.getGraphics());\r
+ }\r
+\r
+ protected void xCombobox_actionPerformed(ActionEvent e)\r
+ {\r
+ doDimensionChange();\r
+ }\r
+\r
+ protected void yCombobox_actionPerformed(ActionEvent e)\r
+ {\r
+ doDimensionChange();\r
+ }\r
+\r
+ protected void zCombobox_actionPerformed(ActionEvent e)\r
+ {\r
+ doDimensionChange();\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+import java.awt.*;\r
+import java.util.*;\r
+\r
+public class PaintRefresher\r
+{\r
+ static Vector components = new Vector();\r
+\r
+ public static void Register(Component c)\r
+ {\r
+ if(!components.contains(c))\r
+ components.addElement(c);\r
+ else\r
+ components.removeElement(c);\r
+ }\r
+\r
+ public static void Refresh(Component c)\r
+ {\r
+ Component temp;\r
+ Enumeration e = components.elements();\r
+ while( e.hasMoreElements() )\r
+ {\r
+ temp = (Component)e.nextElement();\r
+\r
+ if(!temp.isValid())\r
+ components.removeElement( temp );\r
+ else if( temp == c )\r
+ continue;\r
+\r
+ temp.repaint();\r
+ }\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import jalview.jbappletgui.GPairwiseAlignPanel;\r
+import jalview.analysis.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class PairwiseAlignPanel extends GPairwiseAlignPanel\r
+{\r
+ Vector sequences = new Vector();\r
+ AlignViewport av;\r
+\r
+ public PairwiseAlignPanel(AlignViewport av)\r
+ {\r
+ super();\r
+ this.av = av;\r
+ float scores[][] = new float[av.getAlignment().getHeight()][av.getAlignment().getHeight()];\r
+ double totscore = 0;\r
+ int count = av.getSelectionGroup().getSize();\r
+\r
+ int acount = 0;\r
+ for (int i = 1; i < count; i++)\r
+ {\r
+ for (int j = 0; j < i; j++)\r
+ {\r
+ acount++;\r
+ AlignSeq as = new AlignSeq(av.getSelectionGroup().getSequenceAt(i),\r
+ av.getSelectionGroup().getSequenceAt(j),"pep");\r
+\r
+ as.calcScoreMatrix();\r
+ as.traceAlignment();\r
+ as.printAlignment();\r
+ scores[i][j] = (float)as.getMaxScore()/(float)as.getASeq1().length;\r
+ totscore = totscore + scores[i][j];\r
+\r
+ textarea.append(as.getOutput());\r
+ sequences.addElement( new Sequence( as.getS1().getName(), as.getAStr1()) );\r
+ sequences.addElement( new Sequence( as.getS2().getName(), as.getAStr2()) );\r
+\r
+\r
+ }\r
+ }\r
+\r
+ if (count > 2)\r
+ {\r
+ for (int i = 0; i < count;i++)\r
+ for (int j = 0; j < i; j++)\r
+ jalview.util.Format.print(System.out,"%7.3f",scores[i][j]/totscore);\r
+ }\r
+ }\r
+\r
+\r
+ protected void viewInEditorButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ Sequence [] seq = new Sequence[sequences.size()];\r
+\r
+ for (int i=0;i<sequences.size();i++)\r
+ seq[i] = (Sequence) sequences.elementAt(i);\r
+\r
+\r
+ AlignFrame af = new AlignFrame(new Alignment(seq));\r
+ jalview.bin.JalviewLite.addFrame(af, "Pairwise Aligned Sequences",\r
+ AlignFrame.NEW_WINDOW_WIDTH,\r
+ AlignFrame.NEW_WINDOW_HEIGHT);\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.*;\r
+import jalview.datamodel.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+public class RedundancyPanel extends GSliderPanel\r
+{\r
+ AlignmentPanel ap;\r
+\r
+ SequenceI[] oldAlignment;\r
+\r
+\r
+ public RedundancyPanel(AlignmentPanel ap)\r
+ {\r
+ this.ap = ap;\r
+\r
+ label.setText("Enter the redundancy threshold");\r
+\r
+ slider.addAdjustmentListener(new AdjustmentListener()\r
+ {\r
+ public void adjustmentValueChanged(AdjustmentEvent evt)\r
+ {\r
+ valueField.setText( slider.getValue()+"" );\r
+ }\r
+ });\r
+\r
+ slider.setMinimum(0);\r
+ slider.setMaximum(100);\r
+ slider.setValue(100 );\r
+\r
+ }\r
+\r
+ public void applyButton_actionPerformed(ActionEvent e)\r
+ {\r
+ float threshold = slider.getValue();\r
+ Vector del;\r
+\r
+ oldAlignment = new SequenceI[ap.av.alignment.getHeight()];\r
+ for (int i = 0; i < ap.av.alignment.getHeight(); i++)\r
+ {\r
+ oldAlignment[i] = new Sequence(ap.av.alignment.getSequenceAt(i).getName(),\r
+ ap.av.alignment.getSequenceAt(i).\r
+ getSequence());\r
+ }\r
+\r
+ undoButton.setEnabled(true);\r
+\r
+ SequenceGroup sg = ap.av.getSelectionGroup();\r
+ if (sg != null && sg.getSize() > 1)\r
+ {\r
+\r
+ del = ap.av.alignment.removeRedundancy(threshold, sg.sequences);\r
+ for (int i = 0; i < del.size(); i++)\r
+ if (sg.sequences.contains( (SequenceI) del.elementAt(i)))\r
+ sg.deleteSequence( (SequenceI) del.elementAt(i));\r
+\r
+ }\r
+ else\r
+ {\r
+ Vector s = new Vector();\r
+ int i=0;\r
+ while(i < ap.av.alignment.getHeight())\r
+ {\r
+ s.addElement( ap.av.alignment.getSequenceAt(i) );\r
+ i++;\r
+ }\r
+ del = ap.av.alignment.removeRedundancy(threshold,s);\r
+ for (int j=0; j < del.size(); j++)\r
+ {\r
+ if (sg.sequences.contains((SequenceI)del.elementAt(j)))\r
+ sg.deleteSequence((SequenceI)del.elementAt(j));\r
+\r
+ }\r
+ }\r
+\r
+ ap.repaint();\r
+\r
+ }\r
+\r
+ public void undoButton_actionPerformed(ActionEvent e)\r
+ {\r
+ undoButton.setEnabled(false);\r
+ ap.av.setAlignment( new Alignment(oldAlignment) );\r
+ oldAlignment = null;\r
+ ap.repaint();\r
+ }\r
+\r
+\r
+ public void valueField_actionPerformed(ActionEvent e)\r
+ {\r
+ try{\r
+ int i = Integer.parseInt(valueField.getText());\r
+ slider.setValue(i);\r
+ }\r
+ catch(Exception ex)\r
+ {\r
+ valueField.setText( slider.getValue()+"" );\r
+ }\r
+ }\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.math.*;\r
+import jalview.datamodel.*;\r
+import jalview.util.*;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class RotatableCanvas extends Panel implements MouseListener,\r
+ MouseMotionListener,\r
+ KeyListener\r
+ //RubberbandListener,\r
+ //SequenceSelectionListener\r
+{\r
+ RotatableMatrix idmat = new RotatableMatrix(3,3);\r
+ RotatableMatrix objmat = new RotatableMatrix(3,3);\r
+ RotatableMatrix rotmat = new RotatableMatrix(3,3);\r
+\r
+ //RubberbandRectangle rubberband;\r
+\r
+ boolean drawAxes = true;\r
+\r
+ int omx = 0;\r
+ int mx = 0;\r
+ int omy = 0;\r
+ int my = 0;\r
+\r
+ Image img;\r
+ Graphics ig;\r
+\r
+ Dimension prefsize;\r
+\r
+ float centre[] = new float[3];\r
+ float width[] = new float[3];\r
+\r
+ float max[] = new float[3];\r
+ float min[] = new float[3];\r
+\r
+ float maxwidth;\r
+ float scale;\r
+\r
+ int npoint;\r
+\r
+ Vector points;\r
+ float[][] orig;\r
+ float[][] axes;\r
+\r
+ int startx;\r
+ int starty;\r
+\r
+ int lastx;\r
+ int lasty;\r
+\r
+ int rectx1;\r
+ int recty1;\r
+ int rectx2;\r
+ int recty2;\r
+\r
+ float scalefactor = 1;\r
+\r
+ AlignViewport av;\r
+// Controller controller;\r
+\r
+\r
+ public RotatableCanvas(AlignViewport av,\r
+ Vector points, int npoint) {\r
+ this.points = points;\r
+ this.npoint = npoint;\r
+ this.av = av;\r
+ PaintRefresher.Register(this);\r
+//\r
+ prefsize = getPreferredSize();\r
+ orig = new float[npoint][3];\r
+\r
+ for (int i=0; i < npoint; i++) {\r
+ SequencePoint sp = (SequencePoint)points.elementAt(i);\r
+ for (int j=0; j < 3; j++) {\r
+ orig[i][j] = sp.coord[j];\r
+ }\r
+ }\r
+ //Initialize the matrices to identity\r
+\r
+ for (int i = 0; i < 3; i++) {\r
+ for (int j = 0; j < 3 ; j++) {\r
+ if (i != j) {\r
+ idmat.addElement(i,j,0);\r
+ objmat.addElement(i,j,0);\r
+ rotmat.addElement(i,j,0);\r
+ } else {\r
+ idmat.addElement(i,j,0);\r
+ objmat.addElement(i,j,0);\r
+ rotmat.addElement(i,j,0);\r
+ }\r
+ }\r
+ }\r
+\r
+ axes = new float[3][3];\r
+ initAxes();\r
+\r
+ findCentre();\r
+ findWidth();\r
+\r
+ scale = findScale();\r
+\r
+ // System.out.println("Scale factor = " + scale);\r
+\r
+ addMouseListener(this);\r
+ addKeyListener(this);\r
+ // if (getParent() != null) {\r
+ // getParent().addKeyListener(this);\r
+ //}\r
+ addMouseMotionListener(this);\r
+\r
+ // Add rubberband\r
+ // rubberband = new RubberbandRectangle(this);\r
+ // rubberband.setActive(true);\r
+ // rubberband.addListener(this);\r
+ }\r
+\r
+ /* public boolean handleSequenceSelectionEvent(SequenceSelectionEvent evt) {\r
+ redrawneeded = true;\r
+ repaint();\r
+ return true;\r
+ }\r
+\r
+ public void removeNotify() {\r
+ controller.removeListener(this);\r
+ super.removeNotify();\r
+ }*/\r
+\r
+ public void initAxes() {\r
+ for (int i = 0; i < 3; i++) {\r
+ for (int j=0; j < 3; j++) {\r
+ if (i != j) {\r
+ axes[i][j] = 0;\r
+ } else {\r
+ axes[i][j] = 1;\r
+ }\r
+ }\r
+ }\r
+ }\r
+\r
+ public void findWidth() {\r
+ max = new float[3];\r
+ min = new float[3];\r
+\r
+ max[0] = (float)-1e30;\r
+ max[1] = (float)-1e30;\r
+ max[2] = (float)-1e30;\r
+\r
+ min[0] = (float)1e30;\r
+ min[1] = (float)1e30;\r
+ min[2] = (float)1e30;\r
+\r
+ for (int i = 0; i < 3; i++) {\r
+ for (int j = 0; j < npoint; j++) {\r
+ SequencePoint sp = (SequencePoint)points.elementAt(j);\r
+ if (sp.coord[i] >= max[i]) {\r
+ max[i] = sp.coord[i];\r
+ }\r
+ if (sp.coord[i] <= min[i]) {\r
+ min[i] = sp.coord[i];\r
+ }\r
+ }\r
+ }\r
+\r
+ // System.out.println("xmax " + max[0] + " min " + min[0]);\r
+ //System.out.println("ymax " + max[1] + " min " + min[1]);\r
+ //System.out.println("zmax " + max[2] + " min " + min[2]);\r
+\r
+ width[0] = Math.abs(max[0] - min[0]);\r
+ width[1] = Math.abs(max[1] - min[1]);\r
+ width[2] = Math.abs(max[2] - min[2]);\r
+\r
+ maxwidth = width[0];\r
+\r
+ if (width[1] > width[0])\r
+ maxwidth = width[1];\r
+ if (width[2] > width[1])\r
+ maxwidth = width[2];\r
+\r
+ //System.out.println("Maxwidth = " + maxwidth);\r
+ }\r
+\r
+ public float findScale() {\r
+ int dim, width, height;\r
+ if (getSize().width != 0) {\r
+ width = getSize().width;\r
+ height = getSize().height;\r
+ } else {\r
+ width = prefsize.width;\r
+ height = prefsize.height;\r
+ }\r
+\r
+ if (width < height) {\r
+ dim = width;\r
+ } else {\r
+ dim = height;\r
+ }\r
+\r
+ return (float)(dim*scalefactor/(2*maxwidth));\r
+ }\r
+\r
+ public void findCentre() {\r
+ //Find centre coordinate\r
+ findWidth();\r
+\r
+ centre[0] = (max[0] + min[0])/2;\r
+ centre[1] = (max[1] + min[1])/2;\r
+ centre[2] = (max[2] + min[2])/2;\r
+\r
+ // System.out.println("Centre x " + centre[0]);\r
+ //System.out.println("Centre y " + centre[1]);\r
+ //System.out.println("Centre z " + centre[2]);\r
+ }\r
+\r
+ public Dimension getPreferredSize() {\r
+ if (prefsize != null) {\r
+ return prefsize;\r
+ } else {\r
+ return new Dimension(400,400);\r
+ }\r
+ }\r
+\r
+ public Dimension getMinimumSize() {\r
+ return getPreferredSize();\r
+ }\r
+\r
+ public void paint(Graphics g) {\r
+ //Only create the image at the beginning -\r
+ if ((img == null) || (prefsize.width != getSize().width) || (prefsize.height != getSize().height)) {\r
+ prefsize.width = getSize().width;\r
+ prefsize.height = getSize().height;\r
+\r
+ scale = findScale();\r
+\r
+ // System.out.println("New scale = " + scale);\r
+ img = createImage(getSize().width,getSize().height);\r
+ ig = img.getGraphics();\r
+\r
+ }\r
+\r
+\r
+ drawBackground(ig,Color.black);\r
+ drawScene(ig);\r
+ if (drawAxes == true)\r
+ {\r
+ drawAxes(ig);\r
+ }\r
+\r
+\r
+ g.drawImage(img,0,0,this);\r
+ }\r
+\r
+ public void drawAxes(Graphics g) {\r
+\r
+ g.setColor(Color.yellow);\r
+ for (int i=0; i < 3 ; i++) {\r
+ g.drawLine(getSize().width/2,getSize().height/2,\r
+ (int)(axes[i][0]*scale*max[0] + getSize().width/2),\r
+ (int)(axes[i][1]*scale*max[1] + getSize().height/2));\r
+ }\r
+ }\r
+\r
+ public void drawBackground(Graphics g, Color col) {\r
+ g.setColor(col);\r
+ g.fillRect(0,0,prefsize.width,prefsize.height);\r
+ }\r
+\r
+\r
+ public void drawScene(Graphics g) {\r
+ boolean darker = false;\r
+\r
+ int halfwidth = getSize().width/2;\r
+ int halfheight = getSize().height/2;\r
+\r
+ for (int i = 0; i < npoint; i++) {\r
+ SequencePoint sp = (SequencePoint)points.elementAt(i);\r
+ int x = (int)((float)(sp.coord[0] - centre[0])*scale) + halfwidth;\r
+ int y = (int)((float)(sp.coord[1] - centre[1])*scale) + halfheight;\r
+ float z = sp.coord[1] - centre[2];\r
+\r
+\r
+\r
+\r
+ if (sp.sequence.getColor() == Color.black)\r
+ g.setColor(Color.white);\r
+ else\r
+ g.setColor(sp.sequence.getColor());\r
+\r
+\r
+ if (av.getSelectionGroup() != null)\r
+ {\r
+ if (av.getSelectionGroup().sequences.contains(((SequencePoint)points.elementAt(i)).sequence))\r
+ g.setColor(Color.gray);\r
+ }\r
+ if (z < 0)\r
+ g.setColor(g.getColor().darker());\r
+\r
+\r
+ g.fillRect(x-3,y-3,6,6);\r
+ g.setColor(Color.red);\r
+ }\r
+// //Now the rectangle\r
+// if (rectx2 != -1 && recty2 != -1) {\r
+// g.setColor(Color.white);\r
+//\r
+// g.drawRect(rectx1,recty1,rectx2-rectx1,recty2-recty1);\r
+// }\r
+ }\r
+\r
+ public Dimension minimumsize() {\r
+ return prefsize;\r
+ }\r
+\r
+ public Dimension preferredsize() {\r
+ return prefsize;\r
+ }\r
+\r
+ public void keyTyped(KeyEvent evt) { }\r
+ public void keyReleased(KeyEvent evt) { }\r
+\r
+ public void keyPressed(KeyEvent evt) {\r
+ requestFocus();\r
+ if (evt.getKeyCode() == KeyEvent.VK_UP) {\r
+ scalefactor = (float)(scalefactor * 1.1);\r
+ scale = findScale();\r
+ } else if (evt.getKeyCode() == KeyEvent.VK_DOWN) {\r
+ scalefactor = (float)(scalefactor * 0.9);\r
+ scale = findScale();\r
+ } else if (evt.getKeyChar() == 's') {\r
+ System.out.println("Rectangle selection");\r
+ if (rectx2 != -1 && recty2 != -1) {\r
+ rectSelect(rectx1,recty1,rectx2,recty2);\r
+\r
+ }\r
+ }\r
+ repaint();\r
+ }\r
+\r
+ public void printPoints() {\r
+ for (int i=0; i < npoint; i++) {\r
+ SequencePoint sp = (SequencePoint)points.elementAt(i);\r
+ Format.print(System.out,"%5d ", i);\r
+ for (int j=0; j < 3;j++) {\r
+ Format.print(System.out,"%13.3f ",sp.coord[j]);\r
+ }\r
+ System.out.println();\r
+ }\r
+ }\r
+\r
+ public void mouseClicked(MouseEvent evt) { }\r
+ public void mouseEntered(MouseEvent evt) { }\r
+ public void mouseExited(MouseEvent evt) { }\r
+ public void mouseReleased(MouseEvent evt) { }\r
+\r
+ public void mousePressed(MouseEvent evt) {\r
+ int x = evt.getX();\r
+ int y = evt.getY();\r
+\r
+ mx = x;\r
+ my = y;\r
+\r
+ omx = mx;\r
+ omy = my;\r
+\r
+ startx = x;\r
+ starty = y;\r
+\r
+ rectx1 = x;\r
+ recty1 = y;\r
+\r
+ rectx2 = -1;\r
+ recty2 = -1;\r
+\r
+ SequenceI found = findPoint(x,y);\r
+\r
+ if (found != null)\r
+ {\r
+ if (av.getSelectionGroup() != null)\r
+ {\r
+ av.getSelectionGroup().addOrRemove(found);\r
+ PaintRefresher.Refresh(this);\r
+ }\r
+ else\r
+ {\r
+ av.setSelectionGroup(new SequenceGroup());\r
+ av.getSelectionGroup().addOrRemove(found);\r
+ av.getSelectionGroup().setEndRes(av.alignment.getWidth());\r
+\r
+ }\r
+ }\r
+ repaint();\r
+ }\r
+\r
+ // private void fireSequenceSelectionEvent(Selection sel) {\r
+ // controller.handleSequenceSelectionEvent(new SequenceSelectionEvent(this,sel));\r
+ //}\r
+\r
+ public void mouseMoved(MouseEvent evt)\r
+ {\r
+ // SequenceI found = findPoint(evt.getX(), evt.getY());\r
+ }\r
+\r
+ public void mouseDragged(MouseEvent evt) {\r
+ mx = evt.getX();\r
+ my = evt.getY();\r
+ //Check if this is a rectangle drawing drag\r
+ if ((evt.getModifiers() & InputEvent.BUTTON2_MASK) != 0) {\r
+// rectx2 = evt.getX();\r
+// recty2 = evt.getY();\r
+ } else {\r
+ rotmat.setIdentity();\r
+\r
+ rotmat.rotate((float)(my-omy),'x');\r
+ rotmat.rotate((float)(mx-omx),'y');\r
+\r
+ for (int i = 0; i < npoint; i++) {\r
+ SequencePoint sp = (SequencePoint)points.elementAt(i);\r
+ sp.coord[0] -= centre[0];\r
+ sp.coord[1] -= centre[1];\r
+ sp.coord[2] -= centre[2];\r
+\r
+ //Now apply the rotation matrix\r
+ sp.coord= rotmat.vectorMultiply(sp.coord);\r
+\r
+ //Now translate back again\r
+ sp.coord[0] += centre[0];\r
+ sp.coord[1] += centre[1];\r
+ sp.coord[2] += centre[2];\r
+ }\r
+\r
+ for (int i=0; i < 3; i++) {\r
+ axes[i] = rotmat.vectorMultiply(axes[i]);\r
+ }\r
+ omx = mx;\r
+ omy = my;\r
+\r
+ paint(this.getGraphics());\r
+ }\r
+\r
+ }\r
+\r
+ public void rectSelect(int x1, int y1, int x2, int y2) {\r
+ boolean changedSel = false;\r
+ for (int i=0; i < npoint; i++) {\r
+ SequencePoint sp = (SequencePoint)points.elementAt(i);\r
+ int tmp1 = (int)((sp.coord[0] - centre[0])*scale + (float)getSize().width/2.0);\r
+ int tmp2 = (int)((sp.coord[1] - centre[1])*scale + (float)getSize().height/2.0);\r
+\r
+ if (tmp1 > x1 && tmp1 < x2 && tmp2 > y1 && tmp2 < y2) {\r
+ if (av != null) {\r
+ if (!av.getSelectionGroup().sequences.contains(sp.sequence))\r
+ {\r
+ changedSel = true;\r
+ av.getSelectionGroup().addSequence(sp.sequence);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ // if (changedSel) {\r
+ // fireSequenceSelectionEvent(av.getSelection());\r
+ // }\r
+ }\r
+ public SequenceI findPoint(int x, int y) {\r
+\r
+ int halfwidth = getSize().width/2;\r
+ int halfheight = getSize().height/2;\r
+\r
+ int found = -1;\r
+\r
+ for (int i=0; i < npoint; i++) {\r
+\r
+ SequencePoint sp = (SequencePoint)points.elementAt(i);\r
+ int px = (int)((float)(sp.coord[0] - centre[0])*scale) + halfwidth;\r
+ int py = (int)((float)(sp.coord[1] - centre[1])*scale) + halfheight;\r
+\r
+\r
+ if (Math.abs(px-x)<3 && Math.abs(py - y) < 3 ) {\r
+ found = i;\r
+ }\r
+ }\r
+ if (found != -1) {\r
+ return ((SequencePoint)points.elementAt(found)).sequence;\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+/* public boolean handleRubberbandEvent(RubberbandEvent evt) {\r
+ System.out.println("Rubberband handler called in RotatableCanvas with " +\r
+ evt.getBounds());\r
+\r
+ Rubberband rb = (Rubberband)evt.getSource();\r
+\r
+ // Clear the current selection (instance variable)\r
+ //if ((rb.getModifiers() & Event.SHIFT_MASK) == 0) {\r
+ // clearSelection();\r
+ //}\r
+\r
+ if (rb.getComponent() == this) {\r
+ Rectangle bounds = evt.getBounds();\r
+ rectSelect(bounds.x,bounds.y,bounds.x+bounds.width,bounds.y+bounds.height);\r
+ }\r
+\r
+ redrawneeded = true;\r
+ paint(this.getGraphics());\r
+\r
+ return true;\r
+ }*/\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class ScalePanel extends Panel\r
+{\r
+\r
+ protected int offy = 4;\r
+ public int width;\r
+\r
+ protected AlignViewport av;\r
+ AlignmentPanel ap;\r
+\r
+ boolean stretchingGroup = false;\r
+\r
+ public ScalePanel(AlignViewport av, AlignmentPanel ap)\r
+ {\r
+ setLayout(null);\r
+ this.av = av;\r
+ this.ap = ap;\r
+\r
+ addMouseListener(new MouseAdapter()\r
+ {\r
+ public void mousePressed(MouseEvent evt)\r
+ {\r
+ doMousePressed(evt);\r
+ }\r
+ public void mouseReleased(MouseEvent evt)\r
+ {\r
+ doMouseReleased(evt);\r
+ }\r
+\r
+ });\r
+ addMouseMotionListener(new MouseMotionAdapter()\r
+ {\r
+ public void mouseDragged(MouseEvent evt)\r
+ {\r
+ doMouseDragged(evt);\r
+ }\r
+ });\r
+\r
+ }\r
+\r
+\r
+ public void doMousePressed(MouseEvent evt) {\r
+ int x = evt.getX();\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
+ SequenceGroup sg = null;\r
+\r
+ if (av.getColumnSelection().contains(res))\r
+ av.getColumnSelection().removeElement(res);\r
+ else\r
+ {\r
+ av.getColumnSelection().addElement(res);\r
+\r
+ sg = new SequenceGroup();\r
+ for (int i = 0; i < av.alignment.getSequences().size(); i++)\r
+ sg.addSequence(av.alignment.getSequenceAt(i));\r
+\r
+ sg.setStartRes(res);\r
+ sg.setEndRes(res);\r
+\r
+ ap.annotationPanel.addEditableColumn(res);\r
+ }\r
+ av.setSelectionGroup(sg);\r
+ ap.repaint();\r
+ }\r
+\r
+ public void doMouseReleased(MouseEvent evt)\r
+ {\r
+ if(!stretchingGroup)\r
+ return;\r
+\r
+ int x = evt.getX();\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
+\r
+ if (! av.getColumnSelection().contains(res))\r
+ av.getColumnSelection().addElement(res);\r
+\r
+ SequenceGroup sg = av.getSelectionGroup();\r
+\r
+ if(res>sg.getStartRes())\r
+ sg.setEndRes(res);\r
+ else if(res<sg.getStartRes())\r
+ sg.setStartRes(res);\r
+\r
+ stretchingGroup = false;\r
+ ap.repaint();\r
+ }\r
+\r
+ public void doMouseDragged(MouseEvent evt)\r
+ {\r
+ int x = evt.getX();\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
+\r
+ SequenceGroup sg = av.getSelectionGroup();\r
+ if(sg!=null)\r
+ {\r
+ stretchingGroup = true;\r
+ if (res > sg.getStartRes())\r
+ sg.setEndRes(res);\r
+ else if (res < sg.getStartRes())\r
+ sg.setStartRes(res);\r
+\r
+ ap.annotationPanel.addEditableColumn(res);\r
+ ap.repaint();\r
+ }\r
+ }\r
+\r
+ public void update(Graphics g)\r
+ {\r
+ paint(g);\r
+ }\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ drawScale(g, av.getStartRes(), av.getEndRes(), getSize().width, getSize().height);\r
+ }\r
+\r
+// scalewidth will normally be screenwidth,\r
+ public void drawScale(Graphics gg, int startx, int endx, int width, int height)\r
+ {\r
+ gg.setFont(av.getFont());\r
+\r
+ //Fill in the background\r
+ gg.setColor(Color.white);\r
+ gg.fillRect(0,0,width, height);\r
+ gg.setColor(Color.black);\r
+\r
+\r
+ //Fill the selected columns\r
+ ColumnSelection cs = av.getColumnSelection();\r
+ gg.setColor(new Color(220,0,0));\r
+ for (int i=0; i<cs.size(); i++)\r
+ {\r
+ int sel = cs.columnAt(i);\r
+ if ( sel >= startx && sel <= endx)\r
+ gg.fillRect((sel-startx)*av.charWidth,0,av.charWidth, getSize().height);\r
+ }\r
+\r
+\r
+ // Draw the scale numbers\r
+ gg.setColor(Color.black);\r
+ int scalestartx = (startx/10) * 10;\r
+\r
+ FontMetrics fm = gg.getFontMetrics(av.getFont());\r
+ int y = av.charHeight -fm.getDescent();\r
+\r
+ if(scalestartx%10==0)\r
+ scalestartx+=5;\r
+\r
+ for (int i=scalestartx;i < endx; i+= 5)\r
+ {\r
+ if(i%10==0)\r
+ {\r
+ gg.drawString(String.valueOf(i), (i - startx - 1) * av.charWidth, y);\r
+ gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
+ y+2,\r
+ (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
+ y+fm.getDescent()*2);\r
+ }\r
+ else\r
+ gg.drawLine( (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
+ y+fm.getDescent(),\r
+ (int) ( (i - startx - 1) * av.charWidth + av.charWidth / 2),\r
+ y+fm.getDescent()*2);\r
+\r
+\r
+ }\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.*;\r
+import jalview.datamodel.*;\r
+import jalview.analysis.*;\r
+\r
+\r
+public class SeqCanvas extends Panel\r
+{\r
+ FeatureRenderer fr;\r
+ SequenceRenderer sr;\r
+ Image img;\r
+ Graphics gg;\r
+ int imgWidth;\r
+ int imgHeight;\r
+\r
+ AlignViewport av;\r
+\r
+ boolean showScores = false;\r
+ boolean displaySearch = false;\r
+ int [] searchResults = null;\r
+\r
+ int chunkHeight;\r
+ int chunkWidth;\r
+\r
+ boolean fastPaint = false;\r
+\r
+\r
+ public SeqCanvas(AlignViewport av)\r
+ {\r
+ this.av = av;\r
+ fr = new FeatureRenderer(av);\r
+ sr = new SequenceRenderer(av);\r
+ PaintRefresher.Register(this);\r
+\r
+ }\r
+\r
+ void drawNorthScale(Graphics g, int startx, int endx,int ypos) {\r
+ int scalestartx = startx - startx % 10 + 10;\r
+\r
+ g.setColor(Color.black);\r
+\r
+ // NORTH SCALE\r
+ for (int i = scalestartx; i < endx; i += 10)\r
+ {\r
+ String string = String.valueOf(i);\r
+ g.drawString(string, (i - startx - 1) * av.charWidth,\r
+ ypos - av.charHeight / 2);\r
+\r
+ g.drawLine( (i - startx - 1) * av.charWidth + av.charWidth / 2,\r
+ ypos + 2 - av.charHeight / 2,\r
+ (i - startx - 1) * av.charWidth + av.charWidth / 2, ypos - 2);\r
+\r
+ }\r
+ }\r
+\r
+ void drawWestScale(Graphics g, int startx, int endx, int ypos)\r
+ {\r
+ FontMetrics fm = getFontMetrics(av.getFont());\r
+ ypos+= av.charHeight;\r
+ // EAST SCALE\r
+ for (int i = 0; i < av.alignment.getHeight(); i++)\r
+ {\r
+ SequenceI seq = av.alignment.getSequenceAt(i);\r
+ int index = startx;\r
+ int value = -1;\r
+ while (index < endx)\r
+ {\r
+ if (jalview.util.Comparison.isGap(seq.getCharAt(index)))\r
+ {\r
+ index++;\r
+ continue;\r
+ }\r
+\r
+ value = av.alignment.getSequenceAt(i).findPosition(index);\r
+ break;\r
+ }\r
+ if(value!=-1)\r
+ {\r
+ int x = LABEL_WEST - fm.stringWidth(value+"");\r
+ g.drawString(value + "", x, ypos + i*av.charHeight - av.charHeight/5);\r
+ }\r
+ }\r
+ }\r
+\r
+ void drawEastScale(Graphics g, int startx, int endx, int ypos)\r
+{\r
+ ypos+= av.charHeight;\r
+ // EAST SCALE\r
+ for (int i = 0; i < av.alignment.getHeight(); i++)\r
+ {\r
+ SequenceI seq = av.alignment.getSequenceAt(i);\r
+ int index = endx;\r
+ int value = -1;\r
+ while (index > startx)\r
+ {\r
+ if (jalview.util.Comparison.isGap(seq.getCharAt(index)))\r
+ {\r
+ index--;\r
+ continue;\r
+ }\r
+\r
+ value = av.alignment.getSequenceAt(i).findPosition(index);\r
+ break;\r
+ }\r
+ if(value!=-1)\r
+ g.drawString(value + "", 0, ypos + i*av.charHeight - av.charHeight/5);\r
+ }\r
+\r
+}\r
+\r
+\r
+\r
+public void fastPaint(int horizontal, int vertical)\r
+{\r
+ if (horizontal == 0 && vertical == 0 || gg==null)\r
+ return;\r
+\r
+ gg.copyArea(0, 0, imgWidth, imgHeight, -horizontal * av.charWidth,\r
+ -vertical * av.charHeight);\r
+\r
+ int sr = av.startRes, er = av.endRes, ss = av.startSeq, es = av.endSeq,\r
+ transX = 0, transY = 0;\r
+ if (horizontal > 0) // scrollbar pulled right, image to the left\r
+ {\r
+ transX = (er - sr - horizontal) * av.charWidth;\r
+ sr = er - horizontal;\r
+ }\r
+ else if (horizontal < 0)\r
+ er = sr - horizontal;\r
+\r
+ else if (vertical > 0) // scroll down\r
+ {\r
+ ss = es - vertical;\r
+ if(ss<av.startSeq) // ie scrolling too fast, more than a page at a time\r
+ ss = av.startSeq;\r
+ else\r
+ transY = imgHeight - vertical * av.charHeight;\r
+ }\r
+ else if (vertical < 0)\r
+ {\r
+ es = ss - vertical;\r
+ if(es > av.endSeq)\r
+ es = av.endSeq;\r
+ }\r
+\r
+\r
+ gg.translate(transX, transY);\r
+\r
+ gg.setColor(Color.white);\r
+ gg.fillRect(0,0, (er-sr)*av.charWidth, (es-ss)*av.charHeight);\r
+ drawPanel(gg, sr, er, ss, es, sr, ss, 0);\r
+ gg.translate( -transX, -transY);\r
+\r
+ fastPaint = true;\r
+ repaint();\r
+\r
+}\r
+\r
+/**\r
+ * Definitions of startx and endx (hopefully):\r
+ * SMJS This is what I'm working towards!\r
+ * startx is the first residue (starting at 0) to display.\r
+ * endx is the last residue to display (starting at 0).\r
+ * starty is the first sequence to display (starting at 0).\r
+ * endy is the last sequence to display (starting at 0).\r
+ * NOTE 1: The av limits are set in setFont in this class and\r
+ * in the adjustment listener in SeqPanel when the scrollbars move.\r
+ */\r
+ public void update(Graphics g)\r
+ {\r
+ paint(g);\r
+ }\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ if (fastPaint)\r
+ {\r
+ g.drawImage(img, 0, 0, this);\r
+ fastPaint = false;\r
+ return;\r
+ }\r
+\r
+ // this draws the whole of the alignment\r
+ imgWidth = this.getSize().width;\r
+ imgHeight = this.getSize().height;\r
+ if(imgWidth<1 || imgHeight<1)\r
+ return;\r
+\r
+ imgWidth -= imgWidth%av.charWidth;\r
+ imgHeight-= imgHeight%av.charHeight;\r
+\r
+ if(img==null || imgWidth!=img.getWidth(this) || imgHeight!=img.getHeight(this))\r
+ {\r
+ img = createImage(imgWidth, imgHeight);\r
+ gg = img.getGraphics();\r
+ gg.setFont(av.getFont());\r
+ }\r
+\r
+ gg.setColor(Color.white);\r
+ gg.fillRect(0,0,imgWidth,imgHeight);\r
+\r
+ chunkWidth = getWrappedCanvasWidth( getSize().width );\r
+ chunkHeight = (av.getAlignment().getHeight() + 2)*av.charHeight;\r
+\r
+ av.setChunkHeight(chunkHeight);\r
+ av.setChunkWidth(chunkWidth);\r
+\r
+\r
+ if (av.getWrapAlignment())\r
+ drawWrappedPanel(gg, getSize().width, getSize().height, av.startRes);\r
+ else\r
+ drawPanel(gg, av.startRes, av.endRes, av.startSeq, av.endSeq, av.startRes, av.startSeq, 0);\r
+\r
+ g.drawImage(img, 0, 0, this);\r
+\r
+ }\r
+\r
+ int LABEL_WEST, LABEL_EAST;\r
+ public int getWrappedCanvasWidth(int cwidth)\r
+ {\r
+ FontMetrics fm = getFontMetrics(av.getFont());\r
+\r
+ LABEL_EAST = 0;\r
+ LABEL_WEST = 0;\r
+\r
+ if(av.scaleRightWrapped)\r
+ LABEL_EAST = fm.stringWidth( av.alignment.getWidth()+"000" );\r
+\r
+ if(av.scaleLeftWrapped)\r
+ LABEL_WEST = fm.stringWidth( av.alignment.getWidth()+"" );\r
+\r
+ return (cwidth - LABEL_EAST -LABEL_WEST)/av.charWidth;\r
+ }\r
+\r
+ public void drawWrappedPanel(Graphics g, int canvasWidth, int canvasHeight, int startRes)\r
+ {\r
+ AlignmentI al = av.getAlignment();\r
+\r
+ FontMetrics fm = getFontMetrics(av.getFont());\r
+\r
+ int LABEL_EAST = 0;\r
+ if(av.scaleRightWrapped)\r
+ LABEL_EAST = fm.stringWidth( al.getWidth()+"000" );\r
+ int LABEL_WEST = 0;\r
+ if(av.scaleLeftWrapped)\r
+ LABEL_WEST = fm.stringWidth(al.getWidth()+"0");\r
+\r
+\r
+ int cWidth = (canvasWidth - LABEL_EAST -LABEL_WEST)/av.charWidth;\r
+ int cHeight = (av.getAlignment().getHeight() + 2)*av.charHeight;\r
+\r
+ int endx = startRes+cWidth-1;\r
+ int ypos = 2*av.charHeight;\r
+\r
+ while (ypos <= canvasHeight && startRes<av.alignment.getWidth() )\r
+ {\r
+ g.setColor(Color.black);\r
+\r
+ if(av.scaleLeftWrapped)\r
+ drawWestScale(g, startRes, endx, ypos);\r
+\r
+ if(av.scaleRightWrapped)\r
+ {\r
+ g.translate(canvasWidth - LABEL_EAST +av.charWidth, 0);\r
+ drawEastScale(g, startRes, endx, ypos);\r
+ g.translate( - (canvasWidth - LABEL_EAST+av.charWidth), 0);\r
+ }\r
+\r
+ g.translate(LABEL_WEST,0);\r
+ if(av.scaleAboveWrapped)\r
+ drawNorthScale(g, startRes, endx, ypos);\r
+\r
+\r
+ // When printing we have an extra clipped region,\r
+ // the Printable page which we need to account for here\r
+ Shape clip = g.getClip();\r
+ if(clip==null)\r
+ g.setClip(0, 0, cWidth*av.charWidth, canvasHeight);\r
+ else\r
+ g.setClip(0,\r
+ (int)clip.getBounds().y,\r
+ cWidth*av.charWidth,\r
+ (int)clip.getBounds().height\r
+ );\r
+\r
+ drawPanel(g, startRes, endx, 0, al.getHeight(), startRes, 0, ypos);\r
+ g.setClip(clip);\r
+ g.translate(-LABEL_WEST,0);\r
+\r
+ ypos += cHeight;\r
+ startRes += cWidth;\r
+ endx = startRes + cWidth - 1;\r
+\r
+ if (endx > al.getWidth())\r
+ endx = al.getWidth();\r
+ }\r
+\r
+ }\r
+\r
+\r
+ synchronized public void drawPanel(Graphics g,int x1,int x2, int y1, int y2,int startx, int starty,int offset) {\r
+\r
+ g.setFont(av.getFont());\r
+ sr.renderGaps(av.renderGaps);\r
+\r
+ SequenceI nextSeq;\r
+\r
+ /// First draw the sequences\r
+ /////////////////////////////\r
+ for (int i = y1 ; i < y2 ;i++)\r
+ {\r
+ nextSeq = av.alignment.getSequenceAt(i);\r
+\r
+ sr.drawSequence(g, nextSeq, av.alignment.findAllGroups( nextSeq ),x1,x2,\r
+ (x1 - startx) * av.charWidth,\r
+ offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight),\r
+ av.charWidth,av.charHeight);\r
+\r
+ if(av.showSequenceFeatures)\r
+ {\r
+ fr.drawSequence(g, nextSeq, av.alignment.findAllGroups( nextSeq ), x1, x2,\r
+ (x1 - startx) * av.charWidth,\r
+ offset +\r
+ AlignmentUtil.getPixelHeight(starty, i, av.charHeight),\r
+ av.charWidth, av.charHeight);\r
+ }\r
+ }\r
+ //\r
+ /////////////////////////////////////\r
+\r
+ // Now outline any areas if necessary\r
+ /////////////////////////////////////\r
+ SequenceGroup group = av.getSelectionGroup();\r
+ java.util.Vector groups = av.alignment.getGroups();\r
+\r
+ int sx = -1, sy = -1, ex = -1;\r
+ int groupIndex = -1;\r
+ if (group == null && groups.size() > 0)\r
+ {\r
+ group = (SequenceGroup) groups.elementAt(0);\r
+ groupIndex = 0;\r
+ }\r
+\r
+ if (group != null)\r
+ do\r
+ {\r
+ int oldY = -1;\r
+ int i = 0;\r
+ boolean inGroup = false;\r
+ int top=-1, bottom =-1;\r
+ for (i = y1; i < y2; i++)\r
+ {\r
+ sx = (group.getStartRes() - startx) * av.charWidth;\r
+ sy = offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight);\r
+ ex = (group.getEndRes() + 1 - group.getStartRes()) * av.charWidth -1;\r
+\r
+ if (sx < getSize().width\r
+ && ex > 0\r
+ && group.sequences.contains(av.alignment.getSequenceAt(i)))\r
+ {\r
+ if (bottom == -1 && (i==av.alignment.getHeight()-1 ||\r
+ !group.sequences.contains(av.alignment.getSequenceAt(i + 1))))\r
+ bottom = sy + av.charHeight ;\r
+\r
+ if (!inGroup)\r
+ {\r
+ if (top == -1 && i==0 ||\r
+ !group.sequences.contains(av.alignment.getSequenceAt(i - 1)))\r
+ top = sy;\r
+\r
+\r
+ oldY = sy;\r
+ inGroup = true;\r
+ if (group == av.getSelectionGroup())\r
+ {\r
+ g.setColor(new Color(255,0,0));\r
+ }\r
+ else\r
+ {\r
+ g.setColor(group.getOutlineColour());\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (inGroup)\r
+ {\r
+ g.drawLine(sx, oldY, sx, sy );\r
+ g.drawLine(sx+ex, oldY, sx+ex, sy );\r
+\r
+ if (top != -1)\r
+ {\r
+ g.drawLine(sx, top, sx + ex, top);\r
+ top =-1;\r
+ }\r
+ if (bottom != -1)\r
+ {\r
+ g.drawLine(sx, bottom, sx + ex, bottom);\r
+ bottom = -1;\r
+ }\r
+\r
+\r
+ inGroup = false;\r
+ }\r
+ }\r
+ }\r
+\r
+ if (inGroup)\r
+ {\r
+\r
+ if(top!=-1)\r
+ {\r
+ g.drawLine(sx, top, sx + ex, top);\r
+ top =-1;\r
+ }\r
+ if(bottom!=-1)\r
+ {\r
+ g.drawLine(sx, bottom-1, sx + ex, bottom-1);\r
+ bottom = -1;\r
+\r
+ }\r
+ sy = offset + AlignmentUtil.getPixelHeight(starty, i, av.charHeight);\r
+ g.drawLine(sx, oldY, sx, sy );\r
+ g.drawLine(sx+ex, oldY, sx+ex, sy );\r
+ inGroup = false;\r
+ }\r
+ groupIndex++;\r
+ if (groupIndex >= groups.size())\r
+ break;\r
+\r
+ group = (SequenceGroup) groups.elementAt(groupIndex);\r
+\r
+ }\r
+ while (groupIndex < groups.size());\r
+\r
+\r
+ /// Highlight search Results once all sequences have been drawn\r
+ //////////////////////////////////////////////////////////\r
+ if(displaySearch)\r
+ {\r
+ for(int r=0; r<searchResults.length; r+=3)\r
+ {\r
+ int searchSeq = searchResults[r];\r
+ int searchStart = searchResults[r+1];\r
+ int searchEnd = searchResults[r+2];\r
+\r
+ if (searchSeq >= y1 && searchSeq < y2)\r
+ {\r
+ SequenceRenderer ssr = (SequenceRenderer) sr;\r
+ if(searchStart<x1)\r
+ searchStart = x1;\r
+ if(searchEnd > x2)\r
+ searchEnd = x2;\r
+ ssr.drawHighlightedText(av.getAlignment().getSequenceAt(searchSeq),\r
+ searchStart,\r
+ searchEnd,\r
+ (searchStart - startx) * av.charWidth,\r
+ offset +\r
+ AlignmentUtil.getPixelHeight(starty, searchSeq,\r
+ av.charHeight),\r
+ av.charWidth,\r
+ av.charHeight);\r
+ }\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+\r
+\r
+ public void highlightSearchResults(int [] results)\r
+ {\r
+ // results are in the order sequence, startRes, endRes\r
+ if(results==null)\r
+ displaySearch = false;\r
+ else\r
+ displaySearch = true;\r
+\r
+ searchResults = results;\r
+\r
+ repaint();\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import jalview.datamodel.*;\r
+import java.util.*;\r
+import jalview.schemes.*;\r
+\r
+\r
+public class SeqPanel extends Panel\r
+{\r
+\r
+ public SeqCanvas seqCanvas;\r
+ public AlignmentPanel ap;\r
+\r
+ protected int startres;\r
+ protected int lastres;\r
+ protected int endres;\r
+\r
+ protected int startseq;\r
+ protected int padseq;\r
+\r
+ protected AlignViewport av;\r
+\r
+ // if character is inserted or deleted, we will need to recalculate the conservation\r
+ int seqEditOccurred = -1;\r
+\r
+ ScrollThread scrollThread = null;\r
+ boolean mouseDragging = false;\r
+\r
+\r
+ public SeqPanel(AlignViewport avp, AlignmentPanel p) {\r
+ this.av = avp;\r
+\r
+ seqCanvas = new SeqCanvas(avp);\r
+ setLayout(new BorderLayout());\r
+ add(seqCanvas);\r
+\r
+ ap = p;\r
+\r
+ seqCanvas.addMouseMotionListener( new MouseMotionAdapter()\r
+ {\r
+ public void mouseMoved(MouseEvent evt)\r
+ {\r
+ if(av.getWrapAlignment())\r
+ return;\r
+ doMouseMoved(evt); }\r
+\r
+ public void mouseDragged(MouseEvent evt)\r
+ {\r
+ if(av.getWrapAlignment())\r
+ return;\r
+ if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown())\r
+ doMouseDragged(evt);\r
+ else\r
+ doMouseDraggedDefineMode(evt);\r
+ }\r
+ });\r
+\r
+ seqCanvas.addMouseListener( new MouseAdapter()\r
+ {\r
+ public void mouseReleased(MouseEvent evt)\r
+ {\r
+ if(av.getWrapAlignment())\r
+ return;\r
+ if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown())\r
+ doMouseReleased(evt);\r
+ else\r
+ doMouseReleasedDefineMode(evt);\r
+ }\r
+ public void mousePressed(MouseEvent evt)\r
+ {\r
+ if(av.getWrapAlignment())\r
+ return;\r
+ if(evt.isShiftDown() || evt.isAltDown() || evt.isControlDown())\r
+ doMousePressed(evt);\r
+ else\r
+ doMousePressedDefineMode(evt);\r
+ }\r
+ public void mouseExited(MouseEvent evt)\r
+ {\r
+ if (av.getWrapAlignment() || evt.isShiftDown() || evt.isAltDown() ||\r
+ evt.isControlDown())\r
+ return;\r
+ doMouseExitedDefineMode(evt);\r
+\r
+ }\r
+ public void mouseEntered(MouseEvent evt)\r
+ {\r
+ if (av.getWrapAlignment() || evt.isShiftDown() || evt.isAltDown() ||\r
+ evt.isControlDown())\r
+ return;\r
+ doMouseEnteredDefineMode(evt);\r
+ }\r
+\r
+ });\r
+ seqCanvas.repaint();\r
+ }\r
+\r
+\r
+ public void doMouseReleased(MouseEvent evt) {\r
+\r
+ int x = evt.getX();\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
+\r
+ endres = res;\r
+\r
+ startseq = -1;\r
+ startres = -1;\r
+ lastres = -1;\r
+ if(seqEditOccurred>-1)\r
+ updateConservation(seqEditOccurred);\r
+\r
+ seqEditOccurred = -1;\r
+\r
+ ap.repaint();\r
+\r
+ }\r
+\r
+ public void doMousePressed(MouseEvent evt) {\r
+ ap.alignFrame.addHistoryItem("sequence edit");\r
+ int seq;\r
+ int res;\r
+\r
+ int x = evt.getX();\r
+ int y = evt.getY();\r
+\r
+ res = x/av.getCharWidth() + av.getStartRes();\r
+ seq = y/av.getCharHeight() + av.getStartSeq();\r
+\r
+ if (seq < av.getAlignment().getHeight() &&\r
+ res < av.getAlignment().getSequenceAt(seq).getLength())\r
+ {\r
+ //char resstr = align.getSequenceAt(seq).getSequence().charAt(res);\r
+ // Find the residue's position in the sequence (res is the position\r
+ // in the alignment\r
+\r
+ startseq = seq;\r
+\r
+ if (startseq == (av.getAlignment().getHeight() - 1))\r
+ padseq = 1;\r
+ else\r
+ padseq = 1;\r
+\r
+ startres = res;\r
+ lastres = res;\r
+\r
+ }\r
+ else\r
+ {\r
+ startseq = -1;\r
+ startres = -1;\r
+ lastres = -1;\r
+ }\r
+\r
+ return;\r
+ }\r
+\r
+ public void doMouseMoved(MouseEvent evt)\r
+ {\r
+ int res=0, seq=0;\r
+ int x = evt.getX();\r
+ int y = evt.getY();\r
+ if(av.wrapAlignment)\r
+ {\r
+ y -= 2*av.charHeight;\r
+ int chunkHeight = (av.getAlignment().getHeight()+2)*av.charHeight;\r
+\r
+\r
+ res = (int)((y/chunkHeight)*(getSize().width/av.charWidth)) + x/av.getCharWidth() + av.getStartRes();\r
+\r
+ y %= chunkHeight;\r
+ seq = y / av.getCharHeight() + av.getStartSeq();\r
+\r
+ }\r
+ else\r
+ {\r
+ res = x / av.getCharWidth() + av.getStartRes();\r
+ seq = y / av.getCharHeight() + av.getStartSeq();\r
+ }\r
+\r
+\r
+ if(seq>=av.getAlignment().getHeight())\r
+ return;\r
+\r
+ SequenceI sequence = av.getAlignment().getSequenceAt(seq);\r
+ if(res>sequence.getLength())\r
+ return;\r
+\r
+ Object obj = ResidueProperties.aa2Triplet.get( sequence.getCharAt(res)+"" ) ;\r
+ String aa = "";\r
+ if(obj!=null)\r
+ aa = obj.toString();\r
+\r
+ StringBuffer text = new StringBuffer("Sequence " +(seq+1)+" ID: "+sequence.getName());\r
+ if(aa!="")\r
+ text.append(" Residue: "+aa+" ("+ av.getAlignment().getSequenceAt(seq).findPosition(res)+")");\r
+\r
+ ap.alignFrame.statusBar.setText(text.toString());\r
+\r
+ // use aa to see if the mouse pointer is on a\r
+ if( av.showSequenceFeatures)\r
+ {\r
+ Vector features = sequence.getSequenceFeatures();\r
+ Enumeration e = features.elements();\r
+ StringBuffer sbuffer = new StringBuffer();\r
+\r
+\r
+ while (e.hasMoreElements())\r
+ {\r
+ SequenceFeature sf = (SequenceFeature) e.nextElement();\r
+ if (sf.getStart() <= sequence.findPosition(res) &&\r
+ sf.getEnd() >= sequence.findPosition(res))\r
+ {\r
+ if(sbuffer.length()>0)\r
+ sbuffer.append("; ");\r
+ sbuffer.append(sf.getType() + " " + sf.getDescription());\r
+ if(sf.getStatus().length()>0)\r
+ sbuffer.append(" ("+sf.getStatus()+")");\r
+ }\r
+\r
+ }\r
+ }\r
+\r
+\r
+ }\r
+\r
+ public void doMouseDragged(MouseEvent evt) {\r
+ // If we're dragging we're editing\r
+\r
+ if(lastres==-1)\r
+ return;\r
+\r
+ int x = evt.getX();\r
+\r
+ int res = x/av.getCharWidth() + av.getStartRes();\r
+ if (res < 0)\r
+ res = 0;\r
+\r
+ if (res != lastres)\r
+ {\r
+ // Group editing\r
+ if (evt.isAltDown() || evt.isControlDown())\r
+ {\r
+ SequenceGroup sg = av.getSelectionGroup();\r
+ if(sg==null)\r
+ av.getAlignment().findGroup(startseq);\r
+ if (sg != null)\r
+ {\r
+ boolean deleteAllowed = false;\r
+ if (res < av.getAlignment().getWidth() && res < lastres)\r
+ {\r
+ /// Are we able to delete?\r
+ boolean allGaps = true;\r
+ for (int i = 0; i < sg.getSize(); i++)\r
+ {\r
+ SequenceI s = sg.getSequenceAt(i);\r
+ for (int j = lastres-1; j >= res && allGaps; j--)\r
+ {\r
+ if (!jalview.util.Comparison.isGap(s.getSequence().charAt(j)))\r
+ {\r
+ res = j + 1;\r
+ allGaps = false;\r
+ }\r
+ }\r
+\r
+ if(!deleteAllowed && allGaps)\r
+ deleteAllowed = true;\r
+ }\r
+ }\r
+\r
+ // drag to right\r
+ if (res < av.getAlignment().getWidth() && res > lastres)\r
+ sg.setEndRes(sg.getEndRes() + 1);\r
+\r
+ // drag to left\r
+ else if (deleteAllowed && res < av.getAlignment().getWidth() &&\r
+ res < lastres)\r
+ sg.setEndRes(sg.getEndRes() - 1);\r
+\r
+\r
+\r
+\r
+ for (int i = 0; i < sg.getSize(); i++)\r
+ {\r
+ SequenceI s = sg.getSequenceAt(i);\r
+ int k = av.alignment.findIndex(s);\r
+\r
+ // drag to right\r
+ if (res < av.getAlignment().getWidth() && res > lastres)\r
+ for (int j = lastres; j < res; j++)\r
+ insertChar(j, k);\r
+\r
+ // drag to left\r
+ else if (deleteAllowed && res < av.getAlignment().getWidth() && res < lastres)\r
+ {\r
+ for (int j = res; j < lastres; j++)\r
+ {\r
+ deleteChar(j, k);\r
+ startres = res;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else /////Editing a single sequence///////////\r
+ {\r
+ if (res < av.getAlignment().getWidth() && res > lastres)\r
+ {\r
+ // dragging to the right\r
+ for (int j = lastres; j < res; j++)\r
+ insertChar(j, startseq);\r
+ }\r
+ else if (res < av.getAlignment().getWidth() && res < lastres)\r
+ {\r
+ // dragging to the left\r
+ for (int j = res; j < lastres; j++)\r
+ {\r
+ deleteChar(j, startseq);\r
+ startres = res;\r
+ }\r
+ }\r
+\r
+ }\r
+\r
+ }\r
+\r
+ lastres = res;\r
+ seqCanvas.repaint();\r
+ }\r
+\r
+ public void drawChars(int seqstart, int seqend, int start) {\r
+ seqCanvas.drawPanel(seqCanvas.gg, start,av.getEndRes(),seqstart,seqend,av.getStartRes(),av.getStartSeq(),0);\r
+ seqCanvas.repaint();\r
+ }\r
+\r
+ public void insertChar(int j, int seq)\r
+ {\r
+ av.alignment.getSequenceAt(seq).insertCharAt(j, av.getGapCharacter());\r
+ seqEditOccurred=seq;\r
+ }\r
+\r
+ public void deleteChar(int j, int seq)\r
+ {\r
+\r
+ if ( jalview.util.Comparison.isGap( av.alignment.getSequenceAt(seq).getSequence().charAt(j)))\r
+ av.alignment.getSequenceAt(seq).deleteCharAt(j);\r
+\r
+ av.alignment.getWidth();\r
+ seqCanvas.repaint();\r
+ seqEditOccurred=seq;\r
+ }\r
+\r
+\r
+ void updateConservation(int i)\r
+ {\r
+ av.updateConservation();\r
+ av.updateConsensus();\r
+ }\r
+\r
+//////////////////////////////////////////\r
+/////Everything below this is for defining the boundary of the rubberband\r
+//////////////////////////////////////////\r
+ int oldSeq = -1;\r
+ public void doMousePressedDefineMode(MouseEvent evt)\r
+ {\r
+ int res = evt.getX()/av.getCharWidth() + av.getStartRes();\r
+ int seq = evt.getY()/av.getCharHeight() + av.getStartSeq();\r
+ oldSeq = seq;\r
+\r
+ SequenceI sequence = (Sequence) av.getAlignment().getSequenceAt(seq);\r
+\r
+ if(sequence==null || res>sequence.getLength())\r
+ return;\r
+\r
+ stretchGroup = av.getSelectionGroup();\r
+\r
+ if(stretchGroup == null)\r
+ {\r
+ stretchGroup = av.alignment.findGroup( sequence );\r
+ if(stretchGroup!=null && res>stretchGroup.getStartRes() && res<stretchGroup.getEndRes())\r
+ av.setSelectionGroup(stretchGroup);\r
+ else\r
+ stretchGroup = null;\r
+ }\r
+\r
+ else if(!stretchGroup.sequences.contains(sequence)\r
+ || stretchGroup.getStartRes()>res\r
+ || stretchGroup.getEndRes()<res)\r
+ {\r
+ stretchGroup = null;\r
+\r
+ SequenceGroup[] allGroups = av.alignment.findAllGroups( sequence );\r
+\r
+ if (allGroups != null)\r
+ for (int i = 0; i < allGroups.length; i++)\r
+ if (allGroups[i].getStartRes() <= res &&\r
+ allGroups[i].getEndRes() >= res)\r
+ {\r
+ stretchGroup = allGroups[i];\r
+ av.setSelectionGroup(stretchGroup);\r
+ break;\r
+ }\r
+ }\r
+\r
+ if(stretchGroup==null)\r
+ {\r
+ // define a new group here\r
+ SequenceGroup sg = new SequenceGroup();\r
+ sg.setStartRes(res);\r
+ sg.setEndRes(res);\r
+ sg.addSequence( sequence );\r
+ av.setSelectionGroup( sg );\r
+ stretchGroup = sg;\r
+\r
+ if(av.getConservationSelected())\r
+ SliderPanel.setConservationSlider(ap, av.getGlobalColourScheme(), "Background");\r
+ if(av.getAbovePIDThreshold())\r
+ SliderPanel.setPIDSliderSource(ap, av.getGlobalColourScheme(), "Background");\r
+\r
+ }\r
+ else if( ( evt.getModifiers() & InputEvent .BUTTON3_MASK ) == InputEvent.BUTTON3_MASK )\r
+ {\r
+ APopupMenu popup = new APopupMenu(ap, null);\r
+ this.add(popup);\r
+ popup.show(this, evt.getX(), evt.getY());\r
+ }\r
+\r
+\r
+ if(stretchGroup!=null && stretchGroup.getEndRes()==res)\r
+ // Edit end res position of selected group\r
+ changeEndRes = true;\r
+\r
+ else if(stretchGroup!=null && stretchGroup.getStartRes()==res)\r
+ // Edit end res position of selected group\r
+ changeStartRes = true;\r
+\r
+ }\r
+\r
+ boolean changeEndSeq = false;\r
+ boolean changeStartSeq = false;\r
+ boolean changeEndRes = false;\r
+ boolean changeStartRes = false;\r
+ SequenceGroup stretchGroup = null;\r
+\r
+ public void doMouseReleasedDefineMode(MouseEvent evt)\r
+ {\r
+ mouseDragging = false;\r
+\r
+ if(stretchGroup==null)\r
+ return;\r
+\r
+ if(stretchGroup.cs instanceof ClustalxColourScheme)\r
+ {\r
+ stretchGroup.cs = new ClustalxColourScheme(stretchGroup.sequences, av.alignment.getWidth());\r
+ seqCanvas.repaint();\r
+ }\r
+\r
+ else if(stretchGroup.cs instanceof ConservationColourScheme)\r
+ {\r
+ ConservationColourScheme ccs = (ConservationColourScheme)stretchGroup.cs;\r
+ stretchGroup.cs = ccs;\r
+ SliderPanel.setConservationSlider(ap, stretchGroup.cs, stretchGroup.getName()) ;\r
+\r
+ seqCanvas.repaint();\r
+ }\r
+ else\r
+ {\r
+ if(stretchGroup.cs !=null && stretchGroup.cs.canThreshold())\r
+ {\r
+ ResidueColourScheme rcs = (ResidueColourScheme) stretchGroup.cs;\r
+ SliderPanel.setPIDSliderSource(ap, stretchGroup.cs, stretchGroup.getName());\r
+ }\r
+\r
+ }\r
+\r
+\r
+ changeEndRes = false;\r
+ changeStartRes = false;\r
+ stretchGroup = null;\r
+ ap.repaint();\r
+ }\r
+\r
+\r
+ boolean remove = false;\r
+ public void doMouseDraggedDefineMode(MouseEvent evt)\r
+ {\r
+ int res = evt.getX()/av.getCharWidth() + av.getStartRes();\r
+ int y = evt.getY()/av.getCharHeight() + av.getStartSeq();\r
+\r
+ if(stretchGroup==null)\r
+ return;\r
+\r
+ if(res>av.alignment.getWidth())\r
+ res = av.alignment.getWidth()-1;\r
+\r
+\r
+ if(stretchGroup.getEndRes()==res)\r
+ // Edit end res position of selected group\r
+ changeEndRes = true;\r
+\r
+ else if(stretchGroup.getStartRes()==res)\r
+ // Edit start res position of selected group\r
+ changeStartRes = true;\r
+\r
+\r
+ if(res<av.getStartRes())\r
+ res = av.getStartRes();\r
+ else if(res>av.getEndRes())\r
+ res = av.getEndRes();\r
+\r
+ if(changeEndRes)\r
+ {\r
+ if(res>stretchGroup.getStartRes()-1)\r
+ stretchGroup.setEndRes( res );\r
+ }\r
+ else if(changeStartRes)\r
+ {\r
+ if(res<stretchGroup.getEndRes()+1)\r
+ stretchGroup.setStartRes( res );\r
+ }\r
+\r
+ int dragDirection = 0;\r
+ if (y > oldSeq)\r
+ dragDirection = 1;\r
+ else if (y < oldSeq)\r
+ dragDirection = -1;\r
+\r
+ while (y != oldSeq && oldSeq>0 && y<av.alignment.getHeight())\r
+ {\r
+ // This routine ensures we don't skip any sequences, as the\r
+ // selection is quite slow.\r
+ Sequence seq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
+\r
+ oldSeq += dragDirection;\r
+ Sequence nextSeq = (Sequence) av.getAlignment().getSequenceAt(oldSeq);\r
+\r
+ if (stretchGroup.sequences.contains(nextSeq))\r
+ {\r
+ stretchGroup.deleteSequence(seq);\r
+ stretchGroup.deleteSequence(nextSeq);\r
+ }\r
+ else\r
+ {\r
+ if(seq!=null)\r
+ stretchGroup.addSequence(seq);\r
+ stretchGroup.addSequence(nextSeq);\r
+ }\r
+ }\r
+ oldSeq = y;\r
+ mouseDragging = true;\r
+ if(scrollThread!=null)\r
+ scrollThread.setEvent(evt);\r
+\r
+ seqCanvas.repaint();\r
+ }\r
+\r
+ public void doMouseEnteredDefineMode(MouseEvent e)\r
+ {\r
+ if (scrollThread != null)\r
+ scrollThread.running = false;\r
+ }\r
+\r
+ public void doMouseExitedDefineMode(MouseEvent e)\r
+ {\r
+ if (av.getWrapAlignment())\r
+ return;\r
+\r
+ if(mouseDragging)\r
+ scrollThread = new ScrollThread();\r
+\r
+ }\r
+ // this class allows scrolling off the bottom of the visible alignment\r
+ class ScrollThread extends Thread\r
+ {\r
+ MouseEvent evt;\r
+ boolean running = false;\r
+ public ScrollThread()\r
+ {\r
+ start();\r
+ }\r
+\r
+ public void setEvent(MouseEvent e)\r
+ {\r
+ evt = e;\r
+ }\r
+\r
+ public void stopScrolling()\r
+ {\r
+ running = false;\r
+ }\r
+\r
+ public void run()\r
+ {\r
+ running = true;\r
+ while (running)\r
+ {\r
+ if(evt!=null)\r
+ {\r
+\r
+ if (mouseDragging && evt.getY() < 0 && av.getStartSeq() > 0)\r
+ running = ap.scrollUp(true);\r
+\r
+ if (mouseDragging && evt.getY() >= getSize().height &&\r
+ av.alignment.getHeight() > av.getEndSeq())\r
+ running = ap.scrollUp(false);\r
+\r
+ if (mouseDragging && evt.getX() < 0)\r
+ running = ap.scrollRight(true);\r
+\r
+ else if (mouseDragging && evt.getX() >= getSize().width)\r
+ running = ap.scrollRight(false);\r
+ }\r
+\r
+ try\r
+ {\r
+ Thread.sleep(75);\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+ }\r
+ }\r
+}\r
+\r
+\r
+\r
+}\r
+\r
+\r
+\r
+\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import jalview.schemes.*;\r
+import java.awt.*;\r
+\r
+public class SequenceRenderer\r
+{\r
+ AlignViewport av;\r
+ FontMetrics fm;\r
+ boolean renderGaps = true;\r
+ SequenceGroup currentSequenceGroup = null;\r
+ SequenceGroup [] allGroups = null;\r
+ Color resBoxColour;\r
+ Graphics graphics;\r
+\r
+ public SequenceRenderer(AlignViewport av)\r
+ {\r
+ this.av = av;\r
+ }\r
+\r
+\r
+ public void renderGaps(boolean b)\r
+ {\r
+ renderGaps = b;\r
+ }\r
+\r
+ public Color getResidueBoxColour(ColourSchemeI cs, SequenceI seq, int i)\r
+ {\r
+ getBoxColour(cs, seq, i);\r
+ return resBoxColour;\r
+ }\r
+\r
+ void getBoxColour(ColourSchemeI cs, SequenceI seq, int i)\r
+ {\r
+ if (cs != null)\r
+ resBoxColour = cs.findColour(seq.getSequence(i, i + 1), i);\r
+ else\r
+ resBoxColour = Color.white;\r
+ }\r
+\r
+ public void drawSequence(Graphics g,SequenceI seq,SequenceGroup [] sg, int start, int end, int x1, int y1, int width, int height)\r
+ {\r
+ allGroups = sg;\r
+\r
+ graphics = g;\r
+\r
+ drawBoxes(seq, start, end, x1, y1, (int) width, height);\r
+\r
+ fm = g.getFontMetrics();\r
+ drawText(seq,start,end,x1,y1,(int)width,height);\r
+\r
+ }\r
+\r
+ public void drawBoxes(SequenceI seq,int start, int end, int x1, int y1, int width, int height) {\r
+ int i = start;\r
+ int length = seq.getLength();\r
+\r
+ int curStart = -1;\r
+ int curWidth = width;\r
+\r
+ Color tempColour = null;\r
+ while (i <= end && i < length)\r
+ {\r
+ if(inCurrentSequenceGroup(i))\r
+ {\r
+ if( currentSequenceGroup.getDisplayBoxes())\r
+ getBoxColour(currentSequenceGroup.cs, seq, i);\r
+ }\r
+ else if(av.getShowBoxes())\r
+ getBoxColour(av.getGlobalColourScheme(), seq, i);\r
+ else\r
+ resBoxColour = Color.white;\r
+\r
+\r
+ if (resBoxColour != tempColour)\r
+ {\r
+ if(tempColour!=null)\r
+ graphics.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
+ graphics.setColor(resBoxColour);\r
+\r
+ curStart = i;\r
+ curWidth = width;\r
+ tempColour = resBoxColour;\r
+\r
+ }\r
+ else\r
+ curWidth += width;\r
+\r
+ i++;\r
+ }\r
+\r
+\r
+ graphics.fillRect(x1+width*(curStart-start),y1,curWidth,height);\r
+ }\r
+\r
+ public void drawText(SequenceI seq,int start, int end, int x1, int y1, int width, int height)\r
+ {\r
+ int pady = height/5;\r
+ int charOffset=0;\r
+ char s;\r
+ // Need to find the sequence position here.\r
+\r
+ graphics.setColor(Color.black);\r
+ String sequence = seq.getSequence();\r
+ for (int i = start; i <= end; i++)\r
+ {\r
+ if(i<sequence.length())\r
+ s = sequence.charAt(i);\r
+ else\r
+ s = ' ';\r
+\r
+ if(!renderGaps && jalview.util.Comparison.isGap(s))\r
+ continue;\r
+\r
+\r
+ if (inCurrentSequenceGroup(i))\r
+ {\r
+ if(!currentSequenceGroup.getDisplayText())\r
+ continue;\r
+\r
+ if (currentSequenceGroup.getColourText())\r
+ {\r
+ getBoxColour(currentSequenceGroup.cs, seq, i);\r
+ graphics.setColor(resBoxColour.darker());\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if(!av.getShowText())\r
+ continue;\r
+\r
+ if(av.getColourText())\r
+ {\r
+ getBoxColour(av.getGlobalColourScheme(), seq, i);\r
+ if(av.getShowBoxes())\r
+ graphics.setColor(resBoxColour.darker());\r
+ else\r
+ graphics.setColor(resBoxColour);\r
+ }\r
+ }\r
+\r
+ charOffset = (width - fm.charWidth(s))/2;\r
+ graphics.drawString(String.valueOf(s),\r
+ charOffset + x1 + width * (i - start),\r
+ y1 + height - pady);\r
+ }\r
+\r
+\r
+ }\r
+\r
+ boolean inCurrentSequenceGroup(int res)\r
+ {\r
+ if(allGroups ==null)\r
+ return false;\r
+\r
+ for(int i=0; i<allGroups.length; i++)\r
+ if(allGroups[i].getStartRes()<=res && allGroups[i].getEndRes()>=res)\r
+ {\r
+ currentSequenceGroup = allGroups[i];\r
+ return true;\r
+ }\r
+\r
+ return false;\r
+ }\r
+\r
+ public void drawHighlightedText(SequenceI seq,int start, int end, int x1, int y1, int width, int height)\r
+ {\r
+ int pady = height/5;\r
+ int charOffset=0;\r
+ graphics.setColor(Color.black);\r
+ graphics.fillRect(x1,y1,width*(end-start+1),height);\r
+ graphics.setColor(Color.white);\r
+\r
+ char s='~';\r
+ // Need to find the sequence position here.\r
+ for (int i = start; i <= end; i++)\r
+ {\r
+ if(i<seq.getLength())\r
+ s = seq.getSequence().charAt(i);\r
+\r
+ charOffset = (width - fm.charWidth(s))/2;\r
+ graphics.drawString(String.valueOf(s), charOffset + x1 + width * (i - start), y1 + height - pady);\r
+ }\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.*;\r
+import jalview.schemes.*;\r
+import jalview.datamodel.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+public class SliderPanel extends GSliderPanel\r
+{\r
+ AlignmentPanel ap;\r
+ boolean forConservation = true;\r
+ ColourSchemeI cs;\r
+\r
+ static Frame conservationSlider;\r
+ static Frame PIDSlider;\r
+\r
+ public static int setConservationSlider(AlignmentPanel ap, ColourSchemeI cs, String source)\r
+ {\r
+ SliderPanel sp = null;\r
+ ConservationColourScheme ccs = (ConservationColourScheme)cs;\r
+ int value = ccs.inc;\r
+\r
+ if(conservationSlider == null)\r
+ {\r
+ sp = new SliderPanel(ap, value, true, cs);\r
+ conservationSlider = new Frame();\r
+ conservationSlider.add(sp);\r
+ }\r
+ else\r
+ {\r
+ sp = (SliderPanel)conservationSlider.getComponent(0);\r
+ sp.cs = cs;\r
+ sp.setValue(value);\r
+ }\r
+\r
+ conservationSlider.setTitle("Conservation Colour Increment ("+source+")");\r
+ if(ap.av.alignment.getGroups()!=null)\r
+ sp.setAllGroupsCheckEnabled( true );\r
+ else\r
+ sp.setAllGroupsCheckEnabled( false);\r
+\r
+ return sp.getValue();\r
+ }\r
+\r
+ public static void showConservationSlider()\r
+ {\r
+ try{\r
+ PIDSlider.setVisible(false);\r
+ PIDSlider = null;\r
+ }catch(Exception ex){}\r
+\r
+\r
+ if(!conservationSlider.isVisible())\r
+ {\r
+ jalview.bin.JalviewLite.addFrame(conservationSlider, conservationSlider.getTitle(), 420, 100);\r
+ conservationSlider.addWindowListener(new WindowAdapter()\r
+ {\r
+ public void windowClosing(WindowEvent e)\r
+ {\r
+ conservationSlider = null;\r
+ }\r
+ });\r
+\r
+ }\r
+\r
+ }\r
+\r
+ public static int setPIDSliderSource(AlignmentPanel ap, ColourSchemeI cs, String source)\r
+ {\r
+ SliderPanel pid = null;\r
+ if(PIDSlider == null)\r
+ {\r
+ pid = new SliderPanel(ap, 50, false, cs);\r
+ PIDSlider = new Frame();\r
+ PIDSlider.add(pid);\r
+ }\r
+ else\r
+ {\r
+ pid = (SliderPanel)PIDSlider.getComponent(0);\r
+ pid.cs = cs;\r
+ }\r
+ PIDSlider.setTitle("Percentage Identity Threshold ("+source+")");\r
+\r
+ if (ap.av.alignment.getGroups() != null)\r
+ pid.setAllGroupsCheckEnabled(true);\r
+ else\r
+ pid.setAllGroupsCheckEnabled(false);\r
+\r
+ return pid.getValue();\r
+\r
+ }\r
+\r
+ public static void showPIDSlider()\r
+ {\r
+ try{\r
+ conservationSlider.setVisible(false);\r
+ conservationSlider = null;\r
+ }catch(Exception ex){}\r
+\r
+ if(!PIDSlider.isVisible())\r
+ {\r
+ jalview.bin.JalviewLite.addFrame(PIDSlider, PIDSlider.getTitle(), 420, 100);\r
+ PIDSlider.addWindowListener(new WindowAdapter()\r
+ {\r
+ public void windowClosing(WindowEvent e)\r
+ {\r
+ PIDSlider = null;\r
+ }\r
+ });\r
+ }\r
+\r
+ }\r
+\r
+\r
+ public SliderPanel(AlignmentPanel ap, int value, boolean forConserve, ColourSchemeI cs)\r
+ {\r
+ this.ap = ap;\r
+ this.cs = cs;\r
+ forConservation = forConserve;\r
+ undoButton.setVisible(false);\r
+ applyButton.setVisible(false);\r
+ if(forConservation)\r
+ {\r
+ label.setText("Modify conservation visibility");\r
+ slider.setMinimum(0);\r
+ slider.setMaximum(50+slider.getVisibleAmount());\r
+ slider.setUnitIncrement(1);\r
+ }\r
+ else\r
+ {\r
+ label.setText("Colour residues above % occurence");\r
+ slider.setMinimum(0);\r
+ slider.setMaximum(100+slider.getVisibleAmount());\r
+ slider.setBlockIncrement(1);\r
+ }\r
+\r
+\r
+ slider.addAdjustmentListener( new AdjustmentListener()\r
+ {\r
+ public void adjustmentValueChanged(AdjustmentEvent evt)\r
+ {\r
+ valueField.setText( slider.getValue()+"" );\r
+ valueChanged( slider.getValue() );\r
+ }\r
+ });\r
+\r
+ slider.setValue(value);\r
+ valueField.setText(value+"");\r
+ }\r
+\r
+ public void valueChanged(int i)\r
+ {\r
+ if(cs == null)\r
+ return;\r
+\r
+ ColourSchemeI toChange = null;\r
+ Vector allGroups = null;\r
+ int groupIndex = 0;\r
+\r
+ if(allGroupsCheck.getState())\r
+ {\r
+ allGroups = ap.av.alignment.getGroups();\r
+ groupIndex = allGroups.size()-1;\r
+ }\r
+ else\r
+ toChange = cs;\r
+\r
+\r
+ while( groupIndex > -1 )\r
+ {\r
+ if(allGroups!=null)\r
+ toChange = ((SequenceGroup)allGroups.elementAt(groupIndex)).cs;\r
+\r
+ if (forConservation)\r
+ {\r
+ if (toChange instanceof ConservationColourScheme)\r
+ ( (ConservationColourScheme) toChange).inc = i;\r
+ }\r
+ else\r
+ {\r
+ if (toChange.canThreshold())\r
+ ( (ResidueColourScheme) toChange).setThreshold(i);\r
+ }\r
+\r
+ groupIndex--;\r
+ }\r
+\r
+ ap.seqPanel.seqCanvas.repaint();\r
+\r
+ }\r
+\r
+ public void setAllGroupsCheckEnabled(boolean b)\r
+ {\r
+ allGroupsCheck.setEnabled(b);\r
+ }\r
+\r
+\r
+ public void valueField_actionPerformed(ActionEvent e)\r
+ {\r
+ try{\r
+ int i = Integer.parseInt(valueField.getText());\r
+ slider.setValue(i);\r
+ }\r
+ catch(Exception ex)\r
+ {\r
+ valueField.setText( slider.getValue()+"" );\r
+ }\r
+ }\r
+\r
+ public void setValue(int value)\r
+ {\r
+ slider.setValue(value);\r
+ }\r
+ public int getValue()\r
+ {\r
+ return Integer.parseInt(valueField.getText());\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+\r
+import jalview.analysis.*;\r
+import jalview.datamodel.*;\r
+import jalview.util.*;\r
+import jalview.schemes.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class TreeCanvas extends Panel implements MouseListener\r
+{\r
+ NJTree tree;\r
+ ScrollPane scrollPane;\r
+ AlignViewport av;\r
+\r
+ Font font;\r
+ int fontSize = 12;\r
+\r
+ boolean fitToWindow = true;\r
+ boolean showDistances = false;\r
+ boolean showBootstrap = false;\r
+\r
+ int offx = 20;\r
+ int offy = 20;\r
+\r
+ float threshold;\r
+\r
+ String longestName;\r
+ int labelLength=-1;\r
+\r
+ //RubberbandRectangle rubberband;\r
+\r
+ Vector listeners;\r
+\r
+ Hashtable nameHash = new Hashtable();\r
+ Hashtable nodeHash = new Hashtable();\r
+\r
+ public TreeCanvas(AlignViewport av, NJTree tree, ScrollPane scroller, String label)\r
+ {\r
+ this.av = av;\r
+ this.tree = tree;\r
+ scrollPane = scroller;\r
+ addMouseListener(this);\r
+ tree.findHeight(tree.getTopNode());\r
+ longestName = label;\r
+ setLayout(null);\r
+\r
+ PaintRefresher.Register(this);\r
+ }\r
+ public void TreeSelectionChanged(Sequence sequence)\r
+ {\r
+ SequenceGroup selected = av.getSelectionGroup();\r
+ if(selected == null)\r
+ {\r
+ selected = new SequenceGroup();\r
+ av.setSelectionGroup(selected);\r
+ }\r
+\r
+ selected.setEndRes(av.alignment.getWidth());\r
+ selected.addOrRemove(sequence);\r
+\r
+\r
+ PaintRefresher.Refresh(this);\r
+ repaint();\r
+ }\r
+\r
+\r
+\r
+ public void setTree(NJTree tree) {\r
+ this.tree = tree;\r
+ tree.findHeight(tree.getTopNode());\r
+ }\r
+\r
+ public void drawNode(Graphics g,SequenceNode node, float chunk, float scale, int width,int offx, int offy) {\r
+ if (node == null) {\r
+ return;\r
+ }\r
+\r
+ if (node.left() == null && node.right() == null) {\r
+ // Drawing leaf node\r
+\r
+ float height = node.height;\r
+ float dist = node.dist;\r
+\r
+ int xstart = (int)((height-dist)*scale) + offx;\r
+ int xend = (int)(height*scale) + offx;\r
+\r
+ int ypos = (int)(node.ycount * chunk) + offy;\r
+\r
+ if (node.element() instanceof SequenceI)\r
+ {\r
+ if ( ( (SequenceI) ( (SequenceNode) node).element()).getColor() == Color.white)\r
+ {\r
+ g.setColor(Color.black);\r
+ }\r
+ else\r
+ g.setColor( ( (SequenceI) ( (SequenceNode) node).element()).getColor().\r
+ darker());\r
+\r
+ }\r
+ else\r
+ g.setColor(Color.black);\r
+\r
+\r
+ // Draw horizontal line\r
+ g.drawLine(xstart,ypos,xend,ypos);\r
+\r
+ String nodeLabel = "";\r
+ if (showDistances && node.dist > 0) {\r
+ nodeLabel = new Format("%5.2f").form(node.dist);\r
+ }\r
+ if (showBootstrap) {\r
+ if (showDistances) {\r
+ nodeLabel = nodeLabel + " : ";\r
+ }\r
+ nodeLabel = nodeLabel + String.valueOf(node.getBootstrap());\r
+ }\r
+ if (! nodeLabel.equals("")) {\r
+ g.drawString(nodeLabel,xstart,ypos - 10);\r
+ }\r
+\r
+ // Colour selected leaves differently\r
+ String name = node.getName();\r
+ FontMetrics fm = g.getFontMetrics(font);\r
+ int charWidth = fm.stringWidth(node.getName()) + 3;\r
+ int charHeight = fm.getHeight();\r
+\r
+ Rectangle rect = new Rectangle(xend+20,ypos-charHeight,\r
+ charWidth,charHeight);\r
+\r
+ nameHash.put((SequenceI)node.element(),rect);\r
+\r
+ SequenceGroup selected = av.getSelectionGroup();\r
+ if (selected!=null && selected.sequences.contains((SequenceI)node.element())) {\r
+ g.setColor(Color.gray);\r
+\r
+ g.fillRect(xend + 10, ypos - charHeight + 3,charWidth,charHeight);\r
+ g.setColor(Color.white);\r
+ }\r
+ g.drawString(node.getName(),xend+10,ypos);\r
+ g.setColor(Color.black);\r
+ } else {\r
+ drawNode(g,(SequenceNode)node.left(), chunk,scale,width,offx,offy);\r
+ drawNode(g,(SequenceNode)node.right(),chunk,scale,width,offx,offy);\r
+\r
+ float height = node.height;\r
+ float dist = node.dist;\r
+\r
+ int xstart = (int)((height-dist)*scale) + offx;\r
+ int xend = (int)(height *scale) + offx;\r
+ int ypos = (int)(node.ycount *chunk) + offy;\r
+\r
+ g.setColor(((SequenceNode)node).color.darker());\r
+\r
+ // Draw horizontal line\r
+ g.drawLine(xstart,ypos,xend,ypos);\r
+ g.fillRect(xend-2, ypos-2, 4,4);\r
+\r
+ int ystart = (int)(((SequenceNode)node.left()) .ycount * chunk) + offy;\r
+ int yend = (int)(((SequenceNode)node.right()).ycount * chunk) + offy;\r
+\r
+ Rectangle pos = new Rectangle(xend-2,ypos-2,5,5);\r
+ nodeHash.put(node,pos);\r
+\r
+ g.drawLine((int)(height*scale) + offx, ystart,\r
+ (int)(height*scale) + offx, yend);\r
+\r
+ if (showDistances && node.dist > 0) {\r
+ g.drawString(new Format("%5.2f").form(node.dist),xstart,ypos - 5);\r
+ }\r
+\r
+ }\r
+ }\r
+ public Object findElement(int x, int y) {\r
+ Enumeration keys = nameHash.keys();\r
+\r
+ while (keys.hasMoreElements()) {\r
+ Object ob = keys.nextElement();\r
+ Rectangle rect = (Rectangle)nameHash.get(ob);\r
+\r
+ if (x >= rect.x && x <= (rect.x + rect.width) &&\r
+ y >= rect.y && y <= (rect.y + rect.height)) {\r
+ return ob;\r
+ }\r
+ }\r
+ keys = nodeHash.keys();\r
+\r
+ while (keys.hasMoreElements()) {\r
+ Object ob = keys.nextElement();\r
+ Rectangle rect = (Rectangle)nodeHash.get(ob);\r
+\r
+ if (x >= rect.x && x <= (rect.x + rect.width) &&\r
+ y >= rect.y && y <= (rect.y + rect.height)) {\r
+ return ob;\r
+ }\r
+ }\r
+ return null;\r
+\r
+ }\r
+\r
+ public void pickNodes(Rectangle pickBox) {\r
+ int width = getSize().width;\r
+ int height = getSize().height;\r
+\r
+ SequenceNode top = tree.getTopNode();\r
+\r
+ float wscale = (float)(width*.8-offx*2)/tree.getMaxHeight()\r
+;\r
+ if (top.count == 0) {\r
+ top.count = ((SequenceNode)top.left()).count + ((SequenceNode)top.right()).count ;\r
+ }\r
+ float chunk = (float)(height-offy*2)/top.count;\r
+\r
+ pickNode(pickBox,top,chunk,wscale,width,offx,offy);\r
+ }\r
+\r
+ public void pickNode(Rectangle pickBox, SequenceNode node, float chunk, float scale, int width,int offx, int offy) {\r
+ if (node == null) {\r
+ return;\r
+ }\r
+\r
+ if (node.left() == null && node.right() == null) {\r
+ float height = node.height;\r
+ float dist = node.dist;\r
+\r
+ int xstart = (int)((height-dist)*scale) + offx;\r
+ int xend = (int)(height*scale) + offx;\r
+\r
+ int ypos = (int)(node.ycount * chunk) + offy;\r
+\r
+ if (pickBox.contains(new Point(xend,ypos))) {\r
+ if (node.element() instanceof SequenceI) {\r
+ SequenceI seq = (SequenceI)node.element();\r
+ SequenceGroup sg = av.getSelectionGroup();\r
+ if(sg!=null)\r
+ sg.addOrRemove(seq);\r
+ }\r
+ }\r
+ } else {\r
+ pickNode(pickBox,(SequenceNode)node.left(), chunk,scale,width,offx,offy);\r
+ pickNode(pickBox,(SequenceNode)node.right(),chunk,scale,width,offx,offy);\r
+ }\r
+ }\r
+\r
+ public void setColor(SequenceNode node, Color c)\r
+ {\r
+ if (node == null)\r
+ return;\r
+\r
+ if (node.left() == null && node.right() == null)\r
+ {\r
+ node.color = c;\r
+\r
+ if (node.element() instanceof SequenceI)\r
+ ((SequenceI)node.element()).setColor(c);\r
+ } else\r
+ {\r
+ node.color = c;\r
+ setColor((SequenceNode)node.left(),c);\r
+ setColor((SequenceNode)node.right(),c);\r
+ }\r
+ }\r
+\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+\r
+ font = new Font("Verdana",Font.PLAIN,fontSize);\r
+ g.setFont(font);\r
+\r
+ FontMetrics fm = g.getFontMetrics(font);\r
+\r
+ if(nameHash.size()==0)\r
+ repaint();\r
+\r
+\r
+ if( fitToWindow || (!fitToWindow && scrollPane.getSize().height > fm.getHeight() * nameHash.size()+offy ) )\r
+ {\r
+ draw(g,scrollPane.getSize().width,scrollPane.getSize().height);\r
+ }\r
+ else\r
+ {\r
+ setSize(new Dimension(scrollPane.getSize().width, fm.getHeight() * nameHash.size()));\r
+ draw( g,scrollPane.getSize().width, fm.getHeight() * nameHash.size());\r
+ }\r
+\r
+ scrollPane.validate();\r
+ }\r
+ public int getFontSize() {\r
+ return fontSize;\r
+ }\r
+ public void setFontSize(int fontSize) {\r
+ this.fontSize = fontSize;\r
+ repaint();\r
+ }\r
+ public void draw(Graphics g, int width, int height) {\r
+\r
+ g.setColor(Color.white);\r
+ g.fillRect(0,0,width,height);\r
+\r
+\r
+ labelLength = g.getFontMetrics(font).stringWidth(longestName)+ 20;//20 allows for scrollbar\r
+\r
+ float wscale =(float)(width - labelLength -offx*2)/tree.getMaxHeight();\r
+\r
+ SequenceNode top = tree.getTopNode();\r
+\r
+ if (top.count == 0) {\r
+ top.count = ((SequenceNode)top.left()).count + ((SequenceNode)top.right()).count ;\r
+ }\r
+ float chunk = (float)(height-offy*2)/top.count ;\r
+\r
+ drawNode(g,tree.getTopNode(),chunk,wscale,width,offx,offy);\r
+\r
+ if (threshold != 0)\r
+ {\r
+ if(av.getCurrentTree() == tree)\r
+ g.setColor(Color.red);\r
+ else\r
+ g.setColor(Color.gray);\r
+\r
+ int x = (int)( threshold * (float)(getSize().width-labelLength - 2*offx) +offx ) ;\r
+\r
+ g.drawLine(x,0,x,getSize().height);\r
+ }\r
+\r
+ }\r
+\r
+ public void mouseReleased(MouseEvent e) { }\r
+ public void mouseEntered(MouseEvent e) { }\r
+ public void mouseExited(MouseEvent e) { }\r
+ public void mouseClicked(MouseEvent e) {\r
+ }\r
+\r
+ public void mousePressed(MouseEvent e) {\r
+\r
+ av.setCurrentTree(tree);\r
+\r
+ int x = e.getX();\r
+ int y = e.getY();\r
+\r
+ Object ob = findElement(x,y);\r
+\r
+ if (ob instanceof SequenceI)\r
+ {\r
+ TreeSelectionChanged((Sequence)ob);\r
+ repaint();\r
+ return;\r
+\r
+ } else if (ob instanceof SequenceNode) {\r
+ SequenceNode tmpnode = (SequenceNode)ob;\r
+ tree.swapNodes(tmpnode);\r
+ tree.reCount(tree.getTopNode());\r
+ tree.findHeight(tree.getTopNode());\r
+ } else {\r
+ // Find threshold\r
+\r
+ if (tree.getMaxHeight() != 0) {\r
+ threshold = (float)(x - offx)/(float)(getSize().width-labelLength - 2*offx);\r
+\r
+ tree.getGroups().removeAllElements();\r
+ tree.groupNodes(tree.getTopNode(),threshold);\r
+ setColor(tree.getTopNode(),Color.black);\r
+\r
+ av.setSelectionGroup(null);\r
+ av.alignment.deleteAllGroups();\r
+\r
+ for (int i=0; i < tree.getGroups().size(); i++)\r
+ {\r
+\r
+ Color col = new Color((int)(Math.random()*255),\r
+ (int)(Math.random()*255),\r
+ (int)(Math.random()*255));\r
+ setColor((SequenceNode)tree.getGroups().elementAt(i),col.brighter());\r
+\r
+ Vector l = tree.findLeaves((SequenceNode)tree.getGroups().elementAt(i),new Vector());\r
+ SequenceGroup sg = null;\r
+ for (int j = 0; j < l.size(); j++)\r
+ {\r
+ SequenceNode sn = (SequenceNode) l.elementAt(j);\r
+ if(sg==null)\r
+ sg = new SequenceGroup("TreeGroup", av.getGlobalColourScheme(), true, true,false,0,av.alignment.getWidth());\r
+\r
+ sg.addSequence( (Sequence) sn.element());\r
+ }\r
+\r
+ if (av.getGlobalColourScheme() instanceof ConservationColourScheme)\r
+ {\r
+ ConservationColourScheme ccs = (ConservationColourScheme) av.getGlobalColourScheme();\r
+ Conservation c = new Conservation("Group",\r
+ ResidueProperties.propHash, 3,\r
+ sg.sequences, sg.getStartRes(),\r
+ sg.getEndRes());\r
+\r
+ c.calculate();\r
+ c.verdict(false, av.ConsPercGaps);\r
+ ccs = new ConservationColourScheme(c, ccs.cs);\r
+\r
+ sg.cs = ccs;\r
+\r
+ }\r
+\r
+\r
+\r
+ av.alignment.addGroup(sg);\r
+\r
+ }\r
+ }\r
+ }\r
+\r
+ PaintRefresher.Refresh(this);\r
+ repaint();\r
+\r
+ }\r
+\r
+ public void setShowDistances(boolean state) {\r
+ this.showDistances = state;\r
+ repaint();\r
+ }\r
+\r
+ public void setShowBootstrap(boolean state) {\r
+ this.showBootstrap = state;\r
+ repaint();\r
+ }\r
+\r
+}\r
+\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.datamodel.*;\r
+import jalview.analysis.*;\r
+import jalview.jbappletgui.GTreePanel;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class TreePanel extends GTreePanel\r
+{\r
+ SequenceI[] seq;\r
+ String type;\r
+ String pwtype;\r
+ AlignViewport av;\r
+ int start;\r
+ int end;\r
+ TreeCanvas treeCanvas;\r
+ NJTree tree;\r
+\r
+ public NJTree getTree()\r
+ {\r
+ return tree;\r
+ }\r
+\r
+ public TreePanel(AlignViewport av, Vector seqVector, String type, String pwtype, int s, int e)\r
+ {\r
+ super();\r
+\r
+ this.type = type;\r
+ this.pwtype = pwtype;\r
+\r
+ start = s;\r
+ end = e;\r
+\r
+ String longestName = "";\r
+ seq = new Sequence [seqVector.size()];\r
+ for (int i=0;i < seqVector.size();i++)\r
+ {\r
+ seq[i] = (Sequence) seqVector.elementAt(i);\r
+ if(seq[i].getName().length()>longestName.length())\r
+ longestName = seq[i].getName();\r
+ }\r
+\r
+ tree = new NJTree(seq, type, pwtype, start, end);\r
+\r
+ treeCanvas = new TreeCanvas(av, tree, scrollPane, longestName);\r
+\r
+ tree.reCount(tree.getTopNode());\r
+ tree.findHeight(tree.getTopNode());\r
+ scrollPane.add(treeCanvas);\r
+\r
+ }\r
+\r
+\r
+public String getText(String format) {\r
+ return null;\r
+}\r
+\r
+ protected void fitToWindow_actionPerformed(ActionEvent e)\r
+ {\r
+ treeCanvas.fitToWindow = fitToWindow.getState();\r
+ repaint();\r
+ }\r
+\r
+\r
+ protected void fontSize_actionPerformed(ActionEvent e)\r
+ {\r
+ /* if( treeCanvas==null )\r
+ return;\r
+\r
+ String size = fontSize.getLabel().substring( fontSize.getLabel().indexOf("-")+1);\r
+\r
+ Object selection = JOptionPane.showInternalInputDialog(Desktop.desktop,\r
+ "Select font size",\r
+ "Font size",\r
+ JOptionPane.QUESTION_MESSAGE,\r
+ null, new String[]{"1","2","4","6","8","10","12","14","16","18","20"}\r
+ ,"Font Size - "+size);\r
+ if(selection!=null)\r
+ {\r
+ fontSize.setText("Font Size - " + selection);\r
+\r
+ int i = Integer.parseInt(selection.toString());\r
+ treeCanvas.setFontSize(i);\r
+ }\r
+ scrollPane.setViewportView(treeCanvas);\r
+*/\r
+ }\r
+\r
+ protected void distanceMenu_actionPerformed(ActionEvent e)\r
+ {\r
+ treeCanvas.setShowDistances(distanceMenu.getState());\r
+ }\r
+\r
+ protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
+ {\r
+ treeCanvas.setShowBootstrap(bootstrapMenu.getState());\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.appletgui;\r
+\r
+import jalview.jbappletgui.GUserDefinedColours;\r
+import jalview.datamodel.*;\r
+import jalview.schemes.*;\r
+import jalview.io.*;\r
+import java.io.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import java.util.*;\r
+\r
+\r
+public class UserDefinedColours extends GUserDefinedColours\r
+{\r
+\r
+ AlignmentPanel ap;\r
+ SequenceGroup seqGroup;\r
+ Button selectedButton;\r
+ Vector oldColours = new Vector();\r
+ ColourSchemeI oldColourScheme;\r
+ Frame frame;\r
+\r
+ int R = 0, G = 0, B = 0;\r
+\r
+ public UserDefinedColours(AlignmentPanel ap, SequenceGroup sg)\r
+ {\r
+ super();\r
+ frame = new Frame();\r
+ frame.add(this);\r
+ jalview.bin.JalviewLite.addFrame(frame, "User defined colours", 420,345 );\r
+\r
+ if(sg!=null)\r
+ frame.setTitle( frame.getTitle()+ " ("+sg.getName()+")");\r
+\r
+\r
+ this.ap = ap;\r
+ seqGroup = sg;\r
+\r
+\r
+ if (seqGroup != null)\r
+ oldColourScheme = seqGroup.cs;\r
+ else\r
+ oldColourScheme = ap.av.getGlobalColourScheme();\r
+\r
+ for (int i = 0; i < 20; i++)\r
+ makeButton(ResidueProperties.aa2Triplet.get(ResidueProperties.aa[i]) +\r
+ "", ResidueProperties.aa[i]);\r
+\r
+ makeButton("B", "B");\r
+ makeButton("Z", "Z");\r
+ makeButton("X", "X");\r
+ makeButton("Gap", "'.','-',' '");\r
+\r
+ }\r
+\r
+ protected void rText_actionPerformed(ActionEvent e) {\r
+ try{\r
+ int i = Integer.parseInt(rText.getText());\r
+ rScroller.setValue(i);\r
+ }catch(NumberFormatException ex){}\r
+ }\r
+\r
+ protected void gText_actionPerformed(ActionEvent e) {\r
+ try{\r
+ int i = Integer.parseInt(gText.getText());\r
+ gScroller.setValue(i);\r
+ }catch(NumberFormatException ex){}\r
+\r
+ }\r
+\r
+ protected void bText_actionPerformed(ActionEvent e) {\r
+ try{\r
+ int i = Integer.parseInt(bText.getText());\r
+ bScroller.setValue(i);\r
+ }catch(NumberFormatException ex){}\r
+\r
+ }\r
+\r
+\r
+ protected void rScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
+ R = rScroller.getValue();\r
+ rText.setText(R+"");\r
+ colourChanged();\r
+ }\r
+\r
+ protected void gScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
+ G = gScroller.getValue();\r
+ gText.setText(G+"");\r
+ colourChanged();\r
+ }\r
+\r
+ protected void bScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
+ B = bScroller.getValue();\r
+ bText.setText(B+"");\r
+ colourChanged();\r
+ }\r
+\r
+ public void colourChanged()\r
+ {\r
+ Color col = new Color(R,G,B);\r
+ target.setBackground( col );\r
+\r
+ if(selectedButton!=null)\r
+ selectedButton.setBackground( col );\r
+ }\r
+\r
+ public void colourButtonPressed(MouseEvent e)\r
+ {\r
+ selectedButton = (Button)e.getSource();\r
+ Color col = selectedButton.getBackground();\r
+ R = col.getRed();\r
+ G = col.getGreen();\r
+ B = col.getBlue();\r
+ rScroller.setValue(R);\r
+ gScroller.setValue(G);\r
+ bScroller.setValue(B);\r
+ rText.setText(R+"");\r
+ gText.setText(G+"");\r
+ bText.setText(B+"");\r
+\r
+ colourChanged();\r
+ }\r
+\r
+ void makeButton(String label, String aa)\r
+ {\r
+ final Button button = new Button();\r
+ Color col = Color.white;\r
+\r
+\r
+ try{\r
+ col = oldColourScheme.findColour(aa, -1);\r
+ }catch(Exception ex){}\r
+\r
+ button.setBackground( col );\r
+ oldColours.addElement( col );\r
+ button.setLabel( label );\r
+ button.setForeground( col.darker().darker().darker() );\r
+ button.setFont(new java.awt.Font("Verdana", 1, 10));\r
+ button.addMouseListener(new java.awt.event.MouseAdapter()\r
+ {\r
+ public void mouseClicked(MouseEvent e)\r
+ {\r
+ colourButtonPressed(e);\r
+ }\r
+ });\r
+\r
+ buttonPanel.add(button, null);\r
+ }\r
+\r
+\r
+ protected void okButton_actionPerformed(ActionEvent e)\r
+ {\r
+ applyButton_actionPerformed(null);\r
+ frame.setVisible(false);\r
+ }\r
+\r
+ protected void applyButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ Color [] newColours = new Color[24];\r
+ for(int i=0; i<24; i++)\r
+ {\r
+ Button button = (Button)buttonPanel.getComponent(i);\r
+ newColours[i] = button.getBackground();\r
+ }\r
+\r
+ UserColourScheme ucs = new UserColourScheme();\r
+ ucs.setThreshold(0);\r
+ ucs.setColourScheme( newColours );\r
+\r
+ if(seqGroup!=null)\r
+ seqGroup.cs = ucs;\r
+ else\r
+ ap.av.setGlobalColourScheme(ucs);\r
+\r
+ ap.repaint();\r
+ }\r
+\r
+\r
+ public static UserColourScheme loadDefaultColours(String file)\r
+ {\r
+ UserColourScheme ucs = null;\r
+ try\r
+ {\r
+ BufferedReader in = new BufferedReader(new FileReader(file));\r
+ Color [] newColours = new Color[24];\r
+ for (int i = 0; i < 24; i++)\r
+ {\r
+ newColours[i] = new Color(Integer.parseInt(in.readLine()));\r
+ }\r
+\r
+ ucs = new UserColourScheme();\r
+ ucs.setThreshold(0);\r
+ ucs.setColourScheme(newColours);\r
+\r
+ }\r
+ catch (Exception ex)\r
+ {}\r
+\r
+ return ucs;\r
+ }\r
+\r
+\r
+ protected void cancelButton_actionPerformed(ActionEvent e)\r
+ {\r
+ UserColourScheme ucs = new UserColourScheme();\r
+ Color [] newColours = new Color[24];\r
+ for(int i=0; i<24; i++)\r
+ {\r
+ newColours[i] = (Color)oldColours.elementAt(i);\r
+ buttonPanel.getComponent(i).setBackground(newColours[i]);\r
+ }\r
+\r
+ ucs.setColourScheme( newColours );\r
+ if (seqGroup != null)\r
+ seqGroup.cs = ucs;\r
+ else\r
+ ap.av.setGlobalColourScheme(ucs);\r
+\r
+ ap.repaint();\r
+\r
+ frame.setVisible(false);\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.bin;\r
+\r
+import java.applet.*;\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+import jalview.datamodel.*;\r
+import jalview.io.*;\r
+import jalview.appletgui.AlignFrame;\r
+\r
+public class JalviewLite extends Applet\r
+{\r
+ static int lastFrameX = 200;\r
+ static int lastFrameY = 200;\r
+ static Applet applet;\r
+ boolean fileFound = true;\r
+ String file = "No file";\r
+ Button launcher = new Button("Start Jalview");\r
+\r
+ public void init()\r
+ {\r
+ applet = this;\r
+ this.setBackground(Color.white);\r
+\r
+ file = getParameter("file");\r
+ if (file != null)\r
+ {\r
+ add(launcher);\r
+ file = applet.getCodeBase() + file;\r
+ launcher.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ String format = jalview.io.IdentifyFile.Identify( file, "URL");\r
+ LoadFile(file, "URL", format);\r
+ }\r
+ });\r
+ }\r
+ else\r
+ {\r
+ file = "NO FILE";\r
+ fileFound = false;\r
+ }\r
+ }\r
+\r
+\r
+ public static void showURL(String url)\r
+ {\r
+ try{\r
+ applet.getAppletContext().showDocument(new java.net.URL(url), "HELP_WINDOW");\r
+ }catch(Exception ex){}\r
+ }\r
+\r
+ public void LoadFile(String file, String protocol, String format)\r
+ {\r
+ LoadingThread loader = new LoadingThread(file, protocol, format, this);\r
+ loader.start();\r
+ }\r
+\r
+ public static void addFrame(final Frame frame, String title, int width, int height)\r
+ {\r
+ frame.setLocation(lastFrameX,lastFrameY);\r
+ lastFrameX+=40; lastFrameY+=40;\r
+ frame.setSize(width,height);\r
+ frame.setTitle(title);\r
+ frame.addWindowListener(new WindowAdapter()\r
+ {\r
+ public void windowClosing(WindowEvent e)\r
+ {\r
+ frame.dispose();\r
+ }\r
+ });\r
+ frame.setVisible(true);\r
+ }\r
+\r
+\r
+ public void paint(Graphics g)\r
+ {\r
+ if(!fileFound)\r
+ {\r
+ g.setColor(new Color(200,200,200));\r
+ g.setColor(Color.cyan);\r
+ g.fillRect(0,0,getSize().width, getSize().height);\r
+ g.setColor(Color.red);\r
+ g.drawString("Jalview can't open file", 5, 15);\r
+ g.drawString("\""+ file+"\"", 5, 30);\r
+ }\r
+ }\r
+\r
+ class LoadingThread extends Thread\r
+ {\r
+ String file, protocol, format;\r
+ JalviewLite jlapplet;\r
+\r
+ public LoadingThread(String file, String protocol, String format, JalviewLite applet)\r
+ {\r
+ this.file = file;\r
+ this.protocol = protocol;\r
+ this.format = format;\r
+ this.jlapplet = applet;\r
+ }\r
+ public void run()\r
+ {\r
+ SequenceI [] sequences = null;\r
+ sequences = FormatAdapter.readFile(file, protocol, format);\r
+\r
+ if (sequences != null && sequences.length>0)\r
+ {\r
+ AlignFrame af = new AlignFrame(new Alignment(sequences), jlapplet );\r
+ addFrame(af, file, AlignFrame.NEW_WINDOW_WIDTH, AlignFrame.NEW_WINDOW_HEIGHT);\r
+ af.statusBar.setText("Successfully loaded file " + file);\r
+ }\r
+ else\r
+ {\r
+ fileFound = false;\r
+ remove(launcher);\r
+ repaint();\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+\r
--- /dev/null
+/********************\r
+ * 2004 Jalview Reengineered\r
+ * Barton Group\r
+ * Dundee University\r
+ *\r
+ * AM Waterhouse\r
+ *******************/\r
+\r
+package jalview.jbappletgui;\r
+\r
+import java.awt.event.*;\r
+import java.awt.*;\r
+\r
+public class GAlignFrame extends Frame\r
+{\r
+ protected MenuBar alignFrameMenuBar = new MenuBar();\r
+ protected Menu fileMenu = new Menu();\r
+ protected MenuItem closeMenuItem = new MenuItem();\r
+ protected Menu editMenu = new Menu();\r
+ protected Menu viewMenu = new Menu();\r
+ protected Menu colourMenu = new Menu();\r
+ protected Menu calculateMenu = new Menu();\r
+ protected MenuItem selectAllSequenceMenuItem = new MenuItem();\r
+ protected MenuItem deselectAllSequenceMenuItem = new MenuItem();\r
+ protected MenuItem invertSequenceMenuItem = new MenuItem();\r
+ protected MenuItem remove2LeftMenuItem = new MenuItem();\r
+ protected MenuItem remove2RightMenuItem = new MenuItem();\r
+ protected MenuItem removeGappedColumnMenuItem = new MenuItem();\r
+ protected MenuItem removeAllGapsMenuItem = new MenuItem();\r
+ protected CheckboxMenuItem viewBoxesMenuItem = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem viewTextMenuItem = new CheckboxMenuItem();\r
+ protected MenuItem sortPairwiseMenuItem = new MenuItem();\r
+ protected MenuItem sortIDMenuItem = new MenuItem();\r
+ protected MenuItem sortGroupMenuItem = new MenuItem();\r
+ protected MenuItem removeRedundancyMenuItem = new MenuItem();\r
+ protected MenuItem pairwiseAlignmentMenuItem = new MenuItem();\r
+ protected MenuItem PCAMenuItem = new MenuItem();\r
+ protected MenuItem averageDistanceTreeMenuItem = new MenuItem();\r
+ protected MenuItem neighbourTreeMenuItem = new MenuItem();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ public Label statusBar = new Label();\r
+ protected Menu outputTextboxMenu = new Menu();\r
+ protected MenuItem clustalColour = new MenuItem();\r
+ protected MenuItem zappoColour = new MenuItem();\r
+ protected MenuItem taylorColour = new MenuItem();\r
+ protected MenuItem hydrophobicityColour = new MenuItem();\r
+ protected MenuItem helixColour = new MenuItem();\r
+ protected MenuItem strandColour = new MenuItem();\r
+ protected MenuItem turnColour = new MenuItem();\r
+ protected MenuItem buriedColour = new MenuItem();\r
+ protected MenuItem userDefinedColour = new MenuItem();\r
+ protected MenuItem PIDColour = new MenuItem();\r
+ protected MenuItem BLOSUM62Colour = new MenuItem();\r
+ MenuItem njTreeBlosumMenuItem = new MenuItem();\r
+ MenuItem avDistanceTreeBlosumMenuItem = new MenuItem();\r
+ protected CheckboxMenuItem annotationPanelMenuItem = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem colourTextMenuItem = new CheckboxMenuItem();\r
+ MenuItem overviewMenuItem = new MenuItem();\r
+ protected MenuItem undoMenuItem = new MenuItem();\r
+ protected MenuItem redoMenuItem = new MenuItem();\r
+ protected CheckboxMenuItem conservationMenuItem = new CheckboxMenuItem();\r
+ MenuItem noColourmenuItem = new MenuItem();\r
+ protected CheckboxMenuItem wrapMenuItem = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem renderGapsMenuItem = new CheckboxMenuItem();\r
+ MenuItem findMenuItem = new MenuItem();\r
+ Menu searchMenu = new Menu();\r
+ protected CheckboxMenuItem abovePIDThreshold = new CheckboxMenuItem();\r
+ protected MenuItem nucleotideColour = new MenuItem();\r
+ MenuItem deleteGroups = new MenuItem();\r
+ MenuItem delete = new MenuItem();\r
+ MenuItem copy = new MenuItem();\r
+ MenuItem cut = new MenuItem();\r
+ Menu Menu1 = new Menu();\r
+ MenuItem pasteNew = new MenuItem();\r
+ MenuItem pasteThis = new MenuItem();\r
+ protected CheckboxMenuItem applyToAllGroups = new CheckboxMenuItem();\r
+ protected MenuItem font = new MenuItem();\r
+ protected CheckboxMenuItem fullSeqId = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem scaleAbove = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem scaleLeft = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem scaleRight = new CheckboxMenuItem();\r
+ MenuItem modifyPID = new MenuItem();\r
+ MenuItem modifyConservation = new MenuItem();\r
+ protected Menu sortByTreeMenu = new Menu();\r
+ Menu sort = new Menu();\r
+ Menu calculate = new Menu();\r
+ MenuItem inputText = new MenuItem();\r
+ Menu helpMenu = new Menu();\r
+ MenuItem documentation = new MenuItem();\r
+ MenuItem about = new MenuItem();\r
+ public GAlignFrame()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ setMenuBar(alignFrameMenuBar);\r
+\r
+ MenuItem item;\r
+ // dynamically fill save as menu with available formats\r
+ for (int i = 0; i < jalview.io.FormatAdapter.formats.size(); i++) {\r
+ item = new MenuItem((String) jalview.io.FormatAdapter.formats.elementAt(i));\r
+ item.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ saveAs_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ item = new MenuItem((String) jalview.io.FormatAdapter.formats.elementAt(i));\r
+ item.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ outputText_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ outputTextboxMenu.add( item );\r
+ }\r
+\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ fileMenu.setLabel("File");\r
+ closeMenuItem.setLabel("Close");\r
+ closeMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ closeMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ editMenu.setLabel("Edit");\r
+ viewMenu.setLabel("View");\r
+ colourMenu.setLabel("Colour");\r
+ calculateMenu.setLabel("Calculate");\r
+ selectAllSequenceMenuItem.setLabel("Select all");\r
+ selectAllSequenceMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ selectAllSequenceMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ deselectAllSequenceMenuItem.setLabel("Deselect All");\r
+ deselectAllSequenceMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ deselectAllSequenceMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ invertSequenceMenuItem.setLabel("Invert Selection");\r
+ invertSequenceMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ invertSequenceMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ remove2LeftMenuItem.setLabel("Remove Left");\r
+ remove2LeftMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ remove2LeftMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ remove2RightMenuItem.setLabel("Remove Right");\r
+ remove2RightMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ remove2RightMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ removeGappedColumnMenuItem.setLabel("Remove Empty Columns");\r
+ removeGappedColumnMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ removeGappedColumnMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ removeAllGapsMenuItem.setLabel("Remove All Gaps");\r
+ removeAllGapsMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ removeAllGapsMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ viewBoxesMenuItem.setLabel("Boxes");\r
+ viewBoxesMenuItem.setState(true);\r
+ viewBoxesMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ viewBoxesMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ viewTextMenuItem.setLabel("Text");\r
+ viewTextMenuItem.setState(true);\r
+ viewTextMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ viewTextMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ sortPairwiseMenuItem.setLabel("Pairwise Identity");\r
+ sortPairwiseMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sortPairwiseMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ sortIDMenuItem.setLabel("ID");\r
+ sortIDMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sortIDMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ sortGroupMenuItem.setLabel("Group");\r
+ sortGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sortGroupMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ removeRedundancyMenuItem.setLabel("Remove Redundancy...");\r
+ removeRedundancyMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ removeRedundancyMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ pairwiseAlignmentMenuItem.setLabel("Pairwise Alignments...");\r
+ pairwiseAlignmentMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ pairwiseAlignmentMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ PCAMenuItem.setLabel("Principal Component Analysis...");\r
+ PCAMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ PCAMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ averageDistanceTreeMenuItem.setLabel("Average Distance Using % Identity...");\r
+ averageDistanceTreeMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ averageDistanceTreeMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ neighbourTreeMenuItem.setLabel("Neighbour Joining Using % Identity...");\r
+ neighbourTreeMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ neighbourTreeMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ alignFrameMenuBar.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ statusBar.setBackground(Color.white);\r
+ statusBar.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ statusBar.setText("Status bar");\r
+ outputTextboxMenu.setLabel("Output to Textbox");\r
+ clustalColour.setLabel("Clustalx");\r
+\r
+ clustalColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ clustalColour_actionPerformed(e);\r
+ }\r
+ });\r
+ zappoColour.setLabel("Zappo");\r
+ zappoColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ zappoColour_actionPerformed(e);\r
+ }\r
+ });\r
+ taylorColour.setLabel("Taylor");\r
+ taylorColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ taylorColour_actionPerformed(e);\r
+ }\r
+ });\r
+ hydrophobicityColour.setLabel("Hydrophobicity");\r
+ hydrophobicityColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ hydrophobicityColour_actionPerformed(e);\r
+ }\r
+ });\r
+ helixColour.setLabel("Helix Propensity");\r
+ helixColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ helixColour_actionPerformed(e);\r
+ }\r
+ });\r
+ strandColour.setLabel("Strand Propensity");\r
+ strandColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ strandColour_actionPerformed(e);\r
+ }\r
+ });\r
+ turnColour.setLabel("Turn Propensity");\r
+ turnColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ turnColour_actionPerformed(e);\r
+ }\r
+ });\r
+ buriedColour.setLabel("Buried Index");\r
+ buriedColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ buriedColour_actionPerformed(e);\r
+ }\r
+ });\r
+ userDefinedColour.setLabel("User Defined...");\r
+ userDefinedColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ userDefinedColour_actionPerformed(e);\r
+ }\r
+ });\r
+ PIDColour.setLabel("Percentage Identity");\r
+ PIDColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ PIDColour_actionPerformed(e);\r
+ }\r
+ });\r
+ BLOSUM62Colour.setLabel("BLOSUM62 Score");\r
+ BLOSUM62Colour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ BLOSUM62Colour_actionPerformed(e);\r
+ }\r
+ });\r
+ avDistanceTreeBlosumMenuItem.setLabel("Average Distance using BLOSUM62...");\r
+ avDistanceTreeBlosumMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ avTreeBlosumMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ njTreeBlosumMenuItem.setLabel("Neighbour Joining using BLOSUM62...");\r
+ njTreeBlosumMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ njTreeBlosumMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ annotationPanelMenuItem.setActionCommand("");\r
+ annotationPanelMenuItem.setState(true);\r
+ annotationPanelMenuItem.setLabel("Show Annotations");\r
+ annotationPanelMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ annotationPanelMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ colourTextMenuItem.setLabel("Colour Text");\r
+ colourTextMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ colourTextMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ overviewMenuItem.setLabel("Overview Window...");\r
+ overviewMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ overviewMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ undoMenuItem.setEnabled(false);\r
+ undoMenuItem.setLabel("Undo");\r
+ undoMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ undoMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ redoMenuItem.setEnabled(false);\r
+ redoMenuItem.setLabel("Redo");\r
+ redoMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ redoMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ conservationMenuItem.setLabel("By Conservation");\r
+ conservationMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ conservationMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ noColourmenuItem.setLabel("None");\r
+ noColourmenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ noColourmenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ wrapMenuItem.setLabel("Wrap");\r
+ wrapMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ wrapMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ renderGapsMenuItem.setLabel("Show Gaps");\r
+ renderGapsMenuItem.setState(true);\r
+ renderGapsMenuItem.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+\r
+ renderGapsMenuItem_actionPerformed(null);\r
+ }\r
+ });\r
+ findMenuItem.setLabel("Find...");\r
+ findMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ findMenuItem_actionPerformed(e);\r
+ }\r
+ });\r
+ searchMenu.setLabel("Search");\r
+\r
+ abovePIDThreshold.setLabel("Above Identity threshold");\r
+ abovePIDThreshold.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ abovePIDThreshold_actionPerformed(null);\r
+ }\r
+ });\r
+ nucleotideColour.setLabel("Nucleotide");\r
+ nucleotideColour.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ nucleotideColour_actionPerformed(e);\r
+ }\r
+ });\r
+ deleteGroups.setLabel("Undefine groups");\r
+ deleteGroups.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ deleteGroups_actionPerformed(e);\r
+ }\r
+ });\r
+ copy.setLabel("Copy");\r
+ copy.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ copy_actionPerformed(e);\r
+ }\r
+ });\r
+ cut.setLabel("Cut");\r
+ cut.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ cut_actionPerformed(e);\r
+ }\r
+ });\r
+ delete.setLabel("Delete");\r
+ delete.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ delete_actionPerformed(e);\r
+ }\r
+ });\r
+ Menu1.setLabel("Paste");\r
+ pasteNew.setLabel("to new alignment");\r
+ pasteNew.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ pasteNew_actionPerformed(e);\r
+ }\r
+ });\r
+ pasteThis.setLabel("add to this alignment");\r
+ pasteThis.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ pasteThis_actionPerformed(e);\r
+ }\r
+ });\r
+ applyToAllGroups.setLabel("Apply Colour To All Groups");\r
+ applyToAllGroups.setState(true);\r
+ applyToAllGroups.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ applyToAllGroups_actionPerformed(null);\r
+ }\r
+ });\r
+ font.setLabel("Font...");\r
+ font.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ font_actionPerformed(e);\r
+ }\r
+ });\r
+ fullSeqId.setLabel("Show Full Sequence ID");\r
+ fullSeqId.setState(true);\r
+ fullSeqId.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ fullSeqId_actionPerformed(null);\r
+ }\r
+ });\r
+ scaleAbove.setLabel("Scale Above");\r
+ scaleAbove.setState(true);\r
+ scaleAbove.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+\r
+ scaleAbove_actionPerformed(null);\r
+ }\r
+ });\r
+ scaleLeft.setEnabled(false);\r
+ scaleLeft.setState(true);\r
+ scaleLeft.setLabel("Scale Left");\r
+ scaleLeft.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+\r
+ scaleLeft_actionPerformed(null);\r
+ }\r
+ });\r
+ scaleRight.setEnabled(false);\r
+ scaleRight.setState(true);\r
+ scaleRight.setLabel("Scale Right");\r
+ scaleRight.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+\r
+ scaleRight_actionPerformed(null);\r
+ }\r
+ });\r
+ modifyPID.setLabel("Modify Identity Threshold...");\r
+ modifyPID.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ modifyPID_actionPerformed(e);\r
+ }\r
+ });\r
+ modifyConservation.setLabel("Modify Conservation Threshold...");\r
+ modifyConservation.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ modifyConservation_actionPerformed(e);\r
+ }\r
+ });\r
+ sortByTreeMenu.setLabel("Tree Order");\r
+ sort.setLabel("Sort");\r
+ calculate.setLabel("Calculate Tree");\r
+ inputText.setLabel("Input from textbox");\r
+ inputText.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ inputText_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ helpMenu.setLabel("Help");\r
+ documentation.setLabel("Documentation");\r
+ documentation.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ documentation_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ about.setLabel("About...");\r
+ about.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ about_actionPerformed(e);\r
+ }\r
+ });\r
+\r
+ alignFrameMenuBar.add(fileMenu);\r
+ alignFrameMenuBar.add(editMenu);\r
+ alignFrameMenuBar.add(searchMenu);\r
+ alignFrameMenuBar.add(viewMenu);\r
+ alignFrameMenuBar.add(colourMenu);\r
+ alignFrameMenuBar.add(calculateMenu);\r
+ alignFrameMenuBar.add(helpMenu);\r
+ fileMenu.add(inputText);\r
+ fileMenu.add(outputTextboxMenu);\r
+ fileMenu.addSeparator();\r
+ fileMenu.add(closeMenuItem);\r
+ editMenu.add(undoMenuItem);\r
+ editMenu.add(redoMenuItem);\r
+ editMenu.add(cut);\r
+ editMenu.add(copy);\r
+ editMenu.add(Menu1);\r
+ editMenu.add(delete);\r
+ editMenu.add(selectAllSequenceMenuItem);\r
+ editMenu.add(deselectAllSequenceMenuItem);\r
+ editMenu.add(invertSequenceMenuItem);\r
+ editMenu.add(deleteGroups);\r
+ editMenu.addSeparator();\r
+ editMenu.add(remove2LeftMenuItem);\r
+ editMenu.add(remove2RightMenuItem);\r
+ editMenu.add(removeGappedColumnMenuItem);\r
+ editMenu.add(removeAllGapsMenuItem);\r
+ editMenu.add(removeRedundancyMenuItem);\r
+ searchMenu.add(findMenuItem);\r
+ viewMenu.add(font);\r
+ viewMenu.add(fullSeqId);\r
+ viewMenu.addSeparator();\r
+ viewMenu.add(wrapMenuItem);\r
+ viewMenu.add(scaleAbove);\r
+ viewMenu.add(scaleLeft);\r
+ viewMenu.add(scaleRight);\r
+ viewMenu.addSeparator();\r
+ viewMenu.add(viewBoxesMenuItem);\r
+ viewMenu.add(viewTextMenuItem);\r
+ viewMenu.add(colourTextMenuItem);\r
+ viewMenu.add(renderGapsMenuItem);\r
+ viewMenu.add(annotationPanelMenuItem);\r
+ viewMenu.addSeparator();\r
+ viewMenu.add(overviewMenuItem);\r
+ colourMenu.add(applyToAllGroups);\r
+ colourMenu.add(noColourmenuItem);\r
+ colourMenu.addSeparator();\r
+ colourMenu.add(clustalColour);\r
+ colourMenu.add(BLOSUM62Colour);\r
+ colourMenu.add(PIDColour);\r
+ colourMenu.add(zappoColour);\r
+ colourMenu.add(taylorColour);\r
+ colourMenu.add(hydrophobicityColour);\r
+ colourMenu.add(helixColour);\r
+ colourMenu.add(strandColour);\r
+ colourMenu.add(turnColour);\r
+ colourMenu.add(buriedColour);\r
+ colourMenu.add(nucleotideColour);\r
+ colourMenu.add(userDefinedColour);\r
+ colourMenu.addSeparator();\r
+ colourMenu.add(conservationMenuItem);\r
+ colourMenu.add(modifyConservation);\r
+ colourMenu.add(abovePIDThreshold);\r
+ colourMenu.add(modifyPID);\r
+ calculateMenu.add(sort);\r
+ calculateMenu.add(calculate);\r
+ calculateMenu.addSeparator();\r
+ calculateMenu.add(pairwiseAlignmentMenuItem);\r
+ calculateMenu.add(PCAMenuItem);\r
+ this.add(statusBar, BorderLayout.SOUTH);\r
+ Menu1.add(pasteNew);\r
+ Menu1.add(pasteThis);\r
+ sort.add(sortIDMenuItem);\r
+ sort.add(sortGroupMenuItem);\r
+ sort.add(sortByTreeMenu);\r
+ sort.add(sortPairwiseMenuItem);\r
+ calculate.add(averageDistanceTreeMenuItem);\r
+ calculate.add(neighbourTreeMenuItem);\r
+ calculate.add(avDistanceTreeBlosumMenuItem);\r
+ calculate.add(njTreeBlosumMenuItem);\r
+ helpMenu.add(documentation);\r
+ helpMenu.add(about);\r
+ }\r
+\r
+ protected void saveAs_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void outputText_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void htmlMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void closeMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void redoMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void undoMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void selectAllSequenceMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void deselectAllSequenceMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void invertSequenceMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void remove2LeftMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void remove2RightMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void removeGappedColumnMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void removeAllGapsMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void wrapMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void viewBoxesMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void viewTextMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void colourTextMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void annotationPanelMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void overviewMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void sortPairwiseMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void sortIDMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void sortGroupMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void removeRedundancyMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void pairwiseAlignmentMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void PCAMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void averageDistanceTreeMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void neighbourTreeMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void njTreeBlosumMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void avTreeBlosumMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+\r
+ protected void clustalAlignMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+\r
+\r
+ protected void clustalColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void zappoColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void taylorColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void hydrophobicityColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void helixColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void strandColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void turnColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void buriedColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+\r
+ protected void userDefinedColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void PIDColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void BLOSUM62Colour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void noColourmenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void conservationMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void printMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void renderGapsMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void findMenuItem_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void abovePIDThreshold_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ public void sequenceFeatures_actionPerformed(ActionEvent actionEvent)\r
+ {\r
+\r
+ }\r
+\r
+ protected void nucleotideColour_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void deleteGroups_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void copy_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void cut_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void delete_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void pasteNew_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void pasteThis_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void applyToAllGroups_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void createPNG_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void font_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void fullSeqId_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void epsFile_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void LoadtreeMenuItem_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void jpred_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void scaleAbove_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void scaleLeft_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void scaleRight_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void modifyPID_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void modifyConservation_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void preferences_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void msaAlignMenuItem_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void inputText_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void documentation_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void about_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+\r
+}\r
+\r
--- /dev/null
+/********************\r
+ * 2004 Jalview Reengineered\r
+ * Barton Group\r
+ * Dundee University\r
+ *\r
+ * AM Waterhouse\r
+ *******************/\r
+\r
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+\r
+public class GAlignmentPanel extends Panel\r
+{\r
+ protected Panel sequenceHolderPanel = new Panel();\r
+ protected Scrollbar vscroll = new Scrollbar();\r
+ protected Scrollbar hscroll = new Scrollbar();\r
+ protected Panel seqPanelHolder = new Panel();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ BorderLayout borderLayout3 = new BorderLayout();\r
+ protected Panel scalePanelHolder = new Panel();\r
+ protected Panel idPanelHolder = new Panel();\r
+ BorderLayout borderLayout5 = new BorderLayout();\r
+ protected Panel idSpaceFillerPanel1 = new Panel();\r
+ public Panel annotationSpaceFillerHolder = new Panel();\r
+ BorderLayout borderLayout6 = new BorderLayout();\r
+ BorderLayout borderLayout7 = new BorderLayout();\r
+ Panel hscrollHolder = new Panel();\r
+ BorderLayout borderLayout10 = new BorderLayout();\r
+ protected Panel hscrollFillerPanel = new Panel();\r
+ BorderLayout borderLayout11 = new BorderLayout();\r
+ public ScrollPane annotationScroller = new ScrollPane( ScrollPane.SCROLLBARS_NEVER );\r
+ BorderLayout borderLayout4 = new BorderLayout();\r
+\r
+ public GAlignmentPanel()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ // idPanelHolder.setPreferredSize(new Dimension(70, 10));\r
+ this.setLayout(borderLayout7);\r
+ // sequenceHolderPanel.setPreferredSize(new Dimension(150, 150));\r
+ sequenceHolderPanel.setLayout(borderLayout3);\r
+ seqPanelHolder.setLayout(borderLayout1);\r
+ scalePanelHolder.setBackground(Color.white);\r
+ // scalePanelHolder.setPreferredSize(new Dimension(10, 30));\r
+ scalePanelHolder.setLayout(borderLayout6);\r
+ idPanelHolder.setLayout(borderLayout5);\r
+ idSpaceFillerPanel1.setBackground(Color.white);\r
+ // idSpaceFillerPanel1.setPreferredSize(new Dimension(10, 30));\r
+ idSpaceFillerPanel1.setLayout(borderLayout11);\r
+ annotationSpaceFillerHolder.setBackground(Color.white);\r
+ // annotationSpaceFillerHolder.setPreferredSize(new Dimension(10, 80));\r
+ annotationSpaceFillerHolder.setLayout(borderLayout4);\r
+ hscroll.setOrientation(Scrollbar.HORIZONTAL);\r
+ hscrollHolder.setLayout(borderLayout10);\r
+ hscrollFillerPanel.setBackground(Color.white);\r
+ // hscrollFillerPanel.setPreferredSize(new Dimension(70, 10));\r
+ hscrollHolder.setBackground(Color.white);\r
+ // annotationScroller.setPreferredSize(new Dimension(10, 80));\r
+ // this.setPreferredSize(new Dimension(220, 166));\r
+ seqPanelHolder.setBackground(Color.white);\r
+ idPanelHolder.setBackground(Color.white);\r
+ sequenceHolderPanel.add(scalePanelHolder, BorderLayout.NORTH);\r
+ sequenceHolderPanel.add(seqPanelHolder, BorderLayout.CENTER);\r
+ seqPanelHolder.add(vscroll, BorderLayout.EAST);\r
+ sequenceHolderPanel.add(annotationScroller, BorderLayout.SOUTH);\r
+ // Panel3.add(secondaryPanelHolder, BorderLayout.SOUTH);\r
+ this.add(idPanelHolder, BorderLayout.WEST);\r
+ idPanelHolder.add(idSpaceFillerPanel1, BorderLayout.NORTH);\r
+ idPanelHolder.add(annotationSpaceFillerHolder, BorderLayout.SOUTH);\r
+ this.add(hscrollHolder, BorderLayout.SOUTH);\r
+ hscrollHolder.add(hscroll, BorderLayout.CENTER);\r
+ hscrollHolder.add(hscrollFillerPanel, BorderLayout.WEST);\r
+ this.add(sequenceHolderPanel, BorderLayout.CENTER);\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+/********************\r
+ * 2004 Jalview Reengineered\r
+ * Barton Group\r
+ * Dundee University\r
+ *\r
+ * AM Waterhouse\r
+ *******************/\r
+\r
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+\r
+public class GCutAndPasteTransfer extends Panel\r
+{\r
+ protected TextArea textarea = new TextArea();\r
+ protected ScrollPane scrollPane = new ScrollPane();\r
+ Button ok = new Button();\r
+ Button cancel = new Button();\r
+ protected Panel buttonPanel = new Panel();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ public GCutAndPasteTransfer()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ textarea.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ textarea.setText("Paste your alignment file here");\r
+ textarea.addMouseListener(new java.awt.event.MouseAdapter()\r
+ {\r
+ public void mousePressed(MouseEvent e)\r
+ {\r
+ textarea_mousePressed(e);\r
+ }\r
+ });\r
+ this.setLayout(borderLayout1);\r
+ ok.setLabel("OK");\r
+ ok.addActionListener(new java.awt.event.ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ ok_actionPerformed(e);\r
+ }\r
+ });\r
+ cancel.setLabel("Cancel");\r
+ cancel.addActionListener(new java.awt.event.ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ cancel_actionPerformed(e);\r
+ }\r
+ });\r
+ scrollPane.setVisible(true);\r
+ this.add(scrollPane, BorderLayout.CENTER);\r
+ this.add(buttonPanel, BorderLayout.SOUTH);\r
+ buttonPanel.add(ok, null);\r
+ buttonPanel.add(cancel, null);\r
+ scrollPane.add(textarea, null);\r
+\r
+ }\r
+\r
+\r
+\r
+\r
+ void textarea_mousePressed(MouseEvent e)\r
+ {\r
+ if(textarea.getText().equals("Paste your alignment file here"))\r
+ textarea.setText("");\r
+ }\r
+\r
+ protected void ok_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void cancel_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+\r
+public class GFinder extends Panel\r
+{\r
+ Label jLabel1 = new Label();\r
+ protected TextField textfield = new TextField();\r
+ protected Button findAll = new Button();\r
+ protected Button findNext = new Button();\r
+ Panel jPanel1 = new Panel();\r
+ GridLayout gridLayout1 = new GridLayout();\r
+ protected Button createNewGroup = new Button();\r
+\r
+ public GFinder()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ jLabel1.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ jLabel1.setText("Find");\r
+ jLabel1.setBounds(new Rectangle(3, 30, 34, 15));\r
+ this.setLayout(null);\r
+ textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));\r
+ textfield.setText("");\r
+ textfield.setBounds(new Rectangle(40, 27, 133, 21));\r
+ textfield.addKeyListener(new java.awt.event.KeyAdapter()\r
+ {\r
+ public void keyTyped(KeyEvent e)\r
+ {\r
+ textfield_keyTyped(e);\r
+ }\r
+ });\r
+ textfield.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ textfield_actionPerformed(e);\r
+ }\r
+ });\r
+ findAll.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));\r
+ findAll.setLabel("Find all");\r
+ findAll.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ findAll_actionPerformed(e);\r
+ }\r
+ });\r
+ findNext.setEnabled(false);\r
+ findNext.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));\r
+ findNext.setLabel("Find Next");\r
+ findNext.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ findNext_actionPerformed(e);\r
+ }\r
+ });\r
+ jPanel1.setBounds(new Rectangle(180, 5, 141, 64));\r
+ jPanel1.setLayout(gridLayout1);\r
+ gridLayout1.setHgap(0);\r
+ gridLayout1.setRows(3);\r
+ gridLayout1.setVgap(2);\r
+ createNewGroup.setEnabled(false);\r
+ createNewGroup.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10));\r
+ createNewGroup.setLabel("Create new group");\r
+ createNewGroup.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ createNewGroup_actionPerformed(e);\r
+ }\r
+ });\r
+ jPanel1.add(findNext, null);\r
+ jPanel1.add(findAll, null);\r
+ jPanel1.add(createNewGroup, null);\r
+ this.add(textfield, null);\r
+ this.add(jLabel1, null);\r
+ this.add(jPanel1, null);\r
+ }\r
+\r
+ protected void findNext_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void findAll_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+ protected void textfield_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ void textfield_keyTyped(KeyEvent e)\r
+ {\r
+ findNext.setEnabled(true);\r
+ }\r
+\r
+ public void createNewGroup_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+\r
+public class GFontChooser extends Panel\r
+{\r
+ Label label1 = new Label();\r
+ protected Choice fontSize = new Choice();\r
+ protected Choice fontStyle = new Choice();\r
+ Label label2 = new Label();\r
+ Label label3 = new Label();\r
+ protected Choice fontName = new Choice();\r
+ Button ok = new Button();\r
+ Button cancel = new Button();\r
+ Panel panel1 = new Panel();\r
+ Panel panel2 = new Panel();\r
+ Panel panel3 = new Panel();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ BorderLayout borderLayout2 = new BorderLayout();\r
+ BorderLayout borderLayout3 = new BorderLayout();\r
+ Panel panel4 = new Panel();\r
+ Panel panel5 = new Panel();\r
+ BorderLayout borderLayout4 = new BorderLayout();\r
+\r
+ public GFontChooser()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ label1.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ label1.setAlignment(Label.RIGHT);\r
+ label1.setText("Font: ");\r
+ this.setLayout(borderLayout4);\r
+ fontSize.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ fontSize.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ fontSize_actionPerformed();\r
+ }\r
+ });\r
+ fontStyle.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ fontStyle.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ fontStyle_actionPerformed();\r
+ }\r
+ });\r
+ label2.setAlignment(Label.RIGHT);\r
+ label2.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ label2.setText("Size: ");\r
+ label3.setAlignment(Label.RIGHT);\r
+ label3.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ label3.setText("Style: ");\r
+ fontName.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ fontName.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ fontName_actionPerformed();\r
+ }\r
+ });\r
+ ok.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ ok.setLabel("OK");\r
+ ok.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ ok_actionPerformed();\r
+ }\r
+ });\r
+ cancel.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ cancel.setLabel("Cancel");\r
+ cancel.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ cancel_actionPerformed();\r
+ }\r
+ });\r
+ this.setBackground(Color.white);\r
+ panel1.setLayout(borderLayout1);\r
+ panel2.setLayout(borderLayout3);\r
+ panel3.setLayout(borderLayout2);\r
+ panel5.setBackground(Color.white);\r
+ panel4.setBackground(Color.white);\r
+ panel1.setBackground(Color.white);\r
+ panel2.setBackground(Color.white);\r
+ panel3.setBackground(Color.white);\r
+ panel1.add(label1, BorderLayout.WEST);\r
+ panel1.add(fontName, BorderLayout.CENTER);\r
+ panel5.add(panel1, null);\r
+ panel5.add(panel3, null);\r
+ panel5.add(panel2, null);\r
+ panel2.add(label3, BorderLayout.WEST);\r
+ panel2.add(fontStyle, BorderLayout.CENTER);\r
+ panel3.add(label2, BorderLayout.WEST);\r
+ panel3.add(fontSize, BorderLayout.CENTER);\r
+ this.add(panel4, BorderLayout.SOUTH);\r
+ panel4.add(ok, null);\r
+ panel4.add(cancel, null);\r
+ this.add(panel5, BorderLayout.CENTER);\r
+\r
+ }\r
+\r
+ protected void ok_actionPerformed()\r
+ {\r
+\r
+ }\r
+\r
+ protected void cancel_actionPerformed()\r
+ {\r
+\r
+ }\r
+\r
+ protected void fontName_actionPerformed()\r
+ {\r
+\r
+ }\r
+\r
+ protected void fontSize_actionPerformed()\r
+ {\r
+\r
+ }\r
+\r
+ protected void fontStyle_actionPerformed()\r
+ {\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class GPCAPanel extends Panel\r
+{\r
+ Panel jPanel2 = new Panel();\r
+ Label jLabel1 = new Label();\r
+ Label jLabel2 = new Label();\r
+ Label jLabel3 = new Label();\r
+ protected Choice xCombobox = new Choice();\r
+ protected Choice yCombobox = new Choice();\r
+ protected Choice zCombobox = new Choice();\r
+ FlowLayout flowLayout1 = new FlowLayout();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+\r
+ public GPCAPanel()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ for(int i=1; i<8; i++)\r
+ {\r
+ xCombobox.addItem("dim "+i);\r
+ yCombobox.addItem("dim "+i);\r
+ zCombobox.addItem("dim "+i);\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ this.setLayout(borderLayout1);\r
+ jPanel2.setLayout(flowLayout1);\r
+ jLabel1.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ jLabel1.setText("x=");\r
+ jLabel2.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ jLabel2.setText("y=");\r
+ jLabel3.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ jLabel3.setText("z=");\r
+ jPanel2.setBackground(Color.white);\r
+ zCombobox.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ zCombobox.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ zCombobox_actionPerformed(null);\r
+ }\r
+ });\r
+ yCombobox.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ yCombobox.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ yCombobox_actionPerformed(null);\r
+ }\r
+ });\r
+ xCombobox.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ xCombobox.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ xCombobox_actionPerformed(null);\r
+ }\r
+ });\r
+ this.add(jPanel2, BorderLayout.SOUTH);\r
+ jPanel2.add(jLabel1, null);\r
+ jPanel2.add(xCombobox, null);\r
+ jPanel2.add(jLabel2, null);\r
+ jPanel2.add(yCombobox, null);\r
+ jPanel2.add(jLabel3, null);\r
+ jPanel2.add(zCombobox, null);\r
+ }\r
+\r
+ protected void xCombobox_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void yCombobox_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void zCombobox_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+\r
+public class GPairwiseAlignPanel extends Panel\r
+{\r
+ protected ScrollPane scrollPane = new ScrollPane();\r
+ protected TextArea textarea = new TextArea();\r
+ protected Button viewInEditorButton = new Button();\r
+ Panel jPanel1 = new Panel();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+\r
+ public GPairwiseAlignPanel()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ this.setLayout(borderLayout1);\r
+ textarea.setFont(new java.awt.Font("Monospaced", 0, 12));\r
+ textarea.setText("");\r
+ viewInEditorButton.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ viewInEditorButton.setLabel("View in alignment editor");\r
+ viewInEditorButton.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ viewInEditorButton_actionPerformed(e);\r
+ }\r
+ });\r
+ this.add(scrollPane, BorderLayout.CENTER);\r
+ scrollPane.add(textarea);\r
+ this.add(jPanel1, BorderLayout.SOUTH);\r
+ jPanel1.add(viewInEditorButton, null);\r
+ }\r
+\r
+ protected void viewInEditorButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class GSliderPanel extends Panel\r
+{\r
+ // this is used for conservation colours, PID colours and redundancy threshold\r
+ protected Scrollbar slider = new Scrollbar();\r
+ protected TextField valueField = new TextField();\r
+ protected Label label = new Label();\r
+ Panel jPanel1 = new Panel();\r
+ Panel jPanel2 = new Panel();\r
+ protected Button applyButton = new Button();\r
+ protected Button undoButton = new Button();\r
+ FlowLayout flowLayout1 = new FlowLayout();\r
+ protected Checkbox allGroupsCheck = new Checkbox();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ BorderLayout borderLayout2 = new BorderLayout();\r
+ FlowLayout flowLayout2 = new FlowLayout();\r
+\r
+ public GSliderPanel()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ this.setLayout(borderLayout2);\r
+ // slider.setMajorTickSpacing(10);\r
+ // slider.setMinorTickSpacing(1);\r
+ // slider.setPaintTicks(true);\r
+ slider.setBackground(Color.white);\r
+ slider.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ slider.setOrientation(0);\r
+ valueField.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ valueField.setText(" ");\r
+ valueField.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ valueField_actionPerformed(e);\r
+ }\r
+ });\r
+ label.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ label.setText("set this label text");\r
+ jPanel1.setLayout(borderLayout1);\r
+ jPanel2.setLayout(flowLayout1);\r
+ applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ applyButton.setLabel("Apply");\r
+ applyButton.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ applyButton_actionPerformed(e);\r
+ }\r
+ });\r
+ undoButton.setEnabled(false);\r
+ undoButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ undoButton.setLabel("Undo");\r
+ undoButton.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ undoButton_actionPerformed(e);\r
+ }\r
+ });\r
+ allGroupsCheck.setEnabled(false);\r
+ allGroupsCheck.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ allGroupsCheck.setLabel("Apply threshold to all groups");\r
+ allGroupsCheck.setName("Apply to all Groups");\r
+ allGroupsCheck.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ allGroupsCheck_actionPerformed();\r
+ }\r
+ });\r
+ this.setBackground(Color.white);\r
+ this.setForeground(Color.black);\r
+ jPanel2.add(label, null);\r
+ jPanel2.add(applyButton, null);\r
+ jPanel2.add(undoButton, null);\r
+ jPanel2.add(allGroupsCheck);\r
+ jPanel1.add(valueField, java.awt.BorderLayout.EAST);\r
+ jPanel1.add(slider, java.awt.BorderLayout.CENTER);\r
+ this.add(jPanel1, java.awt.BorderLayout.SOUTH);\r
+ this.add(jPanel2, java.awt.BorderLayout.CENTER);\r
+ }\r
+\r
+ protected void valueField_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void applyButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void undoButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void allGroupsCheck_actionPerformed()\r
+ {\r
+\r
+ }\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+public class GTreePanel extends Frame\r
+{\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ protected ScrollPane scrollPane = new ScrollPane();\r
+ MenuBar jMenuBar1 = new MenuBar();\r
+ Menu jMenu2 = new Menu();\r
+ protected MenuItem fontSize = new MenuItem();\r
+ protected CheckboxMenuItem bootstrapMenu = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem distanceMenu = new CheckboxMenuItem();\r
+ protected CheckboxMenuItem fitToWindow = new CheckboxMenuItem();\r
+\r
+ public GTreePanel()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ this.setMenuBar(jMenuBar1);\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ setLayout(borderLayout1);\r
+ this.setBackground(Color.white);\r
+ this.setFont(new java.awt.Font("Verdana", 0, 12));\r
+ jMenu2.setLabel("View");\r
+ fontSize.setLabel("Font Size - 12");\r
+ fontSize.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ fontSize_actionPerformed(e);\r
+ }\r
+ });\r
+ bootstrapMenu.setLabel("Show Bootstrap values");\r
+ bootstrapMenu.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ bootstrapMenu_actionPerformed(null);\r
+ }\r
+ });\r
+ distanceMenu.setLabel("Show Distances");\r
+ distanceMenu.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ distanceMenu_actionPerformed(null);\r
+ }\r
+ });\r
+ fitToWindow.setState(true);\r
+ fitToWindow.setLabel("Fit to window");\r
+ fitToWindow.addItemListener(new java.awt.event.ItemListener()\r
+ {\r
+ public void itemStateChanged(ItemEvent e)\r
+ {\r
+ fitToWindow_actionPerformed(null);\r
+ }\r
+ });\r
+ add(scrollPane, BorderLayout.CENTER);\r
+ jMenuBar1.add(jMenu2);\r
+ jMenu2.add(fitToWindow);\r
+ jMenu2.add(fontSize);\r
+ jMenu2.add(distanceMenu);\r
+ jMenu2.add(bootstrapMenu);\r
+ }\r
+\r
+ protected void saveMenu_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void printMenu_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void fontSize_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void distanceMenu_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void bootstrapMenu_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void fitToWindow_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+}\r
--- /dev/null
+package jalview.jbappletgui;\r
+\r
+import java.awt.*;\r
+import java.awt.event.*;\r
+\r
+\r
+public class GUserDefinedColours extends Panel\r
+{\r
+ protected Panel buttonPanel = new Panel();\r
+ protected GridLayout gridLayout = new GridLayout();\r
+ Panel jPanel2 = new Panel();\r
+ protected Button okButton = new Button();\r
+ protected Button applyButton = new Button();\r
+ protected Button cancelButton = new Button();\r
+ protected Scrollbar rScroller = new Scrollbar();\r
+ Label label1 = new Label();\r
+ Panel panel2 = new Panel();\r
+ BorderLayout borderLayout1 = new BorderLayout();\r
+ protected TextField rText = new TextField();\r
+ Panel panel3 = new Panel();\r
+ Label label4 = new Label();\r
+ protected Scrollbar gScroller = new Scrollbar();\r
+ protected TextField gText = new TextField();\r
+ BorderLayout borderLayout2 = new BorderLayout();\r
+ Panel panel4 = new Panel();\r
+ Label label5 = new Label();\r
+ protected Scrollbar bScroller = new Scrollbar();\r
+ protected TextField bText = new TextField();\r
+ BorderLayout borderLayout3 = new BorderLayout();\r
+ protected Panel target = new Panel();\r
+\r
+ public GUserDefinedColours()\r
+ {\r
+ try\r
+ {\r
+ jbInit();\r
+ }\r
+ catch(Exception e)\r
+ {\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+ private void jbInit() throws Exception\r
+ {\r
+ this.setLayout(null);\r
+ buttonPanel.setLayout(gridLayout);\r
+ gridLayout.setColumns(6);\r
+ gridLayout.setRows(4);\r
+ okButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ okButton.setLabel("OK");\r
+ okButton.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ okButton_actionPerformed(e);\r
+ }\r
+ });\r
+ applyButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ applyButton.setLabel("Apply");\r
+ applyButton.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ applyButton_actionPerformed(e);\r
+ }\r
+ });\r
+ cancelButton.setFont(new java.awt.Font("Verdana", 0, 11));\r
+ cancelButton.setLabel("Cancel");\r
+ cancelButton.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ cancelButton_actionPerformed(e);\r
+ }\r
+ });\r
+ this.setBackground(new Color(212, 208, 223));\r
+ jPanel2.setBounds(new Rectangle(0, 265, 400, 35));\r
+ buttonPanel.setBounds(new Rectangle(0, 123, 400, 142));\r
+ rScroller.setMaximum(255);\r
+ rScroller.setMinimum(0);\r
+ rScroller.setOrientation(0);\r
+ rScroller.setUnitIncrement(1);\r
+ rScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
+ public void adjustmentValueChanged(AdjustmentEvent e) {\r
+ rScroller_adjustmentValueChanged(e);\r
+ }\r
+ });\r
+ label1.setText("R");\r
+ panel2.setBounds(new Rectangle(20, 29, 180, 19));\r
+ panel2.setLayout(borderLayout1);\r
+ rText.setText(" 0");\r
+ rText.addActionListener(new java.awt.event.ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ rText_actionPerformed(e);\r
+ }\r
+ });\r
+ panel3.setLayout(borderLayout2);\r
+ label4.setText("G");\r
+ gScroller.setMaximum(255);\r
+ gScroller.setMinimum(0);\r
+ gScroller.setOrientation(0);\r
+ gScroller.setUnitIncrement(1);\r
+ gScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
+ public void adjustmentValueChanged(AdjustmentEvent e) {\r
+ gScroller_adjustmentValueChanged(e);\r
+ }\r
+ });\r
+ gText.setText(" 0");\r
+ gText.addActionListener(new java.awt.event.ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ gText_actionPerformed(e);\r
+ }\r
+ });\r
+ panel3.setBounds(new Rectangle(19, 54, 181, 20));\r
+ panel4.setLayout(borderLayout3);\r
+ label5.setText("B");\r
+ bScroller.setMaximum(255);\r
+ bScroller.setMinimum(0);\r
+ bScroller.setOrientation(0);\r
+ bScroller.setUnitIncrement(1);\r
+ bScroller.addAdjustmentListener(new java.awt.event.AdjustmentListener() {\r
+ public void adjustmentValueChanged(AdjustmentEvent e) {\r
+ bScroller_adjustmentValueChanged(e);\r
+ }\r
+ });\r
+ bText.setSelectionStart(6);\r
+ bText.setText(" 0");\r
+ bText.addActionListener(new java.awt.event.ActionListener() {\r
+ public void actionPerformed(ActionEvent e) {\r
+ bText_actionPerformed(e);\r
+ }\r
+ });\r
+ panel4.setBounds(new Rectangle(19, 87, 180, 20));\r
+ target.setBackground(Color.black);\r
+ target.setBounds(new Rectangle(229, 26, 134, 79));\r
+ this.add(jPanel2, null);\r
+ jPanel2.add(okButton, null);\r
+ jPanel2.add(applyButton, null);\r
+ jPanel2.add(cancelButton, null);\r
+ this.add(buttonPanel, null);\r
+ panel2.add(label1, BorderLayout.WEST);\r
+ panel2.add(rScroller, BorderLayout.CENTER);\r
+ panel2.add(rText, BorderLayout.EAST);\r
+ this.add(target, null);\r
+ this.add(panel4, null);\r
+ panel3.add(label4, BorderLayout.WEST);\r
+ panel3.add(gScroller, BorderLayout.CENTER);\r
+ panel3.add(gText, BorderLayout.EAST);\r
+ this.add(panel2, null);\r
+ panel4.add(label5, BorderLayout.WEST);\r
+ panel4.add(bScroller, BorderLayout.CENTER);\r
+ panel4.add(bText, BorderLayout.EAST);\r
+ this.add(panel3, null);\r
+ }\r
+\r
+\r
+ protected void okButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void applyButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+\r
+\r
+ protected void cancelButton_actionPerformed(ActionEvent e)\r
+ {\r
+\r
+ }\r
+\r
+ protected void rScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
+\r
+ }\r
+\r
+ protected void gScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
+\r
+ }\r
+\r
+ protected void bScroller_adjustmentValueChanged(AdjustmentEvent e) {\r
+\r
+ }\r
+\r
+ protected void rText_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void gText_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+ protected void bText_actionPerformed(ActionEvent e) {\r
+\r
+ }\r
+\r
+\r
+\r
+\r
+}\r