X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fappletgui%2FFinder.java;h=fb8c28012dd936001df121f204e7edbe1d1a3585;hb=42ae188a9819c341cd345baeab442cd0606ff157;hp=e152506f5e55f15c4e21188320822b7b15421a28;hpb=4ebc6d5b362bc093c39312aa1a69836e3dd6ae84;p=jalview.git diff --git a/src/jalview/appletgui/Finder.java b/src/jalview/appletgui/Finder.java index e152506..fb8c280 100755 --- a/src/jalview/appletgui/Finder.java +++ b/src/jalview/appletgui/Finder.java @@ -25,21 +25,28 @@ import java.awt.*; import java.awt.event.*; import jalview.datamodel.*; -import jalview.jbappletgui.*; -public class Finder - extends GFinder +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; public Finder(final AlignmentPanel ap) { + try + { + jbInit(); + } + catch (Exception e) + { + e.printStackTrace(); + } + this.av = ap.av; this.ap = ap; frame = new Frame(); @@ -55,71 +62,44 @@ public class Finder }); } - public void textfield_actionPerformed(ActionEvent e) - { - doSearch(false); - } - - public void findNext_actionPerformed(ActionEvent e) + public void actionPerformed(ActionEvent evt) { - doSearch(false); - } + if (evt.getSource() == textfield) + doSearch(false); - public void findAll_actionPerformed(ActionEvent e) - { - resIndex = 0; - seqIndex = 0; - doSearch(true); - } + else if (evt.getSource() == findNext) + doSearch(false); - 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) - { - 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); + public void createNewGroup_actionPerformed() + { - for (int i = 0; i < searchResults.size(); i += 3) + 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(textfield.getText(), + "Search Results", null, + searchResults.getResultStart(i), + searchResults.getResultEnd(i)); + + ap.seqPanel.seqCanvas.getFeatureRenderer().addNewFeature( + textfield.getText(), new Color(60,160,115)); + seq.addSequenceFeature(sf); } - ap.av.alignment.addSuperGroup(searchGroup); + ap.alignFrame.sequenceFeatures.setState(true); + av.showSequenceFeatures(true); ap.highlightSearchResults(null); } @@ -131,8 +111,7 @@ public class Finder 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; @@ -144,18 +123,17 @@ public class Finder int res = Integer.parseInt(searchString); found = true; - if (av.getSelectionGroup().getSize() > 0) + if (av.getSelectionGroup() == null || av.getSelectionGroup().getSize() < 1) { - seq = (Sequence) (av.getSelectionGroup().getSequenceAt(0)); + seq = (Sequence) av.getAlignment().getSequenceAt(0); } else { - seq = (Sequence) av.getAlignment().getSequenceAt(0); + seq = (Sequence) (av.getSelectionGroup().getSequenceAt(0)); } - searchResults.addElement(Integer.toString(av.getAlignment().findIndex(seq))); - searchResults.addElement(Integer.toString(seq.findIndex(res) - 1)); - searchResults.addElement(Integer.toString(seq.findIndex(res) - 1)); + + searchResults.addResult(seq, res, res); } catch (NumberFormatException ex) @@ -225,7 +203,7 @@ public class Finder continue; } - searchResults.addElement(Integer.toString(seqIndex)); + int sres = seq.findPosition(resIndex + Integer.parseInt(spaces. elementAt(resIndex).toString())); @@ -233,8 +211,8 @@ public class Finder Integer.parseInt( spaces.elementAt(regex.matchedTo() - 1). toString())); - searchResults.addElement(sres + ""); - searchResults.addElement(eres + ""); + + searchResults.addResult(seq, sres, eres); if (!findAll) { @@ -246,6 +224,8 @@ public class Finder r = resIndex; } + else + break; } if (!found) { @@ -263,36 +243,82 @@ public class Finder } } - 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."; + String message = (searchResults.getSize()) + " matches found."; System.out.println(message); } } + Label jLabel1 = new Label(); + protected TextField textfield = new TextField(); + protected Button findAll = new Button(); + protected Button findNext = new Button(); + Panel jPanel1 = new Panel(); + GridLayout gridLayout1 = new GridLayout(); + protected Button createNewGroup = new Button(); + + + private void jbInit() throws Exception { + jLabel1.setFont(new java.awt.Font("Verdana", 0, 12)); + jLabel1.setText("Find"); + jLabel1.setBounds(new Rectangle(3, 30, 34, 15)); + this.setLayout(null); + textfield.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); + textfield.setText(""); + textfield.setBounds(new Rectangle(40, 27, 133, 21)); + textfield.addKeyListener(new java.awt.event.KeyAdapter() { + public void keyTyped(KeyEvent e) { + textfield_keyTyped(e); + } + }); + textfield.addActionListener(this); + findAll.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); + findAll.setLabel("Find all"); + findAll.addActionListener(this); + findNext.setEnabled(false); + findNext.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); + findNext.setLabel("Find Next"); + findNext.addActionListener(this); + jPanel1.setBounds(new Rectangle(180, 5, 141, 64)); + jPanel1.setLayout(gridLayout1); + gridLayout1.setHgap(0); + gridLayout1.setRows(3); + gridLayout1.setVgap(2); + createNewGroup.setEnabled(false); + createNewGroup.setFont(new java.awt.Font("Verdana", Font.PLAIN, 10)); + createNewGroup.setLabel("New Feature"); + createNewGroup.addActionListener(this); + jPanel1.add(findNext, null); + jPanel1.add(findAll, null); + jPanel1.add(createNewGroup, null); + this.add(textfield, null); + this.add(jLabel1, null); + this.add(jPanel1, null); + } + + void textfield_keyTyped(KeyEvent e) { + findNext.setEnabled(true); + } + }