javax.swing.text
Class AsyncBoxView
java.lang.Object
|
+--javax.swing.text.View
|
+--javax.swing.text.AsyncBoxView
- All Implemented Interfaces:
- SwingConstants
- Direct Known Subclasses:
- javax.swing.text.ZoneView.Zone
- public class AsyncBoxView
- extends View
Unsafe: A box that does layout asynchronously. This
is useful to keep the GUI event thread moving by
not doing any layout on it. The layout is done
on a granularity of operations on the child views.
After each child view is accessed for some part
of layout (a potentially time consuming operation)
the remaining tasks can be abandoned or a new higher
priority task (i.e. to service a synchronous request
or a visible area) can be taken on.
While the child view is being accessed
a read lock is aquired on the associated document
so that the model is stable while being accessed.
- Since:
- 1.3
- Version:
- 1.12 12/03/01
- Author:
- Timothy Prinzing
Field Summary
(package private) int
axis
The major axis against which the children are
tiled.
(package private) javax.swing.text.AsyncBoxView.ChildState
changing
Child that is actively changing size.
protected javax.swing.text.AsyncBoxView.ChildLocator
locator
Object that manages the offsets of the
children.
(package private) float
majorSpan
Current span along the major axis.
(package private) float
minorSpan
Current span along the minor axis.
(package private) javax.swing.text.AsyncBoxView.ChildState
minRequest
(package private) javax.swing.text.AsyncBoxView.ChildState
prefRequest
(package private) List
stats
The children and their layout statistics.
Fields inherited from class javax.swing.text.View
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST
Constructor Summary
AsyncBoxView(Element elem,
int axis)
Suppressed: Construct a box view that does asynchronous layout.
Method Summary
protected javax.swing.text.AsyncBoxView.ChildState
createChildState(View v)
New ChildState records are created through
this method to allow subclasses the extend
the ChildState records to do/hold more
float
getBottomInset()
Suppressed: Get the bottom part of the margin around the view.
protected javax.swing.text.AsyncBoxView.ChildState
getChildState(int index)
Fetch the object representing the layout state of
of the child at the given index.
protected float
getInsetSpan(int axis)
Fetch the span along an axis that is taken up by the insets.
float
getLeftInset()
Suppressed: Get the left part of the margin around the view.
int
getMajorAxis()
Suppressed: Fetch the major axis (the axis the children
are tiled along).
float
getMaximumSpan(int axis)
Suppressed: Determines the maximum span for this view along an
axis.
float
getMinimumSpan(int axis)
Suppressed: Determines the minimum span for this view along an
axis.
int
getMinorAxis()
Suppressed: Fetch the minor axis (the axis orthoginal
to the tiled axis).
int
getNextVisualPositionFrom(int pos,
javax.swing.text.Position.Bias b,
Shape a,
int direction,
javax.swing.text.Position.Bias[] biasRet)
Suppressed: Provides a way to determine the next visually represented model
location that one might place a caret.
float
getPreferredSpan(int axis)
Suppressed: Determines the preferred span for this view along an
axis.
float
getRightInset()
Suppressed: Get the right part of the margin around the view.
(package private) float
getSpanOnAxis(int axis)
Retrieves the size of the view along an axis.
float
getTopInset()
Suppressed: Get the top part of the margin around the view.
View
getView(int n)
Suppressed:
Gets the nth child view.
int
getViewCount()
Suppressed:
Returns the number of views in this view.
int
getViewIndex(int pos,
javax.swing.text.Position.Bias b)
Suppressed: Returns the child view index representing the given position in
the model.
protected int
getViewIndexAtPosition(int pos,
javax.swing.text.Position.Bias b)
Fetches the child view index representing the given position in
the model.
protected void
majorRequirementChange(javax.swing.text.AsyncBoxView.ChildState cs,
float delta)
Requirements changed along the major axis.
protected void
minorRequirementChange(javax.swing.text.AsyncBoxView.ChildState cs)
Requirements changed along the minor axis.
Shape
modelToView(int pos,
Shape a,
javax.swing.text.Position.Bias b)
Suppressed: Provides a mapping from the document model coordinate space
to the coordinate space of the view mapped to it.
void
paint(Graphics g,
Shape alloc)
Suppressed: Render the view using the given allocation and
rendering surface.
void
preferenceChanged(View child,
boolean width,
boolean height)
Suppressed: 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[] views)
Suppressed: Calls the superclass to update the child views, and
updates the status records for the children.
void
setBottomInset(float i)
Suppressed: 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)
Suppressed: Set the left part of the margin around the view.
void
setParent(View parent)
Suppressed: Sets the parent of the view.
void
setRightInset(float i)
Suppressed: Set the right part of the margin around the view.
void
setSize(float width,
float height)
Suppressed: Sets the size of the view.
(package private) void
setSpanOnAxis(int axis,
float span)
Sets the size of the view along an axis.
void
setTopInset(float i)
Suppressed: Set the top part of the margin around the view.
protected void
updateLayout(javax.swing.event.DocumentEvent.ElementChange ec,
DocumentEvent e,
Shape a)
Update the layout in response to receiving notification of
change from the model.
int
viewToModel(float x,
float y,
Shape a,
javax.swing.text.Position.Bias[] biasReturn)
Suppressed: Provides a mapping from the view coordinate space to the logical
coordinate space of the model.
Methods inherited from class javax.swing.text.View
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, viewToModel
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Field Detail
axis
int axis
- The major axis against which the children are
tiled.
stats
List stats
- The children and their layout statistics.
majorSpan
float majorSpan
- Current span along the major axis. This
is also the value returned by getMinimumSize,
getPreferredSize, and getMaximumSize along
the major axis.
estimatedMajorSpan
boolean estimatedMajorSpan
- Is the span along the major axis estimated?
minorSpan
float minorSpan
- Current span along the minor axis. This
is what layout was done against (i.e. things
are flexible in this direction).
locator
protected javax.swing.text.AsyncBoxView.ChildLocator locator
- Object that manages the offsets of the
children. All locking for management of
child locations is on this object.
topInset
float topInset
bottomInset
float bottomInset
leftInset
float leftInset
rightInset
float rightInset
minRequest
javax.swing.text.AsyncBoxView.ChildState minRequest
prefRequest
javax.swing.text.AsyncBoxView.ChildState prefRequest
majorChanged
boolean majorChanged
minorChanged
boolean minorChanged
flushTask
Runnable flushTask
changing
javax.swing.text.AsyncBoxView.ChildState changing
- Child that is actively changing size. This often
causes a preferenceChanged, so this is a cache to
possibly speed up the marking the state. It also
helps flag an opportunity to avoid adding to flush
task to the layout queue.
Constructor Detail
AsyncBoxView
public AsyncBoxView(Element elem,
int axis)
- Suppressed: Construct a box view that does asynchronous layout.
- Parameters:
elem - the element of the model to representaxis - the axis to tile along. This can be
either X_AXIS or Y_AXIS.
Method Detail
getMajorAxis
public int getMajorAxis()
- Suppressed: Fetch the major axis (the axis the children
are tiled along). This will have a value of
either X_AXIS or Y_AXIS.
-
getMinorAxis
public int getMinorAxis()
- Suppressed: Fetch the minor axis (the axis orthoginal
to the tiled axis). This will have a value of
either X_AXIS or Y_AXIS.
-
getTopInset
public float getTopInset()
- Suppressed: Get the top part of the margin around the view.
-
setTopInset
public void setTopInset(float i)
- Suppressed: Set the top part of the margin around the view.
- Parameters:
i - the value of the inset
getBottomInset
public float getBottomInset()
- Suppressed: Get the bottom part of the margin around the view.
-
setBottomInset
public void setBottomInset(float i)
- Suppressed: Set the bottom part of the margin around the view.
- Parameters:
i - the value of the inset
getLeftInset
public float getLeftInset()
- Suppressed: Get the left part of the margin around the view.
-
setLeftInset
public void setLeftInset(float i)
- Suppressed: Set the left part of the margin around the view.
- Parameters:
i - the value of the inset
getRightInset
public float getRightInset()
- Suppressed: Get the right part of the margin around the view.
-
setRightInset
public void setRightInset(float i)
- Suppressed: Set the right part of the margin around the view.
- Parameters:
i - the value of the inset
getInsetSpan
protected float getInsetSpan(int axis)
- Fetch the span along an axis that is taken up by the insets.
- Parameters:
axis - the axis to determine the total insets along,
either X_AXIS or Y_AXIS.- Since:
- 1.4
setEstimatedMajorSpan
protected void setEstimatedMajorSpan(boolean isEstimated)
- Set the estimatedMajorSpan property that determines if the
major span should be treated as being estimated. If this
property is true, the value of setSize along the major axis
will change the requirements along the major axis and incremental
changes will be ignored until all of the children have been updated
(which will cause the property to automatically be set to false).
If the property is false the value of the majorSpan will be
considered to be accurate and incremental changes will be
added into the total as they are calculated.
- Since:
- 1.4
getEstimatedMajorSpan
protected boolean getEstimatedMajorSpan()
- Is the major span currently estimated?
- Since:
- 1.4
getChildState
protected javax.swing.text.AsyncBoxView.ChildState getChildState(int index)
- Fetch the object representing the layout state of
of the child at the given index.
- Parameters:
index - the child index. This should be a
value>= 0 and < getViewCount().
getLayoutQueue
protected LayoutQueue getLayoutQueue()
- Fetch the queue to use for layout.
-
createChildState
protected javax.swing.text.AsyncBoxView.ChildState createChildState(View v)
- New ChildState records are created through
this method to allow subclasses the extend
the ChildState records to do/hold more
-
majorRequirementChange
protected void majorRequirementChange(javax.swing.text.AsyncBoxView.ChildState cs,
float delta)
- Requirements changed along the major axis.
This is called by the thread doing layout for
the given ChildState object when it has completed
fetching the child views new preferences.
Typically this would be the layout thread, but
might be the event thread if it is trying to update
something immediately (such as to perform a
model/view translation).
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.
-
minorRequirementChange
protected void minorRequirementChange(javax.swing.text.AsyncBoxView.ChildState cs)
- Requirements changed along the minor axis.
This is called by the thread doing layout for
the given ChildState object when it has completed
fetching the child views new preferences.
Typically this would be the layout thread, but
might be the GUI thread if it is trying to update
something immediately (such as to perform a
model/view translation).
-
flushRequirementChanges
protected void flushRequirementChanges()
- Publish the changes in preferences upward to the parent
view. This is normally called by the layout thread.
-
replace
public void replace(int offset,
int length,
View[] views)
- Suppressed: Calls the superclass to update the child views, and
updates the status records for the children. This
is expected to be called while a write lock is held
on the model so that interaction with the layout
thread will not happen (i.e. the layout thread
acquires a read lock before doing anything).
- Overrides:
replace in class View
- Parameters:
offset - the starting offset into the child views>= 0length - the number of existing views to replace>= 0views - the child views to insert
loadChildren
protected void loadChildren(ViewFactory f)
- Loads all of the children to initialize the view.
This is called by the 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.
- Parameters:
f - the view factory- See Also:
setParent(javax.swing.text.View)
getViewIndexAtPosition
protected int getViewIndexAtPosition(int pos,
javax.swing.text.Position.Bias b)
- Fetches the child view index representing the given position in
the model. This is implemented to fetch the view in the case
where there is a child view for each child element.
- Parameters:
pos - the position>= 0
- Returns:
- index of the view representing the given position, or
-1 if no view represents that position
updateLayout
protected void updateLayout(javax.swing.event.DocumentEvent.ElementChange ec,
DocumentEvent e,
Shape a)
- Update the layout in response to receiving notification of
change from the model. This is implemented to note the
change on the ChildLocator so that offsets of the children
will be correctly computed.
- Overrides:
updateLayout in class View
- Parameters:
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 documenta - the current allocation of the view- See Also:
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)
setParent
public void setParent(View parent)
- Suppressed: Sets the parent of the view.
This is reimplemented to provide the superclass
behavior as well as calling the
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.
- Overrides:
setParent in class View
- Parameters:
parent - the parent of the view, null if none
preferenceChanged
public void preferenceChanged(View child,
boolean width,
boolean height)
- Suppressed: Child views can call this on the parent to indicate that
the preference has changed and should be reconsidered
for layout. This is reimplemented to queue new work
on the layout thread. This method gets messaged from
multiple threads via the children.
- Overrides:
preferenceChanged in class View
- Parameters:
child - the child viewwidth - true if the width preference has changedheight - true if the height preference has changed- See Also:
javax.swing.JComponent#revalidate
setSize
public void setSize(float width,
float height)
- Suppressed: Sets the size of the view. This should cause
layout of the view if the view caches any layout
information.
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.
- Overrides:
setSize in class View
- Parameters:
width - the width>= 0height - the height>= 0
getSpanOnAxis
float getSpanOnAxis(int axis)
- Retrieves the size of the view along an axis.
- Parameters:
axis - may be either View.X_AXIS or
View.Y_AXIS
- Returns:
- the current span of the view along the given axis,>= 0
setSpanOnAxis
void setSpanOnAxis(int axis,
float span)
- Sets the size of the view along an axis. 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.
- Parameters:
axis - may be either View.X_AXIS or
View.Y_AXISspan - the span to layout to>= 0
paint
public void paint(Graphics g,
Shape alloc)
- Suppressed: Render the view using the given allocation and
rendering surface.
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).
- Specified by:
paint in class View
- Parameters:
g - the rendering surface to usealloc - the allocated region to render into- See Also:
View.paint(java.awt.Graphics, java.awt.Shape)
getPreferredSpan
public float getPreferredSpan(int axis)
- Suppressed: Determines the preferred span for this view along an
axis.
- Specified by:
getPreferredSpan in class View
- Parameters:
axis - may be either View.X_AXIS or View.Y_AXIS
- Returns:
- the span the view would like to be rendered into>= 0.
Typically the view is told to render into the span
that is returned, although there is no guarantee.
The parent may choose to resize or break the view.
- See Also:
View.getPreferredSpan(int)
getMinimumSpan
public float getMinimumSpan(int axis)
- Suppressed: Determines the minimum span for this view along an
axis.
- Overrides:
getMinimumSpan in class View
- Parameters:
axis - may be either View.X_AXIS or View.Y_AXIS
- Returns:
- the span the view would like to be rendered into>= 0.
Typically the view is told to render into the span
that is returned, although there is no guarantee.
The parent may choose to resize or break the view.
- See Also:
View.getPreferredSpan(int)
getMaximumSpan
public float getMaximumSpan(int axis)
- Suppressed: Determines the maximum span for this view along an
axis.
- Overrides:
getMaximumSpan in class View
- Parameters:
axis - may be either View.X_AXIS or View.Y_AXIS
- Returns:
- the span the view would like to be rendered into>= 0.
Typically the view is told to render into the span
that is returned, although there is no guarantee.
The parent may choose to resize or break the view.
- See Also:
View.getPreferredSpan(int)
getViewCount
public int getViewCount()
- Suppressed:
Returns the number of views in this view. Since
the default is to not be a composite view this
returns 0.
- Overrides:
getViewCount in class View
- Returns:
- the number of views>= 0
- See Also:
View.getViewCount()
getView
public View getView(int n)
- Suppressed:
Gets the nth child view. Since there are no
children by default, this returns null.
- Overrides:
getView in class View
- Parameters:
n - the number of the view to get,>= 0 && < getViewCount() - Returns:
- the view
getChildAllocation
public Shape getChildAllocation(int index,
Shape a)
- Suppressed: Fetches the allocation for the given child view.
This enables finding out where various views
are located, without assuming the views store
their location. This returns null since the
default is to not have any child views.
- Overrides:
getChildAllocation in class View
- Parameters:
index - the index of the child,>= 0 && < getViewCount()a - the allocation to this view.
- Returns:
- the allocation to the child
getViewIndex
public int getViewIndex(int pos,
javax.swing.text.Position.Bias b)
- Suppressed: Returns the child view index representing the given position in
the model. By default a view has no children so this is implemented
to return -1 to indicate there is no valid child index for any
position.
- Overrides:
getViewIndex in class View
- Parameters:
pos - the position>= 0
- Returns:
- index of the view representing the given position, or
-1 if no view represents that position
- Since:
- 1.3
modelToView
public Shape modelToView(int pos,
Shape a,
javax.swing.text.Position.Bias b)
throws BadLocationException
- Suppressed: Provides a mapping from the document model coordinate space
to the coordinate space of the view mapped to it.
- Specified by:
modelToView in class View
- Parameters:
pos - the position to convert>= 0a - the allocated region to render intob - the bias toward the previous character or the
next character represented by the offset, in case the
position is a boundary of two views.
- Returns:
- the bounding box of the given position is returned
BadLocationException - See Also:
View.viewToModel(float, float, java.awt.Shape, javax.swing.text.Position.Bias[])
viewToModel
public int viewToModel(float x,
float y,
Shape a,
javax.swing.text.Position.Bias[] biasReturn)
- Suppressed: Provides a mapping from the view coordinate space to the logical
coordinate space of the model. The biasReturn argument will be
filled in to indicate that the point given is closer to the next
character in the model or the previous character in the model.
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.
- Specified by:
viewToModel in class View
- Parameters:
x - the X coordinate>= 0y - the Y coordinate>= 0a - the allocated region to render into
- Returns:
- the location within the model that best represents the
given point in the view>= 0. The biasReturn argument will be
filled in to indicate that the point given is closer to the next
character in the model or the previous character in the model.
getNextVisualPositionFrom
public int getNextVisualPositionFrom(int pos,
javax.swing.text.Position.Bias b,
Shape a,
int direction,
javax.swing.text.Position.Bias[] biasRet)
throws BadLocationException
- Suppressed: Provides a way to determine the next visually represented model
location that one might place a caret. Some views may not be visible,
they might not be in the same order found in the model, or they just
might not allow access to some of the locations in the model.
- Overrides:
getNextVisualPositionFrom in class View
- Parameters:
pos - the position to convert>= 0a - the allocated region to render intodirection - 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.WEST
SwingConstants.EAST
SwingConstants.NORTH
SwingConstants.SOUTH
biasRet - an array contain the bias that was checked
- Returns:
- the location within the model that best represents the next
location visual position
BadLocationException