X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Fjmol%2FJmolCommands.java;h=7c024ba309444fc7b35d5eec245c62ac66cd4c4f;hb=fccc58b804b576fcd39f3e7f2c9699c0ba75d5f9;hp=3e0afd705a2c14e56d8054cbdcd6e3912c4e69ac;hpb=4f30214e8098748469c6a4269ac2ed6c5750e4b0;p=jalview.git diff --git a/src/jalview/ext/jmol/JmolCommands.java b/src/jalview/ext/jmol/JmolCommands.java index 3e0afd7..7c024ba 100644 --- a/src/jalview/ext/jmol/JmolCommands.java +++ b/src/jalview/ext/jmol/JmolCommands.java @@ -41,6 +41,7 @@ import jalview.structure.StructureCommandsBase; import jalview.structure.StructureMapping; import jalview.structure.StructureSelectionManager; import jalview.util.Comparison; +import jalview.util.Platform; /** * Routines for generating Jmol commands for Jalview/Jmol binding @@ -53,7 +54,8 @@ public class JmolCommands extends StructureCommandsBase private static final StructureCommand SHOW_BACKBONE = new StructureCommand( "select *; cartoons off; backbone"); - private static final StructureCommand FOCUS_VIEW = new StructureCommand("zoom 0"); + private static final StructureCommand FOCUS_VIEW = new StructureCommand( + "zoom 0"); private static final StructureCommand COLOUR_ALL_WHITE = new StructureCommand( "select *;color white;"); @@ -111,7 +113,8 @@ public class JmolCommands extends StructureCommandsBase } @Override - public List colourByResidues(Map colours) + public List colourByResidues( + Map colours) { List cmds = super.colourByResidues(colours); cmds.add(0, COLOUR_ALL_WHITE); @@ -145,7 +148,8 @@ public class JmolCommands extends StructureCommandsBase atomSpec.append(" or "); } first = false; - atomSpec.append(":").append(tokens[1]).append(" /").append(tokens[0]); + atomSpec.append(":").append(tokens[1]).append(" /") + .append(tokens[0]); } } @@ -177,7 +181,7 @@ public class JmolCommands extends StructureCommandsBase */ @Override public List superposeStructures(AtomSpecModel refAtoms, - AtomSpecModel atomSpec) + AtomSpecModel atomSpec, AtomSpecType backbone) { StringBuilder sb = new StringBuilder(64); String refModel = refAtoms.getModels().iterator().next(); @@ -189,18 +193,35 @@ public class JmolCommands extends StructureCommandsBase * command examples don't include modelspec with atoms, getAtomSpec does; * it works, so leave it as it is for simplicity */ - sb.append(getAtomSpec(atomSpec, true)).append("}{"); - sb.append(getAtomSpec(refAtoms, true)).append("}"); + sb.append(getAtomSpec(atomSpec, backbone)).append("}{"); + sb.append(getAtomSpec(refAtoms, backbone)).append("}"); sb.append(" ROTATE TRANSLATE "); sb.append(getCommandSeparator()); /* * show residues used for superposition as ribbon */ - sb.append("select ").append(getAtomSpec(atomSpec, false)).append("|"); - sb.append(getAtomSpec(refAtoms, false)).append(getCommandSeparator()) - .append("cartoons"); + sb.append("select ") + .append(getAtomSpec(atomSpec, AtomSpecType.RESIDUE_ONLY)) + .append("|"); + sb.append(getAtomSpec(refAtoms, AtomSpecType.RESIDUE_ONLY)) + .append(getCommandSeparator()).append("cartoons"); + return Arrays.asList(new StructureCommand(sb.toString())); + } + @Override + public List centerViewOn(List residues) + { + StringBuilder sb = new StringBuilder(64); + sb.append("center "); + for (AtomSpecModel ranges : residues) + { + if (sb.length() > 9) + { + sb.append(" or "); + } + sb.append(getAtomSpec(ranges, AtomSpecType.RESIDUE_ONLY)); + } return Arrays.asList(new StructureCommand(sb.toString())); } @@ -220,13 +241,16 @@ public class JmolCommands extends StructureCommandsBase /* * https://chemapps.stolaf.edu/jmol/docs/#writemodel */ - return new StructureCommand("write STATE \"" + filepath + "\""); + StructureCommand sc = new StructureCommand( + "write STATE \"" + filepath + "\""); + sc.setWaitNeeded(true); + return sc; } @Override - protected StructureCommandI getColourCommand(String atomSpec, Color colour) + protected StructureCommandI colourResidues(String atomSpec, Color colour) { - StringBuilder sb = new StringBuilder(atomSpec.length()+20); + StringBuilder sb = new StringBuilder(atomSpec.length() + 20); sb.append("select ").append(atomSpec).append(getCommandSeparator()) .append("color").append(getColourString(colour)); return new StructureCommand(sb.toString()); @@ -249,7 +273,7 @@ public class JmolCommands extends StructureCommandsBase * a separate clause in the {@code compare} (superposition) command. */ @Override - public String getAtomSpec(AtomSpecModel model, boolean alphaOnly) + public String getAtomSpec(AtomSpecModel model, AtomSpecType specType) { StringBuilder sb = new StringBuilder(128); @@ -291,7 +315,42 @@ public class JmolCommands extends StructureCommandsBase @Override public StructureCommandI loadFile(String file) { - return null; + // https://chemapps.stolaf.edu/jmol/docs/#loadfiles + return new StructureCommand( + "load FILES \"" + Platform.escapeBackslashes(file) + "\""); + } + + @Override + public StructureCommandI restoreSession(String filePath) + { + return new StructureCommand("restore STATE \"" + + Platform.escapeBackslashes(filePath) + "\""); + } + + @Override + public List showHetatms(List toShow) + { + // always clear the current hetero cpk display + + StringBuilder sb = new StringBuilder(); + sb.append("select hetero; cpk off;"); + + if (toShow != null && !toShow.isEmpty()) + { + // select what was requested + sb.append("select "); + boolean or = false; + for (String k : toShow) + { + sb.append(or ? " or " : " "); + sb.append(k); + or = true; + } + // and show as + sb.append("; cpk;"); + } + + return Arrays.asList(new StructureCommand(sb.toString())); } /** @@ -430,8 +489,7 @@ public class JmolCommands extends StructureCommandsBase * @return */ @Deprecated - private static StringBuilder condenseCommand( - StringBuilder command, + private static StringBuilder condenseCommand(StringBuilder command, int pos) { @@ -466,4 +524,16 @@ public class JmolCommands extends StructureCommandsBase return sb; } + + @Override + public StructureCommandI openSession(String filepath) + { + return loadFile(filepath); + } + + @Override + public StructureCommandI closeViewer() + { + return null; // not an external viewer + } }