JAL-4083 Use jmolViewer.scriptWait instead of jmolViewer.evalStringQuiet whilst highl...
authorBen Soares <b.soares@dundee.ac.uk>
Thu, 27 Oct 2022 10:51:01 +0000 (11:51 +0100)
committerBen Soares <b.soares@dundee.ac.uk>
Thu, 27 Oct 2022 10:51:01 +0000 (11:51 +0100)
src/jalview/ext/jmol/JalviewJmolBinding.java

index 895db9a..a40da35 100644 (file)
@@ -83,6 +83,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
 
   public Viewer jmolViewer;
 
+  private boolean globalUseScriptWait = false;
+
   public JalviewJmolBinding(StructureSelectionManager ssm,
           PDBEntry[] pdbentry, SequenceI[][] sequenceIs,
           DataSourceType protocol)
@@ -122,8 +124,21 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
 
   private String jmolScript(String script)
   {
+    return jmolScript(script, false);
+  }
+
+  private String jmolScript(String script, boolean useScriptWait)
+  {
     Console.debug(">>Jmol>> " + script);
-    String s = jmolViewer.evalStringQuiet(script); // scriptWait(script); BH
+    String s;
+    if (globalUseScriptWait || useScriptWait)
+    {
+      s = jmolViewer.scriptWait(script);
+    }
+    else
+    {
+      s = jmolViewer.evalStringQuiet(script); // scriptWait(script); BH
+    }
     Console.debug("<<Jmol<< " + s);
 
     return s;
@@ -254,6 +269,8 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   {
     if (atoms != null)
     {
+      boolean useScriptWait = atoms.size() > 1;
+      boolean prevUseScriptWait = setGlobalUseScriptWait(useScriptWait);
       if (resetLastRes.length() > 0)
       {
         jmolScript(resetLastRes.toString());
@@ -262,14 +279,15 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
       for (AtomSpec atom : atoms)
       {
         highlightAtom(atom.getAtomIndex(), atom.getPdbResNum(),
-                atom.getChain(), atom.getPdbFile());
+                atom.getChain(), atom.getPdbFile(), useScriptWait);
       }
+      setGlobalUseScriptWait(prevUseScriptWait);
     }
   }
 
   // jmol/ssm only
   public void highlightAtom(int atomIndex, int pdbResNum, String chain,
-          String pdbfile)
+          String pdbfile, boolean useScriptWait)
   {
     String modelId = getModelIdForFile(pdbfile);
     if (modelId.isEmpty())
@@ -295,7 +313,7 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
     resetLastRes.append(selection).append(";wireframe 0;").append(selection)
             .append(" and not hetero; spacefill 0;");
 
-    jmolScript(cmd.toString());
+    jmolScript(cmd.toString(), useScriptWait);
     jmolHistory(true);
   }
 
@@ -1052,4 +1070,11 @@ public abstract class JalviewJmolBinding extends AAStructureBindingModel
   {
     return "http://wiki.jmol.org"; // BH 2018
   }
+
+  private boolean setGlobalUseScriptWait(boolean b)
+  {
+    boolean prev = globalUseScriptWait;
+    globalUseScriptWait = b;
+    return prev;
+  }
 }