*/
package jalview.gui;
+import jalview.api.AlignViewportI;
import jalview.datamodel.SearchResultMatchI;
import jalview.datamodel.SearchResultsI;
import jalview.datamodel.SequenceFeature;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.List;
+import java.util.Map;
import java.util.Vector;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
*/
public class Finder extends GFinder
{
+ private static final int MIN_WIDTH = 350;
+
+ private static final int MIN_HEIGHT = 120;
+
private static final int MY_HEIGHT = 120;
private static final int MY_WIDTH = 400;
- AlignmentViewport av;
+ private AlignViewportI av;
- AlignmentPanel ap;
+ private AlignmentPanel ap;
- private static final int MIN_WIDTH = 350;
+ private JInternalFrame frame;
- private static final int MIN_HEIGHT = 120;
+ /*
+ * sequence and column position of the last match,
+ * as currently used, and saved for each viewport
+ */
+ private int seqIndex = 0;
- JInternalFrame frame;
+ private int resIndex = -1;
- int seqIndex = 0;
+ Map<AlignViewportI, Integer> seqIndices;
- int resIndex = -1;
+ Map<AlignViewportI, Integer> resIndices;
- SearchResultsI searchResults;
+ private SearchResultsI searchResults;
/**
* Creates a new Finder object with no associated viewport or panel.
{
av = viewport;
ap = alignPanel;
+ seqIndices = new HashMap<>();
+ resIndices = new HashMap<>();
focusfixed = true;
frame = new JInternalFrame();
frame.setContentPane(this);
for (int f = 0; f < frames.length; f++)
{
JInternalFrame alignFrame = frames[f];
- if (alignFrame != null && alignFrame instanceof AlignFrame)
+ if (alignFrame != null && alignFrame instanceof AlignFrame
+ && !alignFrame.isIcon())
{
av = ((AlignFrame) alignFrame).viewport;
ap = ((AlignFrame) alignFrame).alignPanel;
+
+ /*
+ * restore search position if switching to a
+ * panel where we have previously searched
+ */
+ seqIndex = 0;
+ resIndex = -1;
+ if (seqIndices.containsKey(av))
+ {
+ seqIndex = seqIndices.get(av).intValue();
+ }
+ if (resIndices.containsKey(av))
+ {
+ resIndex = resIndices.get(av).intValue();
+ }
return true;
}
}
seqIndex = finder.getSeqIndex();
resIndex = finder.getResIndex();
+ seqIndices.put(av, seqIndex);
+ resIndices.put(av, resIndex);
searchResults = finder.getSearchResults();
Vector<SequenceI> idMatch = finder.getIdMatch();