X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFinder.java;h=4c195e819766edd3d3ed781a2c00bb68c9b3a21b;hb=f63c96838e84bb6fd1d22fcf0197d49cee806470;hp=fcca0c123d4fd9fd812d3cf0e0cdd41647500c82;hpb=55e2e9b22b133db8b9ff0979b0338a33081fc8fd;p=jalview.git diff --git a/src/jalview/appletgui/Finder.java b/src/jalview/appletgui/Finder.java index fcca0c1..4c195e8 100755 --- a/src/jalview/appletgui/Finder.java +++ b/src/jalview/appletgui/Finder.java @@ -1,6 +1,6 @@ /* * Jalview - A Sequence Alignment Editor and Viewer - * Copyright (C) 2005 AM Waterhouse, J Procter, G Barton, M Clamp, S Searle + * Copyright (C) 2006 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 @@ -25,14 +25,15 @@ import java.awt.*; import java.awt.event.*; import jalview.datamodel.*; +import java.awt.Rectangle; -public class Finder extends Panel +public class Finder extends Panel implements ActionListener { AlignViewport av; AlignmentPanel ap; Frame frame; - SuperGroup searchGroup; - Vector searchResults; + + SearchResults searchResults; int seqIndex = 0; int resIndex = 0; @@ -62,84 +63,81 @@ public class Finder extends Panel }); } - public void textfield_actionPerformed(ActionEvent e) + public void actionPerformed(ActionEvent evt) { - doSearch(false); - } + if (evt.getSource() == textfield) + doSearch(false); - public void findNext_actionPerformed(ActionEvent e) - { - doSearch(false); - } + else if (evt.getSource() == findNext) + doSearch(false); - public void findAll_actionPerformed(ActionEvent e) - { - resIndex = 0; - seqIndex = 0; - doSearch(true); - } - - public void cancel_actionPerformed(ActionEvent e) - { - try + else if (evt.getSource() == findAll) { - // if allResults is null, this effectively switches displaySearch flag in seqCanvas - ap.highlightSearchResults(null); - ap.idPanel.highlightSearchResults(null); - // frame.setClosed(true); + resIndex = 0; + seqIndex = 0; + doSearch(true); } - catch (Exception ex) - {} + else if(evt.getSource() == createNewGroup) + createNewGroup_actionPerformed(); } - public void createNewGroup_actionPerformed(ActionEvent e) + + public void createNewGroup_actionPerformed() { - 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(); + CutAndPasteTransfer cap = new CutAndPasteTransfer(true, null); + cap.ok.setLabel("Accept"); + Dialog dialog = new Dialog(ap.alignFrame, "Enter New Feature Name", true); + dialog.add(cap); - searchGroup = new SuperGroup(searchString, ucs, true, true, false); + cap.setText(textfield.getText()); - for (int i = 0; i < searchResults.size(); i += 3) + dialog.setBounds( frame.getLocation().x+frame.getSize().width+5, + frame.getLocation().y+20,300,100); + dialog.show(); + + + String featureName = cap.getText().trim(); + if(featureName.length()<1) + return; + + + for (int i = 0; i < searchResults.getSize(); i ++ ) { - // its possible edits may have occurred since search was performed - // account for this here - - SequenceI seq = av.alignment.getSequenceAt(Integer.parseInt(searchResults. - elementAt(i).toString())); - int startRes = seq.findIndex(Integer.parseInt(searchResults.elementAt(i + - 1).toString())) - 1; - int endRes = seq.findIndex(Integer.parseInt(searchResults.elementAt(i + 2). - toString())) - 1; - - SequenceGroup sg = new SequenceGroup(searchString, ucs, true, true, false, - startRes, endRes); - sg.addSequence(seq, false); - av.alignment.addGroup(sg); - searchGroup.addGroup(sg); + SequenceI seq = searchResults.getResultSequence(i); + + SequenceFeature sf = new SequenceFeature(featureName, + null, null, + searchResults.getResultStart(i), + searchResults.getResultEnd(i), "Search Results"); + ap.seqPanel.seqCanvas.getFeatureRenderer().addNewFeature( + featureName, new Color(60,160,115)); + seq.addSequenceFeature(sf); } - ap.av.alignment.addSuperGroup(searchGroup); + ap.seqPanel.seqCanvas.getFeatureRenderer().findAllFeatures(); + ap.alignFrame.sequenceFeatures.setState(true); + av.showSequenceFeatures(true); ap.highlightSearchResults(null); } void doSearch(boolean findAll) { + if(jalview.bin.JalviewLite.currentAlignFrame!=null) + { + ap = jalview.bin.JalviewLite.currentAlignFrame.alignPanel; + av = ap.av; + } createNewGroup.setEnabled(false); - String searchString = textfield.getText().toUpperCase(); + String searchString = textfield.getText(); + if(!caseSensitive.getState()) + searchString = searchString.toUpperCase(); com.stevesoft.pat.Regex regex = new com.stevesoft.pat.Regex(searchString); - searchResults = new Vector(); - int[] allResults = null; + searchResults = new SearchResults(); Sequence seq; String item = null; @@ -151,7 +149,7 @@ public class Finder extends Panel int res = Integer.parseInt(searchString); found = true; - if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1) + if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize(false) < 1) { seq = (Sequence) av.getAlignment().getSequenceAt(0); } @@ -160,9 +158,8 @@ public class Finder extends Panel seq = (Sequence) (av.getSelectionGroup().getSequenceAt(0)); } - searchResults.addElement(Integer.toString(av.getAlignment().findIndex(seq))); - searchResults.addElement(String.valueOf(res)); - searchResults.addElement(String.valueOf(res)); + + searchResults.addResult(seq, res, res); } catch (NumberFormatException ex) @@ -175,7 +172,7 @@ public class Finder extends Panel SequenceGroup selection = av.getSelectionGroup(); if (selection != null) { - if (selection.getSize() < 1 || + if (selection.getSize(false) < 1 || (selection.getEndRes() - selection.getStartRes() < 2)) { selection = null; @@ -184,16 +181,19 @@ public class Finder extends Panel while (!found && seqIndex < end) { + seq = (Sequence) av.alignment.getSequenceAt(seqIndex); - if (selection != null && !selection.sequences.contains(seq)) + if (selection != null && !selection.getSequences(false).contains(seq)) { seqIndex++; resIndex = 0; continue; } - item = seq.getSequence().toUpperCase(); + item = seq.getSequenceAsString(); + if(!caseSensitive.getState()) + item = item.toUpperCase(); if (selection != null && selection.getEndRes() < av.alignment.getWidth()) { @@ -201,7 +201,7 @@ public class Finder extends Panel } ///Shall we ignore gaps???? - StringBuffer noGaps = new StringBuffer(); + StringBuffer noGapsSB = new StringBuffer(); int insertCount = 0; Vector spaces = new Vector(); @@ -210,7 +210,7 @@ public class Finder extends Panel if (!jalview.util.Comparison.isGap(item.charAt(j))) { - noGaps.append(item.charAt(j)); + noGapsSB.append(item.charAt(j)); spaces.addElement(new Integer(insertCount)); } else @@ -219,10 +219,12 @@ public class Finder extends Panel } } + String noGaps = noGapsSB.toString(); + for (int r = resIndex; r < noGaps.length(); r++) { - if (regex.searchFrom(noGaps.toString(), r)) + if (regex.searchFrom(noGaps, r)) { resIndex = regex.matchedFrom(); if (selection != null && @@ -232,7 +234,7 @@ public class Finder extends Panel continue; } - searchResults.addElement(Integer.toString(seqIndex)); + int sres = seq.findPosition(resIndex + Integer.parseInt(spaces. elementAt(resIndex).toString())); @@ -240,8 +242,8 @@ public class Finder extends Panel Integer.parseInt( spaces.elementAt(regex.matchedTo() - 1). toString())); - searchResults.addElement(sres + ""); - searchResults.addElement(eres + ""); + + searchResults.addResult(seq, sres, eres); if (!findAll) { @@ -272,34 +274,29 @@ public class Finder extends Panel } } - if (searchResults.size() == 0 && idMatch.size() > 0) + if (searchResults.getSize() == 0 && idMatch.size() > 0) { ap.idPanel.highlightSearchResults(idMatch); } - if (searchResults.size() > 0) + if (searchResults.getSize() > 0) { - allResults = new int[searchResults.size()]; - for (int i = 0; i < searchResults.size(); i++) - { - allResults[i] = Integer.parseInt(searchResults.elementAt(i).toString()); - } - createNewGroup.setEnabled(true); } else { + searchResults = null; resIndex = 0; seqIndex = 0; } // if allResults is null, this effectively switches displaySearch flag in seqCanvas - ap.highlightSearchResults(allResults); + ap.highlightSearchResults(searchResults); if (findAll) { - String message = (searchResults.size() / 3) + " matches found."; - System.out.println(message); + String message = (searchResults==null?0 : searchResults.getSize()) + " matches found."; + ap.alignFrame.statusBar.setText("Search results: "+searchString+" : "+message); } } @@ -311,7 +308,7 @@ public class Finder extends Panel Panel jPanel1 = new Panel(); GridLayout gridLayout1 = new GridLayout(); protected Button createNewGroup = new Button(); - + Checkbox caseSensitive = new Checkbox(); private void jbInit() throws Exception { jLabel1.setFont(new java.awt.Font("Verdana", 0, 12)); @@ -326,26 +323,14 @@ public class Finder extends Panel textfield_keyTyped(e); } }); - textfield.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - textfield_actionPerformed(e); - } - }); + textfield.addActionListener(this); findAll.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); findAll.setLabel("Find all"); - findAll.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - findAll_actionPerformed(e); - } - }); + findAll.addActionListener(this); findNext.setEnabled(false); findNext.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); findNext.setLabel("Find Next"); - findNext.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - findNext_actionPerformed(e); - } - }); + findNext.addActionListener(this); jPanel1.setBounds(new Rectangle(180, 5, 141, 64)); jPanel1.setLayout(gridLayout1); gridLayout1.setHgap(0); @@ -353,16 +338,15 @@ public class Finder extends Panel gridLayout1.setVgap(2); createNewGroup.setEnabled(false); createNewGroup.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); - createNewGroup.setLabel("Create new group"); - createNewGroup.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(ActionEvent e) { - createNewGroup_actionPerformed(e); - } - }); - jPanel1.add(findNext, null); + createNewGroup.setLabel("New Feature"); + createNewGroup.addActionListener(this); + caseSensitive.setLabel("Match Case"); + caseSensitive.setBounds(new Rectangle(40, 49, 126, 23)); + jPanel1.add(findNext, null); jPanel1.add(findAll, null); jPanel1.add(createNewGroup, null); - this.add(textfield, null); + this.add(caseSensitive); + this.add(textfield, null); this.add(jLabel1, null); this.add(jPanel1, null); }