1:
37:
38:
39: package ;
40:
41: import ;
42: import ;
43: import ;
44: import ;
45: import ;
46:
47: public class DefaultHighlighter extends LayeredHighlighter
48: {
49: public static class DefaultHighlightPainter
50: extends LayerPainter
51: {
52: private Color color;
53:
54: public DefaultHighlightPainter(Color c)
55: {
56: super();
57: color = c;
58: }
59:
60: public Color getColor()
61: {
62: return color;
63: }
64:
65: private void paintHighlight(Graphics g, Rectangle rect)
66: {
67: g.fillRect(rect.x, rect.y, rect.width, rect.height);
68: }
69:
70: public void paint(Graphics g, int p0, int p1, Shape bounds,
71: JTextComponent c)
72: {
73: Rectangle r0 = null;
74: Rectangle r1 = null;
75: Rectangle rect = bounds.getBounds();
76:
77: try
78: {
79: r0 = c.modelToView(p0);
80: r1 = c.modelToView(p1);
81: }
82: catch (BadLocationException e)
83: {
84:
85: return;
86: }
87:
88: if (r0 == null || r1 == null)
89: return;
90:
91: if (color == null)
92: g.setColor(c.getSelectionColor());
93: else
94: g.setColor(color);
95:
96:
97: if (r0.y == r1.y)
98: {
99: r0.width = r1.x - r0.x;
100: paintHighlight(g, r0);
101: return;
102: }
103:
104:
105: r0.width = rect.x + rect.width - r0.x;
106: paintHighlight(g, r0);
107:
108:
109:
110: r0.y += r0.height;
111: r0.x = rect.x;
112:
113: while (r0.y < r1.y)
114: {
115: paintHighlight(g, r0);
116: r0.y += r0.height;
117: }
118:
119:
120: paintHighlight(g, r1);
121: }
122:
123: public Shape paintLayer(Graphics g, int p0, int p1, Shape bounds,
124: JTextComponent c, View view)
125: {
126: throw new InternalError();
127: }
128: }
129:
130: private class HighlightEntry
131: {
132: int p0;
133: int p1;
134: Highlighter.HighlightPainter painter;
135:
136: public HighlightEntry(int p0, int p1, Highlighter.HighlightPainter painter)
137: {
138: this.p0 = p0;
139: this.p1 = p1;
140: this.painter = painter;
141: }
142:
143: public int getStartPosition()
144: {
145: return p0;
146: }
147:
148: public int getEndPosition()
149: {
150: return p1;
151: }
152:
153: public Highlighter.HighlightPainter getPainter()
154: {
155: return painter;
156: }
157: }
158:
159:
162: public static final LayeredHighlighter.LayerPainter DefaultPainter =
163: new DefaultHighlightPainter(null);
164:
165: private JTextComponent textComponent;
166: private Vector highlights = new Vector();
167: private boolean drawsLayeredHighlights = true;
168:
169: public DefaultHighlighter()
170: {
171: }
172:
173: public boolean getDrawsLayeredHighlights()
174: {
175: return drawsLayeredHighlights;
176: }
177:
178: public void setDrawsLayeredHighlights(boolean newValue)
179: {
180: drawsLayeredHighlights = newValue;
181: }
182:
183: private void checkPositions(int p0, int p1)
184: throws BadLocationException
185: {
186: if (p0 < 0)
187: throw new BadLocationException("DefaultHighlighter", p0);
188:
189: if (p1 < p0)
190: throw new BadLocationException("DefaultHighlighter", p1);
191: }
192:
193: public void install(JTextComponent c)
194: {
195: textComponent = c;
196: removeAllHighlights();
197: }
198:
199: public void deinstall(JTextComponent c)
200: {
201: textComponent = null;
202: }
203:
204: public Object addHighlight(int p0, int p1, Highlighter.HighlightPainter painter)
205: throws BadLocationException
206: {
207: checkPositions(p0, p1);
208: HighlightEntry entry = new HighlightEntry(p0, p1, painter);
209: highlights.add(entry);
210: return entry;
211: }
212:
213: public void removeHighlight(Object tag)
214: {
215: highlights.remove(tag);
216: }
217:
218: public void removeAllHighlights()
219: {
220: highlights.clear();
221: }
222:
223: public Highlighter.Highlight[] getHighlights()
224: {
225: return null;
226: }
227:
228: public void changeHighlight(Object tag, int p0, int p1)
229: throws BadLocationException
230: {
231: checkPositions(p0, p1);
232: HighlightEntry entry = (HighlightEntry) tag;
233: entry.p0 = p0;
234: entry.p1 = p1;
235: }
236:
237: public void paintLayeredHighlights(Graphics g, int p0, int p1,
238: Shape viewBounds, JTextComponent editor,
239: View view)
240: {
241: }
242:
243: public void paint(Graphics g)
244: {
245:
246: if (highlights.size() == 0)
247: return;
248:
249: Shape bounds = textComponent.getBounds();
250:
251: for (int index = 0; index < highlights.size(); ++index)
252: {
253: HighlightEntry entry = (HighlightEntry) highlights.get(index);
254: entry.painter.paint(g, entry.p0, entry.p1, bounds, textComponent);
255: }
256: }
257: }