Clazz.declarePackage ("J.thread"); Clazz.load (["java.lang.Thread"], "J.thread.JmolThread", ["JU.Logger", "JV.Viewer"], function () { c$ = Clazz.decorateAsClass (function () { this.$name = "JmolThread"; this.vwr = null; this.eval = null; this.sc = null; this.haveReference = false; this.hoverEnabled = false; this.startTime = 0; this.targetTime = 0; this.lastRepaintTime = 0; this.currentTime = 0; this.sleepTime = 0; this.isJS = false; this.stopped = false; this.isReset = false; this.useTimeout = true; this.junk = 0; Clazz.instantialize (this, arguments); }, J.thread, "JmolThread", Thread); Clazz.defineMethod (c$, "setManager", function (manager, vwr, params) { return 0; }, "~O,JV.Viewer,~O"); Clazz.defineMethod (c$, "setViewer", function (vwr, name) { this.setName (name); this.$name = name + "_" + (++J.thread.JmolThread.threadIndex); this.vwr = vwr; this.isJS = vwr.isSingleThreaded; }, "JV.Viewer,~S"); Clazz.defineMethod (c$, "setEval", function (eval) { this.eval = eval; this.sc = this.vwr.getEvalContextAndHoldQueue (eval); if (this.sc != null) this.useTimeout = eval.getAllowJSThreads (); }, "J.api.JmolScriptEvaluator"); Clazz.defineMethod (c$, "resumeEval", function () { if (this.eval == null || !this.isJS && !this.vwr.testAsync || !this.useTimeout) return; this.sc.mustResumeEval = !this.stopped; var eval = this.eval; var sc = this.sc; this.eval = null; this.sc = null; { setTimeout(function() { eval.resumeEval(sc); }, 1); }}); Clazz.defineMethod (c$, "start", function () { if (this.isJS) { this.run (); } else { Clazz.superCall (this, J.thread.JmolThread, "start", []); }}); Clazz.overrideMethod (c$, "run", function () { this.startTime = System.currentTimeMillis (); try { this.run1 (-1); } catch (e$$) { if (Clazz.exceptionOf (e$$, InterruptedException)) { var e = e$$; { if (JU.Logger.debugging && !(Clazz.instanceOf (this, J.thread.HoverWatcherThread))) this.oops (e); } } else if (Clazz.exceptionOf (e$$, Exception)) { var e = e$$; { this.oops (e); } } else { throw e$$; } } }); Clazz.defineMethod (c$, "oops", function (e) { JU.Logger.debug (this.$name + " exception " + e); if (!JV.Viewer.isJS) e.printStackTrace (); this.vwr.queueOnHold = false; }, "Exception"); Clazz.defineMethod (c$, "runSleep", function (millis, runPtr) { if (this.isJS && !this.useTimeout) { return true; }{ var me = this; setTimeout(function(){me.run1(runPtr)}, Math.max(millis, 0)); return false; }}, "~N,~N"); Clazz.defineMethod (c$, "interrupt", function () { this.stopped = true; this.vwr.startHoverWatcher (true); if (!this.isJS) Clazz.superCall (this, J.thread.JmolThread, "interrupt", []); }); Clazz.defineMethod (c$, "checkInterrupted", function (ref) { if (this.haveReference && (ref == null || !ref.$name.equals (this.$name))) return true; { return this.stopped; }}, "J.thread.JmolThread"); Clazz.defineMethod (c$, "reset", function () { this.isReset = true; this.interrupt (); }); Clazz.defineStatics (c$, "threadIndex", 0, "INIT", -1, "MAIN", 0, "FINISH", -2, "CHECK1", 1, "CHECK2", 2, "CHECK3", 3); });