X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fstructure%2FStructureSelectionManager.java;h=156fc35c4c58fd19e12d6ded90acaf0824caf474;hb=fd9ed8df6a98c86228100aa4e9d6698c87a61c08;hp=ed5ee2d4cb4afb58a51d8695075c536cdc1f76f5;hpb=be32c14cd8e48fe0a207cd7030cb9cd46f894678;p=jalview.git diff --git a/src/jalview/structure/StructureSelectionManager.java b/src/jalview/structure/StructureSelectionManager.java index ed5ee2d..156fc35 100644 --- a/src/jalview/structure/StructureSelectionManager.java +++ b/src/jalview/structure/StructureSelectionManager.java @@ -20,6 +20,21 @@ */ package jalview.structure; +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.IdentityHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Vector; + +import MCview.Atom; +import MCview.PDBChain; + import jalview.analysis.AlignSeq; import jalview.api.StructureSelectionManagerProvider; import jalview.commands.CommandI; @@ -36,20 +51,6 @@ import jalview.io.AppletFormatAdapter; import jalview.util.MappingUtils; import jalview.util.MessageManager; -import java.io.PrintStream; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.HashMap; -import java.util.IdentityHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.Vector; - -import MCview.Atom; -import MCview.PDBChain; - public class StructureSelectionManager { static IdentityHashMap instances; @@ -581,53 +582,75 @@ public class StructureSelectionManager } } + /** + * Propagate mouseover of a single position in a structure + * + * @param pdbResNum + * @param chain + * @param pdbfile + */ public void mouseOverStructure(int pdbResNum, String chain, String pdbfile) { + AtomSpec atomSpec = new AtomSpec(pdbfile, chain, pdbResNum, 0); + List atoms = Collections.singletonList(atomSpec); + mouseOverStructure(atoms); + } + + /** + * Propagate mouseover or selection of multiple positions in a structure + * + * @param atoms + */ + public void mouseOverStructure(List atoms) + { if (listeners == null) { // old or prematurely sent event return; } - SearchResults results = null; - SequenceI lastseq = null; - int lastipos = -1, indexpos; + boolean hasSequenceListener = false; for (int i = 0; i < listeners.size(); i++) { if (listeners.elementAt(i) instanceof SequenceListener) { - if (results == null) - { - results = new SearchResults(); - } - for (StructureMapping sm : mappings) + hasSequenceListener = true; + } + } + if (!hasSequenceListener) + { + return; + } + + SearchResults results = new SearchResults(); + for (AtomSpec atom : atoms) + { + SequenceI lastseq = null; + int lastipos = -1; + for (StructureMapping sm : mappings) + { + if (sm.pdbfile.equals(atom.getPdbFile()) + && sm.pdbchain.equals(atom.getChain())) { - if (sm.pdbfile.equals(pdbfile) && sm.pdbchain.equals(chain)) + int indexpos = sm.getSeqPos(atom.getPdbResNum()); + if (lastipos != indexpos && lastseq != sm.sequence) { - indexpos = sm.getSeqPos(pdbResNum); - if (lastipos != indexpos && lastseq != sm.sequence) + results.addResult(sm.sequence, indexpos, indexpos); + lastipos = indexpos; + lastseq = sm.sequence; + // construct highlighted sequence list + for (AlignedCodonFrame acf : seqmappings) { - results.addResult(sm.sequence, indexpos, indexpos); - lastipos = indexpos; - lastseq = sm.sequence; - // construct highlighted sequence list - for (AlignedCodonFrame acf : seqmappings) - { - acf.markMappedRegion(sm.sequence, indexpos, results); - } + acf.markMappedRegion(sm.sequence, indexpos, results); } } } } } - if (results != null) + for (Object li : listeners) { - for (int i = 0; i < listeners.size(); i++) + if (li instanceof SequenceListener) { - Object li = listeners.elementAt(i); - if (li instanceof SequenceListener) - { - ((SequenceListener) li).highlightSequence(results); - } + ((SequenceListener) li).highlightSequence(results); } } }