X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fviewmodel%2FAlignmentViewport.java;h=0803773cc6e2008e53a7bd98269b869a23cc02c4;hb=09d9063e70931a6cb75d16b230f5cd0665f0f340;hp=3a92e4b9cb872d5a3fcfdb89c1e7260ff6262b21;hpb=853624fb32058cccc544ae7d13af6ad4b0800b6c;p=jalview.git diff --git a/src/jalview/viewmodel/AlignmentViewport.java b/src/jalview/viewmodel/AlignmentViewport.java index 3a92e4b..0803773 100644 --- a/src/jalview/viewmodel/AlignmentViewport.java +++ b/src/jalview/viewmodel/AlignmentViewport.java @@ -36,12 +36,15 @@ import jalview.datamodel.Annotation; import jalview.datamodel.CigarArray; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenSequences; -import jalview.datamodel.SearchResults; +import jalview.datamodel.ProfilesI; +import jalview.datamodel.SearchResultsI; import jalview.datamodel.Sequence; import jalview.datamodel.SequenceCollectionI; import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.schemes.Blosum62ColourScheme; +import jalview.schemes.CollectionColourScheme; +import jalview.schemes.CollectionColourSchemeI; import jalview.schemes.ColourSchemeI; import jalview.schemes.PIDColourScheme; import jalview.structure.CommandListener; @@ -596,7 +599,7 @@ public abstract class AlignmentViewport implements AlignViewportI, protected boolean ignoreGapsInConsensusCalculation = false; - protected ColourSchemeI globalColourScheme = null; + protected CollectionColourScheme globalColourScheme; @Override public void setGlobalColourScheme(ColourSchemeI cs) @@ -608,28 +611,39 @@ public abstract class AlignmentViewport implements AlignViewportI, // - means that caller decides if they want to just modify state and defer // calculation till later or to do all calculations in thread. // via changecolour - globalColourScheme = cs; + + /* + * only instantiate colour scheme once, thereafter update it + */ + if (globalColourScheme == null) + { + globalColourScheme = new CollectionColourScheme(); + } + globalColourScheme.setColourScheme(cs); + boolean recalc = false; if (cs != null) { - cs.setConservationApplied(recalc = getConservationSelected()); + recalc = getConservationSelected(); if (getAbovePIDThreshold() || cs instanceof PIDColourScheme || cs instanceof Blosum62ColourScheme) { recalc = true; - cs.setThreshold(viewStyle.getThreshold(), + globalColourScheme.setThreshold(viewStyle.getThreshold(), ignoreGapsInConsensusCalculation); } else { - cs.setThreshold(0, ignoreGapsInConsensusCalculation); + globalColourScheme + .setThreshold(0, ignoreGapsInConsensusCalculation); } if (recalc) { - cs.setConsensus(hconsensus); - cs.setConservation(hconservation); + globalColourScheme.setConsensus(hconsensus); + globalColourScheme.setConservation(hconservation); } - cs.alignmentChanged(alignment, hiddenRepSequences); + globalColourScheme.setConservationApplied(getConservationSelected()); + globalColourScheme.alignmentChanged(alignment, hiddenRepSequences); } if (getColourAppliesToAllGroups()) { @@ -637,31 +651,33 @@ public abstract class AlignmentViewport implements AlignViewportI, { if (cs == null) { - sg.cs = null; + sg.setColourScheme(null); continue; } - sg.cs = cs.applyTo(sg, getHiddenRepSequences()); + CollectionColourScheme groupColour = new CollectionColourScheme(cs.getInstance(sg, + getHiddenRepSequences())); + sg.setGroupColourScheme(groupColour); sg.setConsPercGaps(ConsPercGaps); if (getAbovePIDThreshold() || cs instanceof PIDColourScheme || cs instanceof Blosum62ColourScheme) { - sg.cs.setThreshold(viewStyle.getThreshold(), + groupColour.setThreshold(viewStyle.getThreshold(), isIgnoreGapsConsensus()); recalc = true; } else { - sg.cs.setThreshold(0, isIgnoreGapsConsensus()); + groupColour.setThreshold(0, isIgnoreGapsConsensus()); } if (getConservationSelected()) { - sg.cs.setConservationApplied(true); + groupColour.setConservationApplied(true); recalc = true; } else { - sg.cs.setConservation(null); + groupColour.setConservation(null); // sg.cs.setThreshold(0, getIgnoreGapsConsensus()); } if (recalc) @@ -670,7 +686,7 @@ public abstract class AlignmentViewport implements AlignViewportI, } else { - sg.cs.alignmentChanged(sg, hiddenRepSequences); + groupColour.alignmentChanged(sg, hiddenRepSequences); } } } @@ -679,6 +695,13 @@ public abstract class AlignmentViewport implements AlignViewportI, @Override public ColourSchemeI getGlobalColourScheme() { + return globalColourScheme == null ? null : globalColourScheme + .getColourScheme(); + } + + @Override + public CollectionColourSchemeI getViewportColourScheme() + { return globalColourScheme; } @@ -699,7 +722,7 @@ public abstract class AlignmentViewport implements AlignViewportI, /** * results of alignment consensus analysis for visible portion of view */ - protected Hashtable[] hconsensus = null; + protected ProfilesI hconsensus = null; /** * results of cDNA complement consensus visible portion of view @@ -733,7 +756,7 @@ public abstract class AlignmentViewport implements AlignViewportI, } @Override - public void setSequenceConsensusHash(Hashtable[] hconsensus) + public void setSequenceConsensusHash(ProfilesI hconsensus) { this.hconsensus = hconsensus; } @@ -745,7 +768,7 @@ public abstract class AlignmentViewport implements AlignViewportI, } @Override - public Hashtable[] getSequenceConsensusHash() + public ProfilesI getSequenceConsensusHash() { return hconsensus; } @@ -938,7 +961,9 @@ public abstract class AlignmentViewport implements AlignViewportI, groupConservation = null; hconsensus = null; hcomplementConsensus = null; - // TODO removed listeners from changeSupport? + // colour scheme may hold reference to consensus + globalColourScheme = null; + // TODO remove listeners from changeSupport? changeSupport = null; setAlignment(null); } @@ -1855,7 +1880,7 @@ public abstract class AlignmentViewport implements AlignViewportI, */ void resetAllColourSchemes() { - ColourSchemeI cs = globalColourScheme; + CollectionColourScheme cs = globalColourScheme; if (cs != null) { cs.alignmentChanged(alignment, hiddenRepSequences); @@ -1863,7 +1888,7 @@ public abstract class AlignmentViewport implements AlignViewportI, cs.setConsensus(hconsensus); if (cs.conservationApplied()) { - cs.setConservation(Conservation.calculateConservation("All", 3, + cs.setConservation(Conservation.calculateConservation("All", alignment.getSequences(), 0, alignment.getWidth(), false, getConsPercGaps(), false)); } @@ -2714,7 +2739,7 @@ public abstract class AlignmentViewport implements AlignViewportI, * the SearchResults to add to * @return the offset (below top of visible region) of the matched sequence */ - protected int findComplementScrollTarget(SearchResults sr) + protected int findComplementScrollTarget(SearchResultsI sr) { final AlignViewportI complement = getCodingComplement(); if (complement == null || !complement.isFollowHighlight()) @@ -2821,6 +2846,7 @@ public abstract class AlignmentViewport implements AlignViewportI, */ private boolean selectionIsDefinedGroup = false; + @Override public boolean isSelectionDefinedGroup() { @@ -2844,4 +2870,27 @@ public abstract class AlignmentViewport implements AlignViewportI, return selectionGroup.getContext() == alignment || selectionIsDefinedGroup; } + + /** + * null, or currently highlighted results on this view + */ + private SearchResultsI searchResults = null; + + @Override + public boolean hasSearchResults() + { + return searchResults != null; + } + + @Override + public void setSearchResults(SearchResultsI results) + { + searchResults = results; + } + + @Override + public SearchResultsI getSearchResults() + { + return searchResults; + } }