/*
* @(#)NumberedParagraphView.java
*
* Copyright (c) 2005 The authors and contributors of JHotDraw.
* You may not use, copy or modify this file, except in compliance with the
* accompanying license terms.
*/
package org.jhotdraw.samples.teddy.text;
import java.awt.*;
import javax.swing.text.*;
/**
* NumberedParagraphView.
*
* @author Werner Randelshofer
* @version $Id$
*/
public class NumberedParagraphView extends ParagraphView {
public static final short NUMBERS_WIDTH=30;
private static Font numberFont = new Font("Dialog",Font.PLAIN,10);
private NumberedViewFactory viewFactory;
public NumberedParagraphView(Element e, NumberedViewFactory viewFactory) {
super(e);
this.viewFactory = viewFactory;
}
/**
* Gets the left inset.
*
* @return the inset >= 0
*/
@Override
protected short getLeftInset() {
short left = super.getLeftInset();
return (viewFactory.isLineNumbersVisible()) ? (short) (left + NUMBERS_WIDTH) : left;
}
@Override
public void paintChild(Graphics g, Rectangle r, int n) {
super.paintChild(g, r, n);
if (viewFactory.isLineNumbersVisible()) {
if (n == 0) {
g.setColor(Color.gray);
int lineAscent = g.getFontMetrics().getAscent();
g.setFont(numberFont);
//int numberAscent = g.getFontMetrics().getAscent();
int lineNumber = getDocument().
getDefaultRootElement().
getElementIndex(getStartOffset());
int numberX = r.x - getLeftInset();
//int numberY = r.y + g.getFontMetrics().getAscent();
int numberY = r.y + lineAscent;
g.drawString(Integer.toString(lineNumber + 1),
numberX, numberY);
}
}
}
}