JAL-2839 refactored analysis.Finder and tests
[jalview.git] / src / jalview / gui / Finder.java
index 1cbe6ab..c5b25bf 100755 (executable)
@@ -45,6 +45,7 @@ import javax.swing.JComponent;
 import javax.swing.JInternalFrame;
 import javax.swing.JLayeredPane;
 import javax.swing.KeyStroke;
+import javax.swing.event.InternalFrameAdapter;
 import javax.swing.event.InternalFrameEvent;
 
 /**
@@ -80,21 +81,26 @@ public class Finder extends GFinder
    */
   private int seqIndex = 0;
 
-  private int resIndex = -1;
+  private int colIndex = -1;
 
-  Map<AlignViewportI, Integer> seqIndices;
+  private Map<AlignViewportI, Integer> seqIndices;
 
-  Map<AlignViewportI, Integer> resIndices;
+  private Map<AlignViewportI, Integer> colIndices;
 
   private SearchResultsI searchResults;
 
+  /*
+   * true if we only search a given alignment view
+   */
+  private boolean focusfixed;
+
   /**
-   * Creates a new Finder object with no associated viewport or panel.
+   * Creates a new Finder object with no associated viewport or panel. Each Find
+   * or Find Next action will act on whichever viewport has focus at the time.
    */
   public Finder()
   {
     this(null, null);
-    focusfixed = false;
   }
 
   /**
@@ -109,13 +115,13 @@ public class Finder extends GFinder
     av = viewport;
     ap = alignPanel;
     seqIndices = new HashMap<>();
-    resIndices = new HashMap<>();
-    focusfixed = true;
+    colIndices = new HashMap<>();
+    focusfixed = viewport != null;
     frame = new JInternalFrame();
     frame.setContentPane(this);
     frame.setLayer(JLayeredPane.PALETTE_LAYER);
     frame.addInternalFrameListener(
-            new javax.swing.event.InternalFrameAdapter()
+            new InternalFrameAdapter()
             {
               @Override
               public void internalFrameClosing(InternalFrameEvent e)
@@ -148,12 +154,10 @@ public class Finder extends GFinder
   }
 
   /**
-   * Performs the 'Find Next' action.
-   * 
-   * @param e
+   * Performs the 'Find Next' action on the alignment panel with focus
    */
   @Override
-  public void findNext_actionPerformed(ActionEvent e)
+  public void findNext_actionPerformed()
   {
     if (getFocusedViewport())
     {
@@ -162,27 +166,20 @@ public class Finder extends GFinder
   }
 
   /**
-   * Performs the 'Find All' action.
-   * 
-   * @param e
+   * Performs the 'Find All' action on the alignment panel with focus
    */
   @Override
-  public void findAll_actionPerformed(ActionEvent e)
+  public void findAll_actionPerformed()
   {
     if (getFocusedViewport())
     {
-      resIndex = -1;
+      colIndex = -1;
       seqIndex = 0;
       doSearch(true);
     }
   }
 
   /**
-   * do we only search a given alignment view ?
-   */
-  private boolean focusfixed;
-
-  /**
    * if !focusfixed and not in a desktop environment, checks that av and ap are
    * valid. Otherwise, gets the topmost alignment window and sets av and ap
    * accordingly
@@ -217,14 +214,14 @@ public class Finder extends GFinder
          * panel where we have previously searched
          */
         seqIndex = 0;
-        resIndex = -1;
+        colIndex = -1;
         if (seqIndices.containsKey(av))
         {
           seqIndex = seqIndices.get(av).intValue();
         }
-        if (resIndices.containsKey(av))
+        if (colIndices.containsKey(av))
         {
-          resIndex = resIndices.get(av).intValue();
+          colIndex = colIndices.get(av).intValue();
         }
         return true;
       }
@@ -291,7 +288,7 @@ public class Finder extends GFinder
     // TODO: add switches to control what is searched - sequences, IDS,
     // descriptions, features
     jalview.analysis.Finder finder = new jalview.analysis.Finder(
-            av.getAlignment(), av.getSelectionGroup(), seqIndex, resIndex);
+            av.getAlignment(), av.getSelectionGroup(), seqIndex, colIndex);
     finder.setCaseSensitive(caseSensitive.isSelected());
     finder.setIncludeDescription(searchDescription.isSelected());
 
@@ -299,10 +296,10 @@ public class Finder extends GFinder
 
     finder.find(searchString);
 
-    seqIndex = finder.getSeqIndex();
-    resIndex = finder.getResIndex();
+    seqIndex = finder.getSequenceIndex();
+    colIndex = finder.getColumnIndex();
     seqIndices.put(av, seqIndex);
-    resIndices.put(av, resIndex);
+    colIndices.put(av, colIndex);
 
     searchResults = finder.getSearchResults();
     Vector<SequenceI> idMatch = finder.getIdMatch();
@@ -325,7 +322,7 @@ public class Finder extends GFinder
       JvOptionPane.showInternalMessageDialog(this,
               MessageManager.getString("label.finished_searching"), null,
               JvOptionPane.INFORMATION_MESSAGE);
-      resIndex = -1;
+      colIndex = -1;
       seqIndex = 0;
     }
     else
@@ -346,7 +343,7 @@ public class Finder extends GFinder
         }
         JvOptionPane.showInternalMessageDialog(this, message, null,
                 JvOptionPane.INFORMATION_MESSAGE);
-        resIndex = -1;
+        colIndex = -1;
         seqIndex = 0;
       }
     }