JAL-1807 Bob's JalviewJS prototype first commit
[jalviewjs.git] / bin / jalview / appletgui / IdPanel.js
1 Clazz.declarePackage ("jalview.appletgui");\r
2 Clazz.load (["awt2swing.Panel", "java.awt.event.MouseListener", "$.MouseMotionListener", "java.lang.Thread", "java.util.Vector"], "jalview.appletgui.IdPanel", ["jalview.appletgui.APopupMenu", "$.IdCanvas", "$.PaintRefresher", "$.Tooltip", "jalview.datamodel.SequenceGroup", "jalview.util.UrlLink", "java.awt.BorderLayout", "java.lang.Float", "$.StringBuffer"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.idCanvas = null;\r
5 this.av = null;\r
6 this.alignPanel = null;\r
7 this.scrollThread = null;\r
8 this.lastid = -1;\r
9 this.mouseDragging = false;\r
10 this.links = null;\r
11 this.tooltip = null;\r
12 if (!Clazz.isClassDefined ("jalview.appletgui.IdPanel.ScrollThread")) {\r
13 jalview.appletgui.IdPanel.$IdPanel$ScrollThread$ ();\r
14 }\r
15 Clazz.instantialize (this, arguments);\r
16 }, jalview.appletgui, "IdPanel", awt2swing.Panel, [java.awt.event.MouseListener, java.awt.event.MouseMotionListener]);\r
17 Clazz.prepareFields (c$, function () {\r
18 this.links =  new java.util.Vector ();\r
19 });\r
20 Clazz.makeConstructor (c$, \r
21 function (av, parent) {\r
22 Clazz.superConstructor (this, jalview.appletgui.IdPanel, []);\r
23 this.setName ("idPanel");\r
24 this.av = av;\r
25 this.alignPanel = parent;\r
26 this.idCanvas =  new jalview.appletgui.IdCanvas (av);\r
27 this.setLayout ( new java.awt.BorderLayout ());\r
28 this.add (this.idCanvas, "Center");\r
29 this.idCanvas.addMouseListener (this);\r
30 this.idCanvas.addMouseMotionListener (this);\r
31 if (av.applet != null) {\r
32 av.applet.getLinkParams (this.links);\r
33 }{\r
34 var srsPos = this.links.indexOf ("SRS|http://srs.ebi.ac.uk/srsbin/cgi-bin/wgetz?-newId+(([uniprot-all:$SEQUENCE_ID$]))+-view+SwissEntry");\r
35 if (srsPos > -1) {\r
36 this.links.setElementAt ("EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$", srsPos);\r
37 }}if (this.links.size () < 1) {\r
38 this.links =  new java.util.Vector ();\r
39 this.links.addElement ("EMBL-EBI Search|http://www.ebi.ac.uk/ebisearch/search.ebi?db=allebi&query=$SEQUENCE_ID$");\r
40 }}, "jalview.appletgui.AlignViewport,jalview.appletgui.AlignmentPanel");\r
41 Clazz.overrideMethod (c$, "mouseMoved", \r
42 function (e) {\r
43 var seq = this.alignPanel.seqPanel.findSeq (e);\r
44 var sequence = this.av.getAlignment ().getSequenceAt (seq);\r
45 var tooltiptext =  new StringBuffer ();\r
46 if (sequence != null) {\r
47 if (sequence.getDescription () != null) {\r
48 tooltiptext.append (sequence.getDescription ());\r
49 tooltiptext.append ("\n");\r
50 }var sf = sequence.getSequenceFeatures ();\r
51 for (var sl = 0; sf != null && sl < sf.length; sl++) {\r
52 if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0) {\r
53 var nl = false;\r
54 if (sf[sl].getFeatureGroup () != null) {\r
55 tooltiptext.append (sf[sl].getFeatureGroup ());\r
56 nl = true;\r
57 };if (sf[sl].getType () != null) {\r
58 tooltiptext.append (" ");\r
59 tooltiptext.append (sf[sl].getType ());\r
60 nl = true;\r
61 };if (sf[sl].getDescription () != null) {\r
62 tooltiptext.append (" ");\r
63 tooltiptext.append (sf[sl].getDescription ());\r
64 nl = true;\r
65 };if (!Float.isNaN (sf[sl].getScore ()) && sf[sl].getScore () != 0) {\r
66 tooltiptext.append (" Score = ");\r
67 tooltiptext.append (sf[sl].getScore ());\r
68 nl = true;\r
69 };if (sf[sl].getStatus () != null && sf[sl].getStatus ().length > 0) {\r
70 tooltiptext.append (" (");\r
71 tooltiptext.append (sf[sl].getStatus ());\r
72 tooltiptext.append (")");\r
73 nl = true;\r
74 };if (nl) {\r
75 tooltiptext.append ("\n");\r
76 }}}\r
77 }if (tooltiptext.length () == 0) {\r
78 if (this.tooltip != null) {\r
79 this.tooltip.setVisible (false);\r
80 }this.tooltip = null;\r
81 tooltiptext = null;\r
82 return;\r
83 }if (this.tooltip == null) {\r
84 this.tooltip =  new jalview.appletgui.Tooltip (sequence.getDisplayId (true) + "\n" + tooltiptext.toString (), this.idCanvas);\r
85 } else {\r
86 this.tooltip.setTip (sequence.getDisplayId (true) + "\n" + tooltiptext.toString ());\r
87 }tooltiptext = null;\r
88 }, "java.awt.event.MouseEvent");\r
89 Clazz.overrideMethod (c$, "mouseDragged", \r
90 function (e) {\r
91 this.mouseDragging = true;\r
92 var seq = Math.max (0, this.alignPanel.seqPanel.findSeq (e));\r
93 if (seq < this.lastid) {\r
94 this.selectSeqs (this.lastid - 1, seq);\r
95 } else if (seq > this.lastid) {\r
96 this.selectSeqs (this.lastid + 1, seq);\r
97 }this.lastid = seq;\r
98 this.alignPanel.paintAlignment (false);\r
99 }, "java.awt.event.MouseEvent");\r
100 Clazz.overrideMethod (c$, "mouseClicked", \r
101 function (e) {\r
102 if (e.getClickCount () < 2) {\r
103 return;\r
104 }var seq = this.alignPanel.seqPanel.findSeq (e);\r
105 var sq = this.av.getAlignment ().getSequenceAt (seq);\r
106 if (sq == null) {\r
107 return;\r
108 }var id = sq.getName ();\r
109 var target = null;\r
110 var url = null;\r
111 var i = 0;\r
112 while (url == null && i < this.links.size ()) {\r
113 url = this.links.elementAt (i++).toString ();\r
114 var urlLink = null;\r
115 try {\r
116 urlLink =  new jalview.util.UrlLink (url);\r
117 target = urlLink.getTarget ();\r
118 } catch (foo) {\r
119 if (Clazz.exceptionOf (foo, Exception)) {\r
120 System.err.println ("Exception for URLLink '" + url + "'");\r
121 foo.printStackTrace ();\r
122 url = null;\r
123 continue;\r
124 } else {\r
125 throw foo;\r
126 }\r
127 }\r
128 ;if (!urlLink.isValid ()) {\r
129 System.err.println (urlLink.getInvalidMessage ());\r
130 url = null;\r
131 continue;\r
132 }var urls = urlLink.makeUrls (id, true);\r
133 if (urls == null || urls[0] == null || urls[0].length < 1) {\r
134 url = null;\r
135 continue;\r
136 }url = urls[1];\r
137 }\r
138 try {\r
139 this.alignPanel.alignFrame.showURL (url, target);\r
140 } catch (ex) {\r
141 if (Clazz.exceptionOf (ex, Exception)) {\r
142 ex.printStackTrace ();\r
143 } else {\r
144 throw ex;\r
145 }\r
146 }\r
147 }, "java.awt.event.MouseEvent");\r
148 Clazz.overrideMethod (c$, "mouseEntered", \r
149 function (e) {\r
150 if (this.scrollThread != null) {\r
151 this.scrollThread.running = false;\r
152 }}, "java.awt.event.MouseEvent");\r
153 Clazz.overrideMethod (c$, "mouseExited", \r
154 function (e) {\r
155 if (this.av.getWrapAlignment ()) {\r
156 return;\r
157 }if (this.mouseDragging && e.getY () < 0 && this.av.getStartSeq () > 0) {\r
158 this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.IdPanel.ScrollThread, this, null, true);\r
159 }if (this.mouseDragging && e.getY () >= this.getSize ().height && this.av.getAlignment ().getHeight () > this.av.getEndSeq ()) {\r
160 this.scrollThread = Clazz.innerTypeInstance (jalview.appletgui.IdPanel.ScrollThread, this, null, false);\r
161 }}, "java.awt.event.MouseEvent");\r
162 Clazz.overrideMethod (c$, "mousePressed", \r
163 function (e) {\r
164 if (e.getClickCount () > 1) {\r
165 return;\r
166 }var y = e.getY ();\r
167 if (this.av.getWrapAlignment ()) {\r
168 y -= 2 * this.av.getCharHeight ();\r
169 }var seq = this.alignPanel.seqPanel.findSeq (e);\r
170 if ((e.getModifiers () & 4) == 4) {\r
171 var sq = this.av.getAlignment ().getSequenceAt (seq);\r
172 var nlinks =  new java.util.Vector ();\r
173 for (var l = 0, lSize = this.links.size (); l < lSize; l++) {\r
174 nlinks.addElement (this.links.elementAt (l));\r
175 }\r
176 var sf = sq == null ? null : sq.getSequenceFeatures ();\r
177 for (var sl = 0; sf != null && sl < sf.length; sl++) {\r
178 if (sf[sl].begin == sf[sl].end && sf[sl].begin == 0) {\r
179 if (sf[sl].links != null && sf[sl].links.size () > 0) {\r
180 for (var l = 0, lSize = sf[sl].links.size (); l < lSize; l++) {\r
181 nlinks.addElement (sf[sl].links.elementAt (l));\r
182 }\r
183 }}}\r
184 var popup =  new jalview.appletgui.APopupMenu (this.alignPanel, sq, nlinks);\r
185 this.add (popup);\r
186 popup.show (this, e.getX (), e.getY ());\r
187 return;\r
188 }if ((this.av.getSelectionGroup () == null) || ((!e.isControlDown () && !e.isShiftDown ()) && this.av.getSelectionGroup () != null)) {\r
189 this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());\r
190 this.av.getSelectionGroup ().setStartRes (0);\r
191 this.av.getSelectionGroup ().setEndRes (this.av.getAlignment ().getWidth () - 1);\r
192 }if (e.isShiftDown () && this.lastid != -1) {\r
193 this.selectSeqs (this.lastid, seq);\r
194 } else {\r
195 this.selectSeq (seq);\r
196 }this.alignPanel.paintAlignment (false);\r
197 }, "java.awt.event.MouseEvent");\r
198 Clazz.defineMethod (c$, "selectSeq", \r
199 function (seq) {\r
200 this.lastid = seq;\r
201 var pickedSeq = this.av.getAlignment ().getSequenceAt (seq);\r
202 this.av.getSelectionGroup ().addOrRemove (pickedSeq, true);\r
203 }, "~N");\r
204 Clazz.defineMethod (c$, "selectSeqs", \r
205 function (start, end) {\r
206 this.lastid = start;\r
207 if (end >= this.av.getAlignment ().getHeight ()) {\r
208 end = this.av.getAlignment ().getHeight () - 1;\r
209 }if (end < start) {\r
210 var tmp = start;\r
211 start = end;\r
212 end = tmp;\r
213 this.lastid = end;\r
214 }if (this.av.getSelectionGroup () == null) {\r
215 this.av.setSelectionGroup ( new jalview.datamodel.SequenceGroup ());\r
216 }for (var i = start; i <= end; i++) {\r
217 this.av.getSelectionGroup ().addSequence (this.av.getAlignment ().getSequenceAt (i), i == end);\r
218 }\r
219 }, "~N,~N");\r
220 Clazz.overrideMethod (c$, "mouseReleased", \r
221 function (e) {\r
222 if (this.scrollThread != null) {\r
223 this.scrollThread.running = false;\r
224 }if (this.av.getSelectionGroup () != null) {\r
225 this.av.getSelectionGroup ().recalcConservation ();\r
226 }this.mouseDragging = false;\r
227 jalview.appletgui.PaintRefresher.Refresh (this, this.av.getSequenceSetId ());\r
228 this.av.sendSelection ();\r
229 }, "java.awt.event.MouseEvent");\r
230 Clazz.defineMethod (c$, "highlightSearchResults", \r
231 function (list) {\r
232 this.idCanvas.setHighlighted (list);\r
233 if (list == null) {\r
234 return;\r
235 }var index = this.av.getAlignment ().findIndex (list.get (0));\r
236 if (this.av.getStartSeq () > index || this.av.getEndSeq () < index) {\r
237 this.alignPanel.setScrollValues (this.av.getStartRes (), index);\r
238 }}, "java.util.List");\r
239 c$.$IdPanel$ScrollThread$ = function () {\r
240 Clazz.pu$h ();\r
241 c$ = Clazz.decorateAsClass (function () {\r
242 Clazz.prepareCallback (this, arguments);\r
243 this.running = false;\r
244 this.up = true;\r
245 Clazz.instantialize (this, arguments);\r
246 }, jalview.appletgui.IdPanel, "ScrollThread", Thread);\r
247 Clazz.makeConstructor (c$, \r
248 function (a) {\r
249 Clazz.superConstructor (this, jalview.appletgui.IdPanel.ScrollThread, []);\r
250 this.up = a;\r
251 this.start ();\r
252 }, "~B");\r
253 Clazz.defineMethod (c$, "stopScrolling", \r
254 function () {\r
255 this.running = false;\r
256 });\r
257 Clazz.overrideMethod (c$, "run", \r
258 function () {\r
259 this.running = true;\r
260 while (this.running) {\r
261 if (this.b$["jalview.appletgui.IdPanel"].alignPanel.scrollUp (this.up)) {\r
262 var a = this.b$["jalview.appletgui.IdPanel"].av.getStartSeq ();\r
263 if (!this.up) {\r
264 a = this.b$["jalview.appletgui.IdPanel"].av.getEndSeq ();\r
265 }if (a < this.b$["jalview.appletgui.IdPanel"].lastid) {\r
266 this.b$["jalview.appletgui.IdPanel"].selectSeqs (this.b$["jalview.appletgui.IdPanel"].lastid - 1, a);\r
267 } else if (a > this.b$["jalview.appletgui.IdPanel"].lastid && a < this.b$["jalview.appletgui.IdPanel"].av.getAlignment ().getHeight ()) {\r
268 this.b$["jalview.appletgui.IdPanel"].selectSeqs (this.b$["jalview.appletgui.IdPanel"].lastid + 1, a);\r
269 }this.b$["jalview.appletgui.IdPanel"].lastid = a;\r
270 } else {\r
271 this.running = false;\r
272 }this.b$["jalview.appletgui.IdPanel"].alignPanel.paintAlignment (true);\r
273 try {\r
274 Thread.sleep (100);\r
275 } catch (ex) {\r
276 if (Clazz.exceptionOf (ex, Exception)) {\r
277 } else {\r
278 throw ex;\r
279 }\r
280 }\r
281 }\r
282 });\r
283 c$ = Clazz.p0p ();\r
284 };\r
285 });\r