+/********************\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