Merge branch 'bug/JAL-3612_overviewFeatureOrdering' into develop
authorJim Procter <j.procter@dundee.ac.uk>
Wed, 14 Sep 2022 11:19:13 +0000 (12:19 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Wed, 14 Sep 2022 11:19:13 +0000 (12:19 +0100)
1  2 
src/jalview/renderer/seqfeatures/FeatureRenderer.java
test/jalview/renderer/seqfeatures/FeatureColourFinderTest.java

@@@ -358,8 -358,8 +358,8 @@@ public class FeatureRenderer extends Fe
          }
  
          int featureStartCol = seq.findIndex(visibleStart);
 -        int featureEndCol = sf.begin == sf.end ? featureStartCol : seq
 -                .findIndex(visibleEnd);
 +        int featureEndCol = sf.begin == sf.end ? featureStartCol
 +                : seq.findIndex(visibleEnd);
  
          // Color featureColour = getColour(sequenceFeature);
  
            else
            {
            */
 -            boolean drawn = renderFeature(g, seq,
 -                    featureStartCol - 1,
 -                    featureEndCol - 1, featureColour,
 -                    start, end, y1, colourOnly);
 -            if (drawn)
 -            {
 -              drawnColour = featureColour;
 -            }
 +          boolean drawn = renderFeature(g, seq, featureStartCol - 1,
 +                  featureEndCol - 1, featureColour, start, end, y1,
 +                  colourOnly);
 +          if (drawn)
 +          {
 +            drawnColour = featureColour;
 +          }
            /*}*/
          }
        }
      for (int pos = visibleStart; pos <= visibleEnd; pos++)
      {
        int column = seq.findIndex(pos);
 -      MappedFeatures mf = fr2
 -              .findComplementFeaturesAtResidue(seq, pos);
 +      MappedFeatures mf = fr2.findComplementFeaturesAtResidue(seq, pos);
        if (mf != null)
        {
          for (SequenceFeature sf : mf.features)
          continue;
        }
  
+       /*
+        * find features of this type, and the colour of the _last_ one
+        * (the one that would be drawn on top) that has a colour
+        */
        List<SequenceFeature> overlaps = seq.findFeatures(column, column,
                type);
-       for (SequenceFeature sequenceFeature : overlaps)
+       for (int i = overlaps.size() - 1 ; i >= 0 ; i--)
        {
+         SequenceFeature sequenceFeature = overlaps.get(i);
          if (!featureGroupNotShown(sequenceFeature))
          {
            Color col = getColour(sequenceFeature);
      AlignViewportI complement = av.getCodingComplement();
      AlignFrame af = Desktop.getAlignFrameFor(complement);
      FeatureRendererModel fr2 = af.getFeatureRenderer();
 -    MappedFeatures mf = fr2.findComplementFeaturesAtResidue(
 -            seq, seq.findPosition(column - 1));
 +    MappedFeatures mf = fr2.findComplementFeaturesAtResidue(seq,
 +            seq.findPosition(column - 1));
      if (mf == null)
      {
        return null;
@@@ -1,23 -1,3 +1,23 @@@
 +/*
 + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
 + * Copyright (C) $$Year-Rel$$ 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.
 + *  
 + * 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 <http://www.gnu.org/licenses/>.
 + * The Jalview Authors are detailed in the 'AUTHORS' file.
 + */
  package jalview.renderer.seqfeatures;
  
  import static org.testng.Assert.assertEquals;
@@@ -26,6 -6,13 +26,13 @@@ import static org.testng.Assert.assertN
  import static org.testng.Assert.assertNull;
  import static org.testng.Assert.assertTrue;
  
+ import java.awt.Color;
+ import java.util.List;
+ import org.testng.annotations.BeforeMethod;
+ import org.testng.annotations.BeforeTest;
+ import org.testng.annotations.Test;
  import jalview.api.FeatureColourI;
  import jalview.datamodel.SequenceFeature;
  import jalview.datamodel.SequenceI;
@@@ -37,13 -24,6 +44,6 @@@ import jalview.schemes.FeatureColour
  import jalview.viewmodel.seqfeatures.FeatureRendererModel;
  import jalview.viewmodel.seqfeatures.FeatureRendererModel.FeatureSettingsBean;
  
- import java.awt.Color;
- import java.util.List;
- import org.testng.annotations.BeforeMethod;
- import org.testng.annotations.BeforeTest;
- import org.testng.annotations.Test;
  /**
   * Unit tests for feature colour determination, including but not limited to
   * <ul>
@@@ -162,6 -142,27 +162,27 @@@ public class FeatureColourFinderTes
      assertNull(c);
    }
  
+   /**
+    * Nested features coloured by label - expect the colour of the enclosed
+    * feature
+    */
+   @Test(groups = "Functional")
+   public void testFindFeatureColour_nestedFeatures()
+   {
+     SequenceFeature sf1 = new SequenceFeature("domain", "peptide", 1, 120, 0f, null);
+     seq.addSequenceFeature(sf1);
+     SequenceFeature sf2 = new SequenceFeature("domain", "binding", 10, 20,
+             0f, null);
+     seq.addSequenceFeature(sf2);
+     FeatureColourI fc = new FeatureColour(Color.red);
+     fc.setColourByLabel(true);
+     fr.setColour("domain", fc);
+     fr.featuresAdded();
+     av.setShowSequenceFeatures(true);
+     Color c = finder.findFeatureColour(null, seq, 15);
+     assertEquals(c, fr.getColor(sf2, fc));
+   }
    @Test(groups = "Functional")
    public void testFindFeatureColour_multipleFeaturesAtPositionNoTransparency()
    {