git://source.jalview.org
/
jalview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
JAL-2622 no vertical scroll of wrapped alignment from trackpad / mouse
[jalview.git]
/
src
/
jalview
/
viewmodel
/
seqfeatures
/
FeatureRendererModel.java
diff --git
a/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java
b/src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java
index
c1ad465
..
40f38b6
100644
(file)
--- a/
src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java
+++ b/
src/jalview/viewmodel/seqfeatures/FeatureRendererModel.java
@@
-28,7
+28,7
@@
import jalview.datamodel.SequenceFeature;
import jalview.datamodel.SequenceI;
import jalview.renderer.seqfeatures.FeatureRenderer;
import jalview.schemes.FeatureColour;
import jalview.datamodel.SequenceI;
import jalview.renderer.seqfeatures.FeatureRenderer;
import jalview.schemes.FeatureColour;
-import jalview.schemes.UserColourScheme;
+import jalview.util.ColorUtils;
import java.awt.Color;
import java.beans.PropertyChangeListener;
import java.awt.Color;
import java.beans.PropertyChangeListener;
@@
-36,6
+36,7
@@
import java.beans.PropertyChangeSupport;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
@@
-344,6
+345,8
@@
public abstract class FeatureRendererModel implements
{
minmax = new Hashtable<String, float[][]>();
}
{
minmax = new Hashtable<String, float[][]>();
}
+
+ Set<String> oldGroups = new HashSet<String>(featureGroups.keySet());
AlignmentI alignment = av.getAlignment();
for (int i = 0; i < alignment.getHeight(); i++)
{
AlignmentI alignment = av.getAlignment();
for (int i = 0; i < alignment.getHeight(); i++)
{
@@
-358,9
+361,10
@@
public abstract class FeatureRendererModel implements
int index = 0;
while (index < features.length)
{
int index = 0;
while (index < features.length)
{
+ String fgrp = features[index].getFeatureGroup();
+ oldGroups.remove(fgrp);
if (!featuresDisplayed.isRegistered(features[index].getType()))
{
if (!featuresDisplayed.isRegistered(features[index].getType()))
{
- String fgrp = features[index].getFeatureGroup();
if (fgrp != null)
{
Boolean groupDisplayed = featureGroups.get(fgrp);
if (fgrp != null)
{
Boolean groupDisplayed = featureGroups.get(fgrp);
@@
-424,6
+428,16
@@
public abstract class FeatureRendererModel implements
index++;
}
}
index++;
}
}
+
+ /*
+ * oldGroups now consists of groups that no longer
+ * have any feature in them - remove these
+ */
+ for (String grp : oldGroups)
+ {
+ featureGroups.remove(grp);
+ }
+
updateRenderOrder(allfeatures);
findingFeatures = false;
}
updateRenderOrder(allfeatures);
findingFeatures = false;
}
@@
-542,7
+556,7
@@
public abstract class FeatureRendererModel implements
FeatureColourI fc = featureColours.get(featureType);
if (fc == null)
{
FeatureColourI fc = featureColours.get(featureType);
if (fc == null)
{
- Color col = UserColourScheme.createColourFromName(featureType);
+ Color col = ColorUtils.createColourFromName(featureType);
fc = new FeatureColour(col);
featureColours.put(featureType, fc);
}
fc = new FeatureColour(col);
featureColours.put(featureType, fc);
}
@@
-550,18
+564,28
@@
public abstract class FeatureRendererModel implements
}
/**
}
/**
- * calculate the render colour for a specific feature using current feature
- * settings.
+ * Returns the configured colour for a particular feature instance. This
+ * includes calculation of 'colour by label', or of a graduated score colour,
+ * if applicable. It does not take into account feature visibility or colour
+ * transparency.
*
* @param feature
*
* @param feature
- * @return render colour for the given feature
+ * @return
*/
public Color getColour(SequenceFeature feature)
{
FeatureColourI fc = getFeatureStyle(feature.getType());
*/
public Color getColour(SequenceFeature feature)
{
FeatureColourI fc = getFeatureStyle(feature.getType());
- return fc.getColor(feature);
+ return fc.isColored(feature) ? fc.getColor(feature) : null;
}
}
+ /**
+ * Answers true unless the feature has a score value which lies outside a
+ * minimum or maximum threshold configured for colouring. This method does not
+ * check feature type or group visibility.
+ *
+ * @param sequenceFeature
+ * @return
+ */
protected boolean showFeature(SequenceFeature sequenceFeature)
{
FeatureColourI fc = getFeatureStyle(sequenceFeature.type);
protected boolean showFeature(SequenceFeature sequenceFeature)
{
FeatureColourI fc = getFeatureStyle(sequenceFeature.type);
@@
-586,11
+610,13
@@
public abstract class FeatureRendererModel implements
featureColours.put(featureType, col);
}
featureColours.put(featureType, col);
}
+ @Override
public void setTransparency(float value)
{
transparency = value;
}
public void setTransparency(float value)
{
transparency = value;
}
+ @Override
public float getTransparency()
{
return transparency;
public float getTransparency()
{
return transparency;
@@
-822,7
+848,7
@@
public abstract class FeatureRendererModel implements
* @return list of groups
*/
@Override
* @return list of groups
*/
@Override
- public List getGroups(boolean visible)
+ public List<String> getGroups(boolean visible)
{
if (featureGroups != null)
{
{
if (featureGroups != null)
{