|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--javax.swing.text.View | +--javax.swing.text.AsyncBoxView
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.
Inner Class Summary | |
class |
AsyncBoxView.ChildLocator
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.ChildState
A record representing the layout state of a child view. |
Field Summary | |
protected AsyncBoxView.ChildLocator |
locator
Object that manages the offsets of the children. |
Fields inherited from class javax.swing.text.View |
BadBreakWeight, ExcellentBreakWeight, ForcedBreakWeight, GoodBreakWeight, X_AXIS, Y_AXIS |
Fields inherited from interface javax.swing.SwingConstants |
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NORTH, NORTH_EAST, NORTH_WEST, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST |
Constructor Summary | |
AsyncBoxView(Element elem,
int axis)
Construct a box view that does asynchronous layout. |
Method Summary | |
protected 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 |
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 a)
Fetches the allocation for the given child view. |
protected AsyncBoxView.ChildState |
getChildState(int index)
Fetch the object representing the layout state of of the child at the given index. |
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 orthoginal to the tiled axis). |
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.Bias b)
Returns the child view index representing the given position in the model. |
protected int |
getViewIndexAtPosition(int pos,
Position.Bias b)
Fetches the child view index representing the given position in the model. |
protected void |
loadChildren(ViewFactory f)
Loads all of the children to initialize the view. |
protected void |
majorRequirementChange(AsyncBoxView.ChildState cs,
float delta)
Requirements changed along the major axis. |
protected void |
minorRequirementChange(AsyncBoxView.ChildState cs)
Requirements changed along the minor axis. |
Shape |
modelToView(int pos,
Shape a,
Position.Bias b)
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)
Render the view using the given allocation and rendering surface. |
void |
preferenceChanged(View child,
boolean width,
boolean height)
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)
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. |
void |
setLeftInset(float i)
Set the left part of the margin around the view. |
void |
setParent(View parent)
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.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,
Position.Bias[] biasReturn)
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, getNextVisualPositionFrom, getParent, getResizeWeight, getStartOffset, getViewFactory, 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 |
protected AsyncBoxView.ChildLocator locator
Constructor Detail |
public AsyncBoxView(Element elem, int axis)
elem
- the element of the model to representaxis
- the axis to tile along. This can be
either X_AXIS or Y_AXIS.Method Detail |
public int getMajorAxis()
public int getMinorAxis()
public float getTopInset()
public void setTopInset(float i)
i
- the value of the insetpublic float getBottomInset()
public void setBottomInset(float i)
i
- the value of the insetpublic float getLeftInset()
public void setLeftInset(float i)
i
- the value of the insetpublic float getRightInset()
public void setRightInset(float i)
i
- the value of the insetprotected AsyncBoxView.ChildState getChildState(int index)
index
- the child index. This should be a
value >= 0 and < getViewCount().protected LayoutQueue getLayoutQueue()
protected AsyncBoxView.ChildState createChildState(View v)
protected void majorRequirementChange(AsyncBoxView.ChildState cs, float delta)
protected void minorRequirementChange(AsyncBoxView.ChildState cs)
protected void flushRequirementChanges()
public void replace(int offset, int length, View[] views)
replace
in class View
offset
- the starting offset into the child views >= 0length
- the number of existing views to replace >= 0views
- the child views to insertprotected void loadChildren(ViewFactory f)
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 factorysetParent(javax.swing.text.View)
protected int getViewIndexAtPosition(int pos, Position.Bias b)
pos
- the position >= 0protected 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 documenta
- the current allocation of the viewf
- the factory to use to rebuild if the view has childrenView.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(View parent)
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.setParent
in class View
parent
- the parent of the view, null if nonepublic void preferenceChanged(View child, boolean width, boolean height)
preferenceChanged
in class View
child
- the child viewwidth
- true if the width preference has changedheight
- true if the height preference has changedJComponent.revalidate()
public void setSize(float width, float height)
This is implemented to check and see if there has been a change in the minor span (since the view is flexible along the minor axis). If there has been a change, this will add a high priorty task on the layout thread that will mark all of the ChildState records as needing to resize the child, and to spawn a bunch of low priority tasks to fixup the children.
This method will normally be called by the GUI event thread, which we don't want to slow down in any way if we can help it. Pushing the potentially time consuming task of marking each record frees the GUI thread, but also leaves the view open to paint attempts that can't be satisfied. The view is marked as resizing and the ResizeTask will turn off the flag when the children have all been marked.
setSize
in class View
width
- the width >= 0height
- the height >= 0public void paint(Graphics g, 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 usealloc
- the allocated region to render intoView.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_AXISIllegalArgumentException
- for an invalid axis typepublic float getMinimumSpan(int axis)
getMinimumSpan
in class View
axis
- may be either View.X_AXIS or View.Y_AXISIllegalArgumentException
- for an invalid axis typepublic float getMaximumSpan(int axis)
getMaximumSpan
in class View
axis
- may be either View.X_AXIS or View.Y_AXISIllegalArgumentException
- for an invalid axis typepublic int getViewCount()
getViewCount
in class View
View.getViewCount()
public View getView(int n)
getView
in class View
n
- the number of the view to get, >= 0 && < getViewCount()public Shape getChildAllocation(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 >= 0public Shape modelToView(int pos, Shape a, Position.Bias b) throws BadLocationException
modelToView
in class View
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.BadLocationException
- if the given position does
not represent a valid location in the associated documentIllegalArgumentException
- for an invalid bias argumentView.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 >= 0y
- the Y coordinate >= 0a
- the allocated region to render into
|
JavaTM 2 Platform Std. Ed. v1.3 |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: INNER | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Java, Java 2D, and JDBC are trademarks or registered trademarks of Sun Microsystems, Inc. in the US and other countries.
Copyright 1993-2000 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.