From 583b16c1fe4192dbf4c26722c0c089b764e1c25b Mon Sep 17 00:00:00 2001 From: jprocter Date: Tue, 18 Jan 2011 17:40:16 +0000 Subject: [PATCH] avoid creating lots of identical search results. patch for JAL-751 --- .../structure/StructureSelectionManager.java | 39 +++++++++++++------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index c4566d8..0e4ec2f 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -213,7 +213,9 @@ public class StructureSelectionManager maxChain.transferRESNUMFeatures(sequence[s], null); - int[][] mapping = new int[sequence[s].getEnd() + 2][2]; + // allocate enough slots to store the mapping from positions in + // sequence[s] to the associated chain + int[][] mapping = new int[maxChain.sequence.getEnd() + 2][2]; int resNum = -10000; int index = 0; @@ -304,6 +306,8 @@ public class StructureSelectionManager { boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null; SearchResults results = null; + SequenceI lastseq = null; + int lastipos = -1, indexpos; for (int i = 0; i < listeners.size(); i++) { if (listeners.elementAt(i) instanceof SequenceListener) @@ -312,7 +316,6 @@ public class StructureSelectionManager { results = new SearchResults(); } - int indexpos; if (mappings != null) { for (int j = 0; j < mappings.length; j++) @@ -321,19 +324,25 @@ public class StructureSelectionManager && mappings[j].pdbchain.equals(chain)) { indexpos = mappings[j].getSeqPos(pdbResNum); - results.addResult(mappings[j].sequence, indexpos, indexpos); - // construct highlighted sequence list - if (seqmappings != null) + if (lastipos != indexpos && lastseq != mappings[j].sequence) { + results.addResult(mappings[j].sequence, indexpos, indexpos); + lastipos = indexpos; + lastseq = mappings[j].sequence; + // construct highlighted sequence list + if (seqmappings != null) + { - Enumeration e = seqmappings.elements(); - while (e.hasMoreElements()) + Enumeration e = seqmappings.elements(); + while (e.hasMoreElements()) - { - ((AlignedCodonFrame) e.nextElement()).markMappedRegion( - mappings[j].sequence, indexpos, results); + { + ((AlignedCodonFrame) e.nextElement()).markMappedRegion( + mappings[j].sequence, indexpos, results); + } } } + } } } @@ -363,7 +372,8 @@ public class StructureSelectionManager * the sequence position (if -1, seq.findPosition is called to * resolve the residue number) */ - public void mouseOverSequence(SequenceI seq, int indexpos, int index, VamsasSource source) + public void mouseOverSequence(SequenceI seq, int indexpos, int index, + VamsasSource source) { boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null; SearchResults results = null; @@ -446,8 +456,8 @@ public class StructureSelectionManager // index); // pass the mouse over and absolute position onto the // VamsasListener(s) - ((VamsasListener) listeners.elementAt(i)) - .mouseOver(seq, indexpos, source); + ((VamsasListener) listeners.elementAt(i)).mouseOver(seq, + indexpos, source); } } } @@ -468,7 +478,8 @@ public class StructureSelectionManager * @param position * in an alignment sequence */ - public void mouseOverVamsasSequence(SequenceI sequenceI, int position, VamsasSource source) + public void mouseOverVamsasSequence(SequenceI sequenceI, int position, + VamsasSource source) { handlingVamsasMo = true; long msg = sequenceI.hashCode() * (1 + position); -- 1.7.10.2