aded2ecd10ff92fef6b62e9eff5c35940bbeb567
[jalviewjs.git] / site / j2s / swingjs / JSAbstractDocument.js
1 Clazz.declarePackage ("swingjs");\r
2 Clazz.load (["javax.swing.text.DocumentFilter", "$.Element", "$.JSMinimalAbstractDocument"], "swingjs.JSAbstractDocument", ["java.lang.IllegalStateException", "java.util.HashMap", "JU.AU", "javax.swing.event.DocumentEvent", "$.DocumentListener", "$.EventListenerList", "javax.swing.text.BadLocationException", "swingjs.JSDocumentEvent"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.props = null;\r
5 this.root = null;\r
6 this.positions = null;\r
7 this.listenerList = null;\r
8 this.notifyingListeners = false;\r
9 this.filterBypass = null;\r
10 this.me = null;\r
11 this.sb = null;\r
12 this.tempChar = null;\r
13 this.filter = null;\r
14 if (!Clazz.isClassDefined ("swingjs.JSAbstractDocument.DefaultFilterBypass")) {\r
15 swingjs.JSAbstractDocument.$JSAbstractDocument$DefaultFilterBypass$ ();\r
16 }\r
17 if (!Clazz.isClassDefined ("swingjs.JSAbstractDocument.JSElement")) {\r
18 swingjs.JSAbstractDocument.$JSAbstractDocument$JSElement$ ();\r
19 }\r
20 Clazz.instantialize (this, arguments);\r
21 }, swingjs, "JSAbstractDocument", null, javax.swing.text.JSMinimalAbstractDocument);\r
22 Clazz.makeConstructor (c$, \r
23 function () {\r
24 this.me = this;\r
25 this.props =  new java.util.HashMap ();\r
26 });\r
27 Clazz.overrideMethod (c$, "getRootElements", \r
28 function () {\r
29 return  Clazz.newArray (-1, [this.root, null]);\r
30 });\r
31 Clazz.defineMethod (c$, "checkLoc", \r
32 function (start, end) {\r
33 if (start < 0 || end > this.getLength ()) throw  new javax.swing.text.BadLocationException ("JSAbstractDocument: out of range", (start < 0 ? start : end));\r
34 }, "~N,~N");\r
35 Clazz.defineMethod (c$, "fixPositions", \r
36 function (offset, length, isInsert) {\r
37 if (this.positions == null || this.positions.isEmpty ()) return;\r
38 if (isInsert) {\r
39 for (var i, $i = this.positions.keySet ().iterator (); $i.hasNext () && ((i = $i.next ()) || true);) {\r
40 var pos = i.intValue ();\r
41 if (pos > offset) this.positions.get (i).pos += length;\r
42 }\r
43 return;\r
44 }for (var i, $i = this.positions.keySet ().iterator (); $i.hasNext () && ((i = $i.next ()) || true);) {\r
45 var pos = i.intValue ();\r
46 if (pos <= offset) continue;\r
47 if (pos >= offset + length) this.positions.get (i).pos -= length;\r
48  else this.positions.get (i).pos = offset;\r
49 }\r
50 }, "~N,~N,~B");\r
51 Clazz.defineMethod (c$, "getFilterBypass", \r
52  function () {\r
53 if (this.filterBypass == null) {\r
54 this.filterBypass = Clazz.innerTypeInstance (swingjs.JSAbstractDocument.DefaultFilterBypass, this, null);\r
55 }return this.filterBypass;\r
56 });\r
57 Clazz.overrideMethod (c$, "remove", \r
58 function (offs, len) {\r
59 var filter = this.getDocumentFilter ();\r
60 if (filter == null) this.handleRemove (offs, len);\r
61  else filter.remove (this.getFilterBypass (), offs, len);\r
62 }, "~N,~N");\r
63 Clazz.overrideMethod (c$, "insertString", \r
64 function (offset, str, a) {\r
65 var filter = this.getDocumentFilter ();\r
66 if (filter == null) this.handleInsertString (offset, str, a);\r
67  else filter.insertString (this.getFilterBypass (), offset, str, a);\r
68 }, "~N,~S,javax.swing.text.AttributeSet");\r
69 Clazz.overrideMethod (c$, "replace", \r
70 function (offset, length, text, attrs) {\r
71 if (length == 0 && (text == null || text.length == 0)) return;\r
72 var filter = this.getDocumentFilter ();\r
73 if (filter != null) {\r
74 filter.replace (this.getFilterBypass (), offset, length, text, attrs);\r
75 } else {\r
76 if (length > 0) this.remove (offset, length);\r
77 if (text != null && text.length > 0) this.insertString (offset, text, attrs);\r
78 }}, "~N,~N,~S,javax.swing.text.AttributeSet");\r
79 Clazz.defineMethod (c$, "taint", \r
80  function () {\r
81 this.tempChar = null;\r
82 });\r
83 Clazz.defineMethod (c$, "setLines", \r
84  function () {\r
85 this.root = Clazz.innerTypeInstance (swingjs.JSAbstractDocument.JSElement, this, null);\r
86 var s = this.sb.toString ();\r
87 if (s.lastIndexOf ('\n') != s.length - 1) s += "\n";\r
88 var ilast = 0;\r
89 for (var i = 0; i < s.length; i++) {\r
90 if (s.charAt (i) != '\n') continue;\r
91 var e = Clazz.innerTypeInstance (swingjs.JSAbstractDocument.JSElement, this, null);\r
92 e.start = ilast;\r
93 e.end = i;\r
94 ilast = i + 1;\r
95 this.root.addChild (e);\r
96 }\r
97 });\r
98 Clazz.defineMethod (c$, "handleInsertString", \r
99 function (offs, str, a) {\r
100 if ((str == null) || (str.length == 0)) {\r
101 return;\r
102 }this.checkLoc (offs, offs);\r
103 this.taint ();\r
104 this.sb.insert (offs, str);\r
105 this.fixPositions (offs, str.length, true);\r
106 if (str.indexOf ('\n') >= 0) this.setLines ();\r
107 var e =  new swingjs.JSDocumentEvent (this, offs, str.length, javax.swing.event.DocumentEvent.EventType.INSERT);\r
108 this.fireInsertUpdate (e);\r
109 }, "~N,~S,javax.swing.text.AttributeSet");\r
110 Clazz.defineMethod (c$, "handleRemove", \r
111 function (offs, len) {\r
112 this.checkLoc (offs, offs + len);\r
113 this.taint ();\r
114 var str = this.sb.substring2 (offs, offs + len);\r
115 this.sb.replace (offs, offs + len, "");\r
116 this.fixPositions (offs, offs + len, false);\r
117 if (str.indexOf ('\n') >= 0) this.setLines ();\r
118 if (len > 0) {\r
119 var chng =  new swingjs.JSDocumentEvent (this, offs, len, javax.swing.event.DocumentEvent.EventType.REMOVE);\r
120 this.fireRemoveUpdate (chng);\r
121 }}, "~N,~N");\r
122 Clazz.defineMethod (c$, "fireInsertUpdate", \r
123 function (e) {\r
124 if (this.listenerList == null) return;\r
125 this.checkAlreadyNotifying ();\r
126 this.notifyingListeners = true;\r
127 try {\r
128 var listeners = this.listenerList.getListenerList ();\r
129 for (var i = listeners.length - 2; i >= 0; i -= 2) {\r
130 if (listeners[i] === javax.swing.event.DocumentListener) {\r
131 (listeners[i + 1]).insertUpdate (e);\r
132 }}\r
133 } finally {\r
134 this.notifyingListeners = false;\r
135 }\r
136 }, "javax.swing.event.DocumentEvent");\r
137 Clazz.defineMethod (c$, "fireChangedUpdate", \r
138 function (e) {\r
139 if (this.listenerList == null) return;\r
140 this.checkAlreadyNotifying ();\r
141 this.notifyingListeners = true;\r
142 try {\r
143 var listeners = this.listenerList.getListenerList ();\r
144 for (var i = listeners.length - 2; i >= 0; i -= 2) {\r
145 if (listeners[i] === javax.swing.event.DocumentListener) {\r
146 (listeners[i + 1]).changedUpdate (e);\r
147 }}\r
148 } finally {\r
149 this.notifyingListeners = false;\r
150 }\r
151 }, "javax.swing.event.DocumentEvent");\r
152 Clazz.defineMethod (c$, "fireRemoveUpdate", \r
153 function (e) {\r
154 if (this.listenerList == null) return;\r
155 this.checkAlreadyNotifying ();\r
156 this.notifyingListeners = true;\r
157 try {\r
158 var listeners = this.listenerList.getListenerList ();\r
159 for (var i = listeners.length - 2; i >= 0; i -= 2) {\r
160 if (listeners[i] === javax.swing.event.DocumentListener) {\r
161 (listeners[i + 1]).removeUpdate (e);\r
162 }}\r
163 } finally {\r
164 this.notifyingListeners = false;\r
165 }\r
166 }, "javax.swing.event.DocumentEvent");\r
167 Clazz.defineMethod (c$, "checkAlreadyNotifying", \r
168  function () {\r
169 if (this.notifyingListeners) throw  new IllegalStateException ("One of the document listeners modifed the document. This is not allowed.");\r
170 });\r
171 Clazz.overrideMethod (c$, "addDocumentListener", \r
172 function (listener) {\r
173 if (this.listenerList == null) this.listenerList =  new javax.swing.event.EventListenerList ();\r
174 this.listenerList.add (javax.swing.event.DocumentListener, listener);\r
175 }, "javax.swing.event.DocumentListener");\r
176 Clazz.overrideMethod (c$, "removeDocumentListener", \r
177 function (listener) {\r
178 if (this.listenerList != null) this.listenerList.remove (javax.swing.event.DocumentListener, listener);\r
179 }, "javax.swing.event.DocumentListener");\r
180 Clazz.overrideMethod (c$, "addUndoableEditListener", \r
181 function (listener) {\r
182 }, "javax.swing.event.UndoableEditListener");\r
183 Clazz.overrideMethod (c$, "removeUndoableEditListener", \r
184 function (listener) {\r
185 }, "javax.swing.event.UndoableEditListener");\r
186 Clazz.overrideMethod (c$, "getProperty", \r
187 function (key) {\r
188 return this.props.get (key);\r
189 }, "~O");\r
190 Clazz.overrideMethod (c$, "putProperty", \r
191 function (key, value) {\r
192 this.props.put (key, value);\r
193 }, "~O,~O");\r
194 Clazz.overrideMethod (c$, "getAsynchronousLoadPriority", \r
195 function () {\r
196 return -1;\r
197 });\r
198 Clazz.overrideMethod (c$, "setDocumentFilter", \r
199 function (filter) {\r
200 this.filter = filter;\r
201 }, "javax.swing.text.DocumentFilter");\r
202 Clazz.defineMethod (c$, "getDocumentFilter", \r
203 function () {\r
204 return this.filter;\r
205 });\r
206 c$.$JSAbstractDocument$DefaultFilterBypass$ = function () {\r
207 Clazz.pu$h(self.c$);\r
208 c$ = Clazz.decorateAsClass (function () {\r
209 Clazz.prepareCallback (this, arguments);\r
210 Clazz.instantialize (this, arguments);\r
211 }, swingjs.JSAbstractDocument, "DefaultFilterBypass", javax.swing.text.DocumentFilter.FilterBypass);\r
212 Clazz.overrideMethod (c$, "getDocument", \r
213 function () {\r
214 return this.b$["swingjs.JSAbstractDocument"].me;\r
215 });\r
216 Clazz.overrideMethod (c$, "remove", \r
217 function (a, b) {\r
218 this.b$["swingjs.JSAbstractDocument"].handleRemove (a, b);\r
219 }, "~N,~N");\r
220 Clazz.overrideMethod (c$, "insertString", \r
221 function (a, b, c) {\r
222 this.b$["swingjs.JSAbstractDocument"].handleInsertString (a, b, c);\r
223 }, "~N,~S,javax.swing.text.AttributeSet");\r
224 Clazz.overrideMethod (c$, "replace", \r
225 function (a, b, c, d) {\r
226 this.b$["swingjs.JSAbstractDocument"].handleRemove (a, b);\r
227 this.b$["swingjs.JSAbstractDocument"].handleInsertString (a, c, d);\r
228 }, "~N,~N,~S,javax.swing.text.AttributeSet");\r
229 c$ = Clazz.p0p ();\r
230 };\r
231 c$.$JSAbstractDocument$JSElement$ = function () {\r
232 Clazz.pu$h(self.c$);\r
233 c$ = Clazz.decorateAsClass (function () {\r
234 Clazz.prepareCallback (this, arguments);\r
235 this.parent = null;\r
236 this.attributeSet = null;\r
237 this.start = 0;\r
238 this.end = 0;\r
239 this.nchildren = 0;\r
240 this.children = null;\r
241 this.lastIndex = 0;\r
242 Clazz.instantialize (this, arguments);\r
243 }, swingjs.JSAbstractDocument, "JSElement", null, javax.swing.text.Element);\r
244 Clazz.makeConstructor (c$, \r
245 function () {\r
246 this.children = null;\r
247 this.nchildren = 0;\r
248 this.lastIndex = -1;\r
249 });\r
250 Clazz.defineMethod (c$, "addChild", \r
251 function (a) {\r
252 if (this.children == null) this.children =  new Array (10);\r
253  else if (this.nchildren == this.children.length) this.children = JU.AU.doubleLength (this.children);\r
254 this.children[this.nchildren++] = a;\r
255 }, "swingjs.JSAbstractDocument.JSElement");\r
256 Clazz.overrideMethod (c$, "getDocument", \r
257 function () {\r
258 return this.b$["swingjs.JSAbstractDocument"].me;\r
259 });\r
260 Clazz.overrideMethod (c$, "getParentElement", \r
261 function () {\r
262 return this.parent;\r
263 });\r
264 Clazz.overrideMethod (c$, "getName", \r
265 function () {\r
266 return this.getName ();\r
267 });\r
268 Clazz.overrideMethod (c$, "getAttributes", \r
269 function () {\r
270 return this.attributeSet;\r
271 });\r
272 Clazz.defineMethod (c$, "getStartOffset", \r
273 function () {\r
274 return this.start;\r
275 });\r
276 Clazz.defineMethod (c$, "getEndOffset", \r
277 function () {\r
278 return this.end;\r
279 });\r
280 Clazz.overrideMethod (c$, "getElementIndex", \r
281 function (a) {\r
282 var b;\r
283 var c = 0;\r
284 var d = this.nchildren - 1;\r
285 var e = 0;\r
286 var f = this.getStartOffset ();\r
287 var g;\r
288 if (this.nchildren == 0) {\r
289 return 0;\r
290 }if (a >= this.getEndOffset ()) {\r
291 return this.nchildren - 1;\r
292 }if ((this.lastIndex >= c) && (this.lastIndex <= d)) {\r
293 var h = this.children[this.lastIndex];\r
294 f = h.getStartOffset ();\r
295 g = h.getEndOffset ();\r
296 if ((a >= f) && (a < g)) {\r
297 return this.lastIndex;\r
298 }if (a < f) {\r
299 d = this.lastIndex;\r
300 } else {\r
301 c = this.lastIndex;\r
302 }}while (c <= d) {\r
303 e = c + (Clazz.doubleToInt ((d - c) / 2));\r
304 var h = this.children[e];\r
305 f = h.getStartOffset ();\r
306 g = h.getEndOffset ();\r
307 if ((a >= f) && (a < g)) {\r
308 b = e;\r
309 this.lastIndex = b;\r
310 return b;\r
311 } else if (a < f) {\r
312 d = e - 1;\r
313 } else {\r
314 c = e + 1;\r
315 }}\r
316 if (a < f) {\r
317 b = e;\r
318 } else {\r
319 b = e + 1;\r
320 }this.lastIndex = b;\r
321 return b;\r
322 }, "~N");\r
323 Clazz.overrideMethod (c$, "getElementCount", \r
324 function () {\r
325 return this.nchildren;\r
326 });\r
327 Clazz.overrideMethod (c$, "getElement", \r
328 function (a) {\r
329 return (a >= this.nchildren ? null : this.children[a]);\r
330 }, "~N");\r
331 Clazz.overrideMethod (c$, "isLeaf", \r
332 function () {\r
333 return (this.parent != null);\r
334 });\r
335 c$ = Clazz.p0p ();\r
336 };\r
337 Clazz.defineStatics (c$,\r
338 "ParagraphElementName", "paragraph",\r
339 "ContentElementName", "content");\r
340 });\r