JAL-4061 use alignment panel’s feature renderer to limit search to just the visible...
[jalview.git] / src / jalview / gui / Finder.java
index 93dcadf..c40b958 100755 (executable)
@@ -20,8 +20,6 @@
  */
 package jalview.gui;
 
-import java.util.Locale;
-
 import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.FocusAdapter;
@@ -30,6 +28,7 @@ import java.awt.event.KeyEvent;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Locale;
 import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.regex.PatternSyntaxException;
@@ -254,6 +253,17 @@ public class Finder extends GFinder
     new FeatureEditor(ap, seqs, features, true).showDialog();
   }
 
+  @Override
+  protected void copyToClipboard_actionPerformed()
+  {
+    if (searchResults.isEmpty())
+    {
+      return; // shouldn't happen
+    }
+    // assume viewport controller has same searchResults as we do...
+    ap.alignFrame.avc.copyHighlightedRegionsToClipboard();
+  }
+
   /**
    * Search the alignment for the next or all matches. If 'all matches', a
    * dialog is shown with the number of sequence ids and subsequences matched.
@@ -263,6 +273,7 @@ public class Finder extends GFinder
   void doSearch(boolean doFindAll)
   {
     createFeatures.setEnabled(false);
+    copyToClipboard.setEnabled(false);
 
     String searchString = searchBox.getUserInput();
 
@@ -283,19 +294,21 @@ public class Finder extends GFinder
       finder = new jalview.analysis.Finder(av);
       finders.put(av, finder);
     }
+    finder.setFeatureRenderer(ap.getFeatureRenderer());
 
     boolean isCaseSensitive = caseSensitive.isSelected();
     boolean doSearchDescription = searchDescription.isSelected();
+    boolean doSearchfeatures = searchFeatures.isSelected();
     boolean skipHidden = ignoreHidden.isSelected();
     if (doFindAll)
     {
       finder.findAll(searchString, isCaseSensitive, doSearchDescription,
-              skipHidden);
+              doSearchfeatures, skipHidden);
     }
     else
     {
       finder.findNext(searchString, isCaseSensitive, doSearchDescription,
-              skipHidden);
+              doSearchfeatures, skipHidden);
     }
 
     searchResults = finder.getSearchResults();
@@ -309,6 +322,7 @@ public class Finder extends GFinder
     else
     {
       createFeatures.setEnabled(true);
+      copyToClipboard.setEnabled(true);
     }
 
     searchBox.updateCache();
@@ -336,9 +350,8 @@ public class Finder extends GFinder
         {
           if (idMatch.size() > 0 && searchResults.getCount() > 0)
           {
-            message.append(" ").append(
-                    MessageManager.getString("label.and").toLowerCase(Locale.ROOT))
-                    .append(" ");
+            message.append(" ").append(MessageManager.getString("label.and")
+                    .toLowerCase(Locale.ROOT)).append(" ");
           }
           message.append(MessageManager.formatMessage(
                   "label.subsequence_matches_found",