package javax.swing.text;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.Shape;
public class PlainView extends View
implements TabExpander
{
private Color selectedColor;
private Color unselectedColor;
private Font font;
protected FontMetrics metrics;
public PlainView(Element elem)
{
super(elem);
}
protected void updateMetrics()
{
Component component = getContainer();
Font font = component.getFont();
if (this.font != font)
{
this.font = font;
metrics = component.getFontMetrics(font);
}
}
protected Rectangle lineToRect(Shape a, int line)
{
updateMetrics();
Rectangle rect = a.getBounds();
int fontHeight = metrics.getHeight();
return new Rectangle(rect.x, rect.y + (line * fontHeight),
rect.width, fontHeight);
}
public Shape modelToView(int position, Shape a, Position.Bias b)
throws BadLocationException
{
Document document = getDocument();
int lineIndex = getElement().getElementIndex(position);
Rectangle rect = lineToRect(a, lineIndex);
Element line = getElement().getElement(lineIndex);
int lineStart = line.getStartOffset();
Segment segment = new Segment();
document.getText(lineStart, position - lineStart, segment);
int xoffset = Utilities.getTabbedTextWidth(segment, metrics, rect.x,
this, lineStart);
rect.x += xoffset;
rect.width = 1;
rect.height = metrics.getHeight();
return rect;
}
public void drawLine(int lineIndex, Graphics g, int x, int y)
{
try
{
metrics = g.getFontMetrics();
drawUnselectedText(g, x, y, 0, getDocument().getLength());
}
catch (BadLocationException e)
{
}
}
public int drawSelectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException
{
g.setColor(selectedColor);
Segment segment = new Segment();
getDocument().getText(p0, p1 - p0, segment);
return Utilities.drawTabbedText(segment, x, y, g, this, 0);
}
public int drawUnselectedText(Graphics g, int x, int y, int p0, int p1)
throws BadLocationException
{
g.setColor(unselectedColor);
Segment segment = new Segment();
getDocument().getText(p0, p1 - p0, segment);
return Utilities.drawTabbedText(segment, x, y, g, this, 0);
}
public void paint(Graphics g, Shape s)
{
JTextComponent textComponent = (JTextComponent) getContainer();
g.setFont(textComponent.getFont());
selectedColor = textComponent.getSelectedTextColor();
unselectedColor = textComponent.getForeground();
Rectangle rect = s.getBounds();
drawLine(0, g, rect.x, rect.y);
}
public int getTabSize()
{
return 8;
}
public float nextTabStop(float x, int tabStop)
{
float tabSizePixels = getTabSize() + metrics.charWidth('m');
return (float) (Math.floor(x / tabSizePixels) + 1) * tabSizePixels;
}
public float getPreferredSpan(int axis)
{
if (axis != X_AXIS && axis != Y_AXIS)
throw new IllegalArgumentException();
return 10;
}
}