| Clazz.declarePackage ("J.shape"); | |
| Clazz.load (["J.shape.AtomShape", "java.util.Hashtable", "JU.P3"], "J.shape.Labels", ["javajs.awt.Font", "JU.AU", "$.BS", "$.Lst", "$.PT", "J.c.PAL", "JM.LabelToken", "$.Text", "JS.SV", "JU.BSUtil", "$.C", "JV.JC"], function () { | |
| c$ = Clazz.decorateAsClass (function () { | |
| this.strings = null; | |
| this.formats = null; | |
| this.bgcolixes = null; | |
| this.fids = null; | |
| this.offsets = null; | |
| this.atomLabels = null; | |
| this.labelBoxes = null; | |
| this.bsFontSet = null; | |
| this.bsBgColixSet = null; | |
| this.defaultOffset = 0; | |
| this.defaultAlignment = 0; | |
| this.defaultZPos = 0; | |
| this.defaultFontId = 0; | |
| this.defaultColix = 0; | |
| this.defaultBgcolix = 0; | |
| this.defaultPaletteID = 0; | |
| this.defaultPointer = 0; | |
| this.zeroFontId = 0; | |
| this.defaultsOnlyForNone = true; | |
| this.setDefaults = false; | |
| this.isScaled = false; | |
| this.scalePixelsPerMicron = 0; | |
| this.ptTemp = null; | |
| this.pickedAtom = -1; | |
| this.lastPicked = -1; | |
| this.pickedOffset = 0; | |
| this.pickedX = 0; | |
| this.pickedY = 0; | |
| Clazz.instantialize (this, arguments); | |
| }, J.shape, "Labels", J.shape.AtomShape); | |
| Clazz.prepareFields (c$, function () { | |
| this.atomLabels = new java.util.Hashtable (); | |
| this.ptTemp = new JU.P3 (); | |
| }); | |
| Clazz.overrideMethod (c$, "initShape", | |
| function () { | |
| this.defaultFontId = this.zeroFontId = this.vwr.gdata.getFont3DFSS ("SansSerif", "Plain", 13).fid; | |
| this.defaultColix = 0; | |
| this.defaultBgcolix = 0; | |
| this.defaultOffset = JV.JC.LABEL_DEFAULT_OFFSET; | |
| this.defaultAlignment = 4; | |
| this.defaultPointer = 0; | |
| this.defaultZPos = 0; | |
| this.translucentAllowed = false; | |
| }); | |
| Clazz.overrideMethod (c$, "setProperty", | |
| function (propertyName, value, bsSelected) { | |
| this.isActive = true; | |
| if ("setDefaults" === propertyName) { | |
| this.setDefaults = (value).booleanValue (); | |
| return; | |
| }if ("color" === propertyName) { | |
| var pid = J.c.PAL.pidOf (value); | |
| var colix = JU.C.getColixO (value); | |
| if (!this.setDefaults) { | |
| var n = this.checkColixLength (colix, bsSelected.length ()); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < n; i = bsSelected.nextSetBit (i + 1)) this.setLabelColix (i, colix, pid); | |
| }if (this.setDefaults || !this.defaultsOnlyForNone) { | |
| this.defaultColix = colix; | |
| this.defaultPaletteID = pid; | |
| }return; | |
| }if ("scalereference" === propertyName) { | |
| if (this.strings == null) return; | |
| var val = (value).floatValue (); | |
| var scalePixelsPerMicron = (val == 0 ? 0 : 10000 / val); | |
| var n = Math.min (this.ac, this.strings.length); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < n; i = bsSelected.nextSetBit (i + 1)) { | |
| var text = this.getLabel (i); | |
| if (text == null) { | |
| text = JM.Text.newLabel (this.vwr, null, this.strings[i], 0, 0, 0, scalePixelsPerMicron); | |
| this.putLabel (i, text); | |
| } else { | |
| text.setScalePixelsPerMicron (scalePixelsPerMicron); | |
| }} | |
| return; | |
| }if ("label" === propertyName) { | |
| var isPicked = (this.isPickingMode () && bsSelected.cardinality () == 1 && bsSelected.nextSetBit (0) == this.lastPicked); | |
| this.setScaling (); | |
| var tokens = null; | |
| var nbs = this.checkStringLength (bsSelected.length ()); | |
| if (this.defaultColix != 0 || this.defaultPaletteID != 0) this.checkColixLength (this.defaultColix, bsSelected.length ()); | |
| if (this.defaultBgcolix != 0) this.checkBgColixLength (this.defaultBgcolix, bsSelected.length ()); | |
| if (Clazz.instanceOf (value, JU.Lst)) { | |
| var list = value; | |
| var n = list.size (); | |
| tokens = Clazz.newArray (-1, [null]); | |
| for (var pt = 0, i = bsSelected.nextSetBit (0); i >= 0 && i < nbs; i = bsSelected.nextSetBit (i + 1)) { | |
| if (pt >= n) { | |
| this.setLabel (J.shape.Labels.nullToken, "", i, !isPicked); | |
| continue; | |
| }tokens[0] = null; | |
| this.setLabel (tokens, JS.SV.sValue (list.get (pt++)), i, !isPicked); | |
| } | |
| } else { | |
| var strLabel = value; | |
| tokens = (strLabel == null || strLabel.length == 0 ? J.shape.Labels.nullToken : Clazz.newArray (-1, [null])); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setLabel (tokens, strLabel, i, !isPicked); | |
| }return; | |
| }if (propertyName.startsWith ("label:")) { | |
| this.setScaling (); | |
| this.checkStringLength (this.ac); | |
| var label = propertyName.substring (6); | |
| if (label.length == 0) label = null; | |
| this.setLabel ( Clazz.newArray (-1, [null]), label, (value).intValue (), false); | |
| return; | |
| }if ("clearBoxes" === propertyName) { | |
| this.labelBoxes = null; | |
| return; | |
| }if ("translucency" === propertyName || "bgtranslucency" === propertyName) { | |
| return; | |
| }if ("bgcolor" === propertyName) { | |
| this.isActive = true; | |
| if (this.bsBgColixSet == null) this.bsBgColixSet = JU.BS.newN (this.ac); | |
| var bgcolix = JU.C.getColixO (value); | |
| if (!this.setDefaults) { | |
| var n = this.checkBgColixLength (bgcolix, bsSelected.length ()); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < n; i = bsSelected.nextSetBit (i + 1)) this.setBgcolix (i, bgcolix); | |
| }if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultBgcolix = bgcolix; | |
| return; | |
| }if (this.bsFontSet == null) this.bsFontSet = JU.BS.newN (this.ac); | |
| if ("fontsize" === propertyName) { | |
| var fontsize = (value).intValue (); | |
| if (fontsize < 0) { | |
| this.fids = null; | |
| return; | |
| }var fid = this.vwr.gdata.getFontFid (fontsize); | |
| if (!this.setDefaults) for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setFont (i, fid); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultFontId = fid; | |
| return; | |
| }if ("font" === propertyName) { | |
| var fid = (value).fid; | |
| if (!this.setDefaults) for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setFont (i, fid); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultFontId = fid; | |
| return; | |
| }if ("offset" === propertyName) { | |
| if (!(Clazz.instanceOf (value, Integer))) { | |
| if (!this.setDefaults) { | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setPymolOffset (i, value); | |
| }return; | |
| }var offset = (value).intValue (); | |
| if (!this.setDefaults) for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setOffsets (i, offset); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultOffset = offset; | |
| return; | |
| }if ("align" === propertyName) { | |
| var type = value; | |
| var hAlignment = (type.equalsIgnoreCase ("right") ? 12 : type.equalsIgnoreCase ("center") ? 8 : 4); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setHorizAlignment (i, hAlignment); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultAlignment = hAlignment; | |
| return; | |
| }if ("pointer" === propertyName) { | |
| var pointer = (value).intValue (); | |
| if (!this.setDefaults) for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setPointer (i, pointer); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultPointer = pointer; | |
| return; | |
| }if ("front" === propertyName) { | |
| var TF = (value).booleanValue (); | |
| if (!this.setDefaults) for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setZPos (i, 32, TF); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultZPos = (TF ? 32 : 0); | |
| return; | |
| }if ("group" === propertyName) { | |
| var TF = (value).booleanValue (); | |
| if (!this.setDefaults) for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) this.setZPos (i, 16, TF); | |
| if (this.setDefaults || !this.defaultsOnlyForNone) this.defaultZPos = (TF ? 16 : 0); | |
| return; | |
| }if ("display" === propertyName || "toggleLabel" === propertyName) { | |
| var mode = ("toggleLabel" === propertyName ? 0 : (value).booleanValue () ? 1 : -1); | |
| if (this.mads == null) this.mads = Clazz.newShortArray (this.ac, 0); | |
| var strLabelPDB = null; | |
| var tokensPDB = null; | |
| var strLabelUNK = null; | |
| var tokensUNK = null; | |
| var strLabel; | |
| var tokens; | |
| var nstr = this.checkStringLength (bsSelected.length ()); | |
| var bgcolix = this.defaultBgcolix; | |
| var nbg = this.checkBgColixLength (bgcolix, bsSelected.length ()); | |
| var thisMad = (mode >= 0 ? 1 : -1); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < this.ac; i = bsSelected.nextSetBit (i + 1)) { | |
| var atom = this.atoms[i]; | |
| if (i < nstr && this.strings[i] != null) { | |
| this.mads[i] = (mode == 1 || mode == 0 && this.mads[i] < 0 ? 1 : -1); | |
| } else { | |
| this.mads[i] = thisMad; | |
| if (atom.getGroup3 (false).equals ("UNK")) { | |
| if (strLabelUNK == null) { | |
| strLabelUNK = this.vwr.getStandardLabelFormat (1); | |
| tokensUNK = JM.LabelToken.compile (this.vwr, strLabelUNK, '\0', null); | |
| }strLabel = strLabelUNK; | |
| tokens = tokensUNK; | |
| } else { | |
| if (strLabelPDB == null) { | |
| strLabelPDB = this.vwr.getStandardLabelFormat (2); | |
| tokensPDB = JM.LabelToken.compile (this.vwr, strLabelPDB, '\0', null); | |
| }strLabel = strLabelPDB; | |
| tokens = tokensPDB; | |
| }this.strings[i] = JM.LabelToken.formatLabelAtomArray (this.vwr, atom, tokens, '\0', null, this.ptTemp); | |
| this.formats[i] = strLabel; | |
| this.bsSizeSet.set (i); | |
| if (i < nbg && !this.bsBgColixSet.get (i)) this.setBgcolix (i, this.defaultBgcolix); | |
| }atom.setShapeVisibility (this.vf, this.strings != null && i < this.strings.length && this.strings[i] != null && this.mads[i] >= 0); | |
| } | |
| return; | |
| }if ("pymolLabels" === propertyName) { | |
| this.setPymolLabels (value, bsSelected); | |
| return; | |
| }if (propertyName === "deleteModelAtoms") { | |
| this.labelBoxes = null; | |
| var firstAtomDeleted = ((value)[2])[1]; | |
| var nAtomsDeleted = ((value)[2])[2]; | |
| this.fids = JU.AU.deleteElements (this.fids, firstAtomDeleted, nAtomsDeleted); | |
| this.bgcolixes = JU.AU.deleteElements (this.bgcolixes, firstAtomDeleted, nAtomsDeleted); | |
| this.offsets = JU.AU.deleteElements (this.offsets, firstAtomDeleted, nAtomsDeleted); | |
| this.formats = JU.AU.deleteElements (this.formats, firstAtomDeleted, nAtomsDeleted); | |
| this.strings = JU.AU.deleteElements (this.strings, firstAtomDeleted, nAtomsDeleted); | |
| JU.BSUtil.deleteBits (this.bsFontSet, bsSelected); | |
| JU.BSUtil.deleteBits (this.bsBgColixSet, bsSelected); | |
| }this.setPropAS (propertyName, value, bsSelected); | |
| }, "~S,~O,JU.BS"); | |
| Clazz.defineMethod (c$, "isPickingMode", | |
| function () { | |
| return (this.vwr.getPickingMode () == 2 && this.labelBoxes != null); | |
| }); | |
| Clazz.defineMethod (c$, "checkStringLength", | |
| function (n) { | |
| n = Math.min (this.ac, n); | |
| if (this.strings == null || n > this.strings.length) { | |
| this.formats = JU.AU.ensureLengthS (this.formats, n); | |
| this.strings = JU.AU.ensureLengthS (this.strings, n); | |
| if (this.bsSizeSet == null) this.bsSizeSet = JU.BS.newN (n); | |
| }return n; | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "checkBgColixLength", | |
| function (colix, n) { | |
| n = Math.min (this.ac, n); | |
| if (colix == 0) return (this.bgcolixes == null ? 0 : this.bgcolixes.length); | |
| if (this.bgcolixes == null || n > this.bgcolixes.length) this.bgcolixes = JU.AU.ensureLengthShort (this.bgcolixes, n); | |
| return n; | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "setPymolLabels", | |
| function (labels, bsSelected) { | |
| this.setScaling (); | |
| var n = this.checkStringLength (this.ac); | |
| this.checkColixLength (-1, n); | |
| for (var i = bsSelected.nextSetBit (0); i >= 0 && i < n; i = bsSelected.nextSetBit (i + 1)) this.setPymolLabel (i, labels.get (Integer.$valueOf (i)), null); | |
| }, "java.util.Map,JU.BS"); | |
| Clazz.defineMethod (c$, "setPymolOffset", | |
| function (i, value) { | |
| var text = this.getLabel (i); | |
| if (text == null) { | |
| if (this.strings == null || i >= this.strings.length || this.strings[i] == null) return; | |
| var fid = (this.bsFontSet != null && this.bsFontSet.get (i) ? this.fids[i] : -1); | |
| if (fid < 0) this.setFont (i, fid = this.defaultFontId); | |
| text = JM.Text.newLabel (this.vwr, javajs.awt.Font.getFont3D (fid), this.strings[i], this.getColix2 (i, this.atoms[i], false), this.getColix2 (i, this.atoms[i], true), 0, this.scalePixelsPerMicron); | |
| this.setPymolLabel (i, text, this.formats[i]); | |
| }text.pymolOffset = value; | |
| }, "~N,~A"); | |
| Clazz.defineMethod (c$, "setScaling", | |
| function () { | |
| this.isActive = true; | |
| if (this.bsSizeSet == null) this.bsSizeSet = JU.BS.newN (this.ac); | |
| this.isScaled = this.vwr.getBoolean (603979845); | |
| this.scalePixelsPerMicron = (this.isScaled ? this.vwr.getScalePixelsPerAngstrom (false) * 10000 : 0); | |
| }); | |
| Clazz.defineMethod (c$, "setPymolLabel", | |
| function (i, t, format) { | |
| if (t == null) return; | |
| var label = t.text; | |
| var atom = this.atoms[i]; | |
| this.addString (atom, i, label, format == null ? JU.PT.rep (label, "%", "%%") : format); | |
| atom.setShapeVisibility (this.vf, true); | |
| if (t.colix >= 0) this.setLabelColix (i, t.colix, J.c.PAL.UNKNOWN.id); | |
| this.setFont (i, t.font.fid); | |
| this.putLabel (i, t); | |
| }, "~N,JM.Text,~S"); | |
| Clazz.defineMethod (c$, "setLabel", | |
| function (temp, strLabel, i, doAll) { | |
| var atom = this.atoms[i]; | |
| var tokens = temp[0]; | |
| if (tokens == null) tokens = temp[0] = JM.LabelToken.compile (this.vwr, strLabel, '\0', null); | |
| var label = (tokens == null ? null : JM.LabelToken.formatLabelAtomArray (this.vwr, atom, tokens, '\0', null, this.ptTemp)); | |
| var isNew = this.addString (atom, i, label, strLabel); | |
| doAll = new Boolean (doAll | (isNew || label == null)).valueOf (); | |
| var text = this.getLabel (i); | |
| if (this.isScaled && doAll) { | |
| text = JM.Text.newLabel (this.vwr, null, label, 0, 0, 0, this.scalePixelsPerMicron); | |
| this.putLabel (i, text); | |
| } else if (text != null && label != null) { | |
| text.setText (label); | |
| text.textUnformatted = strLabel; | |
| }if (!doAll) return; | |
| if (this.defaultOffset != JV.JC.LABEL_DEFAULT_OFFSET) this.setOffsets (i, this.defaultOffset); | |
| if (this.defaultAlignment != 4) this.setHorizAlignment (i, this.defaultAlignment); | |
| if ((this.defaultZPos & 32) != 0) this.setZPos (i, 32, true); | |
| else if ((this.defaultZPos & 16) != 0) this.setZPos (i, 16, true); | |
| if (this.defaultPointer != 0) this.setPointer (i, this.defaultPointer); | |
| if (this.defaultColix != 0 || this.defaultPaletteID != 0) this.setLabelColix (i, this.defaultColix, this.defaultPaletteID); | |
| if (this.defaultBgcolix != 0) this.setBgcolix (i, this.defaultBgcolix); | |
| if (this.defaultFontId != this.zeroFontId) this.setFont (i, this.defaultFontId); | |
| }, "~A,~S,~N,~B"); | |
| Clazz.defineMethod (c$, "addString", | |
| function (atom, i, label, strLabel) { | |
| atom.setShapeVisibility (this.vf, label != null); | |
| var notNull = (strLabel != null); | |
| var isNew = (this.strings[i] == null); | |
| this.strings[i] = label; | |
| this.formats[i] = (notNull && strLabel.indexOf ("%{") >= 0 ? label : strLabel); | |
| this.bsSizeSet.setBitTo (i, notNull); | |
| return isNew; | |
| }, "JM.Atom,~N,~S,~S"); | |
| Clazz.overrideMethod (c$, "getProperty", | |
| function (property, index) { | |
| if (property.equals ("offsets")) return this.offsets; | |
| if (property.equals ("label")) return (this.strings != null && index < this.strings.length && this.strings[index] != null ? this.strings[index] : ""); | |
| return null; | |
| }, "~S,~N"); | |
| Clazz.defineMethod (c$, "putLabel", | |
| function (i, text) { | |
| if (text == null) this.atomLabels.remove (Integer.$valueOf (i)); | |
| else { | |
| this.atomLabels.put (Integer.$valueOf (i), text); | |
| text.textUnformatted = this.formats[i]; | |
| }}, "~N,JM.Text"); | |
| Clazz.defineMethod (c$, "getLabel", | |
| function (i) { | |
| return this.atomLabels.get (Integer.$valueOf (i)); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "putBox", | |
| function (i, boxXY) { | |
| if (this.labelBoxes == null) this.labelBoxes = new java.util.Hashtable (); | |
| this.labelBoxes.put (Integer.$valueOf (i), boxXY); | |
| }, "~N,~A"); | |
| Clazz.defineMethod (c$, "getBox", | |
| function (i) { | |
| if (this.labelBoxes == null) return null; | |
| return this.labelBoxes.get (Integer.$valueOf (i)); | |
| }, "~N"); | |
| Clazz.defineMethod (c$, "setLabelColix", | |
| function (i, colix, pid) { | |
| this.setColixAndPalette (colix, pid, i); | |
| var text; | |
| if (this.colixes != null && ((text = this.getLabel (i)) != null)) text.colix = this.colixes[i]; | |
| }, "~N,~N,~N"); | |
| Clazz.defineMethod (c$, "setBgcolix", | |
| function (i, bgcolix) { | |
| this.bgcolixes[i] = bgcolix; | |
| this.bsBgColixSet.setBitTo (i, bgcolix != 0); | |
| var text = this.getLabel (i); | |
| if (text != null) text.bgcolix = bgcolix; | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "setOffsets", | |
| function (i, offset) { | |
| if (this.offsets == null || i >= this.offsets.length) { | |
| if (offset == JV.JC.LABEL_DEFAULT_OFFSET) return; | |
| this.offsets = JU.AU.ensureLengthI (this.offsets, this.ac); | |
| }this.offsets[i] = (this.offsets[i] & 63) | offset; | |
| var text = this.getLabel (i); | |
| if (text != null) text.setOffset (offset); | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "setHorizAlignment", | |
| function (i, hAlign) { | |
| if (this.offsets == null || i >= this.offsets.length) { | |
| switch (hAlign) { | |
| case 0: | |
| case 4: | |
| return; | |
| } | |
| this.offsets = JU.AU.ensureLengthI (this.offsets, this.ac); | |
| }if (hAlign == 0) hAlign = 4; | |
| this.offsets[i] = JV.JC.setHorizAlignment (this.offsets[i], hAlign); | |
| var text = this.getLabel (i); | |
| if (text != null) text.setAlignment (hAlign); | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "setPointer", | |
| function (i, pointer) { | |
| if (this.offsets == null || i >= this.offsets.length) { | |
| if (pointer == 0) return; | |
| this.offsets = JU.AU.ensureLengthI (this.offsets, this.ac); | |
| }this.offsets[i] = JV.JC.setPointer (this.offsets[i], pointer); | |
| var text = this.getLabel (i); | |
| if (text != null) text.pointer = pointer; | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "setZPos", | |
| function (i, flag, TF) { | |
| if (this.offsets == null || i >= this.offsets.length) { | |
| if (!TF) return; | |
| this.offsets = JU.AU.ensureLengthI (this.offsets, this.ac); | |
| }this.offsets[i] = JV.JC.setZPosition (this.offsets[i], TF ? flag : 0); | |
| }, "~N,~N,~B"); | |
| Clazz.defineMethod (c$, "setFont", | |
| function (i, fid) { | |
| if (this.fids == null || i >= this.fids.length) { | |
| if (fid == this.zeroFontId) return; | |
| this.fids = JU.AU.ensureLengthByte (this.fids, this.ac); | |
| }this.fids[i] = fid; | |
| this.bsFontSet.set (i); | |
| var text = this.getLabel (i); | |
| if (text != null) { | |
| text.setFontFromFid (fid); | |
| }}, "~N,~N"); | |
| Clazz.overrideMethod (c$, "setAtomClickability", | |
| function () { | |
| if (this.strings == null) return; | |
| for (var i = this.strings.length; --i >= 0; ) { | |
| var label = this.strings[i]; | |
| if (label != null && this.ms.at.length > i && !this.ms.isAtomHidden (i)) this.ms.at[i].setClickable (this.vf); | |
| } | |
| }); | |
| Clazz.overrideMethod (c$, "checkObjectClicked", | |
| function (x, y, modifiers, bsVisible, drawPicking) { | |
| if (!this.isPickingMode ()) return null; | |
| var iAtom = this.findNearestLabel (x, y); | |
| if (iAtom < 0) return null; | |
| var map = new java.util.Hashtable (); | |
| map.put ("type", "label"); | |
| map.put ("atomIndex", Integer.$valueOf (iAtom)); | |
| this.lastPicked = iAtom; | |
| return map; | |
| }, "~N,~N,~N,JU.BS,~B"); | |
| Clazz.overrideMethod (c$, "checkObjectDragged", | |
| function (prevX, prevY, x, y, dragAction, bsVisible) { | |
| if (!this.isPickingMode ()) return false; | |
| if (prevX == -2147483648) { | |
| var iAtom = this.findNearestLabel (x, y); | |
| if (iAtom >= 0) { | |
| this.pickedAtom = iAtom; | |
| this.lastPicked = this.pickedAtom; | |
| this.vwr.acm.setDragAtomIndex (iAtom); | |
| this.pickedX = x; | |
| this.pickedY = y; | |
| this.pickedOffset = (this.offsets == null || this.pickedAtom >= this.offsets.length ? JV.JC.LABEL_DEFAULT_OFFSET : this.offsets[this.pickedAtom]); | |
| return true; | |
| }return false; | |
| }if (prevX == 2147483647) this.pickedAtom = -1; | |
| if (this.pickedAtom < 0) return false; | |
| this.move2D (this.pickedAtom, x, y); | |
| return true; | |
| }, "~N,~N,~N,~N,~N,JU.BS"); | |
| Clazz.defineMethod (c$, "findNearestLabel", | |
| function (x, y) { | |
| if (this.labelBoxes == null) return -1; | |
| var dmin = 3.4028235E38; | |
| var imin = -1; | |
| var zmin = 3.4028235E38; | |
| var afactor = (this.vwr.antialiased ? 2 : 1); | |
| for (var entry, $entry = this.labelBoxes.entrySet ().iterator (); $entry.hasNext () && ((entry = $entry.next ()) || true);) { | |
| if (!this.atoms[entry.getKey ().intValue ()].isVisible (this.vf | 9)) continue; | |
| var boxXY = entry.getValue (); | |
| var dx = (x - boxXY[0]) * afactor; | |
| var dy = (y - boxXY[1]) * afactor; | |
| if (dx <= 0 || dy <= 0 || dx >= boxXY[2] || dy >= boxXY[3] || boxXY[4] > zmin) continue; | |
| zmin = boxXY[4]; | |
| var d = Math.min (Math.abs (dx - boxXY[2] / 2), Math.abs (dy - boxXY[3] / 2)); | |
| if (d <= dmin) { | |
| dmin = d; | |
| imin = entry.getKey ().intValue (); | |
| }} | |
| return imin; | |
| }, "~N,~N"); | |
| Clazz.defineMethod (c$, "move2D", | |
| function (pickedAtom, x, y) { | |
| var xOffset = JV.JC.getXOffset (this.pickedOffset); | |
| var yOffset = JV.JC.getYOffset (this.pickedOffset); | |
| xOffset += x - this.pickedX; | |
| yOffset -= y - this.pickedY; | |
| var offset = JV.JC.getOffset (xOffset, yOffset, true); | |
| this.setOffsets (pickedAtom, offset); | |
| }, "~N,~N,~N"); | |
| Clazz.defineMethod (c$, "getColix2", | |
| function (i, atom, isBg) { | |
| var colix; | |
| if (isBg) { | |
| colix = (this.bgcolixes == null || i >= this.bgcolixes.length) ? 0 : this.bgcolixes[i]; | |
| } else { | |
| colix = (this.colixes == null || i >= this.colixes.length) ? 0 : this.colixes[i]; | |
| colix = JU.C.getColixInherited (colix, atom.colixAtom); | |
| if (JU.C.isColixTranslucent (colix)) colix = JU.C.getColixTranslucent3 (colix, false, 0); | |
| }return colix; | |
| }, "~N,JM.Atom,~B"); | |
| c$.nullToken = c$.prototype.nullToken = Clazz.newArray (-1, [null]); | |
| }); | |