Clazz.declarePackage ("JSV.common"); Clazz.load (["javajs.api.BytePoster", "javajs.awt.PlatformViewer", "$.Dimension", "JSV.common.Spectrum"], "JSV.common.JSViewer", ["java.io.File", "java.lang.Boolean", "$.Character", "$.Double", "$.Float", "$.Thread", "java.net.URL", "java.util.Arrays", "$.Hashtable", "JU.CU", "$.Lst", "$.OC", "$.PT", "$.SB", "JSV.common.Annotation", "$.ExportType", "$.JSVFileManager", "$.PanelData", "$.PanelNode", "$.Parameters", "$.PeakInfo", "$.PrintLayout", "$.RepaintManager", "$.ScriptToken", "$.ScriptTokenizer", "JSV.source.JDXReader", "$.JDXSource", "JSV.tree.SimpleTree", "JU.Logger"], function () { c$ = Clazz.decorateAsClass (function () { this.si = null; this.g2d = null; this.spectraTree = null; this.currentSource = null; this.panelNodes = null; this.parameters = null; this.repaintManager = null; this.selectedPanel = null; this.mainPanel = null; this.properties = null; this.scriptQueue = null; this.fileHelper = null; this.jsvpPopupMenu = null; this.dialogManager = null; this.viewDialog = null; this.overlayLegendDialog = null; this.irMode = null; this.loadImaginary = false; this.interfaceOverlaid = false; this.autoIntegrate = false; this.autoShowLegend = false; this.obscureTitleFromUser = null; this.allowCompoundMenu = true; this.allowMenu = true; this.initialStartIndex = -1; this.initialEndIndex = -1; this.isSingleThreaded = false; this.isApplet = false; this.isJS = false; this.isSigned = false; this.recentScript = ""; this.appletName = null; this.fullName = null; this.syncID = null; this.html5Applet = null; this.display = null; this.maximumSize = 2147483647; this.dimScreen = null; this.fileCount = 0; this.nViews = 0; this.scriptLevelCount = 0; this.returnFromJmolModel = null; this.integrationRatios = null; this.apiPlatform = null; this.popupAllowMenu = true; this.popupZoomEnabled = true; this.defaultLoadScript = null; this.nmrMaxY = NaN; this.overlayLegendVisible = false; this.recentStackPercent = 5; this.lastPrintLayout = null; this.offWindowFrame = null; this.recentOpenURL = "http://"; this.recentURL = null; this.recentSimulation = "tylenol"; Clazz.instantialize (this, arguments); }, JSV.common, "JSViewer", null, [javajs.awt.PlatformViewer, javajs.api.BytePoster]); Clazz.prepareFields (c$, function () { this.irMode = JSV.common.Spectrum.IRMode.NO_CONVERT; this.dimScreen = new javajs.awt.Dimension (0, 0); }); Clazz.defineMethod (c$, "setProperty", function (key, value) { if (this.properties != null) this.properties.setProperty (key, value); }, "~S,~S"); Clazz.defineMethod (c$, "setNode", function (node) { if (node.jsvp !== this.selectedPanel) this.si.siSetSelectedPanel (node.jsvp); this.si.siSendPanelChange (); this.si.siNodeSet (node); }, "JSV.common.PanelNode"); Clazz.makeConstructor (c$, function (si, isApplet, isJS) { this.si = si; this.isApplet = isApplet; this.isJS = isApplet && isJS; this.isSigned = si.isSigned (); this.apiPlatform = this.getPlatformInterface ("Platform"); this.apiPlatform.setViewer (this, this.display); this.g2d = this.getPlatformInterface ("G2D"); this.spectraTree = new JSV.tree.SimpleTree (this); this.parameters = this.getPlatformInterface ("Parameters"); this.parameters.setName ("applet"); this.fileHelper = (this.getPlatformInterface ("FileHelper")).set (this); this.isSingleThreaded = this.apiPlatform.isSingleThreaded (); this.panelNodes = new JU.Lst (); this.repaintManager = new JSV.common.RepaintManager (this); if (!isApplet) this.setPopupMenu (true, true); }, "JSV.api.ScriptInterface,~B,~B"); Clazz.defineMethod (c$, "setPopupMenu", function (allowMenu, zoomEnabled) { this.popupAllowMenu = allowMenu; this.popupZoomEnabled = zoomEnabled; }, "~B,~B"); Clazz.defineMethod (c$, "showMenu", function (x, y) { if (!this.popupAllowMenu) return; if (this.jsvpPopupMenu == null) { try { this.jsvpPopupMenu = this.getPlatformInterface ("Popup"); this.jsvpPopupMenu.jpiInitialize (this, this.isApplet ? "appletMenu" : "appMenu"); this.jsvpPopupMenu.setEnabled (this.popupAllowMenu, this.popupZoomEnabled); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { JU.Logger.error (e + " initializing popup menu"); return; } else { throw e; } } }this.jsvpPopupMenu.jpiShow (x, y); }, "~N,~N"); Clazz.defineMethod (c$, "runScriptNow", function (script) { System.out.println (this.checkScript (script)); this.scriptLevelCount++; if (script == null) script = ""; script = script.trim (); if (script.startsWith ("!")) script = script.substring (1).trim (); else if (script.startsWith (">")) { JU.Logger.error (script); return true; }if (script.indexOf ("= 0) { this.syncScript (script); return true; }JU.Logger.info ("RUNSCRIPT " + script); var isOK = true; var nErrorsLeft = 10; var commandTokens = new JSV.common.ScriptTokenizer (script, true); var msg = null; while (commandTokens != null && commandTokens.hasMoreTokens () && nErrorsLeft > 0 && isOK) { var token = commandTokens.nextToken (); var eachParam = new JSV.common.ScriptTokenizer (token, false); var key = JSV.common.ScriptToken.getKey (eachParam); if (key == null) continue; var st = JSV.common.ScriptToken.getScriptToken (key); var value = JSV.common.ScriptToken.getValue (st, eachParam, token); try { switch (st) { case JSV.common.ScriptToken.UNKNOWN: JU.Logger.info ("Unrecognized parameter: " + key); --nErrorsLeft; break; default: if (this.selectedPanel == null) break; this.parameters.set (this.pd (), st, value); this.si.siUpdateBoolean (st, JSV.common.Parameters.isTrue (value)); break; case JSV.common.ScriptToken.PEAKCALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.SYNCCALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.COORDCALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.LOADFILECALLBACKFUNCTIONNAME: this.si.siExecSetCallback (st, value); break; case JSV.common.ScriptToken.DEFAULTLOADSCRIPT: value = JU.PT.rep (value, "''", "\""); this.defaultLoadScript = (value.length > 0 ? value : null); break; case JSV.common.ScriptToken.DEFAULTNMRNORMALIZATION: this.nmrMaxY = JU.PT.parseFloat (value); break; case JSV.common.ScriptToken.AUTOINTEGRATE: this.autoIntegrate = JSV.common.Parameters.isTrue (value); break; case JSV.common.ScriptToken.CLOSE: this.execClose (value); break; case JSV.common.ScriptToken.DEBUG: JU.Logger.setLogLevel (value.toLowerCase ().equals ("high") ? 6 : JSV.common.Parameters.isTrue (value) ? 5 : 4); break; case JSV.common.ScriptToken.GETPROPERTY: var info = (this.selectedPanel == null ? null : this.getPropertyAsJavaObject (value)); if (info != null) this.selectedPanel.showMessage (JU.PT.toJSON (null, info), value); break; case JSV.common.ScriptToken.HELP: this.execHelp (value); break; case JSV.common.ScriptToken.HIDDEN: this.si.siExecHidden (JSV.common.Parameters.isTrue (value)); break; case JSV.common.ScriptToken.INTEGRATIONRATIOS: this.integrationRatios = value; this.execIntegrate (null); break; case JSV.common.ScriptToken.INTERFACE: this.interfaceOverlaid = this.checkOvelayInterface (value); break; case JSV.common.ScriptToken.INTEGRALOFFSET: case JSV.common.ScriptToken.INTEGRALRANGE: this.execSetIntegralParameter (st, Double.parseDouble (value)); break; case JSV.common.ScriptToken.INVERTY: this.execZoom ("invertY"); break; case JSV.common.ScriptToken.JMOL: this.si.syncToJmol (value); break; case JSV.common.ScriptToken.JSV: this.syncScript (JU.PT.trimQuotes (value)); break; case JSV.common.ScriptToken.LOAD: if (value.length == 0) { if (this.defaultLoadScript != null) this.runScriptNow (this.defaultLoadScript); break; }this.execLoad (value, (this.defaultLoadScript == null ? "" : this.defaultLoadScript + ";") + commandTokens.getRemainingScript ()); msg = (this.selectedPanel == null ? null : this.si.siLoaded (value)); commandTokens = null; break; case JSV.common.ScriptToken.LOADIMAGINARY: this.loadImaginary = JSV.common.Parameters.isTrue (value); break; case JSV.common.ScriptToken.PEAK: this.execPeak (value); break; case JSV.common.ScriptToken.PEAKLIST: this.execPeakList (value); break; case JSV.common.ScriptToken.SCALEBY: this.scaleSelectedBy (this.panelNodes, value); break; case JSV.common.ScriptToken.SCRIPT: if (value.equals ("") || value.toLowerCase ().startsWith ("inline")) { this.execScriptInline (value); } else { var s = JSV.common.JSVFileManager.getFileAsString (value); if (s != null && this.scriptLevelCount < 100) this.runScriptNow (s); }break; case JSV.common.ScriptToken.SELECT: this.execSelect (value); break; case JSV.common.ScriptToken.SPECTRUM: case JSV.common.ScriptToken.SPECTRUMNUMBER: if (!this.setSpectrum (value)) isOK = false; break; case JSV.common.ScriptToken.STACKOFFSETY: this.execOverlayOffsetY (JU.PT.parseInt ("" + JU.PT.parseFloat (value))); break; case JSV.common.ScriptToken.TEST: this.si.siExecTest (value); break; case JSV.common.ScriptToken.OVERLAY: case JSV.common.ScriptToken.VIEW: this.execView (value, true); break; case JSV.common.ScriptToken.HIGHLIGHT: isOK = this.highlight (token); break; case JSV.common.ScriptToken.FINDX: case JSV.common.ScriptToken.GETSOLUTIONCOLOR: case JSV.common.ScriptToken.INTEGRATION: case JSV.common.ScriptToken.INTEGRATE: case JSV.common.ScriptToken.IRMODE: case JSV.common.ScriptToken.LABEL: case JSV.common.ScriptToken.LINK: case JSV.common.ScriptToken.OVERLAYSTACKED: case JSV.common.ScriptToken.PRINT: case JSV.common.ScriptToken.SETPEAK: case JSV.common.ScriptToken.SETX: case JSV.common.ScriptToken.SHIFTX: case JSV.common.ScriptToken.SHOWERRORS: case JSV.common.ScriptToken.SHOWMEASUREMENTS: case JSV.common.ScriptToken.SHOWMENU: case JSV.common.ScriptToken.SHOWKEY: case JSV.common.ScriptToken.SHOWPEAKLIST: case JSV.common.ScriptToken.SHOWINTEGRATION: case JSV.common.ScriptToken.SHOWPROPERTIES: case JSV.common.ScriptToken.SHOWSOURCE: case JSV.common.ScriptToken.YSCALE: case JSV.common.ScriptToken.WRITE: case JSV.common.ScriptToken.ZOOM: if (this.isClosed ()) { isOK = false; break; }switch (st) { default: break; case JSV.common.ScriptToken.FINDX: this.pd ().findX (null, Double.parseDouble (value)); break; case JSV.common.ScriptToken.GETSOLUTIONCOLOR: this.show ("solutioncolor" + value.toLowerCase ()); break; case JSV.common.ScriptToken.INTEGRATION: case JSV.common.ScriptToken.INTEGRATE: this.execIntegrate (value); break; case JSV.common.ScriptToken.IRMODE: this.execIRMode (value); break; case JSV.common.ScriptToken.LABEL: this.pd ().addAnnotation (JSV.common.ScriptToken.getTokens (value)); break; case JSV.common.ScriptToken.LINK: this.pd ().linkSpectra (JSV.common.PanelData.LinkMode.getMode (value)); break; case JSV.common.ScriptToken.OVERLAYSTACKED: this.pd ().splitStack (!JSV.common.Parameters.isTrue (value)); break; case JSV.common.ScriptToken.PRINT: msg = this.execWrite (null); break; case JSV.common.ScriptToken.SETPEAK: case JSV.common.ScriptToken.SETX: case JSV.common.ScriptToken.SHIFTX: this.execShiftSpectrum (st, token); break; case JSV.common.ScriptToken.SHOWERRORS: this.show ("errors"); break; case JSV.common.ScriptToken.SHOWINTEGRATION: this.pd ().showAnnotation (JSV.common.Annotation.AType.Integration, JSV.common.Parameters.getTFToggle (value)); break; case JSV.common.ScriptToken.SHOWKEY: this.setOverlayLegendVisibility (JSV.common.Parameters.getTFToggle (value), true); break; case JSV.common.ScriptToken.SHOWMEASUREMENTS: this.pd ().showAnnotation (JSV.common.Annotation.AType.Measurements, JSV.common.Parameters.getTFToggle (value)); break; case JSV.common.ScriptToken.SHOWMENU: this.showMenu (-2147483648, 0); break; case JSV.common.ScriptToken.SHOWPEAKLIST: this.pd ().showAnnotation (JSV.common.Annotation.AType.PeakList, JSV.common.Parameters.getTFToggle (value)); break; case JSV.common.ScriptToken.SHOWPROPERTIES: this.show ("properties"); break; case JSV.common.ScriptToken.SHOWSOURCE: this.show ("source"); break; case JSV.common.ScriptToken.YSCALE: this.setYScale (value); break; case JSV.common.ScriptToken.WINDOW: this.si.siNewWindow (JSV.common.Parameters.isTrue (value), false); break; case JSV.common.ScriptToken.WRITE: msg = this.execWrite (value); break; case JSV.common.ScriptToken.ZOOM: isOK = this.execZoom (value); break; } break; } } catch (e) { if (Clazz.exceptionOf (e, Exception)) { msg = e.toString (); JU.Logger.error (e.toString ()); isOK = false; --nErrorsLeft; } else { throw e; } } } this.scriptLevelCount--; this.si.siExecScriptComplete (msg, true); return isOK; }, "~S"); Clazz.defineMethod (c$, "execShiftSpectrum", function (st, script) { var tokens = JSV.common.ScriptToken.getTokens (script); var xOld = NaN; var xNew = NaN; switch (tokens.size ()) { case 2: var value = tokens.get (1); if (value.equals ("")) value = "?"; xNew = value.equalsIgnoreCase ("NONE") ? 1.7976931348623157E308 : value.equalsIgnoreCase ("?") ? NaN : Double.parseDouble (value); break; case 3: xOld = Double.parseDouble (tokens.get (1)); xNew = Double.parseDouble (tokens.get (2)); break; default: Double.parseDouble (""); } var mode = 0; switch (st) { case JSV.common.ScriptToken.SETPEAK: mode = 1; break; case JSV.common.ScriptToken.SETX: mode = 2; break; case JSV.common.ScriptToken.SHIFTX: mode = 3; if (Double.isNaN (xNew)) Double.parseDouble (""); break; default: return; } this.pd ().shiftSpectrum (mode, xOld, xNew); }, "JSV.common.ScriptToken,~S"); Clazz.defineMethod (c$, "execClose", function (value) { var fromScript = (!value.startsWith ("!")); if (!fromScript) value = value.substring (1); this.close (JU.PT.trimQuotes (value)); if (!fromScript || this.panelNodes.size () == 0) this.si.siValidateAndRepaint (true); }, "~S"); Clazz.defineMethod (c$, "checkOvelayInterface", function (value) { return (value.equalsIgnoreCase ("single") || value.equalsIgnoreCase ("overlay")); }, "~S"); Clazz.defineMethod (c$, "execPeak", function (value) { try { var tokens = JSV.common.ScriptToken.getTokens (JU.PT.rep (value, "#", "INDEX=")); value = " type=\"" + tokens.get (0).toUpperCase () + "\" _match=\"" + JU.PT.trimQuotes (tokens.get (1).toUpperCase ()) + "\""; if (tokens.size () > 2 && tokens.get (2).equalsIgnoreCase ("all")) value += " title=\"ALL\""; this.processPeakPickEvent ( new JSV.common.PeakInfo (value), false); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } }, "~S"); Clazz.defineMethod (c$, "execPeakList", function (value) { var p = this.parameters; var b = JSV.common.Parameters.getTFToggle (value); if (value.indexOf ("=") < 0) { if (!this.isClosed ()) this.pd ().getPeakListing (null, b); } else { var tokens = JSV.common.ScriptToken.getTokens (value); var threshold = p.peakListThreshold; var interp = p.peakListInterpolation; try { for (var i = tokens.size (); --i >= 0; ) { var token = tokens.get (i); var pt = token.indexOf ("="); if (pt <= 0) continue; var key = token.substring (0, pt); value = token.substring (pt + 1); if (key.startsWith ("thr")) { threshold = Double.$valueOf (value).doubleValue (); } else if (key.startsWith ("int")) { interp = (value.equalsIgnoreCase ("none") ? "NONE" : "parabolic"); }} p.peakListThreshold = threshold; p.peakListInterpolation = interp; if (!this.isClosed ()) this.pd ().getPeakListing (p, Boolean.TRUE); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } }}, "~S"); Clazz.defineMethod (c$, "highlight", function (value) { var tokens = JSV.common.ScriptToken.getTokens (value); var n = tokens.size (); switch (n) { case 3: case 5: case 6: case 7: break; case 2: case 4: if (tokens.get (n - 1).equalsIgnoreCase ("OFF")) break; default: return false; } if (!this.isClosed ()) { var x1 = JU.PT.parseFloat (n > 1 ? tokens.get (1) : ""); var x2 = JU.PT.parseFloat (n > 2 ? tokens.get (2) : ""); var r = this.getRGB (n > 3 ? tokens.get (3) : "100"); var g = this.getRGB (n > 4 ? tokens.get (4) : "100"); var b = this.getRGB (n > 5 ? tokens.get (5) : "100"); var a = this.getRGB (n > 6 ? tokens.get (6) : "100"); if (Float.isNaN (x1) || Float.isNaN (x2)) { this.pd ().removeAllHighlights (); } else { this.pd ().removeHighlight (x1, x2); if (a < 0) a = 150; if (r >= 0 && g >= 0 && b >= 0) this.pd ().addHighlight (null, x1, x2, null, r, g, b, a); }this.repaint (true); }return true; }, "~S"); Clazz.defineMethod (c$, "getRGB", function (s) { var f = JU.PT.parseFloat (s); return Clazz.floatToInt (Float.isNaN (f) ? -1 : f > 1 ? f : f * 255); }, "~S"); Clazz.defineMethod (c$, "execZoom", function (value) { var x1 = 0; var x2 = 0; var y1 = 0; var y2 = 0; value = JU.PT.rep (value, " - ", " ").$replace (',', ' '); var tokens = JSV.common.ScriptToken.getTokens (value); switch (tokens.size ()) { default: return false; case 0: var v = this.pd ().getCurrentGraphSet ().getCurrentView (); value = Math.round (v.minXOnScale * 100) / 100 + "," + Math.round (v.maxXOnScale * 100) / 100; value = this.selectedPanel.getInput ("Enter zoom range x1 x2", "Zoom", value); return (value == null || this.execZoom (value)); case 1: value = tokens.get (0); if (value.equalsIgnoreCase ("next")) { this.pd ().nextView (); } else if (value.toLowerCase ().startsWith ("prev")) { this.pd ().previousView (); } else if (value.equalsIgnoreCase ("out")) { this.pd ().resetView (); } else if (value.equalsIgnoreCase ("clear")) { this.pd ().clearAllView (); } else if (value.equalsIgnoreCase ("invertY")) { this.pd ().getCurrentGraphSet ().invertYAxis (); }return true; case 2: x1 = Double.parseDouble (tokens.get (0)); x2 = Double.parseDouble (tokens.get (1)); break; case 3: var xy = tokens.get (0); if (xy.equalsIgnoreCase ("X")) { x1 = Double.parseDouble (tokens.get (1)); x2 = Double.parseDouble (tokens.get (2)); } else if (xy.equalsIgnoreCase ("Y")) { y1 = Double.parseDouble (tokens.get (1)); y2 = Double.parseDouble (tokens.get (2)); }break; case 4: x1 = Double.parseDouble (tokens.get (0)); y1 = Double.parseDouble (tokens.get (1)); x2 = Double.parseDouble (tokens.get (2)); y2 = Double.parseDouble (tokens.get (3)); } this.pd ().setZoom (x1, y1, x2, y2); return true; }, "~S"); Clazz.defineMethod (c$, "scaleSelectedBy", function (nodes, value) { try { var f = Double.parseDouble (value); for (var i = nodes.size (); --i >= 0; ) nodes.get (i).pd ().scaleSelectedBy (f); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } }, "JU.Lst,~S"); Clazz.defineMethod (c$, "pd", function () { return (this.selectedPanel == null ? null : this.selectedPanel.getPanelData ()); }); Clazz.defineMethod (c$, "isClosed", function () { return (this.pd () == null); }); Clazz.defineMethod (c$, "execSelect", function (value) { if (value.startsWith ("ID ")) { if (!this.isClosed ()) try { this.pd ().selectSpectrum (null, "ID", JU.PT.trimQuotes (value.substring (3)), true); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } return; }var nodes = this.panelNodes; for (var i = nodes.size (); --i >= 0; ) nodes.get (i).pd ().selectFromEntireSet (-2147483648); var speclist = new JU.Lst (); this.fillSpecList (value, speclist, false); }, "~S"); Clazz.defineMethod (c$, "execView", function (value, fromScript) { if (value.equals ("")) { this.checkOverlay (); return; }var speclist = new JU.Lst (); var strlist = this.fillSpecList (value, speclist, true); if (speclist.size () > 0) this.si.siOpenDataOrFile (null, strlist, speclist, strlist, -1, -1, false, null, null); if (!fromScript) { this.si.siValidateAndRepaint (false); }}, "~S,~B"); Clazz.defineMethod (c$, "execIRMode", function (value) { var mode = JSV.common.Spectrum.IRMode.getMode (value); var type = this.pd ().getSpectrum ().dataType; for (var i = this.panelNodes.size (); --i >= 0; ) this.panelNodes.get (i).pd ().setIRMode (mode, type); this.setIRmode (value); }, "~S"); Clazz.defineMethod (c$, "execIntegrate", function (value) { if (this.isClosed ()) return; this.pd ().checkIntegral (this.parameters, value); if (this.integrationRatios != null) this.pd ().setIntegrationRatios (this.integrationRatios); this.integrationRatios = null; this.repaint (true); }, "~S"); Clazz.defineMethod (c$, "repaint", function (andTaintAll) { this.selectedPanel.doRepaint (andTaintAll); }, "~B"); Clazz.defineMethod (c$, "execSetIntegralParameter", function (st, value) { var p = this.parameters; switch (st) { case JSV.common.ScriptToken.INTEGRALRANGE: p.integralRange = value; break; case JSV.common.ScriptToken.INTEGRALOFFSET: p.integralOffset = value; break; } if (!this.isClosed ()) this.pd ().checkIntegral (this.parameters, "update"); }, "JSV.common.ScriptToken,~N"); Clazz.defineMethod (c$, "setYScale", function (value) { var tokens = JSV.common.ScriptToken.getTokens (value); var pt = 0; var isAll = false; if (tokens.size () > 1 && tokens.get (0).equalsIgnoreCase ("ALL")) { isAll = true; pt++; }var y1 = Double.parseDouble (tokens.get (pt++)); var y2 = Double.parseDouble (tokens.get (pt)); if (isAll) { var spec = this.pd ().getSpectrum (); for (var i = this.panelNodes.size (); --i >= 0; ) { var node = this.panelNodes.get (i); if (node.source !== this.currentSource) continue; if (JSV.common.Spectrum.areXScalesCompatible (spec, node.getSpectrum (), false, false)) node.pd ().setZoom (0, y1, 0, y2); } } else { this.pd ().setZoom (0, y1, 0, y2); }}, "~S"); Clazz.defineMethod (c$, "setOverlayLegendVisibility", function (tftoggle, doSet) { if (doSet) this.overlayLegendVisible = (tftoggle == null ? !this.overlayLegendVisible : tftoggle === Boolean.TRUE); var node = JSV.common.PanelNode.findNode (this.selectedPanel, this.panelNodes); for (var i = this.panelNodes.size (); --i >= 0; ) this.showOverlayLegend (this.panelNodes.get (i), this.panelNodes.get (i) === node && this.overlayLegendVisible); }, "Boolean,~B"); Clazz.defineMethod (c$, "showOverlayLegend", function (node, visible) { var legend = node.legend; if (legend == null && visible) { legend = node.setLegend (node.pd ().getNumberOfSpectraInCurrentSet () > 1 && node.pd ().getNumberOfGraphSets () == 1 ? this.getDialog (JSV.common.Annotation.AType.OverlayLegend, null) : null); }if (legend != null) legend.setVisible (visible); }, "JSV.common.PanelNode,~B"); Clazz.defineMethod (c$, "syncScript", function (peakScript) { if (peakScript.equals ("TEST")) peakScript = JSV.common.JSViewer.testScript; JU.Logger.info ("JSViewer.syncScript Jmol>JSV " + peakScript); if (peakScript.indexOf ("= 0) this.syncPeaksAfterSyncScript (); return; }JU.Logger.info (">>toJSV>> " + peakScript); var sourceID = JU.PT.getQuotedAttribute (peakScript, "sourceID"); var type; var model; var file; var jmolSource; var index; var atomKey; if (sourceID == null) { file = JU.PT.getQuotedAttribute (peakScript, "file"); index = JU.PT.getQuotedAttribute (peakScript, "index"); if (file == null || index == null) return; file = JU.PT.rep (file, "#molfile", ""); model = JU.PT.getQuotedAttribute (peakScript, "model"); jmolSource = JU.PT.getQuotedAttribute (peakScript, "src"); var modelSent = (jmolSource != null && jmolSource.startsWith ("Jmol") ? null : this.returnFromJmolModel); if (model != null && modelSent != null && !model.equals (modelSent)) { JU.Logger.info ("JSV ignoring model " + model + "; should be " + modelSent); return; }this.returnFromJmolModel = null; if (this.panelNodes.size () == 0 || !this.checkFileAlreadyLoaded (file)) { JU.Logger.info ("file " + file + " not found -- JSViewer closing all and reopening"); this.si.siSyncLoad (file); }type = JU.PT.getQuotedAttribute (peakScript, "type"); atomKey = null; } else { file = null; index = model = sourceID; atomKey = "," + JU.PT.getQuotedAttribute (peakScript, "atom") + ","; type = "ID"; jmolSource = sourceID; }var pi = this.selectPanelByPeak (file, index, atomKey); var pd = this.pd (); pd.selectSpectrum (file, type, model, true); this.si.siSendPanelChange (); pd.addPeakHighlight (pi); this.repaint (true); if (jmolSource == null || (pi != null && pi.getAtoms () != null)) this.si.syncToJmol (this.jmolSelect (pi)); }, "~S"); Clazz.defineMethod (c$, "syncPeaksAfterSyncScript", function () { var source = this.currentSource; if (source == null) return; try { var file = "file=" + JU.PT.esc (source.getFilePath ()); var peaks = source.getSpectra ().get (0).getPeakList (); var sb = new JU.SB (); sb.append ("["); var n = peaks.size (); for (var i = 0; i < n; i++) { var s = peaks.get (i).toString (); s = s + " " + file; sb.append (JU.PT.esc (s)); if (i > 0) sb.append (","); } sb.append ("]"); this.si.syncToJmol ("Peaks: " + sb); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } }); Clazz.defineMethod (c$, "checkFileAlreadyLoaded", function (fileName) { if (this.isClosed ()) return false; if (this.pd ().hasFileLoaded (fileName)) return true; for (var i = this.panelNodes.size (); --i >= 0; ) if (this.panelNodes.get (i).pd ().hasFileLoaded (fileName)) { this.si.siSetSelectedPanel (this.panelNodes.get (i).jsvp); return true; } return false; }, "~S"); Clazz.defineMethod (c$, "selectPanelByPeak", function (file, index, atomKey) { if (this.panelNodes == null) return null; var pi = null; for (var i = this.panelNodes.size (); --i >= 0; ) this.panelNodes.get (i).pd ().addPeakHighlight (null); pi = this.pd ().selectPeakByFileIndex (file, index, atomKey); if (pi != null) { this.setNode (JSV.common.PanelNode.findNode (this.selectedPanel, this.panelNodes)); } else { for (var i = this.panelNodes.size (); --i >= 0; ) { var node = this.panelNodes.get (i); if ((pi = node.pd ().selectPeakByFileIndex (file, index, atomKey)) != null) { this.setNode (node); break; }} }return pi; }, "~S,~S,~S"); Clazz.defineMethod (c$, "processPeakPickEvent", function (eventObj, isApp) { var pi; if (Clazz.instanceOf (eventObj, JSV.common.PeakInfo)) { pi = eventObj; var pi2 = this.pd ().findMatchingPeakInfo (pi); if (pi2 == null) { if (!"ALL".equals (pi.getTitle ())) return; var node = null; for (var i = 0; i < this.panelNodes.size (); i++) if ((pi2 = this.panelNodes.get (i).pd ().findMatchingPeakInfo (pi)) != null) { node = this.panelNodes.get (i); break; } if (node == null) return; this.setNode (node); }pi = pi2; } else { var e = (eventObj); this.si.siSetSelectedPanel (e.getSource ()); pi = e.getPeakInfo (); }this.pd ().addPeakHighlight (pi); this.syncToJmol (pi); if (pi.isClearAll ()) this.repaint (false); else this.pd ().selectSpectrum (pi.getFilePath (), pi.getType (), pi.getModel (), true); this.si.siCheckCallbacks (pi.getTitle ()); }, "~O,~B"); Clazz.defineMethod (c$, "newStructToJmol", function (data) { JU.Logger.info ("sending new structure to Jmol:\n" + data); this.si.syncToJmol ("struct:" + data); }, "~S"); Clazz.defineMethod (c$, "syncToJmol", function (pi) { this.repaint (true); this.returnFromJmolModel = pi.getModel (); this.si.syncToJmol (this.jmolSelect (pi)); }, "JSV.common.PeakInfo"); Clazz.defineMethod (c$, "sendPanelChange", function () { var pd = this.pd (); var spec = pd.getSpectrum (); var pi = spec.getSelectedPeak (); if (pi == null) pi = spec.getModelPeakInfoForAutoSelectOnLoad (); if (pi == null) pi = spec.getBasePeakInfo (); pd.addPeakHighlight (pi); JU.Logger.info (Thread.currentThread () + "JSViewer sendFrameChange " + this.selectedPanel); this.syncToJmol (pi); }); Clazz.defineMethod (c$, "jmolSelect", function (pi) { var script = ("IR".equals (pi.getType ()) || "RAMAN".equals (pi.getType ()) ? "vibration ON; selectionHalos OFF;" : "vibration OFF; selectionhalos " + (pi.getAtoms () == null ? "OFF" : "ON")); return "Select: " + pi + " script=\"" + script + " \" sourceID=\"" + this.pd ().getSpectrum ().sourceID + "\""; }, "JSV.common.PeakInfo"); Clazz.defineMethod (c$, "getPropertyAsJavaObject", function (key) { var map = new java.util.Hashtable (); if ("SOURCEID".equalsIgnoreCase (key)) { map.put (key, (this.pd () == null ? "" : this.pd ().getSpectrum ().sourceID)); return map; }if (key != null && key.startsWith ("DATA_")) { map.put (key, "" + JSV.common.JSVFileManager.cacheGet (key.substring (5))); return map; }var isAll = false; if (key != null && key.toUpperCase ().startsWith ("ALL ") || "all".equalsIgnoreCase (key)) { key = key.substring (3).trim (); isAll = true; }if ("".equals (key)) key = null; if ("NAMES".equalsIgnoreCase (key) || "KEYS".equalsIgnoreCase (key)) key = ""; var map0 = this.pd ().getInfo (true, key); if (!isAll && map0 != null) return map0; if (map0 != null) map.put ("current", map0); var info = new JU.Lst (); for (var i = 0; i < this.panelNodes.size (); i++) { var jsvp = this.panelNodes.get (i).jsvp; if (jsvp == null) continue; info.addLast (this.panelNodes.get (i).getInfo (key)); } map.put ("items", info); return map; }, "~S"); Clazz.defineMethod (c$, "getCoordinate", function () { if (!this.isClosed ()) { var coord = this.pd ().getClickedCoordinate (); if (coord != null) return coord.getXVal () + " " + coord.getYVal (); }return ""; }); Clazz.defineMethod (c$, "fillSpecList", function (value, speclist, isView) { var prefix = "1."; var list; var list0 = null; var isNone = (value.equalsIgnoreCase ("NONE")); if (isNone || value.equalsIgnoreCase ("all")) value = "*"; if (value.indexOf ("*") < 0) { var tokens = value.$plit (" "); var sb = new JU.SB (); for (var i = 0; i < tokens.length; i++) { var pt = tokens[i].indexOf ('.'); if (pt != tokens[i].lastIndexOf ('.')) tokens[i] = tokens[i].substring (0, pt + 1) + tokens[i].substring (pt + 1).$replace ('.', '_'); sb.append (tokens[i]).append (" "); } value = sb.toString ().trim (); }if (value.equals ("*")) { list = JSV.common.ScriptToken.getTokens (JSV.common.PanelNode.getSpectrumListAsString (this.panelNodes)); } else if (value.startsWith ("\"") || value.startsWith ("'")) { list = JSV.common.ScriptToken.getTokens (value); } else { value = JU.PT.rep (value, "_", " _ "); value = JU.PT.rep (value, "-", " - "); list = JSV.common.ScriptToken.getTokens (value); list0 = JSV.common.ScriptToken.getTokens (JSV.common.PanelNode.getSpectrumListAsString (this.panelNodes)); if (list0.size () == 0) return null; }var id0 = (this.isClosed () ? prefix : JSV.common.PanelNode.findNode (this.selectedPanel, this.panelNodes).id); id0 = id0.substring (0, id0.indexOf (".") + 1); var sb = new JU.SB (); var n = list.size (); var idLast = null; for (var i = 0; i < n; i++) { var id = list.get (i); var userYFactor = NaN; var isubspec = -1; if (i + 1 < n && list.get (i + 1).equals ("*")) { i += 2; userYFactor = Double.parseDouble (list.get (i)); } else if (i + 1 < n && list.get (i + 1).equals ("_")) { i += 2; isubspec = Integer.parseInt (list.get (i)); }if (id.equals ("-")) { if (idLast == null) idLast = list0.get (0); id = (i + 1 == n ? list0.get (list0.size () - 1) : list.get (++i)); if (!id.contains (".")) id = id0 + id; var pt = 0; while (pt < list0.size () && !list0.get (pt).equals (idLast)) pt++; pt++; while (pt < list0.size () && !idLast.equals (id)) { var node = JSV.common.PanelNode.findNodeById ((idLast = list0.get (pt++)), this.panelNodes); speclist.addLast (node.pd ().getSpectrumAt (0)); sb.append (",").append (idLast); } continue; }var node; if (id.startsWith ("'") && id.endsWith ("'")) id = "\"" + JU.PT.trim (id, "'") + "\""; if (id.startsWith ("\"")) { id = JU.PT.trim (id, "\""); var pn = this.panelNodes.size (); for (var j = 0; j < pn; j++) { node = this.panelNodes.get (j); if (node.fileName != null && node.fileName.startsWith (id) || node.frameTitle != null && node.frameTitle.startsWith (id)) { this.addSpecToList (node.pd (), userYFactor, -1, speclist, isView); sb.append (",").append (node.id); }} continue; }if (!id.contains (".")) id = id0 + id; node = JSV.common.PanelNode.findNodeById (id, this.panelNodes); if (node == null) continue; idLast = id; this.addSpecToList (node.pd (), userYFactor, isubspec, speclist, isView); sb.append (",").append (id); if (isubspec > 0) sb.append (".").appendI (isubspec); } if (isView && speclist.size () > 0) { var node = JSV.common.PanelNode.findNodeById (sb.substring (1), this.panelNodes); if (node != null) { this.setNode (node); speclist.clear (); }}return (isNone ? "NONE" : sb.length () > 0 ? sb.toString ().substring (1) : null); }, "~S,JU.Lst,~B"); Clazz.defineMethod (c$, "addSpecToList", function (pd, userYFactor, isubspec, list, isView) { if (isView) { var spec = pd.getSpectrumAt (0); spec.setUserYFactor (Double.isNaN (userYFactor) ? 1 : userYFactor); pd.addToList (isubspec - 1, list); } else { pd.selectFromEntireSet (isubspec - 1); }}, "JSV.common.PanelData,~N,~N,JU.Lst,~B"); Clazz.defineMethod (c$, "getSolutionColor", function (asFitted) { var spectrum = this.pd ().getSpectrum (); var vi = (spectrum.canShowSolutionColor () ? JSV.common.JSViewer.getInterface ("JSV.common.Visible") : null); return (vi == null ? -1 : vi.getColour (spectrum, asFitted)); }, "~B"); Clazz.defineMethod (c$, "openDataOrFile", function (data, name, specs, strUrl, firstSpec, lastSpec, isAppend, id) { if ("NONE".equals (name)) { this.close ("View*"); return 0; }this.si.writeStatus (""); var filePath = null; var newPath = null; var fileName = null; var isView = false; if (strUrl != null && strUrl.startsWith ("cache://")) { { data = Jmol.Cache.get(name = strUrl); }}if (data != null) { try { fileName = name; newPath = filePath = JSV.common.JSVFileManager.getFullPathName (name); } catch (e) { if (Clazz.exceptionOf (e, JSV.exception.JSVException)) { } else { throw e; } } } else if (specs != null) { isView = true; newPath = fileName = filePath = "View" + (++this.nViews); } else if (strUrl != null) { try { var u = new java.net.URL (JSV.common.JSVFileManager.appletDocumentBase, strUrl, null); filePath = u.toString (); this.recentURL = filePath; fileName = JSV.common.JSVFileManager.getTagName (filePath); } catch (e) { if (Clazz.exceptionOf (e, java.net.MalformedURLException)) { var file = this.apiPlatform.newFile (strUrl); fileName = file.getName (); newPath = filePath = file.getFullPath (); this.recentURL = null; } else { throw e; } } }var pt = -1; if ((pt = JSV.common.PanelNode.isOpen (this.panelNodes, filePath)) >= 0 || (pt = JSV.common.PanelNode.isOpen (this.panelNodes, strUrl)) >= 0) { if (isView) { --this.nViews; this.setNode (this.panelNodes.get (pt)); } else { this.si.writeStatus (filePath + " is already open"); }return -1; }if (!isAppend && !isView) this.close ("all"); this.si.setCursor (3); try { this.si.siSetCurrentSource (isView ? JSV.source.JDXSource.createView (specs) : JSV.source.JDXReader.createJDXSource (JSV.common.JSVFileManager.getBufferedReaderForData (data), filePath, this.obscureTitleFromUser === Boolean.TRUE, this.loadImaginary, firstSpec, lastSpec, this.nmrMaxY)); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { { alert(e.toString()) }this.si.setCursor (0); if (this.isApplet) { this.selectedPanel.showMessage (e.toString (), "Error Opening File"); }return -3; } else { throw e; } } this.si.setCursor (0); System.gc (); if (newPath == null) { newPath = this.currentSource.getFilePath (); if (newPath != null) fileName = newPath.substring (newPath.lastIndexOf ("/") + 1); } else { this.currentSource.setFilePath (newPath); }if (id == null && !isView) id = newPath; if (id != null) this.currentSource.setID (id); this.si.siSetLoaded (fileName, newPath); var spec = this.currentSource.getJDXSpectrum (0); if (spec == null) { return -4; }specs = this.currentSource.getSpectra (); JSV.common.Spectrum.process (specs, this.irMode); var autoOverlay = this.interfaceOverlaid || spec.isAutoOverlayFromJmolClick (); var combine = isView || autoOverlay && this.currentSource.isCompoundSource; if (combine) { this.combineSpectra ((isView ? strUrl : null)); } else { this.splitSpectra (); }this.pd ().setTaintedAll (); if (!isView) this.si.siUpdateRecentMenus (filePath); return 0; }, "~O,~S,JU.Lst,~S,~N,~N,~B,~S"); Clazz.defineMethod (c$, "close", function (value) { var n0 = 0; var pt = (value == null ? -2 : value.indexOf (">")); if (pt > 0) { n0 = JU.PT.parseInt (value.substring (pt + 1).trim ()); value = value.substring (0, pt).trim (); }if ("*".equals (value)) value = "all"; var isAll = (value === "all"); if (value == null || n0 == 0 && value.equalsIgnoreCase ("all")) { this.closeSource (null); return; }var isViews = value.equalsIgnoreCase ("views"); var list = new JU.Lst (); var source; value = value.$replace ('\\', '/'); var n = this.panelNodes.size (); var nMax = n - n0; if (value.endsWith ("*")) { value = value.substring (0, value.length - 1); for (var i = n; --i >= 0; ) if (this.panelNodes.get (i).fileName.startsWith (value)) list.addLast (this.panelNodes.get (i).source); } else if (value.equalsIgnoreCase ("selected")) { var lastSource = null; for (var i = n; --i >= 0; ) { source = this.panelNodes.get (i).source; if (this.panelNodes.get (i).isSelected && (lastSource == null || lastSource !== source)) list.addLast (source); lastSource = source; } } else if (isAll || isViews || value.equalsIgnoreCase ("simulations")) { for (var n1 = 0, i = n; --i >= 0 && n1 < nMax; ) if (isAll ? true : isViews ? this.panelNodes.get (i).isView : this.panelNodes.get (i).isSimulation) { list.addLast (this.panelNodes.get (i).source); n1++; } } else { source = (value.length == 0 ? this.currentSource : JSV.common.PanelNode.findSourceByNameOrId (value, this.panelNodes)); if (source != null) list.addLast (source); }for (var i = list.size (); --i >= 0; ) this.closeSource (list.get (i)); if (this.selectedPanel == null && this.panelNodes.size () > 0) this.si.siSetSelectedPanel (JSV.common.PanelNode.getLastFileFirstNode (this.panelNodes)); }, "~S"); Clazz.defineMethod (c$, "execLoad", function (value, script) { var applet = this.html5Applet; var tokens = JSV.common.ScriptToken.getTokens (value); var filename = tokens.get (0); var id = null; var pt = 0; if (filename.equalsIgnoreCase ("ID")) { id = JU.PT.trimQuotes (tokens.get (1)); filename = tokens.get (2); pt = 2; }var isAppend = filename.equalsIgnoreCase ("APPEND"); var isCheck = filename.equalsIgnoreCase ("CHECK"); if (isAppend || isCheck) pt++; if (pt > 0) filename = tokens.get (pt); if (script == null) script = this.defaultLoadScript; if (filename.equals ("?")) { this.openFileFromDialog (isAppend, false, null, script); return; }if (filename.equals ("http://?")) { this.openFileFromDialog (isAppend, true, null, null); return; }if (filename.equals ("$?") || filename.equals ("$H1?")) { this.openFileFromDialog (isAppend, true, "H1", null); return; }if (filename.equals ("$C13?")) { this.openFileFromDialog (isAppend, true, "C13", null); return; }var isH1 = filename.equalsIgnoreCase ("MOL") || filename.equalsIgnoreCase ("H1"); var isC13 = filename.equalsIgnoreCase ("C13"); if (isH1 || isC13) filename = "http://SIMULATION/" + (isH1 ? "H1/" : "C13/") + "MOL=" + JU.PT.trimQuotes (tokens.get (++pt)); if (!isCheck && !isAppend) { if (filename.equals ("\"\"") && this.currentSource != null) filename = this.currentSource.getFilePath (); this.close ("all"); }filename = JU.PT.trimQuotes (filename); var isSimulation = filename.startsWith ("$"); if (isSimulation) { if (!filename.startsWith ("$H1") && !filename.startsWith ("$C13")) filename = "$H1/" + filename.substring (1); filename = "http://SIMULATION/" + filename.substring (1); }var firstSpec = (pt + 1 < tokens.size () ? Integer.$valueOf (tokens.get (++pt)).intValue () : -1); var lastSpec = (pt + 1 < tokens.size () ? Integer.$valueOf (tokens.get (++pt)).intValue () : firstSpec); this.si.siOpenDataOrFile (null, null, null, filename, firstSpec, lastSpec, isAppend, script, id); if (isSimulation) { this.close ("views"); this.execView ("*", true); }}, "~S,~S"); Clazz.defineMethod (c$, "combineSpectra", function (name) { var source = this.currentSource; var specs = source.getSpectra (); var haveSimulation = false; for (var i = specs.size (); --i >= 0; ) if (specs.get (i).isSimulation) { haveSimulation = true; break; } var jsvp = this.si.siGetNewJSVPanel2 (specs); jsvp.setTitle (source.getTitle ()); if (jsvp.getTitle ().equals ("")) { jsvp.getPanelData ().setViewTitle (source.getFilePath ()); jsvp.setTitle (name); }this.si.siSetPropertiesFromPreferences (jsvp, true); this.spectraTree.createTree (++this.fileCount, source, Clazz.newArray (-1, [jsvp])).getPanelNode ().isView = true; var node = JSV.common.PanelNode.findNode (this.selectedPanel, this.panelNodes); node.setFrameTitle (name); node.isView = true; if (this.autoShowLegend && this.pd ().getNumberOfGraphSets () == 1) node.setLegend (this.getDialog (JSV.common.Annotation.AType.OverlayLegend, null)); this.si.siSetMenuEnables (node, false); if (haveSimulation) this.pd ().splitStack (true); }, "~S"); Clazz.defineMethod (c$, "closeSource", function (source) { var rootNode = this.spectraTree.getRootNode (); var fileName = (source == null ? null : source.getFilePath ()); var toDelete = new JU.Lst (); var enume = rootNode.children (); while (enume.hasMoreElements ()) { var node = enume.nextElement (); if (fileName == null || node.getPanelNode ().source.matchesFilePath (fileName)) { JU.Logger.info ("Closing " + node.getPanelNode ().source.getFilePath ()); for (var e = node.children (); e.hasMoreElements (); ) { var childNode = e.nextElement (); toDelete.addLast (childNode); this.panelNodes.removeObj (childNode.getPanelNode ()); } toDelete.addLast (node); if (fileName != null) break; }} this.spectraTree.deleteNodes (toDelete); if (source == null) { if (this.currentSource != null) this.currentSource.dispose (); this.currentSource = null; if (this.selectedPanel != null) this.selectedPanel.dispose (); } else { }if (this.currentSource === source) { this.si.siSetSelectedPanel (null); this.si.siSetCurrentSource (null); }var max = 0; for (var i = 0; i < this.panelNodes.size (); i++) { var f = JU.PT.parseFloat (this.panelNodes.get (i).id); if (f >= max + 1) max = Clazz.doubleToInt (Math.floor (f)); } this.fileCount = max; System.gc (); if (JU.Logger.debugging) JU.Logger.checkMemory (); this.si.siSourceClosed (source); }, "JSV.source.JDXSource"); Clazz.defineMethod (c$, "setFrameAndTreeNode", function (i) { if (this.panelNodes == null || i < 0 || i >= this.panelNodes.size ()) return; this.setNode (this.panelNodes.get (i)); }, "~N"); Clazz.defineMethod (c$, "selectFrameNode", function (jsvp) { var node = JSV.common.PanelNode.findNode (jsvp, this.panelNodes); if (node == null) return null; this.spectraTree.setPath (this.spectraTree.newTreePath (node.treeNode.getPath ())); this.setOverlayLegendVisibility (null, false); return node; }, "JSV.api.JSVPanel"); Clazz.defineMethod (c$, "setSpectrum", function (value) { if (value.indexOf ('.') >= 0) { var node = JSV.common.PanelNode.findNodeById (value, this.panelNodes); if (node == null) return false; this.setNode (node); } else { var n = JU.PT.parseInt (value); if (n <= 0) { this.checkOverlay (); return false; }this.setFrameAndTreeNode (n - 1); }return true; }, "~S"); Clazz.defineMethod (c$, "splitSpectra", function () { var source = this.currentSource; var specs = source.getSpectra (); var panels = new Array (specs.size ()); var jsvp = null; for (var i = 0; i < specs.size (); i++) { var spec = specs.get (i); jsvp = this.si.siGetNewJSVPanel (spec); this.si.siSetPropertiesFromPreferences (jsvp, true); panels[i] = jsvp; } this.spectraTree.createTree (++this.fileCount, source, panels); this.si.siGetNewJSVPanel (null); var node = JSV.common.PanelNode.findNode (this.selectedPanel, this.panelNodes); this.si.siSetMenuEnables (node, true); }); Clazz.defineMethod (c$, "selectedTreeNode", function (node) { if (node == null) { return; }if (node.isLeaf ()) { this.setNode (node.getPanelNode ()); } else { System.out.println ("not a leaf"); }this.si.siSetCurrentSource (node.getPanelNode ().source); }, "JSV.api.JSVTreeNode"); Clazz.defineMethod (c$, "dispose", function () { this.fileHelper = null; if (this.viewDialog != null) this.viewDialog.dispose (); this.viewDialog = null; if (this.overlayLegendDialog != null) this.overlayLegendDialog.dispose (); this.overlayLegendDialog = null; if (this.jsvpPopupMenu != null) { this.jsvpPopupMenu.jpiDispose (); this.jsvpPopupMenu = null; }if (this.panelNodes != null) for (var i = this.panelNodes.size (); --i >= 0; ) { this.panelNodes.get (i).dispose (); this.panelNodes.removeItemAt (i); } }); Clazz.defineMethod (c$, "runScript", function (script) { if (this.scriptQueue == null) this.si.siProcessCommand (script); else this.scriptQueue.addLast (script); }, "~S"); Clazz.defineMethod (c$, "requestRepaint", function () { if (this.selectedPanel != null) this.repaintManager.refresh (); }); Clazz.defineMethod (c$, "repaintDone", function () { this.repaintManager.repaintDone (); }); Clazz.defineMethod (c$, "checkOverlay", function () { if (this.mainPanel != null) this.markSelectedPanels (this.panelNodes, this.mainPanel.getCurrentPanelIndex ()); this.viewDialog = this.getDialog (JSV.common.Annotation.AType.Views, null); }); Clazz.defineMethod (c$, "markSelectedPanels", function (panelNodes, ip) { for (var i = panelNodes.size (); --i >= 0; ) panelNodes.get (i).isSelected = (ip == i); }, "JU.Lst,~N"); Clazz.defineMethod (c$, "execOverlayOffsetY", function (offset) { if (offset == -2147483648) { if (this.selectedPanel == null) return; var soffset = this.selectedPanel.getInput ("Enter a vertical offset in percent for stacked plots", "Overlay", "" + this.recentStackPercent); var f = JU.PT.parseFloat (soffset); if (Float.isNaN (f)) return; offset = Clazz.floatToInt (f); }this.recentStackPercent = offset; this.parameters.viewOffset = offset; if (this.isClosed ()) this.pd ().setYStackOffsetPercent (offset); }, "~N"); Clazz.defineMethod (c$, "execScriptInline", function (script) { if (script.length > 0) script = script.substring (6).trim (); if (script.length == 0) script = this.selectedPanel.getInput ("Enter a JSpecView script", "Script", this.recentScript); if (script == null) return; this.recentScript = script; this.runScriptNow (script); }, "~S"); Clazz.defineMethod (c$, "setDisplay", function (canvas) { this.apiPlatform.setViewer (this, this.display = canvas); var wh = Clazz.newIntArray (2, 0); this.apiPlatform.getFullScreenDimensions (canvas, wh); this.setScreenDimension (wh[0], wh[1]); }, "~O"); Clazz.defineMethod (c$, "setScreenDimension", function (width, height) { height = Math.min (height, this.maximumSize); width = Math.min (width, this.maximumSize); if (this.dimScreen.width == width && this.dimScreen.height == height) return; this.resizeImage (width, height); }, "~N,~N"); Clazz.defineMethod (c$, "resizeImage", function (width, height) { if (width > 0) { this.dimScreen.width = width; this.dimScreen.height = height; } else { width = (this.dimScreen.width == 0 ? this.dimScreen.width = 500 : this.dimScreen.width); height = (this.dimScreen.height == 0 ? this.dimScreen.height = 500 : this.dimScreen.height); }this.g2d.setWindowParameters (width, height); }, "~N,~N"); Clazz.defineMethod (c$, "updateJS", function () { if (this.selectedPanel != null) this.selectedPanel.paintComponent (this.apiPlatform.getGraphics (null)); }); Clazz.defineMethod (c$, "processMouseEvent", function (id, x, y, modifiers, time) { return (this.selectedPanel != null && this.selectedPanel.processMouseEvent (id, x, y, modifiers, time)); }, "~N,~N,~N,~N,~N"); Clazz.defineMethod (c$, "processTwoPointGesture", function (touches) { if (!this.isClosed ()) this.selectedPanel.processTwoPointGesture (touches); }, "~A"); Clazz.defineMethod (c$, "getApplet", function () { return this.html5Applet; }); Clazz.defineMethod (c$, "openFileAsyncSpecial", function (fileName, flags) { var ans = (this.currentSource == null ? "NO" : this.getDialogManager ().getDialogInput (this, "Do you want to append this file? (Answer NO to replace.)", "Drag/Drop Action", 3, null, null, "YES")); if (ans == null) return; var pre = (ans.toLowerCase ().startsWith ("y") ? "append" : ""); var post = (pre === "" ? "" : "; view *"); this.runScript ("load " + pre + " \"" + fileName + "\"" + post); }, "~S,~N"); Clazz.defineMethod (c$, "getHeight", function () { return this.dimScreen.height; }); Clazz.defineMethod (c$, "getWidth", function () { return this.dimScreen.width; }); Clazz.defineMethod (c$, "getPlatformInterface", function (type) { return JSV.common.JSViewer.getInterface ("JSV." + (this.isJS ? "js2d.Js" : "java.Awt") + type); }, "~S"); Clazz.defineMethod (c$, "getDialogManager", function () { if (this.dialogManager != null) return this.dialogManager; this.dialogManager = this.getPlatformInterface ("DialogManager"); return this.dialogManager.set (this); }); Clazz.defineMethod (c$, "getDialog", function (type, spec) { var root = "JSV.dialog."; switch (type) { case JSV.common.Annotation.AType.Integration: return (JSV.common.JSViewer.getInterface (root + "IntegrationDialog")).setParams ("Integration for " + spec, this, spec); case JSV.common.Annotation.AType.Measurements: return (JSV.common.JSViewer.getInterface (root + "MeasurementsDialog")).setParams ("Measurements for " + spec, this, spec); case JSV.common.Annotation.AType.PeakList: return (JSV.common.JSViewer.getInterface (root + "PeakListDialog")).setParams ("Peak List for " + spec, this, spec); case JSV.common.Annotation.AType.OverlayLegend: return this.overlayLegendDialog = (JSV.common.JSViewer.getInterface (root + "OverlayLegendDialog")).setParams (this.pd ().getViewTitle (), this, null); case JSV.common.Annotation.AType.Views: return this.viewDialog = (JSV.common.JSViewer.getInterface (root + "ViewsDialog")).setParams ("View/Combine/Close Spectra", this, null); default: return null; } }, "JSV.common.Annotation.AType,JSV.common.Spectrum"); Clazz.defineMethod (c$, "show", function (what) { this.getDialogManager (); if (what.equals ("properties")) { this.dialogManager.showProperties (null, this.pd ().getSpectrum ()); } else if (what.equals ("errors")) { this.dialogManager.showSourceErrors (null, this.currentSource); } else if (what.equals ("source")) { if (this.currentSource == null) { if (this.panelNodes.size () > 0) this.dialogManager.showMessageDialog (null, "Please Select a Spectrum", "Select Spectrum", 0); return; }this.dialogManager.showSource (this, this.pd ().getSpectrum ().getFilePath ()); } else if (what.startsWith ("solutioncolorfill")) { if (what.indexOf ("all") >= 0) { for (var i = this.panelNodes.size (); --i >= 0; ) this.panelNodes.get (i).pd ().setSolutionColor (what); } else { this.pd ().setSolutionColor (what); }} else if (what.startsWith ("solutioncolor")) { var msg = this.getSolutionColorStr (what.indexOf ("false") < 0); msg = "background-color:rgb(" + msg + ")'>
Predicted Solution Colour- RGB(" + msg + ")

"; if (this.isJS) { this.dialogManager.showMessage (this, "
", "Predicted Colour"); }}}, "~S"); Clazz.defineMethod (c$, "getDialogPrint", function (isJob) { if (!this.isJS) try { var pl = (this.getPlatformInterface ("PrintDialog")).set (this.offWindowFrame, this.lastPrintLayout, isJob).getPrintLayout (); if (pl != null) this.lastPrintLayout = pl; return pl; } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } return new JSV.common.PrintLayout (this.pd ()); }, "~B"); Clazz.defineMethod (c$, "setIRmode", function (mode) { if (mode.equals ("AtoT")) { this.irMode = JSV.common.Spectrum.IRMode.TO_TRANS; } else if (mode.equals ("TtoA")) { this.irMode = JSV.common.Spectrum.IRMode.TO_ABS; } else { this.irMode = JSV.common.Spectrum.IRMode.getMode (mode); }}, "~S"); Clazz.defineMethod (c$, "getOptionFromDialog", function (items, title, label) { return this.getDialogManager ().getOptionFromDialog (null, items, this.selectedPanel, title, label); }, "~A,~S,~S"); Clazz.defineMethod (c$, "print", function (fileName) { return this.execWrite ("PDF \"" + fileName + "\""); }, "~S"); Clazz.defineMethod (c$, "execWrite", function (value) { if (this.isJS && value == null) value = "PDF"; var msg = (JSV.common.JSViewer.getInterface ("JSV.export.Exporter")).write (this, value == null ? null : JSV.common.ScriptToken.getTokens (value), false); this.si.writeStatus (msg); return msg; }, "~S"); Clazz.defineMethod (c$, "$export", function (type, n) { if (type == null) type = "XY"; var pd = this.pd (); var nMax = pd.getNumberOfSpectraInCurrentSet (); if (n < -1 || n >= nMax) return "Maximum spectrum index (0-based) is " + (nMax - 1) + "."; var spec = (n < 0 ? pd.getSpectrum () : pd.getSpectrumAt (n)); try { return (JSV.common.JSViewer.getInterface ("JSV.export.Exporter")).exportTheSpectrum (this, JSV.common.ExportType.getType (type), null, spec, 0, spec.getXYCoords ().length - 1, null, type.equalsIgnoreCase ("PDF")); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { JU.Logger.error (e.toString ()); return null; } else { throw e; } } }, "~S,~N"); Clazz.overrideMethod (c$, "postByteArray", function (fileName, bytes) { return JSV.common.JSVFileManager.postByteArray (fileName, bytes); }, "~S,~A"); Clazz.defineMethod (c$, "getOutputChannel", function (fileName, isBinary) { var os = null; { while (fileName.startsWith("/")) fileName = fileName.substring(1); }return new JU.OC ().setParams (this, fileName, !isBinary, os); }, "~S,~B"); c$.getInterface = Clazz.defineMethod (c$, "getInterface", function (name) { try { var x = Clazz._4Name (name); return (x == null ? null : x.newInstance ()); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { JU.Logger.error ("Interface.java Error creating instance for " + name + ": \n" + e); return null; } else { throw e; } } }, "~S"); Clazz.defineMethod (c$, "showMessage", function (msg) { if (this.selectedPanel != null && msg != null) this.selectedPanel.showMessage (msg, null); }, "~S"); Clazz.defineMethod (c$, "openFileFromDialog", function (isAppend, isURL, simulationType, script) { var url = null; if (simulationType != null) { url = this.fileHelper.getUrlFromDialog ("Enter the name or identifier of a compound", this.recentSimulation); if (url == null) return; this.recentSimulation = url; url = "$" + simulationType + "/" + url; } else if (isURL) { url = this.fileHelper.getUrlFromDialog ("Enter the URL of a JCAMP-DX File", this.recentURL == null ? this.recentOpenURL : this.recentURL); if (url == null) return; this.recentOpenURL = url; } else { var userData = Clazz.newArray (-1, [Boolean.$valueOf (isAppend), script]); var file = this.fileHelper.showFileOpenDialog (this.mainPanel, userData); if (file != null) url = file.getFullPath (); }if (url != null) this.runScriptNow ("load " + (isAppend ? "APPEND " : "") + "\"" + url + "\"" + (script == null ? "" : ";" + script)); }, "~B,~B,~S,~S"); Clazz.defineMethod (c$, "openFile", function (fileName, closeFirst) { if (closeFirst && this.panelNodes != null) { var source = JSV.common.PanelNode.findSourceByNameOrId (( new java.io.File (fileName)).getAbsolutePath (), this.panelNodes); if (source != null) this.closeSource (source); }this.si.siOpenDataOrFile (null, null, null, fileName, -1, -1, true, this.defaultLoadScript, null); }, "~S,~B"); Clazz.defineMethod (c$, "selectPanel", function (jsvp, panelNodes) { var iPanel = -1; if (panelNodes != null) { for (var i = panelNodes.size (); --i >= 0; ) { var j = panelNodes.get (i).jsvp; if (j === jsvp) { iPanel = i; } else { j.setEnabled (false); j.setFocusable (false); j.getPanelData ().closeAllDialogsExcept (JSV.common.Annotation.AType.NONE); }} this.markSelectedPanels (panelNodes, iPanel); }return iPanel; }, "JSV.api.JSVPanel,JU.Lst"); Clazz.defineMethod (c$, "checkAutoIntegrate", function () { if (this.autoIntegrate) this.pd ().integrateAll (this.parameters); }); Clazz.defineMethod (c$, "parseInitScript", function (params) { if (params == null) params = ""; var allParamTokens = new JSV.common.ScriptTokenizer (params, true); if (JU.Logger.debugging) { JU.Logger.info ("Running in DEBUG mode"); }while (allParamTokens.hasMoreTokens ()) { var token = allParamTokens.nextToken (); var eachParam = new JSV.common.ScriptTokenizer (token, false); var key = eachParam.nextToken (); if (key.equalsIgnoreCase ("SET")) key = eachParam.nextToken (); key = key.toUpperCase (); var st = JSV.common.ScriptToken.getScriptToken (key); var value = JSV.common.ScriptToken.getValue (st, eachParam, token); JU.Logger.info ("KEY-> " + key + " VALUE-> " + value + " : " + st); try { switch (st) { default: this.parameters.set (null, st, value); break; case JSV.common.ScriptToken.UNKNOWN: break; case JSV.common.ScriptToken.APPLETID: this.fullName = this.appletName + "__" + (this.appletName = value) + "__"; var applet = null; { if(typeof Jmol != "undefined") applet = Jmol._applets[value]; }this.html5Applet = applet; break; case JSV.common.ScriptToken.AUTOINTEGRATE: this.autoIntegrate = JSV.common.Parameters.isTrue (value); break; case JSV.common.ScriptToken.COMPOUNDMENUON: this.allowCompoundMenu = Boolean.parseBoolean (value); break; case JSV.common.ScriptToken.APPLETREADYCALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.COORDCALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.LOADFILECALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.PEAKCALLBACKFUNCTIONNAME: case JSV.common.ScriptToken.SYNCCALLBACKFUNCTIONNAME: this.si.siExecSetCallback (st, value); break; case JSV.common.ScriptToken.ENDINDEX: this.initialEndIndex = Integer.parseInt (value); break; case JSV.common.ScriptToken.INTERFACE: this.checkOvelayInterface (value); break; case JSV.common.ScriptToken.IRMODE: this.setIRmode (value); break; case JSV.common.ScriptToken.MENUON: this.allowMenu = Boolean.parseBoolean (value); break; case JSV.common.ScriptToken.OBSCURE: if (this.obscureTitleFromUser == null) this.obscureTitleFromUser = Boolean.$valueOf (value); break; case JSV.common.ScriptToken.STARTINDEX: this.initialStartIndex = Integer.parseInt (value); break; case JSV.common.ScriptToken.SYNCID: this.fullName = this.appletName + "__" + (this.syncID = value) + "__"; break; } } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } } }, "~S"); Clazz.defineMethod (c$, "getSolutionColorStr", function (asFit) { var pt = JU.CU.colorPtFromInt (this.getSolutionColor (asFit), null); return Clazz.floatToInt (pt.x) + "," + Clazz.floatToInt (pt.y) + "," + Clazz.floatToInt (pt.z); }, "~B"); Clazz.defineMethod (c$, "checkCommandLineForTip", function (c, cmd, oneLineOnly) { var isHelp = (c == '\1'); if (!isHelp && c != '\0') { if (c != '\t' && (c == '\n' || c.charCodeAt (0) < 32 || c.charCodeAt (0) > 126)) return null; cmd += (Character.isISOControl (c) ? "" : "" + c); }var tip; if (cmd.indexOf (";") >= 0) cmd = cmd.substring (cmd.lastIndexOf (";") + 1); var ret = null; while (cmd.startsWith (" ")) cmd = cmd.substring (1); if (cmd.length == 0 && !isHelp) { tip = ""; } else { var tokens = JSV.common.ScriptToken.getTokens (cmd); if (tokens.size () == 0 && !isHelp) return ""; var isExact = (cmd.endsWith (" ") || tokens.size () > 1 && oneLineOnly); var list = JSV.common.ScriptToken.getScriptTokenList (tokens.size () == 0 ? null : tokens.get (0), isExact); switch (list.size ()) { case 0: tip = "?"; break; case 1: var st = list.get (0); tip = st.getTip (); try { if (tip.indexOf ("TRUE") >= 0) tip = " (" + this.parameters.getBoolean (st) + ")"; else if (st.name ().indexOf ("COLOR") >= 0) tip = " (" + JU.CU.toRGBHexString (this.parameters.getElementColor (st)) + ")"; else tip = ""; } catch (e) { if (Clazz.exceptionOf (e, Exception)) { return null; } else { throw e; } } if (c == '\t' || isExact || !oneLineOnly) { tip = st.name () + " " + st.getTip () + tip + " " + st.getDescription (); if (c == '\t') ret = st.name () + " "; break; }tip = st.name () + " " + tip; break; default: tip = JSV.common.ScriptToken.getNameList (list); } }if (oneLineOnly) { this.si.writeStatus (tip); } else { ret = tip; }return ret; }, "~S,~S,~B"); Clazz.defineMethod (c$, "checkScript", function (script) { return this.checkCommandLineForTip ('\0', script, false); }, "~S"); Clazz.defineMethod (c$, "execHelp", function (value) { var s = this.checkCommandLineForTip ('\1', value, false); if (s.indexOf (" ") < 0 && s.indexOf (",") > 0) { var tokens = JU.PT.split (s, ","); java.util.Arrays.sort (tokens); s = ""; for (var i = 0; i < tokens.length; i++) { var st = JSV.common.ScriptToken.getScriptToken (tokens[i]); s += tokens[i] + " " + st.getTip () + "\n " + st.getDescription () + "\n\n"; } this.getDialogManager ().showMessage (null, s, "HELP " + value); } else { this.selectedPanel.showMessage (s, "Help " + value); }System.out.println (s); }, "~S"); Clazz.defineMethod (c$, "menuShowPopup", function (popup, x, y, isTainted) { try { (popup).show (isTainted ? this.getApplet () : null, x, y); } catch (e) { if (Clazz.exceptionOf (e, Exception)) { } else { throw e; } } }, "javajs.awt.SC,~N,~N,~B"); Clazz.defineStatics (c$, "sourceLabel", "Original...", "FILE_OPEN_OK", 0, "FILE_OPEN_ALREADY", -1, "FILE_OPEN_ERROR", -3, "FILE_OPEN_NO_DATA", -4, "OVERLAY_DIALOG", -1, "OVERLAY_OFFSET", 99, "PORTRAIT", 1, "PAGE_EXISTS", 0, "NO_SUCH_PAGE", 1, "testScript", " src=\"JPECVIEW\" file=\"http://SIMULATION/$caffeine\"", "NLEVEL_MAX", 100); });