X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fviewmodel%2Fseqfeatures%2FFeatureRendererModel.java;h=853bc3be23ce6c202c41676478a9717a9e1c23d8;hb=cd84efbd9723bf4a92f2be2e04183612e4ce0a6e;hp=9e707f397b1726db33ff9c8abf85e2ec2c333680;hpb=006890b02106eb31841e6e84d75f1027434823e0;p=jalview.git diff --git a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java index 9e707f3..853bc3b 100644 --- a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java +++ b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java @@ -20,6 +20,21 @@ */ package jalview.viewmodel.seqfeatures; +import java.awt.Color; +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Comparator; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Hashtable; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + import jalview.api.AlignViewportI; import jalview.api.FeatureColourI; import jalview.api.FeaturesDisplayedI; @@ -37,21 +52,7 @@ import jalview.datamodel.features.SequenceFeatures; import jalview.renderer.seqfeatures.FeatureRenderer; import jalview.schemes.FeatureColour; import jalview.util.ColorUtils; - -import java.awt.Color; -import java.beans.PropertyChangeListener; -import java.beans.PropertyChangeSupport; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Hashtable; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; +import jalview.util.Platform; public abstract class FeatureRendererModel implements jalview.api.FeatureRenderer @@ -103,11 +104,11 @@ public abstract class FeatureRendererModel Map featureOrder = null; - protected PropertyChangeSupport changeSupport = new PropertyChangeSupport( - this); - protected AlignViewportI av; + private PropertyChangeSupport changeSupport = new PropertyChangeSupport( + this); + @Override public AlignViewportI getViewport() { @@ -300,13 +301,19 @@ public abstract class FeatureRendererModel { firing = Boolean.TRUE; findAllFeatures(true); // add all new features as visible - changeSupport.firePropertyChange("changeSupport", null, null); + notifyFeaturesChanged(); firing = Boolean.FALSE; } } } @Override + public void notifyFeaturesChanged() + { + changeSupport.firePropertyChange("changeSupport", null, null); + } + + @Override public List findFeaturesAtColumn(SequenceI sequence, int column) { /* @@ -1046,6 +1053,14 @@ public abstract class FeatureRendererModel public void filterFeaturesForDisplay(List features) { /* + * fudge: JalviewJS's IntervalStore lacks the sort method called :-( + */ + if (Platform.isJS()) + { + return; + } + + /* * don't remove 'redundant' features if * - transparency is applied (feature count affects depth of feature colour) * - filters are applied (not all features may be displayable) @@ -1121,7 +1136,7 @@ public abstract class FeatureRendererModel /** * Answers the colour for the feature, or null if the feature is excluded by * feature group visibility, by filters, or by colour threshold settings. This - * method does not take feature visibility into account. + * method does not take feature type visibility into account. * * @param sf * @param fc @@ -1190,8 +1205,8 @@ public abstract class FeatureRendererModel } @Override - public MappedFeatures findComplementFeaturesAtResidue(SequenceI sequence, - int pos) + public MappedFeatures findComplementFeaturesAtResidue( + final SequenceI sequence, final int pos) { SequenceI ds = sequence.getDatasetSequence(); if (ds == null) @@ -1260,9 +1275,12 @@ public abstract class FeatureRendererModel } /* - * sort by renderorder, inefficiently + * sort by renderorder (inefficiently but ok for small scale); + * NB this sorts 'on top' feature to end, for rendering */ List result = new ArrayList<>(); + final int toAdd = found.size(); + int added = 0; for (String type : renderOrder) { for (SequenceFeature sf : found) @@ -1270,11 +1288,11 @@ public abstract class FeatureRendererModel if (type.equals(sf.getType())) { result.add(sf); - if (result.size() == found.size()) - { - return new MappedFeatures(mapping, mapFrom, pos, residue, - result); - } + added++; + } + if (added == toAdd) + { + break; } } }