/* * Jalview - A Sequence Alignment Editor and Viewer * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package jalview.gui; import jalview.jbgui.GFinder; import jalview.datamodel.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.*; import java.awt.*; public class Finder extends GFinder { AlignViewport av; AlignmentPanel ap; JInternalFrame frame; SuperGroup searchGroup; Vector searchResults; 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 internalFrameClosing(InternalFrameEvent evt) { cancel_actionPerformed(null); } }); } 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{ // if allResults is null, this effectively switches displaySearch flag in seqCanvas ap.highlightSearchResults( null ); ap.idPanel.highlightSearchResults( null ); // frame.setClosed(true); }catch(Exception ex){ } } public void createNewGroup_actionPerformed(ActionEvent e) { Color [] newColors = new Color[24]; for(int i=0; i<24; i++) newColors[i] = new Color(60,160,115); jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(newColors); String searchString = textfield.getText(); searchGroup = new SuperGroup(searchString, ucs , true, true, false); for(int i=0; i0) seq = (Sequence)(av.getSelectionGroup().getSequenceAt(0)); else seq = (Sequence)av.getAlignment().getSequenceAt(0); searchResults.add( Integer.toString( av.getAlignment().findIndex(seq) ) ); searchResults.add( Integer.toString( seq.findIndex(res)-1 ) ); searchResults.add( Integer.toString( seq.findIndex(res)-1 ) ); }catch(NumberFormatException ex){} /////////////////////////////////////////////// Color [] newColors = new Color[24]; for(int i=0; i<24; i++) newColors[i] = new Color(60,160,115); jalview.schemes.UserColourScheme ucs = new jalview.schemes.UserColourScheme(newColors); searchGroup = new SuperGroup(searchString, ucs , true, true, false); int end = av.alignment.getHeight(); SequenceGroup selection = av.getSelectionGroup(); if(selection!=null) if(selection.getSize()<1 || (selection.getEndRes()-selection.getStartRes()<2)) selection = null; while( !found && seqIndex0) ap.idPanel.highlightSearchResults( idMatch ); if(searchResults.size()>0) { allResults = new int[searchResults.size()]; for(int i=0; i