public class AsyncBoxView extends View
While the child view is being accessed a read lock is acquired on the associated document so that the model is stable while being accessed.
| Modifier and Type | Class and Description |
|---|---|
class |
AsyncBoxView
A class to manage the effective position of the child views in a localized area while changes are being made around the localized area.
|
class |
AsyncBoxView
A record representing the layout state of a child view.
|
| Modifier and Type | Field and Description |
|---|---|
protected AsyncBoxView |
locator
Object that manages the offsets of the children.
|
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXISBOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST| Constructor and Description |
|---|
AsyncBoxView(Element
Construct a box view that does asynchronous layout.
|
| Modifier and Type | Method and Description |
|---|---|
protected AsyncBoxView |
createChildState(View
New ChildState records are created through this method to allow subclasses the extend the ChildState records to do/hold more
|
protected void |
flushRequirementChanges()
Publish the changes in preferences upward to the parent view.
|
float |
getBottomInset()
Get the bottom part of the margin around the view.
|
Shape |
getChildAllocation(int index, Shape
Fetches the allocation for the given child view.
|
protected AsyncBoxView |
getChildState(int index)
Fetch the object representing the layout state of of the child at the given index.
|
protected boolean |
getEstimatedMajorSpan()
Is the major span currently estimated?
|
protected float |
getInsetSpan(int axis)
Fetch the span along an axis that is taken up by the insets.
|
protected LayoutQueue |
getLayoutQueue()
Fetch the queue to use for layout.
|
float |
getLeftInset()
Get the left part of the margin around the view.
|
int |
getMajorAxis()
Fetch the major axis (the axis the children are tiled along).
|
float |
getMaximumSpan(int axis)
Determines the maximum span for this view along an axis.
|
float |
getMinimumSpan(int axis)
Determines the minimum span for this view along an axis.
|
int |
getMinorAxis()
Fetch the minor axis (the axis orthogonal to the tiled axis).
|
int |
getNextVisualPositionFrom(int pos, Position
Provides a way to determine the next visually represented model location that one might place a caret.
|
float |
getPreferredSpan(int axis)
Determines the preferred span for this view along an axis.
|
float |
getRightInset()
Get the right part of the margin around the view.
|
float |
getTopInset()
Get the top part of the margin around the view.
|
View |
getView(int n)
Gets the nth child view.
|
int |
getViewCount()
Returns the number of views in this view.
|
int |
getViewIndex(int pos, Position
Returns the child view index representing the given position in the model.
|
protected int |
getViewIndexAtPosition(int pos, Position
Fetches the child view index representing the given position in the model.
|
protected void |
loadChildren(ViewFactory
Loads all of the children to initialize the view.
|
protected void |
majorRequirementChange(AsyncBoxView
Requirements changed along the major axis.
|
protected void |
minorRequirementChange(AsyncBoxView
Requirements changed along the minor axis.
|
Shape |
modelToView(int pos, Shape
Provides a mapping from the document model coordinate space to the coordinate space of the view mapped to it.
|
void |
paint(Graphics
Render the view using the given allocation and rendering surface.
|
void |
preferenceChanged(View
Child views can call this on the parent to indicate that the preference has changed and should be reconsidered for layout.
|
void |
replace(int offset, int length, View
Calls the superclass to update the child views, and updates the status records for the children.
|
void |
setBottomInset(float i)
Set the bottom part of the margin around the view.
|
protected void |
setEstimatedMajorSpan(boolean isEstimated)
Set the estimatedMajorSpan property that determines if the major span should be treated as being estimated.
|
void |
setLeftInset(float i)
Set the left part of the margin around the view.
|
void |
setParent(View
Sets the parent of the view.
|
void |
setRightInset(float i)
Set the right part of the margin around the view.
|
void |
setSize(float width, float height)
Sets the size of the view.
|
void |
setTopInset(float i)
Set the top part of the margin around the view.
|
protected void |
updateLayout(DocumentEvent
Update the layout in response to receiving notification of change from the model.
|
int |
viewToModel(float x, float y, Shape
Provides a mapping from the view coordinate space to the logical coordinate space of the model.
|
append, breakView, changedUpdate, createFragment, forwardUpdate, forwardUpdateToView, getAlignment, getAttributes, getBreakWeight, getContainer, getDocument, getElement, getEndOffset, getGraphics, getParent, getResizeWeight, getStartOffset, getToolTipText, getViewFactory, getViewIndex, insert, insertUpdate, isVisible, modelToView, modelToView, remove, removeAll, removeUpdate, updateChildren, viewToModelprotected AsyncBoxView.ChildLocator locator
public AsyncBoxView(Elementelem, int axis)
elem - the element of the model to represent
axis - the axis to tile along. This can be either X_AXIS or Y_AXIS.
public int getMajorAxis()
public int getMinorAxis()
public float getTopInset()
public void setTopInset(float i)
i - the value of the inset
public float getBottomInset()
public void setBottomInset(float i)
i - the value of the inset
public float getLeftInset()
public void setLeftInset(float i)
i - the value of the inset
public float getRightInset()
public void setRightInset(float i)
i - the value of the inset
protected float getInsetSpan(int axis)
axis - the axis to determine the total insets along, either X_AXIS or Y_AXIS.
protected void setEstimatedMajorSpan(boolean isEstimated)
protected boolean getEstimatedMajorSpan()
protected AsyncBoxView.ChildState getChildState(int index)
index - the child index. This should be a value >= 0 and < getViewCount().
protected LayoutQueuegetLayoutQueue()
protected AsyncBoxView.ChildState createChildState(View v)
protected void majorRequirementChange(AsyncBoxView.ChildState cs, float delta)
This is implemented to mark the major axis as having changed so that a future check to see if the requirements need to be published to the parent view will consider the major axis. If the span along the major axis is not estimated, it is updated by the given delta to reflect the incremental change. The delta is ignored if the major span is estimated.
protected void minorRequirementChange(AsyncBoxView.ChildState cs)
protected void flushRequirementChanges()
public void replace(int offset,
int length,
View[] views)
protected void loadChildren(ViewFactoryf)
setParent method. Subclasses can reimplement this to initialize their child views in a different manner. The default implementation creates a child view for each child element.
Normally a write-lock is held on the Document while the children are being changed, which keeps the rendering and layout threads safe. The exception to this is when the view is initialized to represent an existing element (via this method), so it is synchronized to exclude preferenceChanged while we are initializing.
f - the view factory
setParent(javax.swing.text.View)
protected int getViewIndexAtPosition(int pos,
Position.Bias b)
pos - the position >= 0
protected void updateLayout(DocumentEvent.ElementChange ec, DocumentEvent e, Shape a)
updateLayout in class
View
ec - changes to the element this view is responsible for (may be null if there were no changes).
e - the change information from the associated document
a - the current allocation of the view
View.insertUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory) ,
View.removeUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory) ,
View.changedUpdate(javax.swing.event.DocumentEvent, java.awt.Shape, javax.swing.text.ViewFactory)
public void setParent(Viewparent)
loadChildren method if this view does not already have children. The children should not be loaded in the constructor because the act of setting the parent may cause them to try to search up the hierarchy (to get the hosting Container for example). If this view has children (the view is being moved from one place in the view hierarchy to another), the
loadChildren method will not be called.
public void preferenceChanged(Viewchild, boolean width, boolean height)
preferenceChanged in class
View
child - the child view
width - true if the width preference has changed
height - true if the height preference has changed
JComponent.revalidate()
public void setSize(float width,
float height)
Since the major axis is updated asynchronously and should be the sum of the tiled children the call is ignored for the major axis. Since the minor axis is flexible, work is queued to resize the children if the minor span changes.
public void paint(Graphicsg, Shape alloc)
This is implemented to determine whether or not the desired region to be rendered (i.e. the unclipped area) is up to date or not. If up-to-date the children are rendered. If not up-to-date, a task to build the desired area is placed on the layout queue as a high priority task. This keeps by event thread moving by rendering if ready, and postponing until a later time if not ready (since paint requests can be rescheduled).
paint in class
View
g - the rendering surface to use
alloc - the allocated region to render into
View.paint(java.awt.Graphics, java.awt.Shape)
public float getPreferredSpan(int axis)
getPreferredSpan in class
View
axis - may be either View.X_AXIS or View.Y_AXIS
IllegalArgumentException - for an invalid axis type
View.getPreferredSpan(int)
public float getMinimumSpan(int axis)
getMinimumSpan in class
View
axis - may be either View.X_AXIS or View.Y_AXIS
IllegalArgumentException - for an invalid axis type
View.getPreferredSpan(int)
public float getMaximumSpan(int axis)
getMaximumSpan in class
View
axis - may be either View.X_AXIS or View.Y_AXIS
IllegalArgumentException - for an invalid axis type
View.getPreferredSpan(int)
public int getViewCount()
getViewCount in class
View
View.getViewCount()
public ViewgetView(int n)
public ShapegetChildAllocation(int index, Shape a)
getChildAllocation in class
View
index - the index of the child, >= 0 && < getViewCount()
a - the allocation to this view.
public int getViewIndex(int pos,
Position.Bias b)
getViewIndex in class
View
pos - the position >= 0
public ShapemodelToView(int pos, Shape a, Position .Bias b) throws BadLocationException
modelToView in class
View
pos - the position to convert >= 0
a - the allocated region to render into
b - the bias toward the previous character or the next character represented by the offset, in case the position is a boundary of two views.
BadLocationException - if the given position does not represent a valid location in the associated document
IllegalArgumentException - for an invalid bias argument
View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
public int viewToModel(float x,
float y,
Shape a,
Position.Bias [] biasReturn)
This is expected to be called by the GUI thread, holding a read-lock on the associated model. It is implemented to locate the child view and determine it's allocation with a lock on the ChildLocator object, and to call viewToModel on the child view with a lock on the ChildState object to avoid interaction with the layout thread.
viewToModel in class
View
x - the X coordinate >= 0
y - the Y coordinate >= 0
a - the allocated region to render into
public int getNextVisualPositionFrom(int pos,
Position.Bias b,
Shape a,
int direction,
Position.Bias [] biasRet)
throws BadLocationException
BadLocationException will be thrown.
getNextVisualPositionFrom in class
View
pos - the position to convert
a - the allocated region to render into
direction - the direction from the current position that can be thought of as the arrow keys typically found on a keyboard; this may be one of the following:
SwingConstants.WESTSwingConstants.EASTSwingConstants.NORTHSwingConstants.SOUTHbiasRet - an array contain the bias that was checked
BadLocationException - the given position is not a valid position within the document
IllegalArgumentException - if
direction is invalid