find incrementally searches ID then subsequence matches. Dialog reports number of...
[jalview.git] / src / jalview / gui / Finder.java
index 0896975..b3fad97 100755 (executable)
@@ -43,7 +43,7 @@ public class Finder extends GFinder
 
   int seqIndex = 0;
 
-  int resIndex = 0;
+  int resIndex = -1;
 
   SearchResults searchResults;
 
@@ -91,7 +91,7 @@ public class Finder extends GFinder
   {
     if (getFocusedViewport())
     {
-      resIndex = 0;
+      resIndex = -1;
       seqIndex = 0;
       doSearch(true);
     }
@@ -148,10 +148,10 @@ public class Finder extends GFinder
   }
 
   /**
-   * DOCUMENT ME!
+   * incrementally search the alignment
    * 
    * @param findAll
-   *                DOCUMENT ME!
+   *                true means find all results and raise a dialog box
    */
   void doSearch(boolean findAll)
   {
@@ -180,16 +180,19 @@ public class Finder extends GFinder
     searchResults = finder.getSearchResults(); // find(regex,
                                                 // caseSensitive.isSelected(), )
     Vector idMatch = finder.getIdMatch();
+    boolean haveResults=false;
     // set or reset the GUI
-    if ((searchResults.getSize() == 0) && (idMatch.size() > 0))
+    if ((idMatch.size() > 0))
     {
+      haveResults=true;
       ap.idPanel.highlightSearchResults(idMatch);
+    } else {
+      ap.idPanel.highlightSearchResults(null);
     }
-
-    int resultSize = searchResults.getSize();
-
+    
     if (searchResults.getSize() > 0)
     {
+      haveResults=true;
       createNewGroup.setEnabled(true);
     }
     else
@@ -202,19 +205,25 @@ public class Finder extends GFinder
     ap.highlightSearchResults(searchResults);
     // TODO: add enablers for 'SelectSequences' or 'SelectColumns' or
     // 'SelectRegion' selection
-    if (!findAll && resultSize == 0)
+    if (!haveResults)
     {
       JOptionPane.showInternalMessageDialog(this, "Finished searching",
               null, JOptionPane.INFORMATION_MESSAGE);
-      resIndex = 0;
+      resIndex = -1;
       seqIndex = 0;
     }
 
     if (findAll)
     {
-      String message = resultSize + " matches found.";
+      String message = (idMatch.size()>0) ? ""+idMatch.size()+" IDs" : "";
+      if (idMatch.size()>0 && searchResults.getSize()>0) {
+        message += " and ";
+      }
+      message += searchResults.getSize() + " subsequence matches found.";
       JOptionPane.showInternalMessageDialog(this, message, null,
               JOptionPane.INFORMATION_MESSAGE);
+      resIndex = -1;
+      seqIndex = 0;
     }
 
   }