X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=c1dbf303c2923abee49fb2e73252531e9e5264a7;hb=863467bf6c59c0bc5368c8f3a03d9d5a4f10700d;hp=d2b04f94adeab378c1880084d8521baa8bb539fd;hpb=9e3e20c98eae9498a68bb0a770359564797a12ef;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index d2b04f9..c1dbf30 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) - * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -17,23 +17,78 @@ */ package jalview.appletgui; -import java.net.*; -import java.util.*; - -import java.awt.*; -import java.awt.event.*; - -import jalview.analysis.*; +import jalview.analysis.AAFrequency; +import jalview.analysis.AlignmentSorter; +import jalview.analysis.Conservation; import jalview.api.SequenceStructureBinding; import jalview.bin.JalviewLite; -import jalview.commands.*; -import jalview.datamodel.*; -import jalview.io.*; -import jalview.schemes.*; +import jalview.commands.CommandI; +import jalview.commands.EditCommand; +import jalview.commands.OrderCommand; +import jalview.commands.RemoveGapColCommand; +import jalview.commands.RemoveGapsCommand; +import jalview.commands.SlideSequencesCommand; +import jalview.commands.TrimRegionCommand; +import jalview.datamodel.Alignment; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.AlignmentOrder; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.io.AnnotationFile; +import jalview.io.AppletFormatAdapter; +import jalview.io.FeaturesFile; +import jalview.io.TCoffeeScoreFile; +import jalview.schemes.Blosum62ColourScheme; +import jalview.schemes.BuriedColourScheme; +import jalview.schemes.ClustalxColourScheme; +import jalview.schemes.ColourSchemeI; +import jalview.schemes.HelixColourScheme; +import jalview.schemes.HydrophobicColourScheme; +import jalview.schemes.NucleotideColourScheme; +import jalview.schemes.PIDColourScheme; +import jalview.schemes.ResidueProperties; +import jalview.schemes.StrandColourScheme; +import jalview.schemes.TCoffeeColourScheme; +import jalview.schemes.TaylorColourScheme; +import jalview.schemes.TurnColourScheme; +import jalview.schemes.ZappoColourScheme; import jalview.structure.StructureSelectionManager; -public class AlignFrame extends EmbmenuFrame implements ActionListener, - ItemListener, KeyListener +import java.awt.BorderLayout; +import java.awt.Canvas; +import java.awt.CheckboxMenuItem; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Frame; +import java.awt.Graphics; +import java.awt.Label; +import java.awt.Menu; +import java.awt.MenuBar; +import java.awt.MenuItem; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.net.URLEncoder; +import java.util.Enumeration; +import java.util.Hashtable; +import java.util.StringTokenizer; +import java.util.Vector; + +public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemListener, KeyListener { public AlignmentPanel alignPanel; @@ -44,11 +99,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, int DEFAULT_HEIGHT = 500; String jalviewServletURL; + + TCoffeeScoreFile tcoffeeScoreFile; - public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet, - String title, boolean embedded) + public AlignFrame(AlignmentI al, jalview.bin.JalviewLite applet, String title, boolean embedded) { - if (applet != null) { jalviewServletURL = applet.getParameter("APPLICATION_URL"); @@ -161,14 +216,26 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } /** - * DOCUMENT ME! + * Load a features file onto the alignment * - * @param String - * DOCUMENT ME! + * @param file file URL, content, or other resolvable path + * @param type is protocol for accessing data referred to by file */ public void parseFeaturesFile(String file, String type) { + parseFeaturesFile(file, type, true); + } + + /** + * Load a features file onto the alignment + * + * @param file file URL, content, or other resolvable path + * @param type is protocol for accessing data referred to by file + * @param autoenabledisplay when true, display features flag will be automatically enabled if features are loaded + */ + public void parseFeaturesFile(String file, String type, boolean autoenabledisplay) + { Hashtable featureLinks = new Hashtable(); boolean featuresFile = false; try @@ -188,8 +255,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureLinks = featureLinks; } - viewport.showSequenceFeatures = true; - sequenceFeatures.setState(true); + if (autoenabledisplay) + { + viewport.showSequenceFeatures = true; + sequenceFeatures.setState(true); + } if (viewport.featureSettings != null) { viewport.featureSettings.refreshTable(); @@ -601,6 +671,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { viewport.autocalculateConsensus = autoCalculate.getState(); } + else if (evt.getSource() == sortByTree) + { + viewport.sortByTree = sortByTree.getState(); + } else if (evt.getSource() == this.centreColumnLabelFlag) { centreColumnLabelFlag_stateChanged(); @@ -665,6 +739,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { loadAnnotations(); } + else if( source == loadScores ) { + loadScores(); + } else if (source == outputAnnotations) { outputAnnotations(true); @@ -920,6 +997,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { changeColour(new Blosum62ColourScheme()); } + else if (source == tcoffeeColour) { + changeColour(new TCoffeeColourScheme(tcoffeeScoreFile)); + } else if (source == annotationColour) { new AnnotationColourChooser(viewport, alignPanel); @@ -1009,6 +1089,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300); } + + public void loadScores() { + //TODO + + } public String outputAnnotations(boolean displayTextbox) { @@ -1032,7 +1117,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, private Hashtable getDisplayedFeatureCols() { - if (alignPanel.getFeatureRenderer() != null) + if (alignPanel.getFeatureRenderer() != null && viewport.featuresDisplayed!=null) { FeatureRenderer fr = alignPanel.getFeatureRenderer(); Hashtable fcols = new Hashtable(); @@ -1065,12 +1150,25 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (displayTextbox) { - CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); + boolean frimport=false; + if (features==null || features.equals("No Features Visible")) + { + features = "# No features visible - paste some and import them here."; + frimport=true; + } + + CutAndPasteTransfer cap = new CutAndPasteTransfer(frimport, this); + if (frimport) + { + cap.setAnnotationImport(); + } Frame frame = new Frame(); frame.add(cap); jalview.bin.JalviewLite.addFrame(frame, "Features", 600, 500); - cap.setText(features); + } else { + if (features==null) + features = ""; } return features; @@ -2212,7 +2310,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, cs.setConsensus(viewport.hconsensus); - } + } viewport.setGlobalColourScheme(cs); if (viewport.getColourAppliesToAllGroups()) @@ -2538,7 +2636,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, sortByTree(treePanel, title); // treePanel.getTitle()); } }); - + treePanel.addWindowListener(new WindowAdapter() { public void windowOpened(WindowEvent e) @@ -2572,6 +2670,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, alignPanel.paintAlignment(true); return true; } + protected void documentation_actionPerformed() { alignPanel.av.applet.openJalviewHelpUrl(); @@ -2661,6 +2760,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem loadTree = new MenuItem("Load Associated Tree ..."); MenuItem loadAnnotations = new MenuItem("Load Features/Annotations ..."); + + MenuItem loadScores = new MenuItem("Load Associated T-Coffee scores ..."); MenuItem outputFeatures = new MenuItem("Export Features ..."); @@ -2739,6 +2840,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem PIDColour = new MenuItem(); MenuItem BLOSUM62Colour = new MenuItem(); + + MenuItem tcoffeeColour = new MenuItem(); MenuItem njTreeBlosumMenuItem = new MenuItem(); @@ -2805,6 +2908,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CheckboxMenuItem autoCalculate = new CheckboxMenuItem( "Autocalculate Consensus", true); + CheckboxMenuItem sortByTree = new CheckboxMenuItem( + "Sort Alignment With New Tree", true); + Menu sortByTreeMenu = new Menu(); Menu sort = new Menu(); @@ -2860,6 +2966,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, loadTree.addActionListener(this); loadAnnotations.addActionListener(this); + loadScores.addActionListener(this); outputFeatures.addActionListener(this); outputAnnotations.addActionListener(this); selectAllSequenceMenuItem.addActionListener(this); @@ -2925,8 +3032,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, PIDColour.addActionListener(this); BLOSUM62Colour.setLabel("BLOSUM62 Score"); BLOSUM62Colour.addActionListener(this); - avDistanceTreeBlosumMenuItem - .setLabel("Average Distance Using BLOSUM62"); + tcoffeeColour.setLabel("T-Coffee Scores"); + tcoffeeColour.setEnabled(false); // it will enabled only if a score file is provided + tcoffeeColour.addActionListener(this); + avDistanceTreeBlosumMenuItem .setLabel("Average Distance Using BLOSUM62"); avDistanceTreeBlosumMenuItem.addActionListener(this); njTreeBlosumMenuItem.setLabel("Neighbour Joining Using BLOSUM62"); njTreeBlosumMenuItem.addActionListener(this); @@ -3000,6 +3109,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, sort.setLabel("Sort"); calculate.setLabel("Calculate Tree"); autoCalculate.addItemListener(this); + sortByTree.addItemListener(this); inputText.setLabel("Input from textbox"); inputText.addActionListener(this); centreColumnLabelFlag.setLabel("Centre column labels"); @@ -3070,7 +3180,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, fileMenu.add(inputText); fileMenu.add(loadTree); fileMenu.add(loadAnnotations); - + fileMenu.add(loadScores); + fileMenu.addSeparator(); fileMenu.add(outputTextboxMenu); fileMenu.add(outputFeatures); @@ -3131,6 +3242,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, colourMenu.add(turnColour); colourMenu.add(buriedColour); colourMenu.add(nucleotideColour); + colourMenu.add(tcoffeeColour); colourMenu.add(userDefinedColour); colourMenu.addSeparator(); colourMenu.add(conservationMenuItem); @@ -3144,6 +3256,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, calculateMenu.add(pairwiseAlignmentMenuItem); calculateMenu.add(PCAMenuItem); calculateMenu.add(autoCalculate); + calculateMenu.add(sortByTree); this.add(statusBar, BorderLayout.SOUTH); pasteMenu.add(pasteNew); pasteMenu.add(pasteThis); @@ -3557,4 +3670,27 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public String getSequenceSetId() { return viewport.getSequenceSetId(); } + + + /** + * Load the (T-Coffee) score file from the specified url + * + * @param url The absolute path from where download and read the score file + * @throws IOException + */ + public void loadScoreFile( URL url ) throws IOException { + + TCoffeeScoreFile file = TCoffeeScoreFile.load( new InputStreamReader( url.openStream() ) ); + if( file == null ) { + throw new RuntimeException("The file provided does not match the T-Coffee scores file format"); + } + + tcoffeeColour.setEnabled(true); + tcoffeeScoreFile = file; + + // switch to this color + changeColour(new TCoffeeColourScheme(tcoffeeScoreFile)); + } + + }