X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FAlignFrame.java;h=700c2293a736a45c82b5c53937d6b80600e846c2;hb=b57a02c25e335d033c97f8a6bacd6b54f62bd2b6;hp=e03f2f4126b30b104e5d06d8800837163026b6f7;hpb=1c66dc9053356a709e9cd9d3282517b5221f1ba2;p=jalview.git diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index e03f2f4..700c229 100644 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1,18 +1,18 @@ /* * 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; @@ -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; @@ -87,10 +88,12 @@ 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 +public class AlignFrame extends EmbmenuFrame implements ActionListener, + ItemListener, KeyListener { public AlignmentPanel alignPanel; @@ -101,9 +104,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 +134,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,10 +198,13 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { RNAHelixColour.setEnabled(true); } - else { + else + { RNAHelixColour.setEnabled(false); } - } else { + } + else + { RNAHelixColour.setEnabled(false); purinePyrimidineColour.setEnabled(false); } @@ -232,32 +239,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 void parseFeaturesFile(String file, String type) + public boolean parseFeaturesFile(String file, String type) { - parseFeaturesFile(file, type, true); + 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 void parseFeaturesFile(String file, String type, boolean autoenabledisplay) - { + 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(); @@ -279,10 +298,12 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis viewport.featureSettings.refreshTable(); } alignPanel.paintAlignment(true); + statusBar.setText("Successfully added features to alignment."); } - + return featuresFile; } + @Override public void keyPressed(KeyEvent evt) { if (viewport.cursorMode @@ -296,8 +317,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()) @@ -557,8 +578,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())) { @@ -586,7 +608,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(); } @@ -609,14 +632,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) @@ -709,6 +735,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(); @@ -733,6 +763,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis this.alignPanel.annotationPanel.repaint(); } + @Override public void actionPerformed(ActionEvent evt) { Object source = evt.getSource(); @@ -753,9 +784,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { loadAnnotations(); } - else if( source == loadScores ) { - loadScores(); - } else if (source == outputAnnotations) { outputAnnotations(true); @@ -921,6 +949,10 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis { showSequenceLogo_actionPerformed(); } + else if (source == normSequenceLogo) + { + normSequenceLogo_actionPerformed(); + } else if (source == showConsensusHistogram) { showConsensusHistogram_actionPerformed(); @@ -955,9 +987,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) { @@ -1019,8 +1049,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) { @@ -1104,26 +1135,21 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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); jalview.bin.JalviewLite.addFrame(frame, "Paste Annotations ", 400, 300); } - - public void loadScores() { - //TODO - - } 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) { @@ -1139,7 +1165,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(); @@ -1159,26 +1186,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) { @@ -1188,8 +1214,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 = ""; } @@ -1290,13 +1318,22 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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) { System.exit(0); - } else { + } + else + { } viewport = null; alignPanel = null; @@ -1350,8 +1387,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis } /** - * TODO: JAL-1104 - * DOCUMENT ME! + * TODO: JAL-1104 DOCUMENT ME! * * @param e * DOCUMENT ME! @@ -1369,18 +1405,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! @@ -1398,14 +1437,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) @@ -1456,62 +1499,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()); @@ -1522,7 +1525,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++) { @@ -1530,13 +1533,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) @@ -1761,12 +1763,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()); } @@ -1858,6 +1861,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis viewport.setShowConsensusHistogram(showConsensusHistogram.getState()); alignPanel.updateAnnotation(applyAutoAnnotationSettings.getState()); } + /* * (non-Javadoc) * @@ -1871,6 +1875,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()); @@ -1883,8 +1895,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); @@ -1897,10 +1909,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(); @@ -2016,12 +2026,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))) { @@ -2052,7 +2058,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); @@ -2136,7 +2143,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]); } } } @@ -2288,11 +2296,16 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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); + } }; }); @@ -2344,71 +2357,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) { @@ -2416,8 +2366,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); } @@ -2483,7 +2433,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); } @@ -2603,8 +2554,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); @@ -2665,14 +2615,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) @@ -2682,24 +2634,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; @@ -2725,6 +2680,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis this.builddate = builddate; } + @Override public void paint(Graphics g) { g.setColor(Color.white); @@ -2794,8 +2750,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis 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 ..."); @@ -2870,14 +2824,15 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis MenuItem buriedColour = new MenuItem(); MenuItem purinePyrimidineColour = 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(); @@ -2965,15 +2920,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 { @@ -2990,6 +2953,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); @@ -3003,7 +2967,6 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis loadTree.addActionListener(this); loadAnnotations.addActionListener(this); - loadScores.addActionListener(this); outputFeatures.addActionListener(this); outputAnnotations.addActionListener(this); selectAllSequenceMenuItem.addActionListener(this); @@ -3074,9 +3037,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); @@ -3188,10 +3153,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); @@ -3204,6 +3170,8 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis showGroupConservation.addItemListener(this); showConsensusHistogram.addItemListener(this); showSequenceLogo.addItemListener(this); + normSequenceLogo.addItemListener(this); + applyAutoAnnotationSettings.addItemListener(this); formatMenu.setLabel("Format"); selectMenu.setLabel("Select"); @@ -3221,8 +3189,7 @@ public class AlignFrame extends EmbmenuFrame implements ActionListener, ItemLis fileMenu.add(inputText); fileMenu.add(loadTree); fileMenu.add(loadAnnotations); - fileMenu.add(loadScores); - + fileMenu.addSeparator(); fileMenu.add(outputTextboxMenu); fileMenu.add(outputFeatures); @@ -3258,6 +3225,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); @@ -3408,14 +3376,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 +3478,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 +3605,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 +3661,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 +3676,81 @@ 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 */ - 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 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; } - - + }