package jalview.gui;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
import jalview.api.AlignmentViewPanel;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.SequenceI;
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;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
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
protected List<String> executeCommand(StructureCommandI command,
boolean getReply)
{
- System.out.println(command.toString()); // debug
+ // System.out.println(command.toString()); // debug
return pymolManager.sendCommand(command, getReply);
}
{
pymolManager.exitPymol();
}
- // if (this.pymolListener != null)
- // {
- // pymolListener.shutdown();
- // pymolListener = null;
- // }
pymolManager = null;
if (pymolMonitor != null)
return file;
}
+ /**
+ * Returns the file extension to use for a saved viewer session file (.pse)
+ *
+ * @return
+ * @see https://pymolwiki.org/index.php/Save
+ */
+ @Override
+ public String getSessionFileExtension()
+ {
+ return ".pse";
+ }
+
}