Clazz.declarePackage ("JV"); Clazz.load (["java.util.Hashtable"], ["JV.Connection", "$.Scene", "$.StateManager", "$.Connections"], ["java.util.Arrays", "JU.BS", "$.SB", "JM.Orientation", "JU.BSUtil"], function () { c$ = Clazz.decorateAsClass (function () { this.vwr = null; this.saved = null; this.lastOrientation = ""; this.lastContext = ""; this.lastConnections = ""; this.lastScene = ""; this.lastSelected = ""; this.lastState = ""; this.lastShape = ""; this.lastCoordinates = ""; Clazz.instantialize (this, arguments); }, JV, "StateManager"); Clazz.prepareFields (c$, function () { this.saved = new java.util.Hashtable (); }); c$.getVariableList = Clazz.defineMethod (c$, "getVariableList", function (htVariables, nMax, withSites, definedOnly) { var sb = new JU.SB (); var n = 0; var list = new Array (htVariables.size ()); for (var entry, $entry = htVariables.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) { var key = entry.getKey (); var $var = entry.getValue (); if ((withSites || !key.startsWith ("site_")) && (!definedOnly || key.charAt (0) == '@')) list[n++] = key + (key.charAt (0) == '@' ? " " + $var.asString () : " = " + JV.StateManager.varClip (key, $var.escape (), nMax)); } java.util.Arrays.sort (list, 0, n); for (var i = 0; i < n; i++) if (list[i] != null) sb.append (" ").append (list[i]).append (";\n"); if (n == 0 && !definedOnly) sb.append ("# --no global user variables defined--;\n"); return sb.toString (); }, "java.util.Map,~N,~B,~B"); c$.getObjectIdFromName = Clazz.defineMethod (c$, "getObjectIdFromName", function (name) { if (name == null) return -1; var objID = "background axis1 axis2 axis3 boundbox unitcell frank ".indexOf (name.toLowerCase ()); return (objID < 0 ? objID : Clazz.doubleToInt (objID / 11)); }, "~S"); c$.getObjectNameFromId = Clazz.defineMethod (c$, "getObjectNameFromId", function (objId) { if (objId < 0 || objId >= 7) return null; return "background axis1 axis2 axis3 boundbox unitcell frank ".substring (objId * 11, objId * 11 + 11).trim (); }, "~N"); Clazz.makeConstructor (c$, function (vwr) { this.vwr = vwr; }, "JV.Viewer"); Clazz.defineMethod (c$, "clear", function (global) { this.vwr.setShowAxes (false); this.vwr.setShowBbcage (false); this.vwr.setShowUnitCell (false); global.clear (); }, "JV.GlobalSettings"); Clazz.defineMethod (c$, "resetLighting", function () { this.vwr.setIntProperty ("ambientPercent", 45); this.vwr.setIntProperty ("celShadingPower", 10); this.vwr.setIntProperty ("diffusePercent", 84); this.vwr.setIntProperty ("phongExponent", 64); this.vwr.setIntProperty ("specularExponent", 6); this.vwr.setIntProperty ("specularPercent", 22); this.vwr.setIntProperty ("specularPower", 40); this.vwr.setIntProperty ("zDepth", 0); this.vwr.setIntProperty ("zShadePower", 3); this.vwr.setIntProperty ("zSlab", 50); this.vwr.setBooleanProperty ("specular", true); this.vwr.setBooleanProperty ("celShading", false); this.vwr.setBooleanProperty ("zshade", false); }); Clazz.defineMethod (c$, "setCrystallographicDefaults", function () { this.vwr.setAxesMode (603979808); this.vwr.setShowAxes (true); this.vwr.setShowUnitCell (true); this.vwr.setBooleanProperty ("perspectiveDepth", false); }); Clazz.defineMethod (c$, "setCommonDefaults", function () { this.vwr.setBooleanProperty ("perspectiveDepth", true); this.vwr.setFloatProperty ("bondTolerance", 0.45); this.vwr.setFloatProperty ("minBondDistance", 0.4); this.vwr.setIntProperty ("bondingVersion", 0); this.vwr.setBooleanProperty ("translucent", true); }); Clazz.defineMethod (c$, "setJmolDefaults", function () { this.setCommonDefaults (); this.vwr.setStringProperty ("defaultColorScheme", "Jmol"); this.vwr.setBooleanProperty ("axesOrientationRasmol", false); this.vwr.setBooleanProperty ("zeroBasedXyzRasmol", false); this.vwr.setIntProperty ("percentVdwAtom", 23); this.vwr.setIntProperty ("bondRadiusMilliAngstroms", 150); this.vwr.setVdwStr ("auto"); }); Clazz.defineMethod (c$, "setRasMolDefaults", function () { this.setCommonDefaults (); this.vwr.setStringProperty ("defaultColorScheme", "RasMol"); this.vwr.setBooleanProperty ("axesOrientationRasmol", true); this.vwr.setBooleanProperty ("zeroBasedXyzRasmol", true); this.vwr.setIntProperty ("percentVdwAtom", 0); this.vwr.setIntProperty ("bondRadiusMilliAngstroms", 1); this.vwr.setVdwStr ("Rasmol"); }); Clazz.defineMethod (c$, "setPyMOLDefaults", function () { this.setCommonDefaults (); this.vwr.setStringProperty ("measurementUnits", "ANGSTROMS"); this.vwr.setBooleanProperty ("zoomHeight", true); }); c$.getNoCase = Clazz.defineMethod (c$, "getNoCase", function (saved, name) { for (var e, $e = saved.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) if (e.getKey ().equalsIgnoreCase (name)) return e.getValue (); return null; }, "java.util.Map,~S"); Clazz.defineMethod (c$, "listSavedStates", function () { var names = ""; for (var name, $name = this.saved.keySet ().iterator (); $name.hasNext () && ((name = $name.next ()) || true);) names += "\n" + name; return names; }); Clazz.defineMethod (c$, "deleteSavedType", function (type) { var e = this.saved.keySet ().iterator (); while (e.hasNext ()) if (e.next ().startsWith (type)) e.remove (); }, "~S"); Clazz.defineMethod (c$, "deleteSaved", function (namelike) { var e = this.saved.keySet ().iterator (); while (e.hasNext ()) { var name = e.next (); if (name.startsWith (namelike) || name.endsWith ("_" + namelike) && name.indexOf ("_") == name.lastIndexOf ("_" + namelike)) e.remove (); } }, "~S"); Clazz.defineMethod (c$, "saveSelection", function (saveName, bsSelected) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Selected_"); return; }saveName = this.lastSelected = "Selected_" + saveName; this.saved.put (saveName, JU.BSUtil.copy (bsSelected)); }, "~S,JU.BS"); Clazz.defineMethod (c$, "restoreSelection", function (saveName) { var name = (saveName.length > 0 ? "Selected_" + saveName : this.lastSelected); var bsSelected = JV.StateManager.getNoCase (this.saved, name); if (bsSelected == null) { this.vwr.select ( new JU.BS (), false, 0, false); return false; }this.vwr.select (bsSelected, false, 0, false); return true; }, "~S"); Clazz.defineMethod (c$, "saveState", function (saveName) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("State_"); return; }saveName = this.lastState = "State_" + saveName; this.saved.put (saveName, this.vwr.getStateInfo ()); }, "~S"); Clazz.defineMethod (c$, "getSavedState", function (saveName) { var name = (saveName.length > 0 ? "State_" + saveName : this.lastState); var script = JV.StateManager.getNoCase (this.saved, name); return (script == null ? "" : script); }, "~S"); Clazz.defineMethod (c$, "saveStructure", function (saveName) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Shape_"); return; }saveName = this.lastShape = "Shape_" + saveName; this.saved.put (saveName, this.vwr.getStructureState ()); }, "~S"); Clazz.defineMethod (c$, "getSavedStructure", function (saveName) { var name = (saveName.length > 0 ? "Shape_" + saveName : this.lastShape); var script = JV.StateManager.getNoCase (this.saved, name); return (script == null ? "" : script); }, "~S"); Clazz.defineMethod (c$, "saveCoordinates", function (saveName, bsSelected) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Coordinates_"); return; }saveName = this.lastCoordinates = "Coordinates_" + saveName; this.saved.put (saveName, this.vwr.getCoordinateState (bsSelected)); }, "~S,JU.BS"); Clazz.defineMethod (c$, "getSavedCoordinates", function (saveName) { var name = (saveName.length > 0 ? "Coordinates_" + saveName : this.lastCoordinates); var script = JV.StateManager.getNoCase (this.saved, name); return (script == null ? "" : script); }, "~S"); Clazz.defineMethod (c$, "getOrientation", function () { return new JM.Orientation (this.vwr, false, null); }); Clazz.defineMethod (c$, "getSavedOrientationText", function (saveName) { var o; if (saveName != null) { o = this.getOrientationFor (saveName); return (o == null ? "" : o.getMoveToText (true)); }var sb = new JU.SB (); for (var e, $e = this.saved.entrySet ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) { var name = e.getKey (); if (name.startsWith ("Orientation_")) sb.append ((e.getValue ()).getMoveToText (true)); } return sb.toString (); }, "~S"); Clazz.defineMethod (c$, "saveScene", function (saveName, scene) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Scene_"); return; }var o = new JV.Scene (scene); o.saveName = this.lastScene = "Scene_" + saveName; this.saved.put (o.saveName, o); }, "~S,java.util.Map"); Clazz.defineMethod (c$, "restoreScene", function (saveName, timeSeconds) { var o = JV.StateManager.getNoCase (this.saved, (saveName.length > 0 ? "Scene_" + saveName : this.lastScene)); return (o != null && o.restore (this.vwr, timeSeconds)); }, "~S,~N"); Clazz.defineMethod (c$, "saveOrientation", function (saveName, pymolView) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Orientation_"); return; }var o = new JM.Orientation (this.vwr, saveName.equalsIgnoreCase ("default"), pymolView); o.saveName = this.lastOrientation = "Orientation_" + saveName; this.saved.put (o.saveName, o); }, "~S,~A"); Clazz.defineMethod (c$, "restoreOrientation", function (saveName, timeSeconds, isAll) { var o = this.getOrientationFor (saveName); return (o != null && o.restore (timeSeconds, isAll)); }, "~S,~N,~B"); Clazz.defineMethod (c$, "getOrientationFor", function (saveName) { var name = (saveName.length > 0 ? "Orientation_" + saveName : this.lastOrientation); return JV.StateManager.getNoCase (this.saved, name); }, "~S"); Clazz.defineMethod (c$, "saveContext", function (saveName, context) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Context_"); return; }this.saved.put ((this.lastContext = "Context_" + saveName), context); }, "~S,~O"); Clazz.defineMethod (c$, "getContext", function (saveName) { return this.saved.get (saveName.length == 0 ? this.lastContext : "Context_" + saveName); }, "~S"); Clazz.defineMethod (c$, "saveBonds", function (saveName) { if (saveName.equalsIgnoreCase ("DELETE")) { this.deleteSavedType ("Bonds_"); return; }var b = new JV.Connections (this.vwr); b.saveName = this.lastConnections = "Bonds_" + saveName; this.saved.put (b.saveName, b); }, "~S"); Clazz.defineMethod (c$, "restoreBonds", function (saveName) { this.vwr.clearModelDependentObjects (); var name = (saveName.length > 0 ? "Bonds_" + saveName : this.lastConnections); var c = JV.StateManager.getNoCase (this.saved, name); return (c != null && c.restore ()); }, "~S"); c$.varClip = Clazz.defineMethod (c$, "varClip", function (name, sv, nMax) { if (nMax > 0 && sv.length > nMax) sv = sv.substring (0, nMax) + " #...more (" + sv.length + " bytes -- use SHOW " + name + " or MESSAGE @" + name + " to view)"; return sv; }, "~S,~S,~N"); Clazz.defineStatics (c$, "OBJ_BACKGROUND", 0, "OBJ_AXIS1", 1, "OBJ_AXIS2", 2, "OBJ_AXIS3", 3, "OBJ_BOUNDBOX", 4, "OBJ_UNITCELL", 5, "OBJ_FRANK", 6, "OBJ_MAX", 7, "objectNameList", "background axis1 axis2 axis3 boundbox unitcell frank "); c$ = Clazz.decorateAsClass (function () { this.saveName = null; this.scene = null; Clazz.instantialize (this, arguments); }, JV, "Scene"); Clazz.makeConstructor (c$, function (scene) { this.scene = scene; }, "java.util.Map"); Clazz.defineMethod (c$, "restore", function (vwr, timeSeconds) { var gen = this.scene.get ("generator"); if (gen != null) gen.generateScene (this.scene); var pv = this.scene.get ("pymolView"); return (pv != null && vwr.tm.moveToPyMOL (vwr.eval, timeSeconds, pv)); }, "JV.Viewer,~N"); c$ = Clazz.decorateAsClass (function () { this.saveName = null; this.bondCount = 0; this.connections = null; this.vwr = null; Clazz.instantialize (this, arguments); }, JV, "Connections"); Clazz.makeConstructor (c$, function (vwr) { var modelSet = vwr.ms; if (modelSet == null) return; this.vwr = vwr; this.bondCount = modelSet.bondCount; this.connections = new Array (this.bondCount + 1); var bonds = modelSet.bo; for (var i = this.bondCount; --i >= 0; ) { var b = bonds[i]; this.connections[i] = new JV.Connection (b.atom1.i, b.atom2.i, b.mad, b.colix, b.order, b.getEnergy (), b.shapeVisibilityFlags); } }, "JV.Viewer"); Clazz.defineMethod (c$, "restore", function () { var modelSet = this.vwr.ms; if (modelSet == null) return false; modelSet.deleteAllBonds (); for (var i = this.bondCount; --i >= 0; ) { var c = this.connections[i]; var ac = modelSet.ac; if (c.atomIndex1 >= ac || c.atomIndex2 >= ac) continue; var b = modelSet.bondAtoms (modelSet.at[c.atomIndex1], modelSet.at[c.atomIndex2], c.order, c.mad, null, c.energy, false, true); b.colix = c.colix; b.shapeVisibilityFlags = c.shapeVisibilityFlags; } for (var i = modelSet.bondCount; --i >= 0; ) modelSet.bo[i].index = i; this.vwr.setShapeProperty (1, "reportAll", null); return true; }); c$ = Clazz.decorateAsClass (function () { this.atomIndex1 = 0; this.atomIndex2 = 0; this.mad = 0; this.colix = 0; this.order = 0; this.energy = 0; this.shapeVisibilityFlags = 0; Clazz.instantialize (this, arguments); }, JV, "Connection"); Clazz.makeConstructor (c$, function (atom1, atom2, mad, colix, order, energy, shapeVisibilityFlags) { this.atomIndex1 = atom1; this.atomIndex2 = atom2; this.mad = mad; this.colix = colix; this.order = order; this.energy = energy; this.shapeVisibilityFlags = shapeVisibilityFlags; }, "~N,~N,~N,~N,~N,~N,~N"); });