import jalview.ext.pymol.PymolManager;
import jalview.gui.StructureViewer.ViewerType;
import jalview.structure.AtomSpec;
+import jalview.structure.StructureCommand;
import jalview.structure.StructureCommandI;
import jalview.structure.StructureSelectionManager;
import jalview.structures.models.AAStructureBindingModel;
public class PymolBindingModel extends AAStructureBindingModel
{
+ /*
+ * format for labels shown on structures when mousing over sequence;
+ * see https://pymolwiki.org/index.php/Label#examples
+ * left not final so customisable e.g. with a Groovy script
+ */
+ private static String LABEL_FORMAT = "\"%s %s\" % (resn,resi)";
+
private PymolManager pymolManager;
private Thread pymolMonitor;
*/
Map<String, String> pymolObjects = new HashMap<>();
+ private String lastLabelSpec;
+
/**
* Constructor
*
@Override
public void highlightAtoms(List<AtomSpec> atoms)
{
+ /*
+ * https://pymolwiki.org/index.php/Label#examples
+ */
+ StringBuilder sb = new StringBuilder();
+ for (AtomSpec atom : atoms)
+ {
+ // todo promote to StructureCommandsI.showLabel()
+ // todo handle CA|P correctly
+ String modelId = getModelIdForFile(atom.getPdbFile());
+ sb.append(String.format(" %s//%s/%d/CA", modelId,
+ atom.getChain(),
+ atom.getPdbResNum()));
+ }
+ String labelSpec = sb.toString();
+ if (labelSpec.equals(lastLabelSpec))
+ {
+ return;
+ }
+ StructureCommandI command = new StructureCommand("label", labelSpec, LABEL_FORMAT);
+ executeCommand(command, false);
+
+ /*
+ * and remove the label(s) previously shown
+ */
+ if (lastLabelSpec != null)
+ {
+ command = new StructureCommand("label", lastLabelSpec, "");
+ executeCommand(command, false);
+ }
+
+ lastLabelSpec = labelSpec;
}
@Override