X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=494e8fe1230e0ad3ef6dfb2e3a08688a12db3c6b;hb=c5677e9860106a821a3e6e0429b20ede7b9a732a;hp=0263d722a7a9760088b24a6bc6596029743aa05d;hpb=6403068c0c328cfb63af451f7fa1bd568fa0fdd3;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 0263d72..494e8fe 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,39 +1,107 @@ /* - * 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, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle + * * This file is part of Jalview. - * + * * Jalview is free software: you can redistribute it and/or - * modify it under the terms of the GNU General Public License + * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - * - * Jalview is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty - * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR * PURPOSE. See the GNU General Public License for more details. - * + * * You should have received a copy of the GNU General Public License along with Jalview. If not, see . */ 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.SequenceCollectionI; +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.PurinePyrimidineColourScheme; +import jalview.schemes.RNAHelicesColourChooser; +import jalview.schemes.RNAInteractionColourScheme; +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.List; +import java.util.StringTokenizer; +import java.util.Vector; + +import javax.xml.parsers.ParserConfigurationException; + +import org.xml.sax.SAXException; + +import fr.orsay.lri.varna.exceptions.ExceptionFileFormatOrSyntax; +import fr.orsay.lri.varna.exceptions.ExceptionLoadingFailed; +import fr.orsay.lri.varna.exceptions.ExceptionPermissionDenied; + +public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemListener, KeyListener { public AlignmentPanel alignPanel; @@ -45,10 +113,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, String jalviewServletURL; - 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"); @@ -69,12 +136,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.updateConsensus(alignPanel); annotationPanelMenuItem.setState(viewport.showAnnotation); - displayNonconservedMenuItem.setState(viewport.getShowunconserved()); + displayNonconservedMenuItem.setState(viewport.getShowUnconserved()); followMouseOverFlag.setState(viewport.getFollowHighlight()); - showGroupConsensus.setState(viewport.showGroupConsensus); - showGroupConservation.setState(viewport.showGroupConservation); - showConsensusHistogram.setState(viewport.showConsensusHistogram); - showSequenceLogo.setState(viewport.showSequenceLogo); + showGroupConsensus.setState(viewport.isShowGroupConsensus()); + showGroupConservation.setState(viewport.isShowGroupConservation()); + showConsensusHistogram.setState(viewport.isShowConsensusHistogram()); + showSequenceLogo.setState(viewport.isShowSequenceLogo()); seqLimits.setState(viewport.showJVSuffix); @@ -131,7 +198,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } - + if (viewport.getAlignment().isNucleotide()) + { + viewport.updateStrucConsensus(alignPanel); + if (viewport.getAlignment().hasRNAStructure()) + { + RNAHelixColour.setEnabled(true); + } + else { + RNAHelixColour.setEnabled(false); + } + } else { + RNAHelixColour.setEnabled(false); + purinePyrimidineColour.setEnabled(false); + } + // Some JVMS send keyevents to Top frame or lowest panel, // Havent worked out why yet. So add to both this frame and seqCanvas for // now @@ -161,20 +242,35 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } /** - * DOCUMENT ME! - * - * @param String - * DOCUMENT ME! + * 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 */ - public void parseFeaturesFile(String file, String type) + public boolean parseFeaturesFile(String file, String type) { + return 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 + * @return true if data parsed as a features file + */ + public boolean parseFeaturesFile(String file, String type, boolean autoenabledisplay) + { + // TODO: test if importing a features file onto an alignment which already has features with links overwrites the original links. + Hashtable featureLinks = new Hashtable(); boolean featuresFile = false; try { featuresFile = new jalview.io.FeaturesFile(file, type) - .parse(viewport.alignment, + .parse(viewport.getAlignment(), alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureColours, featureLinks, true, viewport.applet.getDefaultParameter("relaxedidmatch", false)); } catch (Exception ex) @@ -188,17 +284,22 @@ 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(); } alignPanel.paintAlignment(true); + statusBar.setText("Successfully added features to alignment."); } - + return featuresFile; } + @Override public void keyPressed(KeyEvent evt) { if (viewport.cursorMode @@ -212,8 +313,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { case 27: // escape key deselectAllSequenceMenuItem_actionPerformed(); - - alignPanel.alabels.cancelDrag(); + + alignPanel.alabels.cancelDrag(); break; case KeyEvent.VK_X: if (evt.isControlDown() || evt.isMetaDown()) @@ -460,7 +561,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * called by key handler and the hide all/show all menu items - * + * * @param toggleSeqs * @param toggleCols */ @@ -473,7 +574,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // Hide everything by the current selection - this is a hack - we do the // invert and then hide // first check that there will be visible columns after the invert. - if ((viewport.colSel != null && viewport.colSel.getSelected() != null && viewport.colSel + if ((viewport.getColumnSelection() != null && viewport.getColumnSelection().getSelected() != null && viewport.getColumnSelection() .getSelected().size() > 0) || (sg != null && sg.getSize() > 0 && sg.getStartRes() <= sg .getEndRes())) @@ -497,12 +598,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (toggleSeqs) { - if (sg != null && sg.getSize() != viewport.alignment.getHeight()) + if (sg != null && sg.getSize() != viewport.getAlignment().getHeight()) { hide = true; viewport.hideAllSelectedSeqs(); } - else if (!(toggleCols && viewport.colSel.getSelected().size() > 0)) + else if (!(toggleCols && viewport.getColumnSelection().getSelected().size() > 0)) { viewport.showAllHiddenSeqs(); } @@ -510,12 +611,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (toggleCols) { - if (viewport.colSel.getSelected().size() > 0) + if (viewport.getColumnSelection().getSelected().size() > 0) { viewport.hideSelectedColumns(); if (!toggleSeqs) { - viewport.selectionGroup = sg; + viewport.setSelectionGroup(sg); } } else if (!hide) @@ -525,14 +626,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } + @Override public void keyReleased(KeyEvent evt) { } + @Override public void keyTyped(KeyEvent evt) { } + @Override public void itemStateChanged(ItemEvent evt) { if (evt.getSource() == displayNonconservedMenuItem) @@ -599,7 +703,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } else if (evt.getSource() == autoCalculate) { - viewport.autocalculateConsensus = autoCalculate.getState(); + viewport.autoCalculateConsensus = autoCalculate.getState(); } else if (evt.getSource() == sortByTree) { @@ -649,6 +753,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, this.alignPanel.annotationPanel.repaint(); } + @Override public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); @@ -849,7 +954,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (source == alProperties) { StringBuffer contents = new jalview.io.AlignmentProperties( - viewport.alignment).formatAsString(); + viewport.getAlignment()).formatAsString(); CutAndPasteTransfer cap = new CutAndPasteTransfer(false, this); cap.setText(contents.toString()); Frame frame = new Frame(); @@ -868,9 +973,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, else if (source == clustalColour) { abovePIDThreshold.setState(false); - changeColour(new ClustalxColourScheme( - viewport.alignment.getSequences(), - viewport.alignment.getWidth())); + changeColour(new ClustalxColourScheme(viewport.getAlignment(),null)); } else if (source == zappoColour) { @@ -904,6 +1007,18 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { changeColour(new NucleotideColourScheme()); } + else if (source == purinePyrimidineColour) + { + changeColour(new PurinePyrimidineColourScheme()); + } + else if (source == RNAInteractionColour) + { + changeColour(new RNAInteractionColourScheme()); + } + else if (source == RNAHelixColour) + { + new RNAHelicesColourChooser(viewport, alignPanel); + } else if (source == modifyPID) { modifyPID_actionPerformed(); @@ -924,6 +1039,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { changeColour(new Blosum62ColourScheme()); } + else if (source == tcoffeeColour) { + changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); + } else if (source == annotationColour) { new AnnotationColourChooser(viewport, alignPanel); @@ -1006,7 +1124,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void loadAnnotations() { CutAndPasteTransfer cap = new CutAndPasteTransfer(true, this); - cap.setText("Paste your features / annotations file here."); + cap.setText("Paste your features / annotations / T-coffee score file here."); cap.setAnnotationImport(); Frame frame = new Frame(); frame.add(cap); @@ -1017,10 +1135,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public String outputAnnotations(boolean displayTextbox) { String annotation = new AnnotationFile().printAnnotations( - viewport.showAnnotation ? viewport.alignment - .getAlignmentAnnotation() : null, viewport.alignment + viewport.showAnnotation ? viewport.getAlignment() + .getAlignmentAnnotation() : null, viewport.getAlignment() .getGroups(), - ((Alignment) viewport.alignment).alignmentProperties); + ((Alignment) viewport.getAlignment()).alignmentProperties); if (displayTextbox) { @@ -1057,13 +1175,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (format.equalsIgnoreCase("Jalview")) { features = new FeaturesFile().printJalviewFormat( - viewport.alignment.getSequencesArray(), + viewport.getAlignment().getSequencesArray(), getDisplayedFeatureCols()); } else { features = new FeaturesFile().printGFFFormat( - viewport.alignment.getSequencesArray(), + viewport.getAlignment().getSequencesArray(), getDisplayedFeatureCols()); } @@ -1075,7 +1193,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, features = "# No features visible - paste some and import them here."; frimport=true; } - + CutAndPasteTransfer cap = new CutAndPasteTransfer(frimport, this); if (frimport) { @@ -1187,8 +1305,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void closeMenuItem_actionPerformed() { PaintRefresher.RemoveComponent(alignPanel); - PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); - PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); + if (alignPanel.seqPanel!=null && alignPanel.seqPanel.seqCanvas!=null) + { + PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); + } + if (alignPanel.idPanel!=null && alignPanel.idPanel.idCanvas!=null) { + PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); + } if (PaintRefresher.components.size() == 0 && viewport.applet == null) { @@ -1201,7 +1324,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } /** - * DOCUMENT ME! + * TODO: JAL-1104 */ void updateEditMenuBar() { @@ -1232,6 +1355,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } } + /** + * TODO: JAL-1104 + */ public void addHistoryItem(CommandI command) { if (command.getSize() > 0) @@ -1239,13 +1365,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.historyList.push(command); viewport.redoList.removeAllElements(); updateEditMenuBar(); - viewport.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + viewport.updateHiddenColumns(); } } /** + * TODO: JAL-1104 * DOCUMENT ME! - * + * * @param e * DOCUMENT ME! */ @@ -1261,16 +1388,20 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, command.undoCommand(null); AlignViewport originalSource = getOriginatingSource(command); - - originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + // JBPNote Test + if (originalSource!=viewport) { + System.err.println("Warning: Viewport object mismatch whilst undoing"); + } + originalSource.updateHiddenColumns(); // originalSource.hasHiddenColumns = viewport.getColumnSelection().getHiddenColumns() != null; updateEditMenuBar(); originalSource.firePropertyChange("alignment", null, - originalSource.alignment.getSequences()); + originalSource.getAlignment().getSequences()); } /** + * TODO: JAL-1104 * DOCUMENT ME! - * + * * @param e * DOCUMENT ME! */ @@ -1286,11 +1417,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, command.doCommand(null); AlignViewport originalSource = getOriginatingSource(command); - originalSource.hasHiddenColumns = viewport.colSel.getHiddenColumns() != null; + // JBPNote Test + if (originalSource!=viewport) { + System.err.println("Warning: Viewport object mismatch whilst re-doing"); + } + originalSource.updateHiddenColumns(); //sethasHiddenColumns(); = viewport.getColumnSelection().getHiddenColumns() != null; updateEditMenuBar(); originalSource.firePropertyChange("alignment", null, - originalSource.alignment.getSequences()); + originalSource.getAlignment().getSequences()); } AlignViewport getOriginatingSource(CommandI command) @@ -1310,7 +1445,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { if (comps.elementAt(i) instanceof AlignmentPanel) { - if (al == ((AlignmentPanel) comps.elementAt(i)).av.alignment) + if (al == ((AlignmentPanel) comps.elementAt(i)).av.getAlignment()) { originalSource = ((AlignmentPanel) comps.elementAt(i)).av; break; @@ -1325,7 +1460,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // the current view against the closed view first if (al != null) { - PaintRefresher.validateSequences(al, viewport.alignment); + PaintRefresher.validateSequences(al, viewport.getAlignment()); } originalSource = viewport; @@ -1341,65 +1476,24 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { return; } - - if (up) - { - for (int i = 1; i < viewport.alignment.getHeight(); i++) - { - SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(null).contains(seq)) - { - continue; - } - - SequenceI temp = viewport.alignment.getSequenceAt(i - 1); - if (sg.getSequences(null).contains(temp)) - { - continue; - } - - viewport.alignment.getSequences().setElementAt(temp, i); - viewport.alignment.getSequences().setElementAt(seq, i - 1); - } - } - else - { - for (int i = viewport.alignment.getHeight() - 2; i > -1; i--) - { - SequenceI seq = viewport.alignment.getSequenceAt(i); - if (!sg.getSequences(viewport.hiddenRepSequences).contains(seq)) - { - continue; - } - - SequenceI temp = viewport.alignment.getSequenceAt(i + 1); - if (sg.getSequences(viewport.hiddenRepSequences).contains(temp)) - { - continue; - } - - viewport.alignment.getSequences().setElementAt(temp, i); - viewport.alignment.getSequences().setElementAt(seq, i + 1); - } - } - + viewport.getAlignment().moveSelectedSequencesByOne(sg, up ? null : viewport.getHiddenRepSequences(), up); alignPanel.paintAlignment(true); } synchronized void slideSequences(boolean right, int size) { - Vector sg = new Vector(); + Listsg = new Vector(); if (viewport.cursorMode) { - sg.addElement(viewport.alignment + sg.add(viewport.getAlignment() .getSequenceAt(alignPanel.seqPanel.seqCanvas.cursorY)); } else if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().getSize() != viewport.alignment + && viewport.getSelectionGroup().getSize() != viewport.getAlignment() .getHeight()) { sg = viewport.getSelectionGroup().getSequences( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); } if (sg.size() < 1) @@ -1407,21 +1501,19 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, return; } - Vector invertGroup = new Vector(); + Vector invertGroup = new Vector(); - for (int i = 0; i < viewport.alignment.getHeight(); i++) + for (int i = 0; i < viewport.getAlignment().getHeight(); i++) { - if (!sg.contains(viewport.alignment.getSequenceAt(i))) - invertGroup.addElement(viewport.alignment.getSequenceAt(i)); + if (!sg.contains(viewport.getAlignment().getSequenceAt(i))) + invertGroup.addElement(viewport.getAlignment().getSequenceAt(i)); } - SequenceI[] seqs1 = new SequenceI[sg.size()]; - for (int i = 0; i < sg.size(); i++) - seqs1[i] = (SequenceI) sg.elementAt(i); + SequenceI[] seqs1 = sg.toArray(new SequenceI[sg.size()]); - SequenceI[] seqs2 = new SequenceI[invertGroup.size()]; + SequenceI[] seqs2 = invertGroup.toArray(new SequenceI[invertGroup.size()]); for (int i = 0; i < invertGroup.size(); i++) - seqs2[i] = (SequenceI) invertGroup.elementAt(i); + seqs2[i] = invertGroup.elementAt(i); SlideSequencesCommand ssc; if (right) @@ -1487,14 +1579,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, for (int i = 0; i < sg.getSize(); i++) { SequenceI seq = sg.getSequenceAt(i); - int index = viewport.alignment.findIndex(seq); + int index = viewport.getAlignment().findIndex(seq); orderedSeqs.put(index + "", seq); } int index = 0, startRes, endRes; char ch; - if (viewport.hasHiddenColumns && viewport.getSelectionGroup() != null) + if (viewport.hasHiddenColumns() && viewport.getSelectionGroup() != null) { copiedHiddenColumns = new Vector(); int hiddenOffset = viewport.getSelectionGroup().getStartRes(); @@ -1641,17 +1733,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { for (int i = 0; i < seqs.length; i++) { - viewport.alignment.addSequence(seqs[i]); + viewport.getAlignment().addSequence(seqs[i]); } // !newAlignment addHistoryItem(new EditCommand("Add sequences", EditCommand.PASTE, - seqs, 0, viewport.alignment.getWidth(), viewport.alignment)); + seqs, 0, viewport.getAlignment().getWidth(), viewport.getAlignment())); - viewport.setEndSeq(viewport.alignment.getHeight()); - viewport.alignment.getWidth(); + viewport.setEndSeq(viewport.getAlignment().getHeight()); + viewport.getAlignment().getWidth(); viewport.firePropertyChange("alignment", null, - viewport.alignment.getSequences()); + viewport.getAlignment().getSequences()); } @@ -1679,7 +1771,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } // If the cut affects all sequences, remove highlighted columns - if (sg.getSize() == viewport.alignment.getHeight()) + if (sg.getSize() == viewport.getAlignment().getHeight()) { viewport.getColumnSelection().removeElements(sg.getStartRes(), sg.getEndRes() + 1); @@ -1696,10 +1788,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, */ addHistoryItem(new EditCommand("Cut Sequences", EditCommand.CUT, cut, sg.getStartRes(), sg.getEndRes() - sg.getStartRes() + 1, - viewport.alignment)); + viewport.getAlignment())); viewport.setSelectionGroup(null); - viewport.alignment.deleteGroup(sg); + viewport.getAlignment().deleteGroup(sg); viewport.firePropertyChange("alignment", null, viewport.getAlignment() .getSequences()); @@ -1713,7 +1805,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * group consensus toggled - * + * */ protected void showGroupConsensus_actionPerformed() { @@ -1733,7 +1825,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /* * (non-Javadoc) - * + * * @see * jalview.jbgui.GAlignFrame#showConsensusHistogram_actionPerformed(java.awt * .event.ActionEvent) @@ -1745,7 +1837,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } /* * (non-Javadoc) - * + * * @see * jalview.jbgui.GAlignFrame#showConsensusProfile_actionPerformed(java.awt * .event.ActionEvent) @@ -1769,8 +1861,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, viewport.getSequenceSelection(), viewport.getAlignmentView(true).getSequenceStrings( viewport.getGapCharacter()), - viewport.alignment.getGroups()); - viewport.alignment.deleteAllGroups(); + viewport.getAlignment().getGroups()); + viewport.getAlignment().deleteAllGroups(); viewport.sequenceColours = null; viewport.setSelectionGroup(null); // set view properties for each group @@ -1778,13 +1870,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { // gps[g].setShowunconserved(viewport.getShowUnconserved()); gps[g].setshowSequenceLogo(viewport.isShowSequenceLogo()); - viewport.alignment.addGroup(gps[g]); + viewport.getAlignment().addGroup(gps[g]); Color col = new Color((int) (Math.random() * 255), (int) (Math.random() * 255), (int) (Math.random() * 255)); col = col.brighter(); - for (Enumeration sq = gps[g].getSequences(null).elements(); sq - .hasMoreElements(); viewport.setSequenceColour( - (SequenceI) sq.nextElement(), col)) + for (SequenceI sq : gps[g].getSequences(null)) + viewport.setSequenceColour( + sq, col) ; } PaintRefresher.Refresh(this, viewport.getSequenceSetId()); @@ -1795,7 +1887,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, protected void deleteGroups_actionPerformed() { - viewport.alignment.deleteAllGroups(); + viewport.getAlignment().deleteAllGroups(); viewport.sequenceColours = null; viewport.setSelectionGroup(null); @@ -1809,7 +1901,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { sg.addSequence(viewport.getAlignment().getSequenceAt(i), false); } - sg.setEndRes(viewport.alignment.getWidth() - 1); + sg.setEndRes(viewport.getAlignment().getWidth() - 1); viewport.setSelectionGroup(sg); alignPanel.paintAlignment(true); PaintRefresher.Refresh(alignPanel, viewport.getSequenceSetId()); @@ -1873,11 +1965,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.getSelectionGroup() != null) { seqs = viewport.getSelectionGroup().getSequencesAsArray( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); } else { - seqs = viewport.alignment.getSequencesArray(); + seqs = viewport.getAlignment().getSequencesArray(); } TrimRegionCommand trimRegion; @@ -1885,32 +1977,30 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { trimRegion = new TrimRegionCommand("Remove Left", TrimRegionCommand.TRIM_LEFT, seqs, column, - viewport.alignment, viewport.colSel, - viewport.selectionGroup); + viewport.getAlignment(), viewport.getColumnSelection(), + viewport.getSelectionGroup()); viewport.setStartRes(0); } else { trimRegion = new TrimRegionCommand("Remove Right", TrimRegionCommand.TRIM_RIGHT, seqs, column, - viewport.alignment, viewport.colSel, - viewport.selectionGroup); + viewport.getAlignment(), viewport.getColumnSelection(), + viewport.getSelectionGroup()); } statusBar.setText("Removed " + trimRegion.getSize() + " columns."); addHistoryItem(trimRegion); - Vector groups = viewport.alignment.getGroups(); - for (int i = 0; i < groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); + for (SequenceGroup sg:viewport.getAlignment().getGroups()) + { if ((trimLeft && !sg.adjustForRemoveLeft(column)) || (!trimLeft && !sg.adjustForRemoveRight(column))) { - viewport.alignment.deleteGroup(sg); + viewport.getAlignment().deleteGroup(sg); } } @@ -1921,23 +2011,23 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void removeGappedColumnMenuItem_actionPerformed() { - int start = 0, end = viewport.alignment.getWidth() - 1; + int start = 0, end = viewport.getAlignment().getWidth() - 1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { seqs = viewport.getSelectionGroup().getSequencesAsArray( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else { - seqs = viewport.alignment.getSequencesArray(); + seqs = viewport.getAlignment().getSequencesArray(); } RemoveGapColCommand removeGapCols = new RemoveGapColCommand( - "Remove Gapped Columns", seqs, start, end, viewport.alignment); + "Remove Gapped Columns", seqs, start, end, viewport.getAlignment()); addHistoryItem(removeGapCols); @@ -1946,7 +2036,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // This is to maintain viewport position on first residue // of first sequence - SequenceI seq = viewport.alignment.getSequenceAt(0); + SequenceI seq = viewport.getAlignment().getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); // ShiftList shifts; // viewport.getAlignment().removeGaps(shifts=new ShiftList()); @@ -1961,28 +2051,28 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void removeAllGapsMenuItem_actionPerformed() { - int start = 0, end = viewport.alignment.getWidth() - 1; + int start = 0, end = viewport.getAlignment().getWidth() - 1; SequenceI[] seqs; if (viewport.getSelectionGroup() != null) { seqs = viewport.getSelectionGroup().getSequencesAsArray( - viewport.hiddenRepSequences); + viewport.getHiddenRepSequences()); start = viewport.getSelectionGroup().getStartRes(); end = viewport.getSelectionGroup().getEndRes(); } else { - seqs = viewport.alignment.getSequencesArray(); + seqs = viewport.getAlignment().getSequencesArray(); } // This is to maintain viewport position on first residue // of first sequence - SequenceI seq = viewport.alignment.getSequenceAt(0); + SequenceI seq = viewport.getAlignment().getSequenceAt(0); int startRes = seq.findPosition(viewport.startRes); addHistoryItem(new RemoveGapsCommand("Remove Gaps", seqs, start, end, - viewport.alignment)); + viewport.getAlignment())); viewport.setStartRes(seq.findIndex(startRes) - 1); @@ -1998,37 +2088,37 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * create a new view derived from the current view - * + * * @param viewtitle * @return frame for the new view */ public AlignFrame newView(String viewtitle) { AlignmentI newal; - if (viewport.hasHiddenRows) + if (viewport.hasHiddenRows()) { newal = new Alignment(viewport.getAlignment().getHiddenSequences() .getFullAlignment().getSequencesArray()); } else { - newal = new Alignment(viewport.alignment.getSequencesArray()); + newal = new Alignment(viewport.getAlignment().getSequencesArray()); } - if (viewport.alignment.getAlignmentAnnotation() != null) + if (viewport.getAlignment().getAlignmentAnnotation() != null) { - for (int i = 0; i < viewport.alignment.getAlignmentAnnotation().length; i++) + for (int i = 0; i < viewport.getAlignment().getAlignmentAnnotation().length; i++) { - if (!viewport.alignment.getAlignmentAnnotation()[i].autoCalculated) + if (!viewport.getAlignment().getAlignmentAnnotation()[i].autoCalculated) { - newal.addAnnotation(viewport.alignment.getAlignmentAnnotation()[i]); + newal.addAnnotation(viewport.getAlignment().getAlignmentAnnotation()[i]); } } } AlignFrame newaf = new AlignFrame(newal, viewport.applet, "", false); - newaf.viewport.sequenceSetID = alignPanel.av.getSequenceSetId(); + newaf.viewport.setSequenceSetId(alignPanel.av.getSequenceSetId()); PaintRefresher.Register(alignPanel, alignPanel.av.getSequenceSetId()); PaintRefresher.Register(newaf.alignPanel, newaf.alignPanel.av.getSequenceSetId()); @@ -2071,7 +2161,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } /** - * + * * @return list of feature groups on the view */ public String[] getFeatureGroups() @@ -2087,7 +2177,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * get sequence feature groups that are hidden or shown - * + * * @param visible * true is visible * @return list @@ -2105,7 +2195,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * Change the display state for the given feature groups - * + * * @param groups * list of group strings * @param state @@ -2173,11 +2263,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, overview.getPreferredSize().height + 50); frame.pack(); + final AlignmentPanel ap=alignPanel; frame.addWindowListener(new WindowAdapter() { + @Override public void windowClosing(WindowEvent e) { - alignPanel.setOverviewPanel(null); + if (ap!=null) { + ap.setOverviewPanel(null); + } }; }); @@ -2208,13 +2302,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if (viewport.getConservationSelected()) { - Alignment al = (Alignment) viewport.alignment; + Alignment al = (Alignment) viewport.getAlignment(); Conservation c = new Conservation("All", ResidueProperties.propHash, 3, al.getSequences(), 0, al.getWidth() - 1); c.calculate(); - c.verdict(false, viewport.ConsPercGaps); + c.verdict(false, viewport.getConsPercGaps()); cs.setConservation(c); @@ -2227,73 +2321,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, cs.setConservation(null); } - cs.setConsensus(viewport.hconsensus); + cs.setConsensus(viewport.getSequenceConsensusHash()); } viewport.setGlobalColourScheme(cs); - if (viewport.getColourAppliesToAllGroups()) - { - Vector groups = viewport.alignment.getGroups(); - for (int i = 0; i < groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - - if (cs == null) - { - sg.cs = null; - continue; - } - if (cs instanceof ClustalxColourScheme) - { - sg.cs = new ClustalxColourScheme( - sg.getSequences(viewport.hiddenRepSequences), - sg.getWidth()); - } - else - { - try - { - sg.cs = (ColourSchemeI) cs.getClass().newInstance(); - } catch (Exception ex) - { - ex.printStackTrace(); - sg.cs = cs; - } - } - - if (viewport.getAbovePIDThreshold() - || cs instanceof PIDColourScheme - || cs instanceof Blosum62ColourScheme) - { - sg.cs.setThreshold(threshold, viewport.getIgnoreGapsConsensus()); - sg.cs.setConsensus(AAFrequency.calculate( - sg.getSequences(viewport.hiddenRepSequences), 0, - sg.getWidth())); - } - else - { - sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); - } - - if (viewport.getConservationSelected()) - { - Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, - sg.getSequences(viewport.hiddenRepSequences), 0, - viewport.alignment.getWidth() - 1); - c.calculate(); - c.verdict(false, viewport.ConsPercGaps); - sg.cs.setConservation(c); - } - else - { - sg.cs.setConservation(null); - sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); - } - - } - } if (alignPanel.getOverviewPanel() != null) { @@ -2310,7 +2342,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, protected void modifyPID_actionPerformed() { if (viewport.getAbovePIDThreshold() - && viewport.globalColourScheme != null) + && viewport.getGlobalColourScheme() != null) { SliderPanel.setPIDSliderSource(alignPanel, viewport.getGlobalColourScheme(), "Background"); @@ -2321,10 +2353,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, protected void modifyConservation_actionPerformed() { if (viewport.getConservationSelected() - && viewport.globalColourScheme != null) + && viewport.getGlobalColourScheme() != null) { SliderPanel.setConservationSlider(alignPanel, - viewport.globalColourScheme, "Background"); + viewport.getGlobalColourScheme(), "Background"); SliderPanel.showConservationSlider(); } } @@ -2360,7 +2392,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, .getAlignment().getSequenceAt(0), null); addHistoryItem(new OrderCommand("Pairwise Sort", oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -2368,7 +2400,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByID(viewport.getAlignment()); - addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.alignment)); + addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -2377,7 +2409,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByLength(viewport.getAlignment()); addHistoryItem(new OrderCommand("Length Sort", oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -2386,7 +2418,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByGroup(viewport.getAlignment()); addHistoryItem(new OrderCommand("Group Sort", oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -2411,7 +2443,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void PCAMenuItem_actionPerformed() { // are the sequences aligned? - if (!viewport.alignment.isAligned(false)) + if (!viewport.getAlignment().isAligned(false)) { SequenceI current; int Width = viewport.getAlignment().getWidth(); @@ -2468,7 +2500,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, void NewTreePanel(String type, String pwType, String title) { // are the sequences aligned? - if (!viewport.alignment.isAligned(false)) + if (!viewport.getAlignment().isAligned(false)) { SequenceI current; int Width = viewport.getAlignment().getWidth(); @@ -2488,7 +2520,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, if ((viewport.getSelectionGroup() != null && viewport .getSelectionGroup().getSize() > 1) - || (viewport.getSelectionGroup() == null && viewport.alignment + || (viewport.getSelectionGroup() == null && viewport.getAlignment() .getHeight() > 1)) { final TreePanel tp = new TreePanel(alignPanel, type, pwType); @@ -2518,7 +2550,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * sort the alignment using the given treePanel - * + * * @param treePanel * tree used to sort view * @param title @@ -2532,14 +2564,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, // addHistoryItem(new HistoryItem("Sort", viewport.alignment, // HistoryItem.SORT)); addHistoryItem(new OrderCommand("Order by " + title, oldOrder, - viewport.alignment)); + viewport.getAlignment())); alignPanel.paintAlignment(true); } /** * Do any automatic reordering of the alignment and add the necessary bits to * the menu structure for the new tree - * + * * @param treePanel * @param title */ @@ -2550,14 +2582,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, sortByTreeMenu.add(item); item.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent evt) { sortByTree(treePanel, title); // treePanel.getTitle()); } }); - + treePanel.addWindowListener(new WindowAdapter() { + @Override public void windowOpened(WindowEvent e) { if (viewport.sortByTree) @@ -2567,6 +2601,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, super.windowOpened(e); } + @Override public void windowClosing(WindowEvent e) { sortByTreeMenu.remove(item); @@ -2584,7 +2619,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, AlignmentSorter.sortBy(viewport.getAlignment(), alorder); if (undoname!=null) { - addHistoryItem(new OrderCommand(undoname, oldOrder, viewport.alignment)); + addHistoryItem(new OrderCommand(undoname, oldOrder, viewport.getAlignment())); } alignPanel.paintAlignment(true); return true; @@ -2610,6 +2645,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, this.builddate = builddate; } + @Override public void paint(Graphics g) { g.setColor(Color.white); @@ -2752,12 +2788,18 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, MenuItem buriedColour = new MenuItem(); + MenuItem purinePyrimidineColour = new MenuItem(); + MenuItem RNAInteractionColour = new MenuItem(); + MenuItem RNAHelixColour = new MenuItem(); + MenuItem userDefinedColour = new MenuItem(); MenuItem PIDColour = new MenuItem(); MenuItem BLOSUM62Colour = new MenuItem(); + MenuItem tcoffeeColour = new MenuItem(); + MenuItem njTreeBlosumMenuItem = new MenuItem(); MenuItem avDistanceTreeBlosumMenuItem = new MenuItem(); @@ -2843,7 +2885,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, CheckboxMenuItem seqLimits = new CheckboxMenuItem(); CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem(); - + CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem(); Menu autoAnnMenu=new Menu(); CheckboxMenuItem showSequenceLogo= new CheckboxMenuItem(); @@ -2868,6 +2910,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, item.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { outputText_actionPerformed(e); @@ -2940,14 +2983,22 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, turnColour.addActionListener(this); buriedColour.setLabel("Buried Index"); buriedColour.addActionListener(this); + purinePyrimidineColour.setLabel("Purine/Pyrimidine"); + purinePyrimidineColour.addActionListener(this); + RNAInteractionColour.setLabel("Purine/Pyrimidine"); + RNAInteractionColour.addActionListener(this); + RNAHelixColour.setLabel("by RNA Helices"); + RNAHelixColour.addActionListener(this); userDefinedColour.setLabel("User Defined..."); userDefinedColour.addActionListener(this); PIDColour.setLabel("Percentage Identity"); 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); @@ -3062,7 +3113,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, applyAutoAnnotationSettings.setLabel("Apply to all groups"); applyAutoAnnotationSettings.setState(true); autoAnnMenu.setLabel("Autocalculated Annotation"); - + invertColSel.addActionListener(this); showColumns.addActionListener(this); showSeqs.addActionListener(this); @@ -3153,6 +3204,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, colourMenu.add(turnColour); colourMenu.add(buriedColour); colourMenu.add(nucleotideColour); + colourMenu.add(purinePyrimidineColour); + colourMenu.add(RNAInteractionColour); + colourMenu.add(tcoffeeColour); colourMenu.add(userDefinedColour); colourMenu.addSeparator(); colourMenu.add(conservationMenuItem); @@ -3160,6 +3214,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, colourMenu.add(abovePIDThreshold); colourMenu.add(modifyPID); colourMenu.add(annotationColour); + colourMenu.add(RNAHelixColour); calculateMenu.add(sort); calculateMenu.add(calculate); calculateMenu.addSeparator(); @@ -3247,7 +3302,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * Attach the alignFrame panels after embedding menus, if necessary. This used * to be called setEmbedded, but is now creates the dropdown menus in a * platform independent manner to avoid OSX/Mac menu appendage daftness. - * + * * @param reallyEmbedded * true to attach the view to the applet area on the page rather than * in a new window @@ -3275,14 +3330,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, final AlignFrame me = this; viewport.applet.addFocusListener(new FocusListener() { - + @Override public void focusLost(FocusEvent e) { if (me.viewport.applet.currentAlignFrame==me) { me.viewport.applet.currentAlignFrame = null; }} - + @Override public void focusGained(FocusEvent e) { @@ -3317,7 +3372,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, * structures in the original jmol window. Note This method doesn't work * without an additional javascript library to exchange messages between the * distinct applets. See http://issues.jalview.org/browse/JAL-621 - * + * * @param viewer * JmolViewer instance * @param sequenceIds @@ -3382,7 +3437,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, } /** * bind a pdb file to a sequence in the current view - * + * * @param sequenceId * - sequenceId within the dataset. * @param pdbEntryString @@ -3554,7 +3609,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, /** * modify the current selection, providing the user has not made a selection already. - * @param sel - sequences from this alignment + * @param sel - sequences from this alignment * @param csel - columns to be selected on the alignment */ public void select(SequenceGroup sel, ColumnSelection csel) @@ -3564,15 +3619,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public void scrollTo(int row, int column) { - alignPanel.seqPanel.scrollTo(row, column); + alignPanel.seqPanel.scrollTo(row, column); } public void scrollToRow(int row) { - alignPanel.seqPanel.scrollToRow(row); + alignPanel.seqPanel.scrollToRow(row); } public void scrollToColumn(int column) { - alignPanel.seqPanel.scrollToColumn(column); + alignPanel.seqPanel.scrollToColumn(column); } /** * @return the alignments unique ID. @@ -3580,4 +3635,57 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, public String getSequenceSetId() { return viewport.getSequenceSetId(); } + + + /** + * Load the (T-Coffee) score file from the specified url + * + * @param source File/URL/T-COFFEE score file contents + * @throws IOException + * @return true if alignment was annotated with data from source + * @throws SAXException + * @throws ParserConfigurationException + * @throws ExceptionFileFormatOrSyntax + * @throws ExceptionLoadingFailed + * @throws ExceptionPermissionDenied + * @throws InterruptedException + */ + public boolean loadScoreFile( String source ) throws IOException, ExceptionFileFormatOrSyntax, ParserConfigurationException, SAXException, ExceptionPermissionDenied, ExceptionLoadingFailed, InterruptedException { + + TCoffeeScoreFile file = new TCoffeeScoreFile(source, AppletFormatAdapter.checkProtocol(source)); + if( !file.isValid()) { + // TODO: raise dialog for gui + System.err.println("Problems parsing T-Coffee scores: "+file.getWarningMessage()); + System.err.println("Origin was:\n"+source); + return false; + } + + /* + * check that the score matrix matches the alignment dimensions + */ + AlignmentI aln; + if( (aln=viewport.getAlignment()) != null && (aln.getHeight() != file.getHeight() || aln.getWidth() != file.getWidth()) ) { + // TODO: raise a dialog box here rather than bomb out. + System.err.println("The scores matrix does not match the alignment dimensions"); + + } + + // TODO add parameter to indicate if matching should be done + if (file.annotateAlignment(alignPanel.getAlignment(), false)) + { + alignPanel.fontChanged(); + tcoffeeColour.setEnabled(true); + // switch to this color + changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); + return true; + } else { + System.err.println("Problems resolving T-Coffee scores:"); + if (file.getWarningMessage()!=null) { + System.err.println(file.getWarningMessage()); + } + } + return false; + } + + }