X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAlignViewport.java;h=6d6531f27ff92c21518cf5a28249446080c0ef99;hb=7ab5d6b0ba5fec1ea4a4239e79c476d841622485;hp=f15d01afacb292c68e7c2a0cee6b287da165b4ad;hpb=41138135cca24db61dc2ce16a8dc0b6dd6dfc6dd;p=jalview.git diff --git a/src/jalview/gui/AlignViewport.java b/src/jalview/gui/AlignViewport.java index f15d01a..6d6531f 100644 --- a/src/jalview/gui/AlignViewport.java +++ b/src/jalview/gui/AlignViewport.java @@ -1,19 +1,22 @@ /* - * 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.8.2) + * Copyright (C) 2014 The Jalview Authors * * 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. - * + * 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 * 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 . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ /* * Jalview - A Sequence Alignment Editor and Viewer @@ -35,21 +38,33 @@ */ package jalview.gui; -import java.util.*; - -import java.awt.*; - -import jalview.analysis.*; -import jalview.api.StructureSelectionManagerProvider; - -import jalview.bin.*; - -import jalview.datamodel.*; - -import jalview.schemes.*; +import jalview.analysis.NJTree; +import jalview.api.AlignViewportI; +import jalview.bin.Cache; +import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; +import jalview.datamodel.Annotation; +import jalview.datamodel.ColumnSelection; +import jalview.datamodel.PDBEntry; +import jalview.datamodel.Sequence; +import jalview.datamodel.SequenceGroup; +import jalview.datamodel.SequenceI; +import jalview.schemes.ColourSchemeProperty; +import jalview.schemes.UserColourScheme; import jalview.structure.SelectionSource; import jalview.structure.StructureSelectionManager; import jalview.structure.VamsasSource; +import jalview.viewmodel.AlignmentViewport; +import jalview.ws.params.AutoCalcSetting; + +import java.awt.Color; +import java.awt.Container; +import java.awt.Font; +import java.awt.Rectangle; +import java.util.ArrayList; +import java.util.Hashtable; +import java.util.Stack; +import java.util.Vector; /** * DOCUMENT ME! @@ -57,10 +72,9 @@ import jalview.structure.VamsasSource; * @author $author$ * @version $Revision: 1.141 $ */ -public class AlignViewport implements SelectionSource, VamsasSource +public class AlignViewport extends AlignmentViewport implements + SelectionSource, VamsasSource, AlignViewportI { - private static final int RIGHT_JUSTIFY = 1; - int startRes; int endRes; @@ -85,16 +99,6 @@ public class AlignViewport implements SelectionSource, VamsasSource boolean showAnnotation = true; - boolean colourAppliesToAllGroups = true; - - ColourSchemeI globalColourScheme = null; - - boolean conservationColourSelected = false; - - boolean abovePIDThreshold = false; - - SequenceGroup selectionGroup; - int charHeight; int charWidth; @@ -107,14 +111,6 @@ public class AlignViewport implements SelectionSource, VamsasSource boolean seqNameItalics; - AlignmentI alignment; - - ColumnSelection colSel = new ColumnSelection(); - - int threshold; - - int increment; - NJTree currentTree = null; boolean scaleAboveWrapped = false; @@ -123,10 +119,6 @@ public class AlignViewport implements SelectionSource, VamsasSource boolean scaleRightWrapped = true; - boolean hasHiddenColumns = false; - - boolean hasHiddenRows = false; - boolean showHiddenMarkers = true; boolean cursorMode = false; @@ -137,57 +129,18 @@ public class AlignViewport implements SelectionSource, VamsasSource */ Hashtable featuresDisplayed = null; - /** DOCUMENT ME!! */ - public Hashtable[] hconsensus; - - public Hashtable[] hStrucConsensus; - - AlignmentAnnotation consensus; - - AlignmentAnnotation strucConsensus; - - AlignmentAnnotation conservation; - - AlignmentAnnotation quality; - - AlignmentAnnotation[] groupConsensus; - - AlignmentAnnotation[] groupConservation; - - boolean autoCalculateConsensus = true; - - boolean autoCalculateStrucConsensus = true; - - - /** DOCUMENT ME!! */ - public int ConsPercGaps = 25; // JBPNote : This should be a scalable property! - - // JBPNote Prolly only need this in the applet version. - private java.beans.PropertyChangeSupport changeSupport = new java.beans.PropertyChangeSupport( - this); - - boolean ignoreGapsInConsensusCalculation = false; - - boolean isDataset = false; - boolean antiAlias = false; - boolean padGaps = false; - Rectangle explodedPosition; String viewName; - String sequenceSetID; - boolean gatherViewsHere = false; Stack historyList = new Stack(); Stack redoList = new Stack(); - Hashtable sequenceColours; - int thresholdTextColour = 0; Color textColour = Color.black; @@ -196,10 +149,6 @@ public class AlignViewport implements SelectionSource, VamsasSource boolean rightAlignIds = false; - Hashtable hiddenRepSequences; - - boolean sortByTree; - /** * Creates a new AlignViewport object. * @@ -341,7 +290,7 @@ public class AlignViewport implements SelectionSource, VamsasSource centreColumnLabels = Cache.getDefault("CENTRE_COLUMN_LABELS", false); autoCalculateConsensus = Cache.getDefault("AUTO_CALC_CONSENSUS", true); - padGaps = Cache.getDefault("PAD_GAPS", true); + setPadGaps(Cache.getDefault("PAD_GAPS", true)); shownpfeats = Cache.getDefault("SHOW_NPFEATS_TOOLTIP", true); showdbrefs = Cache.getDefault("SHOW_DBREFS_TOOLTIP", true); @@ -373,62 +322,24 @@ public class AlignViewport implements SelectionSource, VamsasSource { if (!alignment.isNucleotide()) { - conservation = new AlignmentAnnotation("Conservation", - "Conservation of total alignment less than " + ConsPercGaps - + "% gaps", new Annotation[1], 0f, 11f, - AlignmentAnnotation.BAR_GRAPH); - conservation.hasText = true; - conservation.autoCalculated = true; - - if (Cache.getDefault("SHOW_CONSERVATION", true)) - { - alignment.addAnnotation(conservation); - } - - if (Cache.getDefault("SHOW_QUALITY", true)) - { - quality = new AlignmentAnnotation("Quality", - "Alignment Quality based on Blosum62 scores", - new Annotation[1], 0f, 11f, AlignmentAnnotation.BAR_GRAPH); - quality.hasText = true; - quality.autoCalculated = true; - - alignment.addAnnotation(quality); - } + showConservation = Cache.getDefault("SHOW_CONSERVATION", true); + showQuality = Cache.getDefault("SHOW_QUALITY", true); showGroupConservation = Cache.getDefault("SHOW_GROUP_CONSERVATION", false); - - { - - } } showConsensusHistogram = Cache.getDefault("SHOW_CONSENSUS_HISTOGRAM", true); showSequenceLogo = Cache.getDefault("SHOW_CONSENSUS_LOGO", false); + normaliseSequenceLogo = Cache.getDefault("NORMALISE_CONSENSUS_LOGO", + false); showGroupConsensus = Cache.getDefault("SHOW_GROUP_CONSENSUS", false); - // TODO: add menu option action that nulls or creates consensus object - // depending on if the user wants to see the annotation or not in a - // specific alignment + showConsensus = Cache.getDefault("SHOW_IDENTITY", true); consensus = new AlignmentAnnotation("Consensus", "PID", new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH); consensus.hasText = true; consensus.autoCalculated = true; - - //TODO check if this can done accordingly - strucConsensus = new AlignmentAnnotation("StrucConsensus", "PID", - new Annotation[1], 0f, 100f, AlignmentAnnotation.BAR_GRAPH); - strucConsensus.hasText = true; - strucConsensus.autoCalculated = true; - - if (Cache.getDefault("SHOW_IDENTITY", true)) - { - alignment.addAnnotation(consensus); - //TODO: Make own if for structure - alignment.addAnnotation(strucConsensus); - } - } - + initAutoAnnotation(); if (jalview.bin.Cache.getProperty("DEFAULT_COLOUR") != null) { globalColourScheme = ColourSchemeProperty.getColour(alignment, @@ -471,26 +382,6 @@ public class AlignViewport implements SelectionSource, VamsasSource return showSequenceFeatures; } - ConservationThread conservationThread; - - ConsensusThread consensusThread; - - StrucConsensusThread strucConsensusThread; - - boolean consUpdateNeeded = false; - - static boolean UPDATING_CONSENSUS = false; - - static boolean UPDATING_STRUC_CONSENSUS = false; - - static boolean UPDATING_CONSERVATION = false; - - boolean updatingConsensus = false; - - boolean updatingStrucConsensus = false; - - boolean updatingConservation = false; - /** * centre columnar annotation labels in displayed alignment annotation TODO: * add to jalviewXML and annotation display settings @@ -501,250 +392,7 @@ public class AlignViewport implements SelectionSource, VamsasSource private boolean shownpfeats; - /** - * trigger update of conservation annotation - */ - public void updateConservation(final AlignmentPanel ap) - { - // see note in mantis : issue number 8585 - if (alignment.isNucleotide() || conservation == null - || !autoCalculateConsensus) - { - return; - } - - conservationThread = new ConservationThread(this, ap); - conservationThread.start(); - } - - /** - * trigger update of consensus annotation - */ - public void updateConsensus(final AlignmentPanel ap) - { - // see note in mantis : issue number 8585 - if (consensus == null || !autoCalculateConsensus) - { - return; - } - consensusThread = new ConsensusThread(ap); - consensusThread.start(); - } - - class ConsensusThread extends Thread - { - AlignmentPanel ap; - - public ConsensusThread(AlignmentPanel ap) - { - this.ap = ap; - } - - public void run() - { - updatingConsensus = true; - while (UPDATING_CONSENSUS) - { - try - { - if (ap != null) - { - ap.paintAlignment(false); - } - - Thread.sleep(200); - } catch (Exception ex) - { - ex.printStackTrace(); - } - } - - UPDATING_CONSENSUS = true; - - try - { - int aWidth = (alignment != null) ? alignment.getWidth() : -1; // null - // pointer - // possibility - // here. - if (aWidth <= 0) - { - updatingConsensus = false; - UPDATING_CONSENSUS = false; - return; - } - - consensus.annotations = null; - consensus.annotations = new Annotation[aWidth]; - - hconsensus = new Hashtable[aWidth]; - AAFrequency.calculate(alignment.getSequencesArray(), 0, - alignment.getWidth(), hconsensus, true); - updateAnnotation(true); - if (globalColourScheme != null) - { - globalColourScheme.setConsensus(hconsensus); - } - - } catch (OutOfMemoryError error) - { - alignment.deleteAnnotation(consensus); - - consensus = null; - hconsensus = null; - new OOMWarning("calculating consensus", error); - } - UPDATING_CONSENSUS = false; - updatingConsensus = false; - - if (ap != null) - { - ap.paintAlignment(true); - } - } - - /** - * update the consensus annotation from the sequence profile data using - * current visualization settings. - */ - public void updateAnnotation() - { - updateAnnotation(false); - } - - protected void updateAnnotation(boolean immediate) - { - // TODO: make calls thread-safe, so if another thread calls this method, - // it will either return or wait until one calculation is finished. - if (immediate - || (!updatingConsensus && consensus != null && hconsensus != null)) - { - AAFrequency.completeConsensus(consensus, hconsensus, 0, - hconsensus.length, ignoreGapsInConsensusCalculation, - showSequenceLogo); - } - } - } - - //--------START Structure Conservation - public void updateStrucConsensus(final AlignmentPanel ap) - { - // see note in mantis : issue number 8585 - if (strucConsensus == null || !autoCalculateStrucConsensus) - { - return; - } - strucConsensusThread = new StrucConsensusThread(ap); - strucConsensusThread.start(); - } - - class StrucConsensusThread extends Thread - { - AlignmentPanel ap; - - public StrucConsensusThread(AlignmentPanel ap) - { - this.ap = ap; - } - - public void run() - { - updatingStrucConsensus = true; - while (UPDATING_STRUC_CONSENSUS) - { - try - { - if (ap != null) - { - ap.paintAlignment(false); - } - - Thread.sleep(200); - } catch (Exception ex) - { - ex.printStackTrace(); - } - } - - UPDATING_STRUC_CONSENSUS = true; - - try - { - int aWidth = (alignment != null) ? alignment.getWidth() : -1; // null - // pointer - // possibility - // here. - if (aWidth <= 0) - { - updatingStrucConsensus = false; - UPDATING_STRUC_CONSENSUS = false; - return; - } - - strucConsensus.annotations = null; - strucConsensus.annotations = new Annotation[aWidth]; - - hStrucConsensus = new Hashtable[aWidth]; - - AlignmentAnnotation[] aa = ap.av.getAlignment().getAlignmentAnnotation(); - AlignmentAnnotation rnaStruc = null; - for(int i=0; i 0) - { - if (selectionGroup == null) - { - selectionGroup = new SequenceGroup(); - selectionGroup.setEndRes(alignment.getWidth() - 1); - } - - for (int t = 0; t < tmp.size(); t++) - { - selectionGroup.addSequence((SequenceI) tmp.elementAt(t), false); - } - firePropertyChange("alignment", null, alignment.getSequences()); - sendSelection(); - } - - if (alignment.getHiddenSequences().getSize() < 1) - { - hasHiddenRows = false; - } - } - - public void showColumn(int col) - { - colSel.revealHiddenColumns(col); - if (colSel.getHiddenColumns() == null) - { - hasHiddenColumns = false; - } - } - - public void showAllHiddenColumns() - { - colSel.revealAllHiddenColumns(); - hasHiddenColumns = false; - } - - public void showAllHiddenSeqs() - { - if (alignment.getHiddenSequences().getSize() > 0) - { - if (selectionGroup == null) - { - selectionGroup = new SequenceGroup(); - selectionGroup.setEndRes(alignment.getWidth() - 1); - } - Vector tmp = alignment.getHiddenSequences().showAll( - hiddenRepSequences); - for (int t = 0; t < tmp.size(); t++) - { - selectionGroup.addSequence((SequenceI) tmp.elementAt(t), false); - } - firePropertyChange("alignment", null, alignment.getSequences()); - sendSelection(); - hasHiddenRows = false; - hiddenRepSequences = null; - } - } - - public void invertColumnSelection() - { - colSel.invertColumnSelection(0, alignment.getWidth()); - } - - public int adjustForHiddenSeqs(int alignmentIndex) - { - return alignment.getHiddenSequences().adjustForHiddenSeqs( - alignmentIndex); - } - - /** - * This method returns an array of new SequenceI objects derived from the - * whole alignment or just the current selection with start and end points - * adjusted - * - * @note if you need references to the actual SequenceI objects in the - * alignment or currently selected then use getSequenceSelection() - * @return selection as new sequenceI objects - */ - public SequenceI[] getSelectionAsNewSequence() - { - SequenceI[] sequences; - - if (selectionGroup == null) - { - sequences = alignment.getSequencesArray(); - AlignmentAnnotation[] annots = alignment.getAlignmentAnnotation(); - for (int i = 0; i < sequences.length; i++) - { - sequences[i] = new Sequence(sequences[i], annots); // construct new - // sequence with - // subset of visible - // annotation - } - } - else - { - sequences = selectionGroup.getSelectionAsNewSequences(alignment); - } - - return sequences; - } - - /** - * get the currently selected sequence objects or all the sequences in the - * alignment. - * - * @return array of references to sequence objects - */ - public SequenceI[] getSequenceSelection() - { - SequenceI[] sequences = null; - if (selectionGroup != null) - { - sequences = selectionGroup.getSequencesInOrder(alignment); - } - if (sequences == null) - { - sequences = alignment.getSequencesArray(); - } - return sequences; - } - - /** - * This method returns the visible alignment as text, as seen on the GUI, ie - * if columns are hidden they will not be returned in the result. Use this for - * calculating trees, PCA, redundancy etc on views which contain hidden - * columns. - * - * @return String[] - */ - public jalview.datamodel.CigarArray getViewAsCigars( - boolean selectedRegionOnly) - { - return new jalview.datamodel.CigarArray(alignment, (hasHiddenColumns ? colSel : null), (selectedRegionOnly ? selectionGroup : null)); - } - - /** - * return a compact representation of the current alignment selection to pass - * to an analysis function - * - * @param selectedOnly - * boolean true to just return the selected view - * @return AlignmentView - */ - public jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly) - { - return getAlignmentView(selectedOnly, false); - } - - /** - * return a compact representation of the current alignment selection to pass - * to an analysis function - * - * @param selectedOnly - * boolean true to just return the selected view - * @param markGroups - * boolean true to annotate the alignment view with groups on the alignment (and intersecting with selected region if selectedOnly is true) - * @return AlignmentView - */ - public jalview.datamodel.AlignmentView getAlignmentView(boolean selectedOnly, boolean markGroups) - { - return new AlignmentView(alignment, colSel, selectionGroup, hasHiddenColumns, selectedOnly, markGroups); - } - - /** - * This method returns the visible alignment as text, as seen on the GUI, ie - * if columns are hidden they will not be returned in the result. Use this for - * calculating trees, PCA, redundancy etc on views which contain hidden - * columns. - * - * @return String[] - */ - public String[] getViewAsString(boolean selectedRegionOnly) - { - String[] selection = null; - SequenceI[] seqs = null; - int i, iSize; - int start = 0, end = 0; - if (selectedRegionOnly && selectionGroup != null) - { - iSize = selectionGroup.getSize(); - seqs = selectionGroup.getSequencesInOrder(alignment); - start = selectionGroup.getStartRes(); - end = selectionGroup.getEndRes() + 1; - } - else - { - iSize = alignment.getHeight(); - seqs = alignment.getSequencesArray(); - end = alignment.getWidth(); - } - - selection = new String[iSize]; - if (hasHiddenColumns) - { - selection = colSel.getVisibleSequenceStrings(start, end, seqs); - } - else - { - for (i = 0; i < iSize; i++) - { - selection[i] = seqs[i].getSequenceAsString(start, end); - } - - } - return selection; - } - - public int[][] getVisibleRegionBoundaries(int min, int max) - { - Vector regions = new Vector(); - int start = min; - int end = max; - - do - { - if (hasHiddenColumns) - { - if (start == 0) - { - start = colSel.adjustForHiddenColumns(start); - } - - end = colSel.getHiddenBoundaryRight(start); - if (start == end) - { - end = max; - } - if (end > max) - { - end = max; - } - } - - regions.addElement(new int[] - { start, end }); - - if (hasHiddenColumns) - { - start = colSel.adjustForHiddenColumns(end); - start = colSel.getHiddenBoundaryLeft(start) + 1; - } - } while (end < max); - - int[][] startEnd = new int[regions.size()][2]; - - regions.copyInto(startEnd); - - return startEnd; - - } - public boolean getShowHiddenMarkers() { return showHiddenMarkers; @@ -1834,142 +935,6 @@ public class AlignViewport implements SelectionSource, VamsasSource showHiddenMarkers = show; } - public String getSequenceSetId() - { - if (sequenceSetID == null) - { - sequenceSetID = alignment.hashCode() + ""; - } - - return sequenceSetID; - } - - /** - * unique viewId for synchronizing state with stored Jalview Project - * - */ - private String viewId = null; - - public String getViewId() - { - if (viewId == null) - { - viewId = this.getSequenceSetId() + "." + this.hashCode() + ""; - } - return viewId; - } - - public void alignmentChanged(AlignmentPanel ap) - { - if (padGaps) - { - alignment.padGaps(); - } - if (hconsensus != null && autoCalculateConsensus) - { - updateConservation(ap); - } - if (autoCalculateConsensus) - { - updateConsensus(ap); - } - if(autoCalculateStrucConsensus) - { - updateStrucConsensus(ap); - } - - // Reset endRes of groups if beyond alignment width - int alWidth = alignment.getWidth(); - Vector groups = alignment.getGroups(); - if (groups != null) - { - for (int i = 0; i < groups.size(); i++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(i); - if (sg.getEndRes() > alWidth) - { - sg.setEndRes(alWidth - 1); - } - } - } - - if (selectionGroup != null && selectionGroup.getEndRes() > alWidth) - { - selectionGroup.setEndRes(alWidth - 1); - } - - resetAllColourSchemes(); - - // alignment.adjustSequenceAnnotations(); - } - - void resetAllColourSchemes() - { - ColourSchemeI cs = globalColourScheme; - if (cs != null) - { - if (cs instanceof ClustalxColourScheme) - { - ((ClustalxColourScheme) cs).resetClustalX(alignment.getSequences(), - alignment.getWidth()); - } - - cs.setConsensus(hconsensus); - if (cs.conservationApplied()) - { - Alignment al = (Alignment) alignment; - Conservation c = new Conservation("All", - ResidueProperties.propHash, 3, al.getSequences(), 0, - al.getWidth() - 1); - c.calculate(); - c.verdict(false, ConsPercGaps); - - cs.setConservation(c); - } - } - - int s, sSize = alignment.getGroups().size(); - for (s = 0; s < sSize; s++) - { - SequenceGroup sg = (SequenceGroup) alignment.getGroups().elementAt(s); - if (sg.cs != null && sg.cs instanceof ClustalxColourScheme) - { - ((ClustalxColourScheme) sg.cs).resetClustalX( - sg.getSequences(hiddenRepSequences), sg.getWidth()); - } - sg.recalcConservation(); - } - } - - public Color getSequenceColour(SequenceI seq) - { - if (sequenceColours == null || !sequenceColours.containsKey(seq)) - { - return Color.white; - } - else - { - return (Color) sequenceColours.get(seq); - } - } - - public void setSequenceColour(SequenceI seq, Color col) - { - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - - if (col == null) - { - sequenceColours.remove(seq); - } - else - { - sequenceColours.put(seq, col); - } - } - /** * returns the visible column regions of the alignment * @@ -2002,6 +967,7 @@ public class AlignViewport implements SelectionSource, VamsasSource */ public long[] getUndoRedoHash() { + // TODO: JAL-1126 if (historyList == null || redoList == null) return new long[] { -1, -1 }; @@ -2050,27 +1016,6 @@ public class AlignViewport implements SelectionSource, VamsasSource centreColumnLabels = centrecolumnlabels; } - public void updateSequenceIdColours() - { - Vector groups = alignment.getGroups(); - if (sequenceColours == null) - { - sequenceColours = new Hashtable(); - } - for (int ig = 0, igSize = groups.size(); ig < igSize; ig++) - { - SequenceGroup sg = (SequenceGroup) groups.elementAt(ig); - if (sg.idColour != null) - { - Vector sqs = sg.getSequences(hiddenRepSequences); - for (int s = 0, sSize = sqs.size(); s < sSize; s++) - { - sequenceColours.put(sqs.elementAt(s), sg.idColour); - } - } - } - } - /** * enable or disable the display of Database Cross References in the sequence * ID tooltip @@ -2153,46 +1098,8 @@ public class AlignViewport implements SelectionSource, VamsasSource return followSelection; } - private long sgrouphash = -1, colselhash = -1; - boolean showSeqFeaturesHeight; - /** - * checks current SelectionGroup against record of last hash value, and - * updates record. - * @param b update the record of last hash value - * - * @return true if SelectionGroup changed since last call (when b is true) - */ - boolean isSelectionGroupChanged(boolean b) - { - int hc = (selectionGroup == null || selectionGroup.getSize()==0) ? -1 : selectionGroup.hashCode(); - if (hc!=-1 && hc != sgrouphash) - { - if (b) {sgrouphash = hc;} - return true; - } - return false; - } - - /** - * checks current colsel against record of last hash value, and optionally updates - * record. - - * @param b update the record of last hash value - * @return true if colsel changed since last call (when b is true) - */ - boolean isColSelChanged(boolean b) - { - int hc = (colSel == null || colSel.size()==0) ? -1 : colSel.hashCode(); - if (hc!=-1 && hc != colselhash) - { - if (b) {colselhash = hc;} - return true; - } - return false; - } - public void sendSelection() { jalview.structure.StructureSelectionManager @@ -2211,18 +1118,6 @@ public class AlignViewport implements SelectionSource, VamsasSource return showSeqFeaturesHeight; } - boolean showUnconserved = false; - - public boolean getShowUnconserved() - { - return showUnconserved; - } - - public void setShowUnconserved(boolean showunconserved) - { - showUnconserved = showunconserved; - } - /** * return the alignPanel containing the given viewport. Use this to get the * components currently handling the given viewport. @@ -2257,110 +1152,6 @@ public class AlignViewport implements SelectionSource, VamsasSource } /** - * should conservation rows be shown for groups - */ - boolean showGroupConservation = false; - - /** - * should consensus rows be shown for groups - */ - boolean showGroupConsensus = false; - - /** - * should consensus profile be rendered by default - */ - public boolean showSequenceLogo = false; - - /** - * should consensus histograms be rendered by default - */ - public boolean showConsensusHistogram = true; - - /** - * @return the showConsensusProfile - */ - public boolean isShowSequenceLogo() - { - return showSequenceLogo; - } - - /** - * @param showSequenceLogo - * the new value - */ - public void setShowSequenceLogo(boolean showSequenceLogo) - { - if (showSequenceLogo != this.showSequenceLogo) - { - // TODO: decouple settings setting from calculation when refactoring - // annotation update method from alignframe to viewport - this.showSequenceLogo = showSequenceLogo; - if (consensusThread != null) - { - consensusThread.updateAnnotation(); - } - if (strucConsensusThread != null) - { - strucConsensusThread.updateAnnotation(); - } - } - this.showSequenceLogo = showSequenceLogo; - } - - /** - * @param showConsensusHistogram - * the showConsensusHistogram to set - */ - public void setShowConsensusHistogram(boolean showConsensusHistogram) - { - this.showConsensusHistogram = showConsensusHistogram; - } - - /** - * @return the showGroupConservation - */ - public boolean isShowGroupConservation() - { - return showGroupConservation; - } - - /** - * @param showGroupConservation - * the showGroupConservation to set - */ - public void setShowGroupConservation(boolean showGroupConservation) - { - this.showGroupConservation = showGroupConservation; - } - - /** - * @return the showGroupConsensus - */ - public boolean isShowGroupConsensus() - { - return showGroupConsensus; - } - - /** - * @param showGroupConsensus - * the showGroupConsensus to set - */ - public void setShowGroupConsensus(boolean showGroupConsensus) - { - this.showGroupConsensus = showGroupConsensus; - } - - /** - * - * @return flag to indicate if the consensus histogram should be rendered by - * default - */ - public boolean isShowConsensusHistogram() - { - return this.showConsensusHistogram; - } - - /** * synthesize a column selection if none exists so it covers the given * selection group. if wholewidth is false, no column selection is made if the * selection group covers the whole alignment width. @@ -2395,40 +1186,82 @@ public class AlignViewport implements SelectionSource, VamsasSource public StructureSelectionManager getStructureSelectionManager() { - return StructureSelectionManager.getStructureSelectionManager(Desktop.instance); + return StructureSelectionManager + .getStructureSelectionManager(Desktop.instance); } /** * * @param pdbEntries - * @return a series of SequenceI arrays, one for each PDBEntry, listing which sequence in the alignment holds a reference to it + * @return a series of SequenceI arrays, one for each PDBEntry, listing which + * sequence in the alignment holds a reference to it */ public SequenceI[][] collateForPDB(PDBEntry[] pdbEntries) { ArrayList seqvectors = new ArrayList(); - for (PDBEntry pdb: pdbEntries) { - ArrayList seqs = new ArrayList(); - for (int i = 0; i < alignment.getHeight(); i++) + for (PDBEntry pdb : pdbEntries) { - Vector pdbs = alignment.getSequenceAt(i) - .getDatasetSequence().getPDBId(); - if (pdbs == null) - continue; - SequenceI sq; - for (int p = 0; p < pdbs.size(); p++) + ArrayList seqs = new ArrayList(); + for (int i = 0; i < alignment.getHeight(); i++) { - PDBEntry p1 = (PDBEntry) pdbs.elementAt(p); - if (p1.getId().equals(pdb.getId())) + Vector pdbs = alignment.getSequenceAt(i).getDatasetSequence() + .getPDBId(); + if (pdbs == null) + continue; + SequenceI sq; + for (int p = 0; p < pdbs.size(); p++) { - if (!seqs.contains(sq=alignment.getSequenceAt(i))) - seqs.add(sq); + PDBEntry p1 = (PDBEntry) pdbs.elementAt(p); + if (p1.getId().equals(pdb.getId())) + { + if (!seqs.contains(sq = alignment.getSequenceAt(i))) + seqs.add(sq); - continue; + continue; + } } } - } - seqvectors.add(seqs.toArray(new SequenceI[seqs.size()])); + seqvectors.add(seqs.toArray(new SequenceI[seqs.size()])); } return seqvectors.toArray(new SequenceI[seqvectors.size()][]); } + + public boolean isNormaliseSequenceLogo() + { + return normaliseSequenceLogo; + } + + public void setNormaliseSequenceLogo(boolean state) + { + normaliseSequenceLogo = state; + } + + /** + * + * @return true if alignment characters should be displayed + */ + public boolean isValidCharWidth() + { + return validCharWidth; + } + + private Hashtable calcIdParams = new Hashtable(); + + public AutoCalcSetting getCalcIdSettingsFor(String calcId) + { + return calcIdParams.get(calcId); + } + + public void setCalcIdSettingsFor(String calcId, AutoCalcSetting settings, + boolean needsUpdate) + { + calcIdParams.put(calcId, settings); + // TODO: create a restart list to trigger any calculations that need to be + // restarted after load + // calculator.getRegisteredWorkersOfClass(settings.getWorkerClass()) + if (needsUpdate) + { + Cache.log.debug("trigger update for " + calcId); + } + } }