*/
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;
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<StructureSelectionManagerProvider, StructureSelectionManager> instances;
}
}
+ /**
+ * 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<AtomSpec> atoms = Collections.singletonList(atomSpec);
+ mouseOverStructure(atoms);
+ }
+
+ /**
+ * Propagate mouseover or selection of multiple positions in a structure
+ *
+ * @param atoms
+ */
+ public void mouseOverStructure(List<AtomSpec> 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);
}
}
}