X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=0e4ec2fa50fb609a8e07a0d4d5edb9ea6c98d4f9;hb=2f3b33ed7140d07e2bb31960ce5aedfed134dfeb;hp=e2cf3c9940f1085e9f1dd0449ed74badfb7ae683;hpb=153dd62dc91da13ae732600e6ea55ddbe15eab39;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index e2cf3c9..0e4ec2f 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -73,6 +73,10 @@ public class StructureSelectionManager Vector listeners = new Vector(); + /** + * register a listener for alignment sequence mouseover events + * @param svl + */ public void addStructureViewerListener(Object svl) { if (!listeners.contains(svl)) @@ -209,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; @@ -300,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) @@ -308,7 +316,6 @@ public class StructureSelectionManager { results = new SearchResults(); } - int indexpos; if (mappings != null) { for (int j = 0; j < mappings.length; j++) @@ -317,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); + } } } + } } } @@ -359,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) + public void mouseOverSequence(SequenceI seq, int indexpos, int index, + VamsasSource source) { boolean hasSequenceListeners = handlingVamsasMo || seqmappings != null; SearchResults results = null; @@ -442,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); + ((VamsasListener) listeners.elementAt(i)).mouseOver(seq, + indexpos, source); } } } @@ -464,14 +478,15 @@ public class StructureSelectionManager * @param position * in an alignment sequence */ - public void mouseOverVamsasSequence(SequenceI sequenceI, int position) + public void mouseOverVamsasSequence(SequenceI sequenceI, int position, + VamsasSource source) { handlingVamsasMo = true; long msg = sequenceI.hashCode() * (1 + position); if (lastmsg != msg) { lastmsg = msg; - mouseOverSequence(sequenceI, position, -1); + mouseOverSequence(sequenceI, position, -1, source); } handlingVamsasMo = false; }