X-Git-Url: http://source.jalview.org/gitweb/?p=jalviewjs.git;a=blobdiff_plain;f=site%2Fj2s%2Fjalview%2Fviewmodel%2Fseqfeatures%2FFeatureRendererModel.js;h=cf808fc3923c3b705c7abf2711f6a1b6744dfe13;hp=4ca0465adee3c638a63aca1ffac9d23127ef01fe;hb=b9b7a352eee79b7764c3b09c9d19663075061d8c;hpb=7301a2415adab88038b291fc54caeeb3a5a47a44 diff --git a/site/j2s/jalview/viewmodel/seqfeatures/FeatureRendererModel.js b/site/j2s/jalview/viewmodel/seqfeatures/FeatureRendererModel.js index 4ca0465..cf808fc 100644 --- a/site/j2s/jalview/viewmodel/seqfeatures/FeatureRendererModel.js +++ b/site/j2s/jalview/viewmodel/seqfeatures/FeatureRendererModel.js @@ -1,481 +1,481 @@ -Clazz.declarePackage ("jalview.viewmodel.seqfeatures"); -Clazz.load (["jalview.api.FeatureRenderer", "java.beans.PropertyChangeSupport", "java.lang.Boolean", "java.util.Hashtable", "java.util.concurrent.ConcurrentHashMap"], "jalview.viewmodel.seqfeatures.FeatureRendererModel", ["jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.QuickSort", "jalview.viewmodel.seqfeatures.FeatureRendererSettings", "$.FeaturesDisplayed", "java.awt.Color", "java.lang.Error", "$.Float", "java.util.ArrayList", "$.Arrays"], function () { -c$ = Clazz.decorateAsClass (function () { -this.transparency = 1.0; -this.featureColours = null; -this.featureGroups = null; -this.currentColour = null; -this.renderOrder = null; -this.changeSupport = null; -this.av = null; -this.minmax = null; -this.newFeatureAdded = false; -this.findingFeatures = false; -this.firing = null; -this.featureOrder = null; -Clazz.instantialize (this, arguments); -}, jalview.viewmodel.seqfeatures, "FeatureRendererModel", null, jalview.api.FeatureRenderer); -Clazz.prepareFields (c$, function () { -this.featureColours = new java.util.concurrent.ConcurrentHashMap (); -this.featureGroups = new java.util.concurrent.ConcurrentHashMap (); -this.changeSupport = new java.beans.PropertyChangeSupport (this); -this.minmax = new java.util.Hashtable (); -this.firing = Boolean.FALSE; -}); -Clazz.overrideMethod (c$, "getViewport", -function () { -return this.av; -}); -Clazz.defineMethod (c$, "getSettings", -function () { -return new jalview.viewmodel.seqfeatures.FeatureRendererSettings (this); -}); -Clazz.defineMethod (c$, "transferSettings", -function (fr) { -this.renderOrder = fr.renderOrder; -this.featureGroups = fr.featureGroups; -this.featureColours = fr.featureColours; -this.transparency = fr.transparency; -this.featureOrder = fr.featureOrder; -}, "jalview.viewmodel.seqfeatures.FeatureRendererSettings"); -Clazz.defineMethod (c$, "transferSettings", -function (_fr) { -var fr = _fr; -var frs = new jalview.viewmodel.seqfeatures.FeatureRendererSettings (fr); -this.renderOrder = frs.renderOrder; -this.featureGroups = frs.featureGroups; -this.featureColours = frs.featureColours; -this.transparency = frs.transparency; -this.featureOrder = frs.featureOrder; -if (this.av != null && this.av !== fr.getViewport ()) { -if (_fr.getFeaturesDisplayed () != null) { -var fd = this.getFeaturesDisplayed (); -if (fd == null) { -this.setFeaturesDisplayedFrom (_fr.getFeaturesDisplayed ()); -} else { -{ -fd.clear (); -var fdisp = _fr.getFeaturesDisplayed ().getVisibleFeatures (); -while (fdisp.hasNext ()) { -fd.setVisible (fdisp.next ()); -} -}}}}}, "jalview.api.FeatureRenderer"); -Clazz.defineMethod (c$, "setFeaturesDisplayedFrom", -function (featuresDisplayed) { -this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed (featuresDisplayed)); -}, "jalview.api.FeaturesDisplayedI"); -Clazz.overrideMethod (c$, "setVisible", -function (featureType) { -var fdi = this.av.getFeaturesDisplayed (); -if (fdi == null) { -this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); -}if (!fdi.isRegistered (featureType)) { -this.pushFeatureType (java.util.Arrays.asList ( Clazz.newArray (-1, [featureType]))); -}fdi.setVisible (featureType); -}, "~S"); -Clazz.overrideMethod (c$, "setAllVisible", -function (featureTypes) { -var fdi = this.av.getFeaturesDisplayed (); -if (fdi == null) { -this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); -}var nft = new java.util.ArrayList (); -for (var featureType, $featureType = featureTypes.iterator (); $featureType.hasNext () && ((featureType = $featureType.next ()) || true);) { -if (!fdi.isRegistered (featureType)) { -nft.add (featureType); -}} -if (nft.size () > 0) { -this.pushFeatureType (nft); -}fdi.setAllVisible (featureTypes); -}, "java.util.List"); -Clazz.defineMethod (c$, "pushFeatureType", - function (types) { -var ts = types.size (); -var neworder = new Array ((this.renderOrder == null ? 0 : this.renderOrder.length) + ts); -types.toArray (neworder); -if (this.renderOrder != null) { -System.arraycopy (neworder, 0, neworder, this.renderOrder.length, ts); -System.arraycopy (this.renderOrder, 0, neworder, 0, this.renderOrder.length); -}this.renderOrder = neworder; -}, "java.util.List"); -Clazz.defineMethod (c$, "getMinMax", -function () { -return this.minmax; -}); -Clazz.defineMethod (c$, "normaliseScore", -function (sequenceFeature) { -var mm = (this.minmax.get (sequenceFeature.type))[0]; -var r = Clazz.newByteArray (-1, [0, 255]); -if (mm != null) { -if (r[0] != 0 || mm[0] < 0.0) { -r[0] = 1; -r[1] = Clazz.doubleToByte (Clazz.doubleToInt (128.0) + 127.0 * (sequenceFeature.score / mm[1])); -} else { -r[1] = Clazz.floatToByte (Clazz.doubleToInt (255.0) * (sequenceFeature.score / mm[1])); -}}return r; -}, "jalview.datamodel.SequenceFeature"); -Clazz.defineMethod (c$, "updateFeatures", -function () { -if (this.av.getFeaturesDisplayed () == null || this.renderOrder == null || this.newFeatureAdded) { -this.findAllFeatures (); -if (this.av.getFeaturesDisplayed ().getVisibleFeatureCount () < 1) { -return false; -}}return true; -}); -Clazz.defineMethod (c$, "findAllFeatures", -function () { -{ -if (this.firing.equals (Boolean.FALSE)) { -this.firing = Boolean.TRUE; -this.findAllFeatures (true); -this.changeSupport.firePropertyChange ("changeSupport", null, null); -this.firing = Boolean.FALSE; -}}}); -Clazz.overrideMethod (c$, "findFeaturesAtRes", -function (sequence, res) { -var tmp = new java.util.ArrayList (); -var features = sequence.getSequenceFeatures (); -if (features != null) { -for (var i = 0; i < features.length; i++) { -if (!this.av.areFeaturesDisplayed () || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) { -continue; -}if (features[i].featureGroup != null && this.featureGroups != null && this.featureGroups.containsKey (features[i].featureGroup) && !this.featureGroups.get (features[i].featureGroup).booleanValue ()) { -continue; -}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) { -tmp.add (features[i]); -}} -}return tmp; -}, "jalview.datamodel.SequenceI,~N"); -Clazz.defineMethod (c$, "findAllFeatures", -function (newMadeVisible) { -this.newFeatureAdded = false; -if (this.findingFeatures) { -this.newFeatureAdded = true; -return; -}this.findingFeatures = true; -if (this.av.getFeaturesDisplayed () == null) { -this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); -}var featuresDisplayed = this.av.getFeaturesDisplayed (); -var allfeatures = new java.util.ArrayList (); -var oldfeatures = new java.util.ArrayList (); -if (this.renderOrder != null) { -for (var i = 0; i < this.renderOrder.length; i++) { -if (this.renderOrder[i] != null) { -oldfeatures.add (this.renderOrder[i]); -}} -}if (this.minmax == null) { -this.minmax = new java.util.Hashtable (); -}var alignment = this.av.getAlignment (); -for (var i = 0; i < alignment.getHeight (); i++) { -var asq = alignment.getSequenceAt (i); -var features = asq.getSequenceFeatures (); -if (features == null) { -continue; -}var index = 0; -while (index < features.length) { -if (!featuresDisplayed.isRegistered (features[index].getType ())) { -var fgrp = features[index].getFeatureGroup (); -if (fgrp != null) { -var groupDisplayed = this.featureGroups.get (fgrp); -if (groupDisplayed == null) { -groupDisplayed = Boolean.$valueOf (newMadeVisible); -this.featureGroups.put (fgrp, groupDisplayed); -}if (!groupDisplayed.booleanValue ()) { -index++; -continue; -}}if (!(features[index].begin == 0 && features[index].end == 0)) { -if (newMadeVisible && !oldfeatures.contains (features[index].getType ())) { -featuresDisplayed.setVisible (features[index].getType ()); -this.setOrder (features[index].getType (), 0); -}}}if (!allfeatures.contains (features[index].getType ())) { -allfeatures.add (features[index].getType ()); -}if (!Float.isNaN (features[index].score)) { -var nonpos = features[index].getBegin () >= 1 ? 0 : 1; -var mm = this.minmax.get (features[index].getType ()); -if (mm == null) { -mm = Clazz.newArray (-1, [null, null]); -this.minmax.put (features[index].getType (), mm); -}if (mm[nonpos] == null) { -mm[nonpos] = Clazz.newFloatArray (-1, [features[index].score, features[index].score]); -} else { -if (mm[nonpos][0] > features[index].score) { -mm[nonpos][0] = features[index].score; -}if (mm[nonpos][1] < features[index].score) { -mm[nonpos][1] = features[index].score; -}}}index++; -} -} -this.updateRenderOrder (allfeatures); -this.findingFeatures = false; -}, "~B"); -Clazz.defineMethod (c$, "updateRenderOrder", - function (allFeatures) { -var allfeatures = new java.util.ArrayList (allFeatures); -var oldRender = this.renderOrder; -this.renderOrder = new Array (allfeatures.size ()); -var mmrange; -var fc = null; -var initOrders = (this.featureOrder == null); -var opos = 0; -if (oldRender != null && oldRender.length > 0) { -for (var j = 0; j < oldRender.length; j++) { -if (oldRender[j] != null) { -if (initOrders) { -this.setOrder (oldRender[j], (1 - (1 + j) / oldRender.length)); -}if (allfeatures.contains (oldRender[j])) { -this.renderOrder[opos++] = oldRender[j]; -allfeatures.remove (oldRender[j]); -if (this.minmax != null) { -mmrange = this.minmax.get (oldRender[j]); -if (mmrange != null) { -fc = this.featureColours.get (oldRender[j]); -if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) { -(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]); -}}}}}} -}if (allfeatures.size () == 0) { -return; -}var i = allfeatures.size () - 1; -var iSize = i; -var sort = false; -var newf = new Array (allfeatures.size ()); -var sortOrder = Clazz.newFloatArray (allfeatures.size (), 0); -for (var newfeat, $newfeat = allfeatures.iterator (); $newfeat.hasNext () && ((newfeat = $newfeat.next ()) || true);) { -newf[i] = newfeat; -if (this.minmax != null) { -mmrange = this.minmax.get (newf[i]); -if (mmrange != null) { -fc = this.featureColours.get (newf[i]); -if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) { -(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]); -}}}if (initOrders || !this.featureOrder.containsKey (newf[i])) { -var denom = initOrders ? allfeatures.size () : this.featureOrder.size (); -this.setOrder (newf[i], i / denom); -}sortOrder[i] = 2 - (this.featureOrder.get (newf[i])).floatValue (); -if (i < iSize) { -sort = sort || sortOrder[i] > sortOrder[i + 1]; -}i--; -} -if (iSize > 1 && sort) { -jalview.util.QuickSort.sortFloatObject (sortOrder, newf); -}sortOrder = null; -System.arraycopy (newf, 0, this.renderOrder, opos, newf.length); -}, "java.util.List"); -Clazz.overrideMethod (c$, "getFeatureStyle", -function (featureType) { -var fc = this.featureColours.get (featureType); -if (fc == null) { -var ucs = new jalview.schemes.UserColourScheme (); -var col = ucs.createColourFromName (featureType); -this.featureColours.put (featureType, fc = col); -}return fc; -}, "~S"); -Clazz.defineMethod (c$, "getColour", -function (featureType) { -var fc = this.getFeatureStyle (featureType); -if (Clazz.instanceOf (fc, java.awt.Color)) { -return fc; -} else { -if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) { -return (fc).getMaxColor (); -}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + featureType); -}, "~S"); -Clazz.defineMethod (c$, "getColour", -function (feature) { -var fc = this.getFeatureStyle (feature.getType ()); -if (Clazz.instanceOf (fc, java.awt.Color)) { -return fc; -} else { -if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) { -return (fc).findColor (feature); -}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + feature.getType ()); -}, "jalview.datamodel.SequenceFeature"); -Clazz.defineMethod (c$, "showFeature", -function (sequenceFeature) { -var fc = this.getFeatureStyle (sequenceFeature.type); -if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) { -return (fc).isColored (sequenceFeature); -} else { -return true; -}}, "jalview.datamodel.SequenceFeature"); -Clazz.defineMethod (c$, "showFeatureOfType", -function (type) { -return this.av.getFeaturesDisplayed ().isVisible (type); -}, "~S"); -Clazz.overrideMethod (c$, "setColour", -function (featureType, col) { -{ -this.featureColours.put (featureType, col); -}}, "~S,~O"); -Clazz.defineMethod (c$, "setTransparency", -function (value) { -this.transparency = value; -}, "~N"); -Clazz.defineMethod (c$, "getTransparency", -function () { -return this.transparency; -}); -Clazz.defineMethod (c$, "setOrder", -function (type, position) { -if (this.featureOrder == null) { -this.featureOrder = new java.util.Hashtable (); -}this.featureOrder.put (type, new Float (position)); -return position; -}, "~S,~N"); -Clazz.defineMethod (c$, "getOrder", -function (type) { -if (this.featureOrder != null) { -if (this.featureOrder.containsKey (type)) { -return (this.featureOrder.get (type)).floatValue (); -}}return -1; -}, "~S"); -Clazz.overrideMethod (c$, "getFeatureColours", -function () { -return new java.util.concurrent.ConcurrentHashMap (this.featureColours); -}); -Clazz.defineMethod (c$, "setFeaturePriority", -function (data) { -this.setFeaturePriority (data, true); -}, "~A"); -Clazz.defineMethod (c$, "setFeaturePriority", -function (data, visibleNew) { -var av_featuresdisplayed = null; -if (visibleNew) { -if ((av_featuresdisplayed = this.av.getFeaturesDisplayed ()) != null) { -this.av.getFeaturesDisplayed ().clear (); -} else { -this.av.setFeaturesDisplayed (av_featuresdisplayed = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); -}} else { -av_featuresdisplayed = this.av.getFeaturesDisplayed (); -}if (data == null) { -return; -}this.renderOrder = new Array (data.length); -if (data.length > 0) { -for (var i = 0; i < data.length; i++) { -var type = data[i][0].toString (); -this.setColour (type, data[i][1]); -if ((data[i][2]).booleanValue ()) { -av_featuresdisplayed.setVisible (type); -}this.renderOrder[data.length - i - 1] = type; -} -}}, "~A,~B"); -Clazz.defineMethod (c$, "addPropertyChangeListener", -function (listener) { -this.changeSupport.addPropertyChangeListener (listener); -}, "java.beans.PropertyChangeListener"); -Clazz.defineMethod (c$, "removePropertyChangeListener", -function (listener) { -this.changeSupport.removePropertyChangeListener (listener); -}, "java.beans.PropertyChangeListener"); -Clazz.defineMethod (c$, "getAllFeatureColours", -function () { -return this.featureColours.keySet (); -}); -Clazz.defineMethod (c$, "clearRenderOrder", -function () { -this.renderOrder = null; -}); -Clazz.defineMethod (c$, "hasRenderOrder", -function () { -return this.renderOrder != null; -}); -Clazz.defineMethod (c$, "getRenderOrder", -function () { -if (this.renderOrder == null) { -return java.util.Arrays.asList ( Clazz.newArray (-1, [])); -}return java.util.Arrays.asList (this.renderOrder); -}); -Clazz.defineMethod (c$, "getFeatureGroupsSize", -function () { -return this.featureGroups != null ? 0 : this.featureGroups.size (); -}); -Clazz.overrideMethod (c$, "getFeatureGroups", -function () { -return (this.featureGroups == null) ? java.util.Arrays.asList ( new Array (0)) : java.util.Arrays.asList (this.featureGroups.keySet ().toArray ( new Array (0))); -}); -Clazz.defineMethod (c$, "checkGroupVisibility", -function (group, newGroupsVisible) { -if (this.featureGroups == null) { -}if (this.featureGroups.containsKey (group)) { -return this.featureGroups.get (group).booleanValue (); -}if (newGroupsVisible) { -this.featureGroups.put (group, new Boolean (true)); -return true; -}return false; -}, "~S,~B"); -Clazz.overrideMethod (c$, "getGroups", -function (visible) { -if (this.featureGroups != null) { -var gp = new java.util.ArrayList (); -for (var grp, $grp = this.featureGroups.keySet ().iterator (); $grp.hasNext () && ((grp = $grp.next ()) || true);) { -var state = this.featureGroups.get (grp); -if (state.booleanValue () == visible) { -gp.add (grp); -}} -return gp; -}return null; -}, "~B"); -Clazz.defineMethod (c$, "setGroupVisibility", -function (group, visible) { -this.featureGroups.put (group, new Boolean (visible)); -}, "~S,~B"); -Clazz.defineMethod (c$, "setGroupVisibility", -function (toset, visible) { -if (toset != null && toset.size () > 0 && this.featureGroups != null) { -var rdrw = false; -for (var gst, $gst = toset.iterator (); $gst.hasNext () && ((gst = $gst.next ()) || true);) { -var st = this.featureGroups.get (gst); -this.featureGroups.put (gst, new Boolean (visible)); -if (st != null) { -rdrw = rdrw || (visible != st.booleanValue ()); -}} -if (rdrw) { -}}}, "java.util.List,~B"); -Clazz.overrideMethod (c$, "getDisplayedFeatureCols", -function () { -var fcols = new java.util.Hashtable (); -if (this.getViewport ().getFeaturesDisplayed () == null) { -return fcols; -}var en = this.getViewport ().getFeaturesDisplayed ().getVisibleFeatures (); -while (en.hasNext ()) { -var col = en.next (); -fcols.put (col, this.getColour (col)); -} -return fcols; -}); -Clazz.defineMethod (c$, "getFeaturesDisplayed", -function () { -return this.av.getFeaturesDisplayed (); -}); -Clazz.overrideMethod (c$, "getDisplayedFeatureTypes", -function () { -var typ = null; -typ = this.getRenderOrder ().toArray ( new Array (0)); -var feature_disp = this.av.getFeaturesDisplayed (); -if (feature_disp != null) { -{ -for (var i = 0; i < typ.length; i++) { -if (!feature_disp.isVisible (typ[i])) { -typ[i] = null; -}} -}}return typ; -}); -Clazz.overrideMethod (c$, "getDisplayedFeatureGroups", -function () { -var gps = null; -var _gps = new java.util.ArrayList (); -var en = this.getFeatureGroups ().iterator (); -var g = 0; -var valid = false; -while (en.hasNext ()) { -var gp = en.next (); -if (this.checkGroupVisibility (gp, false)) { -valid = true; -_gps.add (gp); -}if (!valid) { -return null; -} else { -gps = new Array (_gps.size ()); -_gps.toArray (gps); -}} -return gps; -}); -}); +Clazz.declarePackage ("jalview.viewmodel.seqfeatures"); +Clazz.load (["jalview.api.FeatureRenderer", "java.beans.PropertyChangeSupport", "java.lang.Boolean", "java.util.Hashtable", "java.util.concurrent.ConcurrentHashMap"], "jalview.viewmodel.seqfeatures.FeatureRendererModel", ["jalview.schemes.GraduatedColor", "$.UserColourScheme", "jalview.util.QuickSort", "jalview.viewmodel.seqfeatures.FeatureRendererSettings", "$.FeaturesDisplayed", "java.awt.Color", "java.lang.Error", "$.Float", "java.util.ArrayList", "$.Arrays"], function () { +c$ = Clazz.decorateAsClass (function () { +this.transparency = 1.0; +this.featureColours = null; +this.featureGroups = null; +this.currentColour = null; +this.renderOrder = null; +this.changeSupport = null; +this.av = null; +this.minmax = null; +this.newFeatureAdded = false; +this.findingFeatures = false; +this.firing = null; +this.featureOrder = null; +Clazz.instantialize (this, arguments); +}, jalview.viewmodel.seqfeatures, "FeatureRendererModel", null, jalview.api.FeatureRenderer); +Clazz.prepareFields (c$, function () { +this.featureColours = new java.util.concurrent.ConcurrentHashMap (); +this.featureGroups = new java.util.concurrent.ConcurrentHashMap (); +this.changeSupport = new java.beans.PropertyChangeSupport (this); +this.minmax = new java.util.Hashtable (); +this.firing = Boolean.FALSE; +}); +Clazz.overrideMethod (c$, "getViewport", +function () { +return this.av; +}); +Clazz.defineMethod (c$, "getSettings", +function () { +return new jalview.viewmodel.seqfeatures.FeatureRendererSettings (this); +}); +Clazz.defineMethod (c$, "transferSettings", +function (fr) { +this.renderOrder = fr.renderOrder; +this.featureGroups = fr.featureGroups; +this.featureColours = fr.featureColours; +this.transparency = fr.transparency; +this.featureOrder = fr.featureOrder; +}, "jalview.viewmodel.seqfeatures.FeatureRendererSettings"); +Clazz.defineMethod (c$, "transferSettings", +function (_fr) { +var fr = _fr; +var frs = new jalview.viewmodel.seqfeatures.FeatureRendererSettings (fr); +this.renderOrder = frs.renderOrder; +this.featureGroups = frs.featureGroups; +this.featureColours = frs.featureColours; +this.transparency = frs.transparency; +this.featureOrder = frs.featureOrder; +if (this.av != null && this.av !== fr.getViewport ()) { +if (_fr.getFeaturesDisplayed () != null) { +var fd = this.getFeaturesDisplayed (); +if (fd == null) { +this.setFeaturesDisplayedFrom (_fr.getFeaturesDisplayed ()); +} else { +{ +fd.clear (); +var fdisp = _fr.getFeaturesDisplayed ().getVisibleFeatures (); +while (fdisp.hasNext ()) { +fd.setVisible (fdisp.next ()); +} +}}}}}, "jalview.api.FeatureRenderer"); +Clazz.defineMethod (c$, "setFeaturesDisplayedFrom", +function (featuresDisplayed) { +this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed (featuresDisplayed)); +}, "jalview.api.FeaturesDisplayedI"); +Clazz.overrideMethod (c$, "setVisible", +function (featureType) { +var fdi = this.av.getFeaturesDisplayed (); +if (fdi == null) { +this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); +}if (!fdi.isRegistered (featureType)) { +this.pushFeatureType (java.util.Arrays.asList ( Clazz.newArray (-1, [featureType]))); +}fdi.setVisible (featureType); +}, "~S"); +Clazz.overrideMethod (c$, "setAllVisible", +function (featureTypes) { +var fdi = this.av.getFeaturesDisplayed (); +if (fdi == null) { +this.av.setFeaturesDisplayed (fdi = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); +}var nft = new java.util.ArrayList (); +for (var featureType, $featureType = featureTypes.iterator (); $featureType.hasNext () && ((featureType = $featureType.next ()) || true);) { +if (!fdi.isRegistered (featureType)) { +nft.add (featureType); +}} +if (nft.size () > 0) { +this.pushFeatureType (nft); +}fdi.setAllVisible (featureTypes); +}, "java.util.List"); +Clazz.defineMethod (c$, "pushFeatureType", + function (types) { +var ts = types.size (); +var neworder = new Array ((this.renderOrder == null ? 0 : this.renderOrder.length) + ts); +types.toArray (neworder); +if (this.renderOrder != null) { +System.arraycopy (neworder, 0, neworder, this.renderOrder.length, ts); +System.arraycopy (this.renderOrder, 0, neworder, 0, this.renderOrder.length); +}this.renderOrder = neworder; +}, "java.util.List"); +Clazz.defineMethod (c$, "getMinMax", +function () { +return this.minmax; +}); +Clazz.defineMethod (c$, "normaliseScore", +function (sequenceFeature) { +var mm = (this.minmax.get (sequenceFeature.type))[0]; +var r = Clazz.newByteArray (-1, [0, 255]); +if (mm != null) { +if (r[0] != 0 || mm[0] < 0.0) { +r[0] = 1; +r[1] = Clazz.doubleToByte (Clazz.doubleToInt (128.0) + 127.0 * (sequenceFeature.score / mm[1])); +} else { +r[1] = Clazz.floatToByte (Clazz.doubleToInt (255.0) * (sequenceFeature.score / mm[1])); +}}return r; +}, "jalview.datamodel.SequenceFeature"); +Clazz.defineMethod (c$, "updateFeatures", +function () { +if (this.av.getFeaturesDisplayed () == null || this.renderOrder == null || this.newFeatureAdded) { +this.findAllFeatures (); +if (this.av.getFeaturesDisplayed ().getVisibleFeatureCount () < 1) { +return false; +}}return true; +}); +Clazz.defineMethod (c$, "findAllFeatures", +function () { +{ +if (this.firing.equals (Boolean.FALSE)) { +this.firing = Boolean.TRUE; +this.findAllFeatures (true); +this.changeSupport.firePropertyChange ("changeSupport", null, null); +this.firing = Boolean.FALSE; +}}}); +Clazz.overrideMethod (c$, "findFeaturesAtRes", +function (sequence, res) { +var tmp = new java.util.ArrayList (); +var features = sequence.getSequenceFeatures (); +if (features != null) { +for (var i = 0; i < features.length; i++) { +if (!this.av.areFeaturesDisplayed () || !this.av.getFeaturesDisplayed ().isVisible (features[i].getType ())) { +continue; +}if (features[i].featureGroup != null && this.featureGroups != null && this.featureGroups.containsKey (features[i].featureGroup) && !this.featureGroups.get (features[i].featureGroup).booleanValue ()) { +continue; +}if ((features[i].getBegin () <= res) && (features[i].getEnd () >= res)) { +tmp.add (features[i]); +}} +}return tmp; +}, "jalview.datamodel.SequenceI,~N"); +Clazz.defineMethod (c$, "findAllFeatures", +function (newMadeVisible) { +this.newFeatureAdded = false; +if (this.findingFeatures) { +this.newFeatureAdded = true; +return; +}this.findingFeatures = true; +if (this.av.getFeaturesDisplayed () == null) { +this.av.setFeaturesDisplayed ( new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); +}var featuresDisplayed = this.av.getFeaturesDisplayed (); +var allfeatures = new java.util.ArrayList (); +var oldfeatures = new java.util.ArrayList (); +if (this.renderOrder != null) { +for (var i = 0; i < this.renderOrder.length; i++) { +if (this.renderOrder[i] != null) { +oldfeatures.add (this.renderOrder[i]); +}} +}if (this.minmax == null) { +this.minmax = new java.util.Hashtable (); +}var alignment = this.av.getAlignment (); +for (var i = 0; i < alignment.getHeight (); i++) { +var asq = alignment.getSequenceAt (i); +var features = asq.getSequenceFeatures (); +if (features == null) { +continue; +}var index = 0; +while (index < features.length) { +if (!featuresDisplayed.isRegistered (features[index].getType ())) { +var fgrp = features[index].getFeatureGroup (); +if (fgrp != null) { +var groupDisplayed = this.featureGroups.get (fgrp); +if (groupDisplayed == null) { +groupDisplayed = Boolean.$valueOf (newMadeVisible); +this.featureGroups.put (fgrp, groupDisplayed); +}if (!groupDisplayed.booleanValue ()) { +index++; +continue; +}}if (!(features[index].begin == 0 && features[index].end == 0)) { +if (newMadeVisible && !oldfeatures.contains (features[index].getType ())) { +featuresDisplayed.setVisible (features[index].getType ()); +this.setOrder (features[index].getType (), 0); +}}}if (!allfeatures.contains (features[index].getType ())) { +allfeatures.add (features[index].getType ()); +}if (!Float.isNaN (features[index].score)) { +var nonpos = features[index].getBegin () >= 1 ? 0 : 1; +var mm = this.minmax.get (features[index].getType ()); +if (mm == null) { +mm = Clazz.newArray (-1, [null, null]); +this.minmax.put (features[index].getType (), mm); +}if (mm[nonpos] == null) { +mm[nonpos] = Clazz.newFloatArray (-1, [features[index].score, features[index].score]); +} else { +if (mm[nonpos][0] > features[index].score) { +mm[nonpos][0] = features[index].score; +}if (mm[nonpos][1] < features[index].score) { +mm[nonpos][1] = features[index].score; +}}}index++; +} +} +this.updateRenderOrder (allfeatures); +this.findingFeatures = false; +}, "~B"); +Clazz.defineMethod (c$, "updateRenderOrder", + function (allFeatures) { +var allfeatures = new java.util.ArrayList (allFeatures); +var oldRender = this.renderOrder; +this.renderOrder = new Array (allfeatures.size ()); +var mmrange; +var fc = null; +var initOrders = (this.featureOrder == null); +var opos = 0; +if (oldRender != null && oldRender.length > 0) { +for (var j = 0; j < oldRender.length; j++) { +if (oldRender[j] != null) { +if (initOrders) { +this.setOrder (oldRender[j], (1 - (1 + j) / oldRender.length)); +}if (allfeatures.contains (oldRender[j])) { +this.renderOrder[opos++] = oldRender[j]; +allfeatures.remove (oldRender[j]); +if (this.minmax != null) { +mmrange = this.minmax.get (oldRender[j]); +if (mmrange != null) { +fc = this.featureColours.get (oldRender[j]); +if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) { +(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]); +}}}}}} +}if (allfeatures.size () == 0) { +return; +}var i = allfeatures.size () - 1; +var iSize = i; +var sort = false; +var newf = new Array (allfeatures.size ()); +var sortOrder = Clazz.newFloatArray (allfeatures.size (), 0); +for (var newfeat, $newfeat = allfeatures.iterator (); $newfeat.hasNext () && ((newfeat = $newfeat.next ()) || true);) { +newf[i] = newfeat; +if (this.minmax != null) { +mmrange = this.minmax.get (newf[i]); +if (mmrange != null) { +fc = this.featureColours.get (newf[i]); +if (fc != null && Clazz.instanceOf (fc, jalview.schemes.GraduatedColor) && (fc).isAutoScale ()) { +(fc).updateBounds ((mmrange)[0][0], (mmrange)[0][1]); +}}}if (initOrders || !this.featureOrder.containsKey (newf[i])) { +var denom = initOrders ? allfeatures.size () : this.featureOrder.size (); +this.setOrder (newf[i], i / denom); +}sortOrder[i] = 2 - (this.featureOrder.get (newf[i])).floatValue (); +if (i < iSize) { +sort = sort || sortOrder[i] > sortOrder[i + 1]; +}i--; +} +if (iSize > 1 && sort) { +jalview.util.QuickSort.sortFloatObject (sortOrder, newf); +}sortOrder = null; +System.arraycopy (newf, 0, this.renderOrder, opos, newf.length); +}, "java.util.List"); +Clazz.overrideMethod (c$, "getFeatureStyle", +function (featureType) { +var fc = this.featureColours.get (featureType); +if (fc == null) { +var ucs = new jalview.schemes.UserColourScheme (); +var col = ucs.createColourFromName (featureType); +this.featureColours.put (featureType, fc = col); +}return fc; +}, "~S"); +Clazz.defineMethod (c$, "getColour", +function (featureType) { +var fc = this.getFeatureStyle (featureType); +if (Clazz.instanceOf (fc, java.awt.Color)) { +return fc; +} else { +if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) { +return (fc).getMaxColor (); +}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + featureType); +}, "~S"); +Clazz.defineMethod (c$, "getColour", +function (feature) { +var fc = this.getFeatureStyle (feature.getType ()); +if (Clazz.instanceOf (fc, java.awt.Color)) { +return fc; +} else { +if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) { +return (fc).findColor (feature); +}}throw new Error ("Implementation Error: Unrecognised render object " + fc.getClass () + " for features of type " + feature.getType ()); +}, "jalview.datamodel.SequenceFeature"); +Clazz.defineMethod (c$, "showFeature", +function (sequenceFeature) { +var fc = this.getFeatureStyle (sequenceFeature.type); +if (Clazz.instanceOf (fc, jalview.schemes.GraduatedColor)) { +return (fc).isColored (sequenceFeature); +} else { +return true; +}}, "jalview.datamodel.SequenceFeature"); +Clazz.defineMethod (c$, "showFeatureOfType", +function (type) { +return this.av.getFeaturesDisplayed ().isVisible (type); +}, "~S"); +Clazz.overrideMethod (c$, "setColour", +function (featureType, col) { +{ +this.featureColours.put (featureType, col); +}}, "~S,~O"); +Clazz.defineMethod (c$, "setTransparency", +function (value) { +this.transparency = value; +}, "~N"); +Clazz.defineMethod (c$, "getTransparency", +function () { +return this.transparency; +}); +Clazz.defineMethod (c$, "setOrder", +function (type, position) { +if (this.featureOrder == null) { +this.featureOrder = new java.util.Hashtable (); +}this.featureOrder.put (type, new Float (position)); +return position; +}, "~S,~N"); +Clazz.defineMethod (c$, "getOrder", +function (type) { +if (this.featureOrder != null) { +if (this.featureOrder.containsKey (type)) { +return (this.featureOrder.get (type)).floatValue (); +}}return -1; +}, "~S"); +Clazz.overrideMethod (c$, "getFeatureColours", +function () { +return new java.util.concurrent.ConcurrentHashMap (this.featureColours); +}); +Clazz.defineMethod (c$, "setFeaturePriority", +function (data) { +this.setFeaturePriority (data, true); +}, "~A"); +Clazz.defineMethod (c$, "setFeaturePriority", +function (data, visibleNew) { +var av_featuresdisplayed = null; +if (visibleNew) { +if ((av_featuresdisplayed = this.av.getFeaturesDisplayed ()) != null) { +this.av.getFeaturesDisplayed ().clear (); +} else { +this.av.setFeaturesDisplayed (av_featuresdisplayed = new jalview.viewmodel.seqfeatures.FeaturesDisplayed ()); +}} else { +av_featuresdisplayed = this.av.getFeaturesDisplayed (); +}if (data == null) { +return; +}this.renderOrder = new Array (data.length); +if (data.length > 0) { +for (var i = 0; i < data.length; i++) { +var type = data[i][0].toString (); +this.setColour (type, data[i][1]); +if ((data[i][2]).booleanValue ()) { +av_featuresdisplayed.setVisible (type); +}this.renderOrder[data.length - i - 1] = type; +} +}}, "~A,~B"); +Clazz.defineMethod (c$, "addPropertyChangeListener", +function (listener) { +this.changeSupport.addPropertyChangeListener (listener); +}, "java.beans.PropertyChangeListener"); +Clazz.defineMethod (c$, "removePropertyChangeListener", +function (listener) { +this.changeSupport.removePropertyChangeListener (listener); +}, "java.beans.PropertyChangeListener"); +Clazz.defineMethod (c$, "getAllFeatureColours", +function () { +return this.featureColours.keySet (); +}); +Clazz.defineMethod (c$, "clearRenderOrder", +function () { +this.renderOrder = null; +}); +Clazz.defineMethod (c$, "hasRenderOrder", +function () { +return this.renderOrder != null; +}); +Clazz.defineMethod (c$, "getRenderOrder", +function () { +if (this.renderOrder == null) { +return java.util.Arrays.asList ( Clazz.newArray (-1, [])); +}return java.util.Arrays.asList (this.renderOrder); +}); +Clazz.defineMethod (c$, "getFeatureGroupsSize", +function () { +return this.featureGroups != null ? 0 : this.featureGroups.size (); +}); +Clazz.overrideMethod (c$, "getFeatureGroups", +function () { +return (this.featureGroups == null) ? java.util.Arrays.asList ( new Array (0)) : java.util.Arrays.asList (this.featureGroups.keySet ().toArray ( new Array (0))); +}); +Clazz.defineMethod (c$, "checkGroupVisibility", +function (group, newGroupsVisible) { +if (this.featureGroups == null) { +}if (this.featureGroups.containsKey (group)) { +return this.featureGroups.get (group).booleanValue (); +}if (newGroupsVisible) { +this.featureGroups.put (group, new Boolean (true)); +return true; +}return false; +}, "~S,~B"); +Clazz.overrideMethod (c$, "getGroups", +function (visible) { +if (this.featureGroups != null) { +var gp = new java.util.ArrayList (); +for (var grp, $grp = this.featureGroups.keySet ().iterator (); $grp.hasNext () && ((grp = $grp.next ()) || true);) { +var state = this.featureGroups.get (grp); +if (state.booleanValue () == visible) { +gp.add (grp); +}} +return gp; +}return null; +}, "~B"); +Clazz.defineMethod (c$, "setGroupVisibility", +function (group, visible) { +this.featureGroups.put (group, new Boolean (visible)); +}, "~S,~B"); +Clazz.defineMethod (c$, "setGroupVisibility", +function (toset, visible) { +if (toset != null && toset.size () > 0 && this.featureGroups != null) { +var rdrw = false; +for (var gst, $gst = toset.iterator (); $gst.hasNext () && ((gst = $gst.next ()) || true);) { +var st = this.featureGroups.get (gst); +this.featureGroups.put (gst, new Boolean (visible)); +if (st != null) { +rdrw = rdrw || (visible != st.booleanValue ()); +}} +if (rdrw) { +}}}, "java.util.List,~B"); +Clazz.overrideMethod (c$, "getDisplayedFeatureCols", +function () { +var fcols = new java.util.Hashtable (); +if (this.getViewport ().getFeaturesDisplayed () == null) { +return fcols; +}var en = this.getViewport ().getFeaturesDisplayed ().getVisibleFeatures (); +while (en.hasNext ()) { +var col = en.next (); +fcols.put (col, this.getColour (col)); +} +return fcols; +}); +Clazz.defineMethod (c$, "getFeaturesDisplayed", +function () { +return this.av.getFeaturesDisplayed (); +}); +Clazz.overrideMethod (c$, "getDisplayedFeatureTypes", +function () { +var typ = null; +typ = this.getRenderOrder ().toArray ( new Array (0)); +var feature_disp = this.av.getFeaturesDisplayed (); +if (feature_disp != null) { +{ +for (var i = 0; i < typ.length; i++) { +if (!feature_disp.isVisible (typ[i])) { +typ[i] = null; +}} +}}return typ; +}); +Clazz.overrideMethod (c$, "getDisplayedFeatureGroups", +function () { +var gps = null; +var _gps = new java.util.ArrayList (); +var en = this.getFeatureGroups ().iterator (); +var g = 0; +var valid = false; +while (en.hasNext ()) { +var gp = en.next (); +if (this.checkGroupVisibility (gp, false)) { +valid = true; +_gps.add (gp); +}if (!valid) { +return null; +} else { +gps = new Array (_gps.size ()); +_gps.toArray (gps); +}} +return gps; +}); +});