5e0398543bcafadbbbfd3332e5c485d1ae816ca7
[jalviewjs.git] / site / swingjs / j2s / javax / swing / text / PlainView.js
1 Clazz.declarePackage ("javax.swing.text");\r
2 Clazz.load (["javax.swing.text.TabExpander", "$.View"], "javax.swing.text.PlainView", ["java.lang.IllegalArgumentException", "java.awt.Rectangle", "javax.swing.event.DocumentEvent", "javax.swing.text.Position", "$.Segment", "$.SegmentCache", "$.Utilities"], function () {\r
3 c$ = Clazz.decorateAsClass (function () {\r
4 this.metrics = null;\r
5 this.longLine = null;\r
6 this.font = null;\r
7 this.lineBuffer = null;\r
8 this.tabSize = 0;\r
9 this.tabBase = 0;\r
10 this.sel0 = 0;\r
11 this.sel1 = 0;\r
12 this.unselected = null;\r
13 this.selected = null;\r
14 this.firstLineOffset = 0;\r
15 Clazz.instantialize (this, arguments);\r
16 }, javax.swing.text, "PlainView", javax.swing.text.View, javax.swing.text.TabExpander);\r
17 Clazz.defineMethod (c$, "getTabSize", \r
18 function () {\r
19 var i = this.getDocument ().getProperty ("tabSize");\r
20 var size = (i != null) ? i.intValue () : 8;\r
21 return size;\r
22 });\r
23 Clazz.defineMethod (c$, "getLineBuffer", \r
24 function () {\r
25 if (this.lineBuffer == null) {\r
26 this.lineBuffer =  new javax.swing.text.Segment ();\r
27 }return this.lineBuffer;\r
28 });\r
29 Clazz.defineMethod (c$, "updateMetrics", \r
30 function () {\r
31 var host = this.getContainer ();\r
32 var f = host.getFont ();\r
33 if (this.font !== f) {\r
34 this.calculateLongestLine ();\r
35 this.tabSize = this.getTabSize () * this.metrics.charWidth ('m');\r
36 }});\r
37 Clazz.overrideMethod (c$, "getPreferredSpan", \r
38 function (axis) {\r
39 this.updateMetrics ();\r
40 switch (axis) {\r
41 case 0:\r
42 return this.getLineWidth (this.longLine);\r
43 case 1:\r
44 return this.getElement ().getElementCount () * this.metrics.getHeight ();\r
45 default:\r
46 throw  new IllegalArgumentException ("Invalid axis: " + axis);\r
47 }\r
48 }, "~N");\r
49 Clazz.overrideMethod (c$, "paint", \r
50 function (g, a) {\r
51 }, "java.awt.Graphics,java.awt.Shape");\r
52 Clazz.defineMethod (c$, "adjustPaintRegion", \r
53 function (a) {\r
54 return a;\r
55 }, "java.awt.Shape");\r
56 Clazz.defineMethod (c$, "modelToView", \r
57 function (pos, a, b) {\r
58 var doc = this.getDocument ();\r
59 var map = this.getElement ();\r
60 var lineIndex = map.getElementIndex (pos);\r
61 if (lineIndex < 0) {\r
62 return this.lineToRect (a, 0);\r
63 }var lineArea = this.lineToRect (a, lineIndex);\r
64 this.tabBase = lineArea.x;\r
65 var line = map.getElement (lineIndex);\r
66 var p0 = line.getStartOffset ();\r
67 var s = javax.swing.text.SegmentCache.getSharedSegment ();\r
68 doc.getText (p0, pos - p0, s);\r
69 var xOffs = javax.swing.text.Utilities.getTabbedTextWidth (s, this.metrics, this.tabBase, this, p0);\r
70 javax.swing.text.SegmentCache.releaseSharedSegment (s);\r
71 lineArea.x += xOffs;\r
72 lineArea.width = 1;\r
73 lineArea.height = this.metrics.getHeight ();\r
74 return lineArea;\r
75 }, "~N,java.awt.Shape,javax.swing.text.Position.Bias");\r
76 Clazz.defineMethod (c$, "viewToModel", \r
77 function (fx, fy, a, bias) {\r
78 bias[0] = javax.swing.text.Position.Bias.Forward;\r
79 var alloc = a.getBounds ();\r
80 var doc = this.getDocument ();\r
81 var x = Clazz.floatToInt (fx);\r
82 var y = Clazz.floatToInt (fy);\r
83 if (y < alloc.y) {\r
84 return this.getStartOffset ();\r
85 } else if (y > alloc.y + alloc.height) {\r
86 return this.getEndOffset () - 1;\r
87 } else {\r
88 var map = doc.getDefaultRootElement ();\r
89 var fontHeight = this.metrics.getHeight ();\r
90 var lineIndex = (fontHeight > 0 ? Math.abs (Clazz.doubleToInt ((y - alloc.y) / fontHeight)) : map.getElementCount () - 1);\r
91 if (lineIndex >= map.getElementCount ()) {\r
92 return this.getEndOffset () - 1;\r
93 }var line = map.getElement (lineIndex);\r
94 if (lineIndex == 0) {\r
95 alloc.x += this.firstLineOffset;\r
96 alloc.width -= this.firstLineOffset;\r
97 }if (x < alloc.x) {\r
98 return line.getStartOffset ();\r
99 } else if (x > alloc.x + alloc.width) {\r
100 return line.getEndOffset () - 1;\r
101 } else {\r
102 try {\r
103 var p0 = line.getStartOffset ();\r
104 var p1 = line.getEndOffset () - 1;\r
105 var s = javax.swing.text.SegmentCache.getSharedSegment ();\r
106 doc.getText (p0, p1 - p0, s);\r
107 this.tabBase = alloc.x;\r
108 var offs = p0 + javax.swing.text.Utilities.getTabbedTextOffset (s, this.metrics, this.tabBase, x, this, p0);\r
109 javax.swing.text.SegmentCache.releaseSharedSegment (s);\r
110 return offs;\r
111 } catch (e) {\r
112 if (Clazz.exceptionOf (e, javax.swing.text.BadLocationException)) {\r
113 return -1;\r
114 } else {\r
115 throw e;\r
116 }\r
117 }\r
118 }}}, "~N,~N,java.awt.Shape,~A");\r
119 Clazz.overrideMethod (c$, "insertUpdate", \r
120 function (changes, a, f) {\r
121 this.updateDamage (changes, a, f);\r
122 }, "javax.swing.event.DocumentEvent,java.awt.Shape,javax.swing.text.ViewFactory");\r
123 Clazz.overrideMethod (c$, "removeUpdate", \r
124 function (changes, a, f) {\r
125 this.updateDamage (changes, a, f);\r
126 }, "javax.swing.event.DocumentEvent,java.awt.Shape,javax.swing.text.ViewFactory");\r
127 Clazz.overrideMethod (c$, "changedUpdate", \r
128 function (changes, a, f) {\r
129 this.updateDamage (changes, a, f);\r
130 }, "javax.swing.event.DocumentEvent,java.awt.Shape,javax.swing.text.ViewFactory");\r
131 Clazz.defineMethod (c$, "setSize", \r
132 function (width, height) {\r
133 Clazz.superCall (this, javax.swing.text.PlainView, "setSize", [width, height]);\r
134 this.updateMetrics ();\r
135 }, "~N,~N");\r
136 Clazz.overrideMethod (c$, "nextTabStop", \r
137 function (x, tabOffset) {\r
138 if (this.tabSize == 0) {\r
139 return x;\r
140 }var ntabs = Clazz.doubleToInt (((Clazz.floatToInt (x)) - this.tabBase) / this.tabSize);\r
141 return this.tabBase + ((ntabs + 1) * this.tabSize);\r
142 }, "~N,~N");\r
143 Clazz.defineMethod (c$, "updateDamage", \r
144 function (changes, a, f) {\r
145 var host = this.getContainer ();\r
146 this.updateMetrics ();\r
147 var elem = this.getElement ();\r
148 var ec = changes.getChange (elem);\r
149 var added = (ec != null) ? ec.getChildrenAdded () : null;\r
150 var removed = (ec != null) ? ec.getChildrenRemoved () : null;\r
151 if (((added != null) && (added.length > 0)) || ((removed != null) && (removed.length > 0))) {\r
152 if (added != null) {\r
153 var currWide = this.getLineWidth (this.longLine);\r
154 for (var i = 0; i < added.length; i++) {\r
155 var w = this.getLineWidth (added[i]);\r
156 if (w > currWide) {\r
157 currWide = w;\r
158 this.longLine = added[i];\r
159 }}\r
160 }if (removed != null) {\r
161 for (var i = 0; i < removed.length; i++) {\r
162 if (removed[i] === this.longLine) {\r
163 this.calculateLongestLine ();\r
164 break;\r
165 }}\r
166 }this.preferenceChanged (null, true, true);\r
167 host.repaint ();\r
168 } else {\r
169 var map = this.getElement ();\r
170 var line = map.getElementIndex (changes.getOffset ());\r
171 this.damageLineRange (line, line, a, host);\r
172 if (changes.getType () === javax.swing.event.DocumentEvent.EventType.INSERT) {\r
173 var w = this.getLineWidth (this.longLine);\r
174 var e = map.getElement (line);\r
175 if (e === this.longLine) {\r
176 this.preferenceChanged (null, true, false);\r
177 } else if (this.getLineWidth (e) > w) {\r
178 this.longLine = e;\r
179 this.preferenceChanged (null, true, false);\r
180 }} else if (changes.getType () === javax.swing.event.DocumentEvent.EventType.REMOVE) {\r
181 if (map.getElement (line) === this.longLine) {\r
182 this.calculateLongestLine ();\r
183 this.preferenceChanged (null, true, false);\r
184 }}}}, "javax.swing.event.DocumentEvent,java.awt.Shape,javax.swing.text.ViewFactory");\r
185 Clazz.defineMethod (c$, "damageLineRange", \r
186 function (line0, line1, a, host) {\r
187 if (a != null) {\r
188 var area0 = this.lineToRect (a, line0);\r
189 var area1 = this.lineToRect (a, line1);\r
190 if ((area0 != null) && (area1 != null)) {\r
191 var damage = area0.union (area1);\r
192 host.repaint (damage.x, damage.y, damage.width, damage.height);\r
193 } else {\r
194 host.repaint ();\r
195 }}}, "~N,~N,java.awt.Shape,java.awt.Component");\r
196 Clazz.defineMethod (c$, "lineToRect", \r
197 function (a, line) {\r
198 var r = null;\r
199 this.updateMetrics ();\r
200 if (this.metrics != null) {\r
201 var alloc = a.getBounds ();\r
202 if (line == 0) {\r
203 alloc.x += this.firstLineOffset;\r
204 alloc.width -= this.firstLineOffset;\r
205 }r =  new java.awt.Rectangle (alloc.x, alloc.y + (line * this.metrics.getHeight ()), alloc.width, this.metrics.getHeight ());\r
206 }return r;\r
207 }, "java.awt.Shape,~N");\r
208 Clazz.defineMethod (c$, "calculateLongestLine", \r
209  function () {\r
210 var c = this.getContainer ();\r
211 this.font = c.getFont ();\r
212 this.metrics = c.getFontMetrics (this.font);\r
213 var lines = this.getElement ();\r
214 var n = lines.getElementCount ();\r
215 var maxWidth = -1;\r
216 for (var i = 0; i < n; i++) {\r
217 var line = lines.getElement (i);\r
218 var w = this.getLineWidth (line);\r
219 if (w > maxWidth) {\r
220 maxWidth = w;\r
221 this.longLine = line;\r
222 }}\r
223 });\r
224 Clazz.defineMethod (c$, "getLineWidth", \r
225  function (line) {\r
226 if (line == null) {\r
227 return 0;\r
228 }var p0 = line.getStartOffset ();\r
229 var p1 = line.getEndOffset ();\r
230 var w;\r
231 var s = javax.swing.text.SegmentCache.getSharedSegment ();\r
232 try {\r
233 line.getDocument ().getText (p0, p1 - p0, s);\r
234 w = javax.swing.text.Utilities.getTabbedTextWidth (s, this.metrics, this.tabBase, this, p0);\r
235 } catch (ble) {\r
236 if (Clazz.exceptionOf (ble, javax.swing.text.BadLocationException)) {\r
237 w = 0;\r
238 } else {\r
239 throw ble;\r
240 }\r
241 }\r
242 javax.swing.text.SegmentCache.releaseSharedSegment (s);\r
243 return w;\r
244 }, "javax.swing.text.Element");\r
245 });\r