X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPymolBindingModel.java;h=42a537bcc8bd03ac700af831fc50334c59ca8c51;hb=b7cd96eaeb85474ee2ddec1de92181a3b88ceece;hp=21ba95cec8903aa9c7666b1a15d59f8b05af74c9;hpb=2107a91322a1988a8a6b724c74f9d244795341e3;p=jalview.git diff --git a/src/jalview/gui/PymolBindingModel.java b/src/jalview/gui/PymolBindingModel.java index 21ba95c..42a537b 100644 --- a/src/jalview/gui/PymolBindingModel.java +++ b/src/jalview/gui/PymolBindingModel.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import jalview.api.AlignmentViewPanel; +import jalview.bin.Console; import jalview.datamodel.PDBEntry; import jalview.datamodel.SequenceI; import jalview.ext.pymol.PymolCommands; @@ -29,8 +30,6 @@ public class PymolBindingModel extends AAStructureBindingModel private PymolManager pymolManager; - private Thread pymolMonitor; - /* * full paths to structure files opened in PyMOL */ @@ -71,15 +70,14 @@ public class PymolBindingModel extends AAStructureBindingModel public void highlightAtoms(List atoms) { /* - * https://pymolwiki.org/index.php/Label#examples + * https://pymolwiki.org/index.php/indicate#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, + sb.append(String.format(" %s//%s/%d/*", modelId, atom.getChain(), atom.getPdbResNum())); } @@ -88,18 +86,9 @@ public class PymolBindingModel extends AAStructureBindingModel { return; } - StructureCommandI command = new StructureCommand("label", labelSpec, LABEL_FORMAT); + StructureCommandI command = new StructureCommand("indicate", labelSpec); executeCommand(command, false); - /* - * and remove the label(s) previously shown - */ - if (lastLabelSpec != null) - { - command = new StructureCommand("label", lastLabelSpec, ""); - executeCommand(command, false); - } - lastLabelSpec = labelSpec; } @@ -132,31 +121,14 @@ public class PymolBindingModel extends AAStructureBindingModel @Override public boolean isViewerRunning() { - return pymolManager.isPymolLaunched(); + return pymolManager !=null && pymolManager.isPymolLaunched(); } @Override public void closeViewer(boolean closePymol) { super.closeViewer(closePymol); - if (closePymol) - { - pymolManager.exitPymol(); - } pymolManager = null; - - if (pymolMonitor != null) - { - pymolMonitor.interrupt(); - } - } - - public boolean openSession(String pymolSessionFile) - { - StructureCommandI cmd = getCommandGenerator() - .loadFile(pymolSessionFile); - executeCommand(cmd, false); - return true; } public boolean launchPymol() @@ -166,16 +138,17 @@ public class PymolBindingModel extends AAStructureBindingModel return true; } - boolean launched = pymolManager.launchPymol(); - if (launched) + Process pymol = pymolManager.launchPymol(); + if (pymol != null) { // start listening for PyMOL selections - how?? + startExternalViewerMonitor(pymol); } else { - System.err.println("Failed to launch PyMOL!"); + Console.error("Failed to launch PyMOL!"); } - return launched; + return pymol != null; } public void openFile(PDBEntry pe) @@ -188,6 +161,21 @@ public class PymolBindingModel extends AAStructureBindingModel * a second parameter sets the pdbid as the loaded PyMOL object name */ String pdbId = pe.getId(); + try { + String safePDBId = java.net.URLEncoder.encode(pdbId,"UTF-8"); + pdbId = safePDBId.replace('%', '_'); + pdbId = pdbId.replace("-", "__"); + char fc = pdbId.charAt(0); + // put an 's' before any numerics + if (fc>='0' && fc<='9') + { + pdbId = 's'+pdbId; + } +// pdbId.replace('-', 0) + } catch (Exception x) + { + Console.error("Unxpected encoding exception for '"+pdbId+"'",x); + } cmd.addParameter(pdbId); executeCommand(cmd, false);