3 import jalview.jbgui.GFinder;
\r
4 import jalview.datamodel.*;
\r
5 import java.awt.event.*;
\r
6 import javax.swing.*;
\r
7 import javax.swing.event.*;
\r
11 public class Finder extends GFinder
\r
15 JInternalFrame frame;
\r
16 String searchString;
\r
20 public Finder(AlignViewport av, AlignmentPanel ap, JInternalFrame f)
\r
26 // all a big pain, but we need to wait until the frame is visible before the textfield can
\r
27 // obtain the focus/////////////////////////
\r
28 frame.addInternalFrameListener(new InternalFrameAdapter()
\r
30 public void internalFrameOpened(InternalFrameEvent evt)
\r
32 SwingUtilities.invokeLater(new Runnable()
\r
36 textfield.requestFocus();
\r
44 public void textfield_actionPerformed(ActionEvent e)
\r
49 public void findNext_actionPerformed(ActionEvent e)
\r
54 public void findAll_actionPerformed(ActionEvent e)
\r
61 public void cancel_actionPerformed(ActionEvent e)
\r
64 frame.setClosed(true);
\r
65 }catch(Exception ex){}
\r
69 void doSearch(boolean findAll)
\r
71 searchString = textfield.getText().toUpperCase();
\r
73 ArrayList searchResults = new ArrayList();
\r
74 int [] allResults = null;
\r
78 boolean found = false;
\r
79 while( !found && seqIndex<av.getAlignment().getHeight())
\r
81 seq = (Sequence)av.getAlignment().getSequenceAt(seqIndex);
\r
82 item = seq.getSequence();
\r
84 for(int r = resIndex; r<item.length(); r++)
\r
86 if(item.indexOf(searchString,r)>-1)
\r
88 resIndex = item.indexOf(searchString,r);
\r
89 searchResults.add( Integer.toString(seqIndex) );
\r
90 searchResults.add( Integer.toString( resIndex) );
\r
91 searchResults.add( Integer.toString( (resIndex+searchString.length()-1) ) );
\r
94 // thats enough, break and display the result
\r
108 if(searchResults.size()>0)
\r
111 allResults = new int[searchResults.size()];
\r
112 for(int i=0; i<searchResults.size(); i++)
\r
113 allResults[i] = Integer.parseInt(searchResults.get(i).toString());
\r
116 ap.highlightSearchResults( allResults );
\r
120 JOptionPane.showInternalMessageDialog(this, "Finished searching", null,
\r
121 JOptionPane.INFORMATION_MESSAGE);
\r