X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=04e86fa80da7de83de98d6785f65bd9018507714;hb=aebfa57bbc491dfa8c231704a385ed14f6a5e8ae;hp=834b904e370989ca79584808b422d21669a9e626;hpb=6a89252231240a51ea870ef5d04bae1611cf2ec3;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 834b904..04e86fa 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,13 +1,13 @@ /* - * 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 + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) + * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, 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 * 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 @@ -35,6 +35,7 @@ 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; @@ -51,6 +52,7 @@ 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; @@ -87,10 +89,21 @@ 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; -public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemListener, KeyListener +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; +import fr.orsay.lri.varna.exceptions.ExceptionUnmatchedClosingParentheses; + +public class AlignFrame extends EmbmenuFrame implements ActionListener, + ItemListener, KeyListener { public AlignmentPanel alignPanel; @@ -101,9 +114,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis int DEFAULT_HEIGHT = 500; 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) { @@ -131,6 +144,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis showGroupConservation.setState(viewport.isShowGroupConservation()); showConsensusHistogram.setState(viewport.isShowConsensusHistogram()); showSequenceLogo.setState(viewport.isShowSequenceLogo()); + normSequenceLogo.setState(viewport.isNormaliseSequenceLogo()); seqLimits.setState(viewport.showJVSuffix); @@ -194,13 +208,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { RNAHelixColour.setEnabled(true); } - else { + else + { RNAHelixColour.setEnabled(false); } - } else { + } + 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 @@ -232,35 +250,44 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis /** * 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 file + * file URL, content, or other resolvable path + * @param type + * is protocol for accessing data referred to by file */ 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 + * @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. - + 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.getAlignment(), - alignPanel.seqPanel.seqCanvas.getFeatureRenderer().featureColours, - featureLinks, true, viewport.applet.getDefaultParameter("relaxedidmatch", false)); + .parse(viewport.getAlignment(), alignPanel.seqPanel.seqCanvas + .getFeatureRenderer().featureColours, featureLinks, + true, viewport.applet.getDefaultParameter( + "relaxedidmatch", false)); } catch (Exception ex) { ex.printStackTrace(); @@ -287,6 +314,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis return featuresFile; } + @Override public void keyPressed(KeyEvent evt) { if (viewport.cursorMode @@ -300,8 +328,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { case 27: // escape key deselectAllSequenceMenuItem_actionPerformed(); - - alignPanel.alabels.cancelDrag(); + + alignPanel.alabels.cancelDrag(); break; case KeyEvent.VK_X: if (evt.isControlDown() || evt.isMetaDown()) @@ -561,8 +589,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis // 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.getColumnSelection() != null && viewport.getColumnSelection().getSelected() != null && viewport.getColumnSelection() - .getSelected().size() > 0) + if ((viewport.getColumnSelection() != null + && viewport.getColumnSelection().getSelected() != null && viewport + .getColumnSelection().getSelected().size() > 0) || (sg != null && sg.getSize() > 0 && sg.getStartRes() <= sg .getEndRes())) { @@ -590,7 +619,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis hide = true; viewport.hideAllSelectedSeqs(); } - else if (!(toggleCols && viewport.getColumnSelection().getSelected().size() > 0)) + else if (!(toggleCols && viewport.getColumnSelection().getSelected() + .size() > 0)) { viewport.showAllHiddenSeqs(); } @@ -613,14 +643,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis } } + @Override public void keyReleased(KeyEvent evt) { } + @Override public void keyTyped(KeyEvent evt) { } + @Override public void itemStateChanged(ItemEvent evt) { if (evt.getSource() == displayNonconservedMenuItem) @@ -713,6 +746,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { showSequenceLogo_actionPerformed(); } + else if (evt.getSource() == normSequenceLogo) + { + normSequenceLogo_actionPerformed(); + } else if (evt.getSource() == showConsensusHistogram) { showConsensusHistogram_actionPerformed(); @@ -737,6 +774,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis this.alignPanel.annotationPanel.repaint(); } + @Override public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); @@ -922,6 +960,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { showSequenceLogo_actionPerformed(); } + else if (source == normSequenceLogo) + { + normSequenceLogo_actionPerformed(); + } else if (source == showConsensusHistogram) { showConsensusHistogram_actionPerformed(); @@ -956,9 +998,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis else if (source == clustalColour) { abovePIDThreshold.setState(false); - changeColour(new ClustalxColourScheme( - viewport.getAlignment().getSequences(), - viewport.getAlignment().getWidth())); + changeColour(new ClustalxColourScheme(viewport.getAlignment(), null)); } else if (source == zappoColour) { @@ -996,6 +1036,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { changeColour(new PurinePyrimidineColourScheme()); } + else if (source == RNAHelixColour) { new RNAHelicesColourChooser(viewport, alignPanel); @@ -1020,8 +1061,9 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { changeColour(new Blosum62ColourScheme()); } - else if (source == tcoffeeColour) { - changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); + else if (source == tcoffeeColour) + { + changeColour(new TCoffeeColourScheme(alignPanel.getAlignment())); } else if (source == annotationColour) { @@ -1112,14 +1154,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300); } - + public String outputAnnotations(boolean displayTextbox) { String annotation = new AnnotationFile().printAnnotations( viewport.showAnnotation ? viewport.getAlignment() - .getAlignmentAnnotation() : null, viewport.getAlignment() - .getGroups(), - ((Alignment) viewport.getAlignment()).alignmentProperties); + .getAlignmentAnnotation() : null, viewport + .getAlignment().getGroups(), ((Alignment) viewport + .getAlignment()).alignmentProperties); if (displayTextbox) { @@ -1135,7 +1177,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis private Hashtable getDisplayedFeatureCols() { - if (alignPanel.getFeatureRenderer() != null && viewport.featuresDisplayed!=null) + if (alignPanel.getFeatureRenderer() != null + && viewport.featuresDisplayed != null) { FeatureRenderer fr = alignPanel.getFeatureRenderer(); Hashtable fcols = new Hashtable(); @@ -1155,26 +1198,25 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis String features; if (format.equalsIgnoreCase("Jalview")) { - features = new FeaturesFile().printJalviewFormat( - viewport.getAlignment().getSequencesArray(), + features = new FeaturesFile().printJalviewFormat(viewport + .getAlignment().getSequencesArray(), getDisplayedFeatureCols()); } else { - features = new FeaturesFile().printGFFFormat( - viewport.getAlignment().getSequencesArray(), - getDisplayedFeatureCols()); + features = new FeaturesFile().printGFFFormat(viewport.getAlignment() + .getSequencesArray(), getDisplayedFeatureCols()); } if (displayTextbox) { - boolean frimport=false; - if (features==null || features.equals("No Features Visible")) + boolean frimport = false; + if (features == null || features.equals("No Features Visible")) { features = "# No features visible - paste some and import them here."; - frimport=true; + frimport = true; } - + CutAndPasteTransfer cap = new CutAndPasteTransfer(frimport, this); if (frimport) { @@ -1184,8 +1226,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis frame.add(cap); jalview.bin.JalviewLite.addFrame(frame, "Features", 600, 500); cap.setText(features); - } else { - if (features==null) + } + else + { + if (features == null) features = ""; } @@ -1286,18 +1330,22 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis public void closeMenuItem_actionPerformed() { PaintRefresher.RemoveComponent(alignPanel); - if (alignPanel.seqPanel!=null && alignPanel.seqPanel.seqCanvas!=null) + if (alignPanel.seqPanel != null + && alignPanel.seqPanel.seqCanvas != null) { PaintRefresher.RemoveComponent(alignPanel.seqPanel.seqCanvas); } - if (alignPanel.idPanel!=null && alignPanel.idPanel.idCanvas!=null) { + if (alignPanel.idPanel != null && alignPanel.idPanel.idCanvas != null) + { PaintRefresher.RemoveComponent(alignPanel.idPanel.idCanvas); } if (PaintRefresher.components.size() == 0 && viewport.applet == null) { System.exit(0); - } else { + } + else + { } viewport = null; alignPanel = null; @@ -1351,8 +1399,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis } /** - * TODO: JAL-1104 - * DOCUMENT ME! + * TODO: JAL-1104 DOCUMENT ME! * * @param e * DOCUMENT ME! @@ -1370,18 +1417,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis AlignViewport originalSource = getOriginatingSource(command); // JBPNote Test - if (originalSource!=viewport) { - System.err.println("Warning: Viewport object mismatch whilst undoing"); + if (originalSource != viewport) + { + System.err + .println("Warning: Viewport object mismatch whilst undoing"); } - originalSource.updateHiddenColumns(); // originalSource.hasHiddenColumns = viewport.getColumnSelection().getHiddenColumns() != null; + originalSource.updateHiddenColumns(); // originalSource.hasHiddenColumns = + // viewport.getColumnSelection().getHiddenColumns() + // != null; updateEditMenuBar(); - originalSource.firePropertyChange("alignment", null, - originalSource.getAlignment().getSequences()); + originalSource.firePropertyChange("alignment", null, originalSource + .getAlignment().getSequences()); } /** - * TODO: JAL-1104 - * DOCUMENT ME! + * TODO: JAL-1104 DOCUMENT ME! * * @param e * DOCUMENT ME! @@ -1399,14 +1449,18 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis AlignViewport originalSource = getOriginatingSource(command); // JBPNote Test - if (originalSource!=viewport) { - System.err.println("Warning: Viewport object mismatch whilst re-doing"); + if (originalSource != viewport) + { + System.err + .println("Warning: Viewport object mismatch whilst re-doing"); } - originalSource.updateHiddenColumns(); //sethasHiddenColumns(); = viewport.getColumnSelection().getHiddenColumns() != null; + originalSource.updateHiddenColumns(); // sethasHiddenColumns(); = + // viewport.getColumnSelection().getHiddenColumns() + // != null; updateEditMenuBar(); - originalSource.firePropertyChange("alignment", null, - originalSource.getAlignment().getSequences()); + originalSource.firePropertyChange("alignment", null, originalSource + .getAlignment().getSequences()); } AlignViewport getOriginatingSource(CommandI command) @@ -1457,62 +1511,22 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { return; } - - if (up) - { - for (int i = 1; i < viewport.getAlignment().getHeight(); i++) - { - SequenceI seq = viewport.getAlignment().getSequenceAt(i); - if (!sg.getSequences(null).contains(seq)) - { - continue; - } - - SequenceI temp = viewport.getAlignment().getSequenceAt(i - 1); - if (sg.getSequences(null).contains(temp)) - { - continue; - } - - viewport.getAlignment().getSequences().setElementAt(temp, i); - viewport.getAlignment().getSequences().setElementAt(seq, i - 1); - } - } - else - { - for (int i = viewport.getAlignment().getHeight() - 2; i > -1; i--) - { - SequenceI seq = viewport.getAlignment().getSequenceAt(i); - if (!sg.getSequences(viewport.getHiddenRepSequences()).contains(seq)) - { - continue; - } - - SequenceI temp = viewport.getAlignment().getSequenceAt(i + 1); - if (sg.getSequences(viewport.getHiddenRepSequences()).contains(temp)) - { - continue; - } - - viewport.getAlignment().getSequences().setElementAt(temp, i); - viewport.getAlignment().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(); + List sg = new Vector(); if (viewport.cursorMode) { - sg.addElement(viewport.getAlignment() - .getSequenceAt(alignPanel.seqPanel.seqCanvas.cursorY)); + sg.add(viewport.getAlignment().getSequenceAt( + alignPanel.seqPanel.seqCanvas.cursorY)); } else if (viewport.getSelectionGroup() != null - && viewport.getSelectionGroup().getSize() != viewport.getAlignment() - .getHeight()) + && viewport.getSelectionGroup().getSize() != viewport + .getAlignment().getHeight()) { sg = viewport.getSelectionGroup().getSequences( viewport.getHiddenRepSequences()); @@ -1523,7 +1537,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis return; } - Vector invertGroup = new Vector(); + Vector invertGroup = new Vector(); for (int i = 0; i < viewport.getAlignment().getHeight(); i++) { @@ -1531,13 +1545,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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) @@ -1762,12 +1775,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis // !newAlignment addHistoryItem(new EditCommand("Add sequences", EditCommand.PASTE, - seqs, 0, viewport.getAlignment().getWidth(), viewport.getAlignment())); + seqs, 0, viewport.getAlignment().getWidth(), + viewport.getAlignment())); viewport.setEndSeq(viewport.getAlignment().getHeight()); viewport.getAlignment().getWidth(); - viewport.firePropertyChange("alignment", null, - viewport.getAlignment().getSequences()); + viewport.firePropertyChange("alignment", null, viewport.getAlignment() + .getSequences()); } @@ -1859,6 +1873,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis viewport.setShowConsensusHistogram(showConsensusHistogram.getState()); alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); } + /* * (non-Javadoc) * @@ -1872,6 +1887,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); } + protected void normSequenceLogo_actionPerformed() + { + showSequenceLogo.setState(true); + viewport.setShowSequenceLogo(true); + viewport.setNormaliseSequenceLogo(normSequenceLogo.getState()); + alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); + } + protected void applyAutoAnnotationSettings_actionPerformed() { alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); @@ -1884,8 +1907,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis SequenceGroup[] gps = jalview.analysis.Grouping.makeGroupsFrom( viewport.getSequenceSelection(), viewport.getAlignmentView(true).getSequenceStrings( - viewport.getGapCharacter()), - viewport.getAlignment().getGroups()); + viewport.getGapCharacter()), viewport.getAlignment() + .getGroups()); viewport.getAlignment().deleteAllGroups(); viewport.sequenceColours = null; viewport.setSelectionGroup(null); @@ -1898,10 +1921,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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()); alignPanel.updateAnnotation(); @@ -2017,12 +2038,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis addHistoryItem(trimRegion); - Vector groups = viewport.getAlignment().getGroups(); - - for (int i = 0; i < groups.size(); i++) + for (SequenceGroup sg : viewport.getAlignment().getGroups()) { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if ((trimLeft && !sg.adjustForRemoveLeft(column)) || (!trimLeft && !sg.adjustForRemoveRight(column))) { @@ -2053,7 +2070,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis } RemoveGapColCommand removeGapCols = new RemoveGapColCommand( - "Remove Gapped Columns", seqs, start, end, viewport.getAlignment()); + "Remove Gapped Columns", seqs, start, end, + viewport.getAlignment()); addHistoryItem(removeGapCols); @@ -2137,7 +2155,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { if (!viewport.getAlignment().getAlignmentAnnotation()[i].autoCalculated) { - newal.addAnnotation(viewport.getAlignment().getAlignmentAnnotation()[i]); + newal.addAnnotation(viewport.getAlignment() + .getAlignmentAnnotation()[i]); } } } @@ -2289,12 +2308,14 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis overview.getPreferredSize().height + 50); frame.pack(); - final AlignmentPanel ap=alignPanel; + final AlignmentPanel ap = alignPanel; frame.addWindowListener(new WindowAdapter() { + @Override public void windowClosing(WindowEvent e) { - if (ap!=null) { + if (ap != null) + { ap.setOverviewPanel(null); } }; @@ -2348,71 +2369,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis cs.setConsensus(viewport.getSequenceConsensusHash()); - } - viewport.setGlobalColourScheme(cs); - - if (viewport.getColourAppliesToAllGroups()) - { - Vector groups = viewport.getAlignment().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.getHiddenRepSequences()), - sg.getWidth()); - } - else - { - try - { - sg.cs = 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.getHiddenRepSequences()), 0, - sg.getWidth())); - } - else - { - sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); - } - - if (viewport.getConservationSelected()) - { - Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, - sg.getSequences(viewport.getHiddenRepSequences()), 0, - viewport.getAlignment().getWidth() - 1); - c.calculate(); - c.verdict(false, viewport.getConsPercGaps()); - sg.cs.setConservation(c); - } - else - { - sg.cs.setConservation(null); - sg.cs.setThreshold(0, viewport.getIgnoreGapsConsensus()); - } - - } } + viewport.setGlobalColourScheme(cs); if (alignPanel.getOverviewPanel() != null) { @@ -2420,8 +2378,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis } jalview.structure.StructureSelectionManager - .getStructureSelectionManager(viewport.applet).sequenceColoursChanged( - alignPanel); + .getStructureSelectionManager(viewport.applet) + .sequenceColoursChanged(alignPanel); alignPanel.paintAlignment(true); } @@ -2487,7 +2445,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); AlignmentSorter.sortByID(viewport.getAlignment()); - addHistoryItem(new OrderCommand("ID Sort", oldOrder, viewport.getAlignment())); + addHistoryItem(new OrderCommand("ID Sort", oldOrder, + viewport.getAlignment())); alignPanel.paintAlignment(true); } @@ -2607,8 +2566,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis if ((viewport.getSelectionGroup() != null && viewport .getSelectionGroup().getSize() > 1) - || (viewport.getSelectionGroup() == null && viewport.getAlignment() - .getHeight() > 1)) + || (viewport.getAlignment().getHeight() > 1)) { final TreePanel tp = new TreePanel(alignPanel, type, pwType); @@ -2669,14 +2627,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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) @@ -2686,24 +2646,27 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis super.windowOpened(e); } + @Override public void windowClosing(WindowEvent e) { sortByTreeMenu.remove(item); }; }); } + public boolean sortBy(AlignmentOrder alorder, String undoname) { - SequenceI[] oldOrder = viewport.getAlignment() - .getSequencesArray(); + SequenceI[] oldOrder = viewport.getAlignment().getSequencesArray(); if (viewport.applet.debug) { - System.err.println("Sorting "+alorder.getOrder().size()+" in alignment '"+getTitle()+"'"); + System.err.println("Sorting " + alorder.getOrder().size() + + " in alignment '" + getTitle() + "'"); } AlignmentSorter.sortBy(viewport.getAlignment(), alorder); - if (undoname!=null) + if (undoname != null) { - addHistoryItem(new OrderCommand(undoname, oldOrder, viewport.getAlignment())); + addHistoryItem(new OrderCommand(undoname, oldOrder, + viewport.getAlignment())); } alignPanel.paintAlignment(true); return true; @@ -2729,6 +2692,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis this.builddate = builddate; } + @Override public void paint(Graphics g) { g.setColor(Color.white); @@ -2746,9 +2710,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis g.drawString("Build date: " + builddate, x, y += fh); g.setFont(new Font("Helvetica", Font.PLAIN, 12)); g.drawString( - "Authors: Jim Procter, Andrew Waterhouse, Michele Clamp, James Cuff, Steve Searle,", + "Authors: Jim Procter, Andrew Waterhouse, Jan Engelhardt, Lauren Lui,", x, y += fh * 1.5); - g.drawString("David Martin & Geoff Barton.", x + 50, y += fh); + g.drawString( + "Michele Clamp, James Cuff, Steve Searle, David Martin & Geoff Barton.", + x + 50, y += fh + 8); g.drawString( "Development managed by The Barton Group, University of Dundee, Scotland, UK.", x, y += fh); @@ -2798,7 +2764,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis MenuItem loadTree = new MenuItem("Load Associated Tree ..."); MenuItem loadAnnotations = new MenuItem("Load Features/Annotations ..."); - + MenuItem outputFeatures = new MenuItem("Export Features ..."); MenuItem outputAnnotations = new MenuItem("Export Annotations ..."); @@ -2872,14 +2838,17 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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(); @@ -2967,15 +2936,23 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis CheckboxMenuItem seqLimits = new CheckboxMenuItem(); CheckboxMenuItem centreColumnLabelFlag = new CheckboxMenuItem(); - + CheckboxMenuItem followMouseOverFlag = new CheckboxMenuItem(); - Menu autoAnnMenu=new Menu(); - CheckboxMenuItem showSequenceLogo= new CheckboxMenuItem(); + + Menu autoAnnMenu = new Menu(); + + CheckboxMenuItem showSequenceLogo = new CheckboxMenuItem(); + CheckboxMenuItem applyAutoAnnotationSettings = new CheckboxMenuItem(); + CheckboxMenuItem showConsensusHistogram = new CheckboxMenuItem(); + CheckboxMenuItem showGroupConsensus = new CheckboxMenuItem(); + CheckboxMenuItem showGroupConservation = new CheckboxMenuItem(); + CheckboxMenuItem normSequenceLogo = new CheckboxMenuItem(); + private void jbInit() throws Exception { @@ -2992,6 +2969,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis item.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(ActionEvent e) { outputText_actionPerformed(e); @@ -3066,6 +3044,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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..."); @@ -3075,9 +3055,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis BLOSUM62Colour.setLabel("BLOSUM62 Score"); BLOSUM62Colour.addActionListener(this); tcoffeeColour.setLabel("T-Coffee Scores"); - tcoffeeColour.setEnabled(false); // it will enabled only if a score file is provided + tcoffeeColour.setEnabled(false); // it will enabled only if a score file is + // provided tcoffeeColour.addActionListener(this); - avDistanceTreeBlosumMenuItem .setLabel("Average Distance Using BLOSUM62"); + avDistanceTreeBlosumMenuItem + .setLabel("Average Distance Using BLOSUM62"); avDistanceTreeBlosumMenuItem.addActionListener(this); njTreeBlosumMenuItem.setLabel("Neighbour Joining Using BLOSUM62"); njTreeBlosumMenuItem.addActionListener(this); @@ -3189,10 +3171,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis showGroupConservation.setLabel("Group Conservation"); showConsensusHistogram.setLabel("Show Consensus Histogram"); showSequenceLogo.setLabel("Show Consensus Logo"); + normSequenceLogo.setLabel("Normalise Consensus Logo"); applyAutoAnnotationSettings.setLabel("Apply to all groups"); applyAutoAnnotationSettings.setState(true); autoAnnMenu.setLabel("Autocalculated Annotation"); - + invertColSel.addActionListener(this); showColumns.addActionListener(this); showSeqs.addActionListener(this); @@ -3222,7 +3205,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis fileMenu.add(inputText); fileMenu.add(loadTree); fileMenu.add(loadAnnotations); - + fileMenu.addSeparator(); fileMenu.add(outputTextboxMenu); fileMenu.add(outputFeatures); @@ -3258,6 +3241,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis autoAnnMenu.add(applyAutoAnnotationSettings); autoAnnMenu.add(showConsensusHistogram); autoAnnMenu.add(showSequenceLogo); + autoAnnMenu.add(normSequenceLogo); autoAnnMenu.addSeparator(); autoAnnMenu.add(showGroupConservation); autoAnnMenu.add(showGroupConsensus); @@ -3284,6 +3268,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis colourMenu.add(buriedColour); colourMenu.add(nucleotideColour); colourMenu.add(purinePyrimidineColour); + // colourMenu.add(RNAInteractionColour); colourMenu.add(tcoffeeColour); colourMenu.add(userDefinedColour); colourMenu.addSeparator(); @@ -3408,14 +3393,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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; - }} - + if (me.viewport.applet.currentAlignFrame == me) + { + me.viewport.applet.currentAlignFrame = null; + } + } + @Override public void focusGained(FocusEvent e) { @@ -3508,11 +3495,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis // TODO: search for a jmv that involves viewer if (jmv == null) { // create a new viewer/jalview binding. - jmv = new ExtJmol(viewer, alignPanel, new SequenceI[][] {seqs}); + jmv = new ExtJmol(viewer, alignPanel, new SequenceI[][] + { seqs }); } return jmv; } + /** * bind a pdb file to a sequence in the current view * @@ -3633,8 +3622,11 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis if (applet.useXtrnalSviewer) { // register the association(s) and quit, don't create any windows. - if (StructureSelectionManager.getStructureSelectionManager(applet).setMapping(seqs, chains, pdb.getFile(), protocol)==null) { - System.err.println("Failed to map "+pdb.getFile()+" ("+protocol+") to any sequences"); + if (StructureSelectionManager.getStructureSelectionManager(applet) + .setMapping(seqs, chains, pdb.getFile(), protocol) == null) + { + System.err.println("Failed to map " + pdb.getFile() + " (" + + protocol + ") to any sequences"); } return; } @@ -3686,9 +3678,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis } /** - * modify the current selection, providing the user has not made a selection already. - * @param sel - sequences from this alignment - * @param csel - columns to be selected on the alignment + * modify the current selection, providing the user has not made a selection + * already. + * + * @param sel + * - sequences from this alignment + * @param csel + * - columns to be selected on the alignment */ public void select(SequenceGroup sel, ColumnSelection csel) { @@ -3697,67 +3693,88 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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. */ - public String getSequenceSetId() { + public String getSequenceSetId() + { return viewport.getSequenceSetId(); } - - + /** - * Load the (T-Coffee) score file from the specified url + * Load the (T-Coffee) score file from the specified url * - * @param source File/URL/T-COFFEE score file contents - * @throws IOException + * @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 + * @throws ExceptionUnmatchedClosingParentheses */ - public boolean loadScoreFile( String source ) throws IOException { - - 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; + public boolean loadScoreFile(String source) throws Exception + { + + 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; } - - + }