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
5 this.longLine = null;
\r
7 this.lineBuffer = null;
\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
19 var i = this.getDocument ().getProperty ("tabSize");
\r
20 var size = (i != null) ? i.intValue () : 8;
\r
23 Clazz.defineMethod (c$, "getLineBuffer",
\r
25 if (this.lineBuffer == null) {
\r
26 this.lineBuffer = new javax.swing.text.Segment ();
\r
27 }return this.lineBuffer;
\r
29 Clazz.defineMethod (c$, "updateMetrics",
\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
37 Clazz.overrideMethod (c$, "getPreferredSpan",
\r
39 this.updateMetrics ();
\r
42 return this.getLineWidth (this.longLine);
\r
44 return this.getElement ().getElementCount () * this.metrics.getHeight ();
\r
46 throw new IllegalArgumentException ("Invalid axis: " + axis);
\r
49 Clazz.overrideMethod (c$, "paint",
\r
51 }, "java.awt.Graphics,java.awt.Shape");
\r
52 Clazz.defineMethod (c$, "adjustPaintRegion",
\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
73 lineArea.height = this.metrics.getHeight ();
\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
84 return this.getStartOffset ();
\r
85 } else if (y > alloc.y + alloc.height) {
\r
86 return this.getEndOffset () - 1;
\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
98 return line.getStartOffset ();
\r
99 } else if (x > alloc.x + alloc.width) {
\r
100 return line.getEndOffset () - 1;
\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
112 if (Clazz.exceptionOf (e, javax.swing.text.BadLocationException)) {
\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
136 Clazz.overrideMethod (c$, "nextTabStop",
\r
137 function (x, tabOffset) {
\r
138 if (this.tabSize == 0) {
\r
140 }var ntabs = Clazz.doubleToInt (((Clazz.floatToInt (x)) - this.tabBase) / this.tabSize);
\r
141 return this.tabBase + ((ntabs + 1) * this.tabSize);
\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
158 this.longLine = added[i];
\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
166 }this.preferenceChanged (null, true, true);
\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
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
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
195 }}}, "~N,~N,java.awt.Shape,java.awt.Component");
\r
196 Clazz.defineMethod (c$, "lineToRect",
\r
197 function (a, line) {
\r
199 this.updateMetrics ();
\r
200 if (this.metrics != null) {
\r
201 var alloc = a.getBounds ();
\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
207 }, "java.awt.Shape,~N");
\r
208 Clazz.defineMethod (c$, "calculateLongestLine",
\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
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
221 this.longLine = line;
\r
224 Clazz.defineMethod (c$, "getLineWidth",
\r
226 if (line == null) {
\r
228 }var p0 = line.getStartOffset ();
\r
229 var p1 = line.getEndOffset ();
\r
231 var s = javax.swing.text.SegmentCache.getSharedSegment ();
\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
236 if (Clazz.exceptionOf (ble, javax.swing.text.BadLocationException)) {
\r
242 javax.swing.text.SegmentCache.releaseSharedSegment (s);
\r
244 }, "javax.swing.text.Element");
\r