FileDocCategorySizeDatePackage
HRuleView.javaAPI DocJava SE 5 API9040Fri Aug 26 14:58:18 BST 2005javax.swing.text.html

HRuleView

public class HRuleView extends View
A view implementation to display an html horizontal rule.
author
Timothy Prinzing
author
Sara Swanson
version
1.32 12/19/03

Fields Summary
private float
topMargin
private float
bottomMargin
private float
leftMargin
private float
rightMargin
private int
alignment
private String
noshade
private int
size
private CSS$LengthValue
widthValue
private static final int
SPACE_ABOVE
private static final int
SPACE_BELOW
private AttributeSet
attr
View Attributes.
Constructors Summary
public HRuleView(Element elem)
Creates a new view that represents an <hr> element.

param
elem the element to create a view for

	super(elem);
	setPropertiesFromAttributes();
    
Methods Summary
public javax.swing.text.ViewbreakView(int axis, int offset, float pos, float len)

	return null;
    
public voidchangedUpdate(javax.swing.event.DocumentEvent changes, java.awt.Shape a, javax.swing.text.ViewFactory f)

	super.changedUpdate(changes, a, f);
	int pos = changes.getOffset();
	if (pos <= getStartOffset() && (pos + changes.getLength()) >=
	    getEndOffset()) {
	    setPropertiesFromAttributes();
	}
    
public javax.swing.text.AttributeSetgetAttributes()
Fetches the attributes to use when rendering. This is implemented to multiplex the attributes specified in the model with a StyleSheet.

	return attr;
    
public intgetBreakWeight(int axis, float pos, float len)
Determines how attractive a break opportunity in this view is. This is implemented to request a forced break.

param
axis may be either View.X_AXIS or View.Y_AXIS
param
pos the potential location of the start of the broken view (greater than or equal to zero). This may be useful for calculating tab positions.
param
len specifies the relative length from pos where a potential break is desired. The value must be greater than or equal to zero.
return
the weight, which should be a value between ForcedBreakWeight and BadBreakWeight.

	if (axis == X_AXIS) {
	    return ForcedBreakWeight;
	}
	return BadBreakWeight;
    
private floatgetLength(javax.swing.text.html.CSS$Attribute key, javax.swing.text.AttributeSet a)

	CSS.LengthValue lv = (CSS.LengthValue) a.getAttribute(key);
	float len = (lv != null) ? lv.getValue() : 0;
	return len;
    
public floatgetPreferredSpan(int axis)
Calculates the desired shape of the rule... this is basically the preferred size of the border.

param
axis may be either X_AXIS or Y_AXIS
return
the desired span
see
View#getPreferredSpan

	switch (axis) {
	case View.X_AXIS:
	    return 1;
	case View.Y_AXIS:
	    if (size > 0) {
	        return size + SPACE_ABOVE + SPACE_BELOW + topMargin +
		    bottomMargin;
	    } else {
		if (noshade != null) {
		    return 2 + SPACE_ABOVE + SPACE_BELOW + topMargin +
			bottomMargin;
		} else {
		    return SPACE_ABOVE + SPACE_BELOW + topMargin +bottomMargin;
		}
	    }
	default:
	    throw new IllegalArgumentException("Invalid axis: " + axis);
	}
    
public intgetResizeWeight(int axis)
Gets the resize weight for the axis. The rule is: rigid vertically and flexible horizontally.

param
axis may be either X_AXIS or Y_AXIS
return
the weight

	if (axis == View.X_AXIS) {
		return 1;
	} else if (axis == View.Y_AXIS) {
		return 0;
	} else {
	    return 0;
	}
    
public java.awt.ShapemodelToView(int pos, java.awt.Shape a, javax.swing.text.Position$Bias b)
Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it.

param
pos the position to convert
param
a the allocated region to render into
return
the bounding box of the given position
exception
BadLocationException if the given position does not represent a valid location in the associated document
see
View#modelToView

	int p0 = getStartOffset();
	int p1 = getEndOffset();
	if ((pos >= p0) && (pos <= p1)) {
	    Rectangle r = a.getBounds();
	    if (pos == p1) {
		r.x += r.width;
	    }
	    r.width = 0;
	    return r;
	}
	return null;
    
public voidpaint(java.awt.Graphics g, java.awt.Shape a)
Paints the view.

param
g the graphics context
param
a the allocation region for the view
see
View#paint

	Rectangle alloc = (a instanceof Rectangle) ? (Rectangle)a :
                          a.getBounds();
	int x = 0;
	int y = alloc.y + SPACE_ABOVE + (int)topMargin;
	int width = alloc.width - (int)(leftMargin + rightMargin);
	if (widthValue != null) {
	    width = (int)widthValue.getValue((float)width);
	}
	int height = alloc.height - (SPACE_ABOVE + SPACE_BELOW +
				     (int)topMargin + (int)bottomMargin);
 	if (size > 0)
		height = size;

	// Align the rule horizontally.
        switch (alignment) {
        case StyleConstants.ALIGN_CENTER:
            x = alloc.x + (alloc.width / 2) - (width / 2);
	    break;
        case StyleConstants.ALIGN_RIGHT:
            x = alloc.x + alloc.width - width - (int)rightMargin;
	    break;
        case StyleConstants.ALIGN_LEFT:
        default:
            x = alloc.x + (int)leftMargin;
	    break;
        }

	// Paint either a shaded rule or a solid line.
	if (noshade != null) {
            g.setColor(Color.black);
	    g.fillRect(x, y, width, height);
        }
	else {
            Color bg = getContainer().getBackground();
            Color bottom, top;
            if (bg == null || bg.equals(Color.white)) {
                top = Color.darkGray;
                bottom = Color.lightGray;
            }
            else {
                top = Color.darkGray;
                bottom = Color.white;
            }
            g.setColor(bottom);
            g.drawLine(x + width - 1, y, x + width - 1, y + height - 1);
            g.drawLine(x, y + height - 1, x + width - 1, y + height - 1);
            g.setColor(top);
            g.drawLine(x, y, x + width - 1, y);
            g.drawLine(x, y, x, y + height - 1);
        }

    
protected voidsetPropertiesFromAttributes()
Update any cached values that come from attributes.

	StyleSheet sheet = ((HTMLDocument)getDocument()).getStyleSheet();
	AttributeSet eAttr = getElement().getAttributes();
	attr = sheet.getViewAttributes(this);

	alignment = StyleConstants.ALIGN_CENTER;
	size = 0;
	noshade = null;
	widthValue = null;

	if (attr != null) {
            // getAlignment() returns ALIGN_LEFT by default, and HR should
            // use ALIGN_CENTER by default, so we check if the alignment
            // attribute is actually defined
            if (attr.getAttribute(StyleConstants.Alignment) != null) {
            alignment = StyleConstants.getAlignment(attr);
            }

	    noshade = (String)eAttr.getAttribute(HTML.Attribute.NOSHADE);
	    Object value = eAttr.getAttribute(HTML.Attribute.SIZE);
	    if (value != null && (value instanceof String))
		size = Integer.parseInt((String)value);
	    value = attr.getAttribute(CSS.Attribute.WIDTH);
	    if (value != null && (value instanceof CSS.LengthValue)) {
		widthValue = (CSS.LengthValue)value;
	    }
	    topMargin = getLength(CSS.Attribute.MARGIN_TOP, attr);
	    bottomMargin = getLength(CSS.Attribute.MARGIN_BOTTOM, attr);
	    leftMargin = getLength(CSS.Attribute.MARGIN_LEFT, attr);
	    rightMargin = getLength(CSS.Attribute.MARGIN_RIGHT, attr);
	}
	else {
	    topMargin = bottomMargin = leftMargin = rightMargin = 0;
	}
        size = Math.max(2, size);
    
public intviewToModel(float x, float y, java.awt.Shape a, javax.swing.text.Position$Bias[] bias)
Provides a mapping from the view coordinate space to the logical coordinate space of the model.

param
x the X coordinate
param
y the Y coordinate
param
a the allocated region to render into
return
the location within the model that best represents the given point of view
see
View#viewToModel

	Rectangle alloc = (Rectangle) a;
	if (x < alloc.x + (alloc.width / 2)) {
	    bias[0] = Position.Bias.Forward;
	    return getStartOffset();
	}
	bias[0] = Position.Bias.Backward;
	return getEndOffset();