JAL-4061 use alignment panel’s feature renderer to limit search to just the visible...
[jalview.git] / src / jalview / analysis / Finder.java
index 6061d76..21fa2f1 100644 (file)
@@ -29,6 +29,7 @@ import java.util.Locale;
 import com.stevesoft.pat.Regex;
 
 import jalview.api.AlignViewportI;
+import jalview.api.FeatureRenderer;
 import jalview.api.FinderI;
 import jalview.datamodel.AlignmentI;
 import jalview.datamodel.SearchResultMatchI;
@@ -62,6 +63,11 @@ public class Finder implements FinderI
   private AlignViewportI viewport;
 
   /*
+   * feature renderer model - if available
+   */
+  FeatureRenderer frm = null;
+
+  /*
    * sequence index in alignment to search from
    */
   private int sequenceIndex;
@@ -589,9 +595,23 @@ public class Finder implements FinderI
       lastFeature = null;
     }
     SequenceI seq = viewport.getAlignment().getSequenceAt(sequenceIndex);
-    long fpos = 0;
     SequenceFeaturesI sf = seq.getFeatures();
-    for (SequenceFeature feature : sf.getAllFeatures(null))
+
+    // TODO - stash feature list and search incrementally
+    List<SequenceFeature> allFeatures = null;
+    if (frm != null)
+    {
+      allFeatures = frm.findFeaturesAtResidue(seq, seq.getStart(),
+              seq.getEnd());
+    }
+    else
+    {
+      allFeatures = sf.getAllFeatures(null);
+    }
+    // so we can check we are advancing when debugging
+    long fpos = 0;
+
+    for (SequenceFeature feature : allFeatures)
     {
       fpos++;
       if (lastFeature != null)
@@ -607,6 +627,7 @@ public class Finder implements FinderI
           continue;
         }
       }
+
       if (searchPattern.search(feature.type) || (feature.description != null
               && searchPattern.search(feature.description)))
       {
@@ -712,4 +733,10 @@ public class Finder implements FinderI
   {
     return searchResults;
   }
+
+  @Override
+  public void setFeatureRenderer(FeatureRenderer featureRenderer)
+  {
+    frm = featureRenderer;
+  }
 }