import java.io.File;
import java.net.URL;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
public Viewer jmolViewer;
- private boolean globalUseScriptWait = false;
-
public JalviewJmolBinding(StructureSelectionManager ssm,
PDBEntry[] pdbentry, SequenceI[][] sequenceIs,
DataSourceType protocol)
{
Console.debug(">>Jmol>> " + script);
String s;
- if (globalUseScriptWait || useScriptWait)
+ if (useScriptWait)
{
s = jmolViewer.scriptWait(script);
}
jmolHistory(false);
if (lastCommand == null || !lastCommand.equals(cmd))
{
- jmolScript(cmd + "\n");
+ jmolScript(cmd + "\n", command.isWaitNeeded());
}
jmolHistory(true);
lastCommand = cmd;
public void createImage(String file, String type, int quality)
{
- System.out.println("JMOL CREATE IMAGE");
+ jalview.bin.Console.outPrintln("JMOL CREATE IMAGE");
}
@Override
public String createImage(String fileName, String type,
Object textOrBytes, int quality)
{
- System.out.println("JMOL CREATE IMAGE");
+ jalview.bin.Console.outPrintln("JMOL CREATE IMAGE");
return null;
}
@Override
public String eval(String strEval)
{
- // System.out.println(strEval);
+ // jalview.bin.Console.outPrintln(strEval);
// "# 'eval' is implemented only for the applet.";
return null;
}
// End StructureListener
// //////////////////////////
+ ////////////////////////////
+ // HETATM get
+ //
+
+ @Override
+ public Map<String, String> getHetatmNames()
+ {
+ HashMap<String, String> hetlist = new HashMap();
+ for (int mc = 0; mc < jmolViewer.ms.mc; mc++)
+ {
+ Map<String, String> hets = jmolViewer.ms.getHeteroList(mc);
+ if (hets != null)
+ {
+ hetlist.putAll(hets);
+ }
+ }
+ return hetlist;
+ }
+ //
+ ////////////////////////////
+
@Override
public float[][] functionXY(String functionName, int x, int y)
{
{
if (atoms != null)
{
- // we set the globalUseScriptWait (and reset to previous value) only if
- // we're going to use it here
- boolean useScriptWait = atoms.size() > 1;
- boolean prevUseScriptWait = false;
- if (useScriptWait)
- prevUseScriptWait = setGlobalUseScriptWait(useScriptWait);
if (resetLastRes.length() > 0)
{
- jmolScript(resetLastRes.toString(), useScriptWait);
+ jmolScript(resetLastRes.toString());
resetLastRes.setLength(0);
}
+ StringBuilder highlightCommands = null;
for (AtomSpec atom : atoms)
{
- highlightAtom(atom.getAtomIndex(), atom.getPdbResNum(),
- atom.getChain(), atom.getPdbFile(), useScriptWait);
+ StringBuilder thisAtom = highlightAtom(atom.getAtomIndex(),
+ atom.getPdbResNum(), atom.getChain(), atom.getPdbFile());
+ if (thisAtom != null)
+ {
+ if (highlightCommands == null)
+ {
+ highlightCommands = thisAtom;
+ }
+ else
+ {
+ highlightCommands.append(thisAtom);
+ }
+ }
}
- if (useScriptWait)
- setGlobalUseScriptWait(prevUseScriptWait);
+ if (highlightCommands != null)
+ {
+ jmolHistory(false);
+ jmolScript(highlightCommands.toString());
+ jmolHistory(true);
+ }
+ // Highlight distances between atoms with a 'measure' command - not yet
+ // working
+ // if (atoms.size() >= 2)
+ // {
+ // StringBuilder sb = new StringBuilder();
+ // for (int a = 0; a < atoms.size(); a++)
+ // {
+ // AtomSpec speca = atoms.get(a);
+ // String a_model = getModelIdForFile(speca.getPdbFile());
+ // for (int b = a + 1; b < atoms.size(); b++)
+ // {
+ // AtomSpec specb = atoms.get(b);
+ // String b_model = getModelIdForFile(speca.getPdbFile());
+ // sb.append("measure ALL (" + speca.getAtomIndex() + " and */"
+ // + a_model + ") (" + specb.getAtomIndex() + " and */"
+ // + b_model + ");");
+ // }
+ // }
+ // jmolHistory(false, useScriptWait);
+ // jmolScript(sb.toString(), useScriptWait);
+ // jmolHistory(true, useScriptWait);
+ // }
+
}
+
}
// jmol/ssm only
- public void highlightAtom(int atomIndex, int pdbResNum, String chain,
- String pdbfile, boolean useScriptWait)
+ private StringBuilder highlightAtom(int atomIndex, int pdbResNum,
+ String chain, String pdbfile)
{
String modelId = getModelIdForFile(pdbfile);
if (modelId.isEmpty())
{
- return;
+ return null;
}
- jmolHistory(false);
-
StringBuilder selection = new StringBuilder(32);
StringBuilder cmd = new StringBuilder(64);
selection.append("select ").append(String.valueOf(pdbResNum));
resetLastRes.append(selection).append(";wireframe 0;").append(selection)
.append(" and not hetero; spacefill 0;");
- jmolScript(cmd.toString(), useScriptWait);
- jmolHistory(true);
+ return cmd;
}
private boolean debug = true;
private void jmolHistory(boolean enable)
{
- jmolScript("History " + ((debug || enable) ? "on" : "off"));
+ jmolHistory(enable, false);
+ }
+
+ private void jmolHistory(boolean enable, boolean useScriptWait)
+ {
+ jmolScript("History " + ((debug || enable) ? "on" : "off"),
+ useScriptWait);
}
public void loadInline(String string)
lastMessage = strInfo;
if (data != null)
{
- System.err.println("Ignoring additional hover info: " + data
- + " (other info: '" + strInfo + "' pos " + atomIndex + ")");
+ jalview.bin.Console.errPrintln(
+ "Ignoring additional hover info: " + data + " (other info: '"
+ + strInfo + "' pos " + atomIndex + ")");
}
mouseOverStructure(atomIndex, strInfo);
}
*/
if (strData != null)
{
- System.err.println("Ignoring additional pick data string " + strData);
+ jalview.bin.Console.errPrintln(
+ "Ignoring additional pick data string " + strData);
}
int chainSeparator = strInfo.indexOf(":");
int p = 0;
(data == null) ? ((String) null) : (String) data[1]);
break;
case ERROR:
- // System.err.println("Ignoring error callback.");
+ // jalview.bin.Console.errPrintln("Ignoring error callback.");
break;
case SYNC:
case RESIZE:
case CLICK:
default:
- System.err.println(
+ jalview.bin.Console.errPrintln(
"Unhandled callback " + type + " " + data[1].toString());
break;
}
} catch (Exception e)
{
- System.err.println("Squashed Jmol callback handler error:");
+ jalview.bin.Console
+ .errPrintln("Squashed Jmol callback handler error:");
e.printStackTrace();
}
}
public void setCallbackFunction(String callbackType,
String callbackFunction)
{
- System.err.println("Ignoring set-callback request to associate "
- + callbackType + " with function " + callbackFunction);
+ jalview.bin.Console
+ .errPrintln("Ignoring set-callback request to associate "
+ + callbackType + " with function " + callbackFunction);
}
String buttonsToShow)
{
- System.err.println("Allocating Jmol Viewer: " + commandOptions);
+ jalview.bin.Console
+ .errPrintln("Allocating Jmol Viewer: " + commandOptions);
if (commandOptions == null)
{
console = createJmolConsole(consolePanel, buttonsToShow);
} catch (Throwable e)
{
- System.err.println("Could not create Jmol application console. "
- + e.getMessage());
+ jalview.bin.Console
+ .errPrintln("Could not create Jmol application console. "
+ + e.getMessage());
e.printStackTrace();
}
if (consolePanel != null)
{
return "http://wiki.jmol.org"; // BH 2018
}
-
- private boolean setGlobalUseScriptWait(boolean b)
- {
- boolean prev = globalUseScriptWait;
- globalUseScriptWait = b;
- return prev;
- }
}