X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=0e4ec2fa50fb609a8e07a0d4d5edb9ea6c98d4f9;hb=d038c9702429f76a1556c7d2b282f26d9feb22f6;hp=0fb84280810ec54fc77b726aed9541990afd2abf;hpb=27de1236a81237ca094abd34661ee156c1bdb521;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index 0fb8428..0e4ec2f 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -1,5 +1,5 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. @@ -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; }