JAL-1761 need to pass molecule type when generating superposition commands
[jalview.git] / src / jalview / ext / rbvi / chimera / ChimeraXCommands.java
index 889b1bc..74e7f08 100644 (file)
 package jalview.ext.rbvi.chimera;
 
 import java.awt.Color;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 
 import jalview.structure.AtomSpecModel;
 import jalview.structure.StructureCommand;
 import jalview.structure.StructureCommandI;
-import jalview.util.ColorUtils;
 
 /**
  * Routines for generating ChimeraX commands for Jalview/ChimeraX binding
  */
 public class ChimeraXCommands extends ChimeraCommands
 {
+  // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/info.html#resattr
+  private static final StructureCommand LIST_RESIDUE_ATTRIBUTES = new StructureCommand(
+          "info resattr");
+
+  // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/exit.html
+  private static final StructureCommand CLOSE_CHIMERAX = new StructureCommand(
+          "exit");
+
+  // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/info.html#notify
+  private static final StructureCommand STOP_NOTIFY_SELECTION = new StructureCommand(
+          "info notify stop selection jalview");
+
+  private static final StructureCommand STOP_NOTIFY_MODELS = new StructureCommand(
+          "info notify stop models jalview");
+
+  // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/info.html#selection
+  private static final StructureCommand GET_SELECTION = new StructureCommand(
+          "info selection level residue");
+
   private static final StructureCommand SHOW_BACKBONE = new StructureCommand(
           "~display all;~ribbon;show @CA|P atoms");
 
+  // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/view.html
   private static final StructureCommand FOCUS_VIEW = new StructureCommand(
           "view");
 
@@ -67,7 +87,6 @@ public class ChimeraXCommands extends ChimeraCommands
   @Override
   public StructureCommandI focusView()
   {
-    // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/view.html
     return FOCUS_VIEW;
   }
 
@@ -83,8 +102,8 @@ public class ChimeraXCommands extends ChimeraCommands
   }
 
   /**
-   * Returns a viewer command to set the given residue attribute value on
-   * residues specified by the AtomSpecModel, for example
+   * Returns a viewer command to set the given residue attribute value on residues
+   * specified by the AtomSpecModel, for example
    * 
    * <pre>
    * setattr #0/A:3-9,14-20,39-43 res jv_strand 'strand' create true
@@ -126,6 +145,10 @@ public class ChimeraXCommands extends ChimeraCommands
    * Returns the range(s) formatted as a ChimeraX atomspec, for example
    * <p>
    * #1/A:2-20,30-40/B:10-20|#2/A:12-30
+   * <p>
+   * Note there is no need to explicitly exclude ALTLOC atoms when
+   * {@code alphaOnly == true}, as this is the default behaviour of ChimeraX (a
+   * change from Chimera)
    * 
    * @return
    */
@@ -147,7 +170,6 @@ public class ChimeraXCommands extends ChimeraCommands
         // TODO @P if RNA - add nucleotide flag to AtomSpecModel?
         sb.append("@CA");
       }
-      // todo: is there ChimeraX syntax to exclude altlocs?
     }
     return sb.toString();
   }
@@ -191,7 +213,7 @@ public class ChimeraXCommands extends ChimeraCommands
 
   @Override
   public List<StructureCommandI> superposeStructures(AtomSpecModel ref,
-          AtomSpecModel spec)
+          AtomSpecModel spec, boolean isNucleotide)
   {
     /*
      * Form ChimeraX match command to match spec to ref
@@ -227,7 +249,40 @@ public class ChimeraXCommands extends ChimeraCommands
   @Override
   public StructureCommandI closeViewer()
   {
-    // https://www.cgl.ucsf.edu/chimerax/docs/user/commands/exit.html
-    return new StructureCommand("exit");
+    return CLOSE_CHIMERAX;
+  }
+
+  @Override
+  public List<StructureCommandI> startNotifications(String uri)
+  {
+    List<StructureCommandI> cmds = new ArrayList<>();
+    cmds.add(new StructureCommand(
+            "info notify start models jalview prefix ModelChanged url "
+                    + uri));
+    cmds.add(new StructureCommand(
+            "info notify start selection jalview prefix SelectionChanged url "
+                    + uri));
+    return cmds;
+  }
+
+  @Override
+  public List<StructureCommandI> stopNotifications()
+  {
+    List<StructureCommandI> cmds = new ArrayList<>();
+    cmds.add(STOP_NOTIFY_MODELS);
+    cmds.add(STOP_NOTIFY_SELECTION);
+    return cmds;
+  }
+
+  @Override
+  public StructureCommandI getSelectedResidues()
+  {
+    return GET_SELECTION;
+  }
+
+  @Override
+  public StructureCommandI listResidueAttributes()
+  {
+    return LIST_RESIDUE_ATTRIBUTES;
   }
 }