JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / site / j2s / jalview / javascript / JsSelectionSender.js
1 Clazz.declarePackage ("jalview.javascript");\r
2 Clazz.load (["jalview.javascript.JSFunctionExec", "$.JsCallBack", "jalview.structure.SelectionListener"], "jalview.javascript.JsSelectionSender", ["jalview.appletgui.AlignViewport", "netscape.javascript.JSException"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this._af = null;\r
5 this._listener = null;\r
6 Clazz.instantialize (this, arguments);\r
7 }, jalview.javascript, "JsSelectionSender", jalview.javascript.JSFunctionExec, [jalview.structure.SelectionListener, jalview.javascript.JsCallBack]);\r
8 Clazz.makeConstructor (c$, \r
9 function (jvlite, af, listener) {\r
10 Clazz.superConstructor (this, jalview.javascript.JsSelectionSender, [jvlite]);\r
11 this._af = af;\r
12 this._listener = listener;\r
13 }, "jalview.bin.JalviewLite,jalview.appletgui.AlignFrame,~S");\r
14 Clazz.overrideMethod (c$, "selection", \r
15 function (seqsel, colsel, source) {\r
16 try {\r
17 var setid = "";\r
18 var viewid = "";\r
19 var src = this._af;\r
20 if (source != null) {\r
21 if (Clazz.instanceOf (source, jalview.appletgui.AlignViewport) && (source).applet.currentAlignFrame.viewport === source) {\r
22 src = (source).applet.currentAlignFrame;\r
23 }}var seqs =  Clazz.newArray (-1, []);\r
24 var cols =  Clazz.newArray (-1, []);\r
25 var strt = 0;\r
26 var end = (src == null) ? -1 : src.alignPanel.av.getAlignment ().getWidth ();\r
27 if (seqsel != null && seqsel.getSize () > 0) {\r
28 seqs =  new Array (seqsel.getSize ());\r
29 for (var i = 0; i < seqs.length; i++) {\r
30 seqs[i] = seqsel.getSequenceAt (i).getName ();\r
31 }\r
32 if (strt < seqsel.getStartRes ()) {\r
33 strt = seqsel.getStartRes ();\r
34 }if (end == -1 || end > seqsel.getEndRes ()) {\r
35 end = seqsel.getEndRes ();\r
36 }}if (colsel != null && colsel.size () > 0) {\r
37 if (end == -1) {\r
38 end = colsel.getMax () + 1;\r
39 }cols =  new Array (colsel.getSelected ().size ());\r
40 var d = 0;\r
41 var r = -1;\r
42 for (var i = 0; i < cols.length; i++) {\r
43 cols[i] = "" + (1 + colsel.getSelected ().elementAt (i).intValue ());\r
44 }\r
45 } else {\r
46 if (seqsel != null && seqsel.getSize () > 0) {\r
47 cols =  new Array (2);\r
48 cols[0] = "" + (1 + strt) + "-" + (1 + end);\r
49 };}System.err.println ("Relaying selection to jsfunction:" + this._listener);\r
50 this.executeJavascriptFunction (this._listener,  Clazz.newArray (-1, [src, setid, this.jvlite.arrayToSeparatorList (seqs), this.jvlite.arrayToSeparatorList (cols)]));\r
51 } catch (ex) {\r
52 if (Clazz.exceptionOf (ex, Exception)) {\r
53 System.err.println ("Jalview Javascript exec error: Couldn't send selection message using function '" + this._listener + "'");\r
54 ex.printStackTrace ();\r
55 if (Clazz.instanceOf (ex, netscape.javascript.JSException)) {\r
56 System.err.println ("Javascript Exception: " + (ex).getCause ().toString ());\r
57 }} else {\r
58 throw ex;\r
59 }\r
60 }\r
61 }, "jalview.datamodel.SequenceGroup,jalview.datamodel.ColumnSelection,jalview.structure.SelectionSource");\r
62 Clazz.overrideMethod (c$, "getAlignFrame", \r
63 function () {\r
64 return this._af;\r
65 });\r
66 Clazz.overrideMethod (c$, "getListenerFunction", \r
67 function () {\r
68 return this._listener;\r
69 });\r
70 });\r