JAL-3905 Fix: wait for response when sending mouseovers. Combined remove old label... bug/r2_11_2/JAL-3904_structureviewermenu
authorJim Procter <j.procter@dundee.ac.uk>
Mon, 18 Oct 2021 14:04:52 +0000 (15:04 +0100)
committerJim Procter <j.procter@dundee.ac.uk>
Mon, 18 Oct 2021 14:04:52 +0000 (15:04 +0100)
src/jalview/ext/rbvi/chimera/JalviewChimeraBinding.java
src/jalview/structures/models/AAStructureBindingModel.java

index 66420b0..7169fa2 100644 (file)
@@ -342,6 +342,13 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
               "Response from command ('" + cmd + "') was:\n" + lastReply); 
       }
     }
+    else
+    {
+      if (Cache.log.isDebugEnabled())
+      {
+        Cache.log.debug("Command executed: " + cmd);
+      }
+    }
 
     return reply;
   }
@@ -418,19 +425,29 @@ public abstract class JalviewChimeraBinding extends AAStructureBindingModel
     {
       return;
     }
-
+    if (!found)
+    {
+      // not a valid residue label command, so clear
+      cmd.setLength(0);
+    }
     /*
-     * unshow the label for the previous residue
+     * prepend with command
+     * to unshow the label for the previous residue
      */
     if (lastHighlightCommand != null)
     {
-      executeCommand(false,  null,  new StructureCommand("~" + lastHighlightCommand));
+      cmd.insert(0, ";");
+      cmd.insert(0,lastHighlightCommand);
+      cmd.insert(0,"~");
+      
     }
-    if (found)
-    {
-      executeCommand(false,  null,  new StructureCommand(command));
+    if (cmd.length()>0) {
+      executeCommand(true,  null,  new StructureCommand(cmd.toString()));
+    }
+    
+    if (found) {
+      this.lastHighlightCommand = command;
     }
-    this.lastHighlightCommand = command;
   }
 
   /**
index 748381f..f1f2d30 100644 (file)
@@ -1075,7 +1075,10 @@ public abstract class AAStructureBindingModel
    * executed.
    * <p>
    * If a reply is wanted, the execution is done synchronously (waits),
-   * otherwise it is done in a separate thread (doesn't wait).
+   * otherwise it is done in a separate thread (doesn't wait). WARNING: if you
+   * are sending commands that need to execute before later calls to
+   * executeCommand (e.g. mouseovers, which clean up after previous ones) then
+   * set getReply true to ensure that commands are not executed out of order.
    * 
    * @param getReply
    * @param msg