JAL-1807
[jalview.git] / site / j2s / jalview / javascript / JsSelectionSender.js
diff --git a/site/j2s/jalview/javascript/JsSelectionSender.js b/site/j2s/jalview/javascript/JsSelectionSender.js
new file mode 100644 (file)
index 0000000..36703c5
--- /dev/null
@@ -0,0 +1,70 @@
+Clazz.declarePackage ("jalview.javascript");
+Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.SelectionListener"], "jalview.javascript.JsSelectionSender", ["jalview.appletgui.AlignViewport", "netscape.javascript.JSException"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this._af = null;
+this._listener = null;
+Clazz.instantialize (this, arguments);
+}, jalview.javascript, "JsSelectionSender", jalview.javascript.JSFunctionExec, [jalview.structure.SelectionListener, jalview.javascript.JsCallBack]);
+Clazz.makeConstructor (c$, 
+function (jvlite, af, listener) {
+Clazz.superConstructor (this, jalview.javascript.JsSelectionSender, [jvlite]);
+this._af = af;
+this._listener = listener;
+}, "jalview.bin.JalviewLite,jalview.appletgui.AlignFrame,~S");
+Clazz.overrideMethod (c$, "selection", 
+function (seqsel, colsel, source) {
+try {
+var setid = "";
+var viewid = "";
+var src = this._af;
+if (source != null) {
+if (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).applet.currentAlignFrame.viewport === source) {
+src = (source).applet.currentAlignFrame;
+}}var seqs =  Clazz.newArray (-1, []);
+var cols =  Clazz.newArray (-1, []);
+var strt = 0;
+var end = (src == null) ? -1 : src.alignPanel.av.getAlignment ().getWidth ();
+if (seqsel != null && seqsel.getSize () > 0) {
+seqs =  new Array (seqsel.getSize ());
+for (var i = 0; i < seqs.length; i++) {
+seqs[i] = seqsel.getSequenceAt (i).getName ();
+}
+if (strt < seqsel.getStartRes ()) {
+strt = seqsel.getStartRes ();
+}if (end == -1 || end > seqsel.getEndRes ()) {
+end = seqsel.getEndRes ();
+}}if (colsel != null && colsel.size () > 0) {
+if (end == -1) {
+end = colsel.getMax () + 1;
+}cols =  new Array (colsel.getSelected ().size ());
+var d = 0;
+var r = -1;
+for (var i = 0; i < cols.length; i++) {
+cols[i] = "" + (1 + colsel.getSelected ().elementAt (i).intValue ());
+}
+} else {
+if (seqsel != null && seqsel.getSize () > 0) {
+cols =  new Array (2);
+cols[0] = "" + (1 + strt) + "-" + (1 + end);
+};}System.err.println ("Relaying selection to jsfunction:" + this._listener);
+this.executeJavascriptFunction (this._listener,  Clazz.newArray (-1, [src, setid, this.jvlite.arrayToSeparatorList (seqs), this.jvlite.arrayToSeparatorList (cols)]));
+} catch (ex) {
+if (Clazz.exceptionOf (ex, Exception)) {
+System.err.println ("Jalview Javascript exec error: Couldn't send selection message using function '" + this._listener + "'");
+ex.printStackTrace ();
+if (Clazz.instanceOf (ex, netscape.javascript.JSException)) {
+System.err.println ("Javascript Exception: " + (ex).getCause ().toString ());
+}} else {
+throw ex;
+}
+}
+}, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");
+Clazz.overrideMethod (c$, "getAlignFrame", 
+function () {
+return this._af;
+});
+Clazz.overrideMethod (c$, "getListenerFunction", 
+function () {
+return this._listener;
+});
+});