package jalview.gui; import jalview.jbgui.GFinder; import jalview.datamodel.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; public class Finder extends GFinder { AlignViewport av; AlignmentPanel ap; JInternalFrame frame; String searchString; int seqIndex = 0; int resIndex = 0; public Finder(AlignViewport av, AlignmentPanel ap, JInternalFrame f) { this.av = av; this.ap = ap; frame = f; // all a big pain, but we need to wait until the frame is visible before the textfield can // obtain the focus///////////////////////// frame.addInternalFrameListener(new InternalFrameAdapter() { public void internalFrameOpened(InternalFrameEvent evt) { SwingUtilities.invokeLater(new Runnable() { public void run() { textfield.requestFocus(); } }); } }); } public void textfield_actionPerformed(ActionEvent e) { doSearch(false); } public void findNext_actionPerformed(ActionEvent e) { doSearch(false); } public void findAll_actionPerformed(ActionEvent e) { resIndex=0; seqIndex=0; doSearch(true); } public void cancel_actionPerformed(ActionEvent e) { try{ frame.setClosed(true); }catch(Exception ex){} } void doSearch(boolean findAll) { searchString = textfield.getText().toUpperCase(); ArrayList searchResults = new ArrayList(); int [] allResults = null; Sequence seq; String item; boolean found = false; while( !found && seqIndex-1) { resIndex = item.indexOf(searchString,r); searchResults.add( Integer.toString(seqIndex) ); searchResults.add( Integer.toString( resIndex) ); searchResults.add( Integer.toString( (resIndex+searchString.length()-1) ) ); if(!findAll) { // thats enough, break and display the result found = true; resIndex++; break; } } } if(!found) { seqIndex++; resIndex = 0; } } if(searchResults.size()>0) { allResults = new int[searchResults.size()]; for(int i=0; i