Imported Classpath 0.18.
* sources.am, Makefile.in: Updated. * Makefile.am (nat_source_files): Removed natProxy.cc. * java/lang/reflect/natProxy.cc: Removed. * gnu/classpath/jdwp/VMFrame.java, gnu/classpath/jdwp/VMIdManager.java, gnu/classpath/jdwp/VMVirtualMachine.java, java/lang/reflect/VMProxy.java: New files. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * scripts/makemake.tcl (verbose): Add gnu/java/awt/peer/qt to BC list. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/java/net/DefaultContentHandlerFactory.java (getContent): Remove ClasspathToolkit references. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * gnu/awt/xlib/XCanvasPeer.java: Add new peer methods. * gnu/awt/xlib/XFramePeer.java: Likewise. * gnu/awt/xlib/XGraphicsConfiguration.java: Likewise. 2005-09-23 Thomas Fitzsimmons <fitzsim@redhat.com> * Makefile.am (libgcjawt_la_SOURCES): Remove jawt.c. Add classpath/native/jawt/jawt.c. * Makefile.in: Regenerate. * jawt.c: Remove file. * include/Makefile.am (tool_include__HEADERS): Remove jawt.h and jawt_md.h. Add ../classpath/include/jawt.h and ../classpath/include/jawt_md.h. * include/Makefile.in: Regenerate. * include/jawt.h: Regenerate. * include/jawt_md.h: Regenerate. From-SVN: r104586
This commit is contained in:
parent
9b044d1951
commit
1ea63ef8be
544 changed files with 34724 additions and 14512 deletions
|
@ -42,42 +42,174 @@ import java.awt.Color;
|
|||
import java.awt.Font;
|
||||
import java.io.Serializable;
|
||||
|
||||
import javax.swing.event.DocumentEvent;
|
||||
|
||||
/**
|
||||
* The default implementation of {@link StyledDocument}.
|
||||
*
|
||||
* The document is modeled as an {@link Element} tree, which has
|
||||
* a {@link SectionElement} as single root, which has one or more
|
||||
* {@link AbstractDocument.BranchElement}s as paragraph nodes
|
||||
* and each paragraph node having one or more
|
||||
* {@link AbstractDocument.LeafElement}s as content nodes.
|
||||
*
|
||||
* @author Michael Koch (konqueror@gmx.de)
|
||||
* @author Roman Kennke (roman@kennke.org)
|
||||
*/
|
||||
public class DefaultStyledDocument extends AbstractDocument
|
||||
implements StyledDocument
|
||||
{
|
||||
/**
|
||||
* Performs all <em>structural</code> changes to the <code>Element</code>
|
||||
* hierarchy.
|
||||
*/
|
||||
public class ElementBuffer
|
||||
implements Serializable
|
||||
{
|
||||
/** The root element of the hierarchy. */
|
||||
private Element root;
|
||||
|
||||
|
||||
/** Holds the offset for structural changes. */
|
||||
private int offset;
|
||||
|
||||
/** Holds the length of structural changes. */
|
||||
private int length;
|
||||
|
||||
/**
|
||||
* Creates a new <code>ElementBuffer</code> for the specified
|
||||
* <code>root</code> element.
|
||||
*
|
||||
* @param root the root element for this <code>ElementBuffer</code>
|
||||
*/
|
||||
public ElementBuffer(Element root)
|
||||
{
|
||||
this.root = root;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the root element of this <code>ElementBuffer</code>.
|
||||
*
|
||||
* @return the root element of this <code>ElementBuffer</code>
|
||||
*/
|
||||
public Element getRootElement()
|
||||
{
|
||||
return root;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifies the element structure so that the specified interval starts
|
||||
* and ends at an element boundary. Content and paragraph elements
|
||||
* are split and created as necessary.
|
||||
*
|
||||
* This also updates the <code>DefaultDocumentEvent</code> to reflect the
|
||||
* structural changes.
|
||||
*
|
||||
* The bulk work is delegated to {@link #changeUpdate()}.
|
||||
*
|
||||
* @param offset the start index of the interval to be changed
|
||||
* @param length the length of the interval to be changed
|
||||
* @param ev the <code>DefaultDocumentEvent</code> describing the change
|
||||
*/
|
||||
public void change(int offset, int length, DefaultDocumentEvent ev)
|
||||
{
|
||||
this.offset = offset;
|
||||
this.length = length;
|
||||
changeUpdate();
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs the actual work for {@link #change}.
|
||||
* The elements at the interval boundaries are split up (if necessary)
|
||||
* so that the interval boundaries are located at element boundaries.
|
||||
*/
|
||||
protected void changeUpdate()
|
||||
{
|
||||
// Split up the element at the start offset if necessary.
|
||||
Element el = getCharacterElement(offset);
|
||||
split(el, offset);
|
||||
|
||||
int endOffset = offset + length;
|
||||
el = getCharacterElement(endOffset);
|
||||
split(el, endOffset);
|
||||
}
|
||||
|
||||
/**
|
||||
* Splits an element if <code>offset</code> is not alread at its boundary.
|
||||
*
|
||||
* @param el the Element to possibly split
|
||||
* @param offset the offset at which to possibly split
|
||||
*/
|
||||
void split(Element el, int offset)
|
||||
{
|
||||
if (el instanceof AbstractElement)
|
||||
{
|
||||
AbstractElement ael = (AbstractElement) el;
|
||||
int startOffset = ael.getStartOffset();
|
||||
int endOffset = ael.getEndOffset();
|
||||
int len = endOffset - startOffset;
|
||||
if (startOffset != offset && endOffset != offset)
|
||||
{
|
||||
Element paragraph = ael.getParentElement();
|
||||
if (paragraph instanceof BranchElement)
|
||||
{
|
||||
BranchElement par = (BranchElement) paragraph;
|
||||
Element child1 = createLeafElement(par, ael, startOffset,
|
||||
offset);
|
||||
Element child2 = createLeafElement(par, ael, offset,
|
||||
endOffset);
|
||||
int index = par.getElementIndex(startOffset);
|
||||
par.replace(index, 1, new Element[]{ child1, child2 });
|
||||
}
|
||||
else
|
||||
throw new AssertionError("paragraph elements are expected to "
|
||||
+ "be instances of "
|
||||
+ "javax.swing.text.AbstractDocument.BranchElement");
|
||||
}
|
||||
}
|
||||
else
|
||||
throw new AssertionError("content elements are expected to be "
|
||||
+ "instances of "
|
||||
+ "javax.swing.text.AbstractDocument.AbstractElement");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* The default size to use for new content buffers.
|
||||
*/
|
||||
public static final int BUFFER_SIZE_DEFAULT = 4096;
|
||||
|
||||
/**
|
||||
* The <code>EditorBuffer</code> that is used to manage to
|
||||
* <code>Element</code> hierarchy.
|
||||
*/
|
||||
protected DefaultStyledDocument.ElementBuffer buffer;
|
||||
|
||||
|
||||
/**
|
||||
* Creates a new <code>DefaultStyledDocument</code>.
|
||||
*/
|
||||
public DefaultStyledDocument()
|
||||
{
|
||||
this(new GapContent(BUFFER_SIZE_DEFAULT), new StyleContext());
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new <code>DefaultStyledDocument</code> that uses the
|
||||
* specified {@link StyleContext}.
|
||||
*
|
||||
* @param context the <code>StyleContext</code> to use
|
||||
*/
|
||||
public DefaultStyledDocument(StyleContext context)
|
||||
{
|
||||
this(new GapContent(BUFFER_SIZE_DEFAULT), context);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a new <code>DefaultStyledDocument</code> that uses the
|
||||
* specified {@link StyleContext} and {@link Content} buffer.
|
||||
*
|
||||
* @param content the <code>Content</code> buffer to use
|
||||
* @param context the <code>StyleContext</code> to use
|
||||
*/
|
||||
public DefaultStyledDocument(AbstractDocument.Content content,
|
||||
StyleContext context)
|
||||
{
|
||||
|
@ -86,15 +218,38 @@ public class DefaultStyledDocument extends AbstractDocument
|
|||
setLogicalStyle(0, context.getStyle(StyleContext.DEFAULT_STYLE));
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a style into the style hierarchy. Unspecified style attributes
|
||||
* can be resolved in the <code>parent</code> style, if one is specified.
|
||||
*
|
||||
* While it is legal to add nameless styles (<code>nm == null</code),
|
||||
* you must be aware that the client application is then responsible
|
||||
* for managing the style hierarchy, since unnamed styles cannot be
|
||||
* looked up by their name.
|
||||
*
|
||||
* @param nm the name of the style or <code>null</code> if the style should
|
||||
* be unnamed
|
||||
* @param parent the parent in which unspecified style attributes are
|
||||
* resolved, or <code>null</code> if that is not necessary
|
||||
*
|
||||
* @return the newly created <code>Style</code>
|
||||
*/
|
||||
public Style addStyle(String nm, Style parent)
|
||||
{
|
||||
StyleContext context = (StyleContext) getAttributeContext();
|
||||
return context.addStyle(nm, parent);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Create the default root element for this kind of <code>Document</code>.
|
||||
*
|
||||
* @return the default root element for this kind of <code>Document</code>
|
||||
*/
|
||||
protected AbstractDocument.AbstractElement createDefaultRoot()
|
||||
{
|
||||
Element[] tmp;
|
||||
// FIXME: Create a SecionElement here instead of a BranchElement.
|
||||
// Use createBranchElement() and createLeafElement instead.
|
||||
BranchElement section = new BranchElement(null, null);
|
||||
|
||||
BranchElement paragraph = new BranchElement(section, null);
|
||||
|
@ -109,7 +264,17 @@ public class DefaultStyledDocument extends AbstractDocument
|
|||
|
||||
return section;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the <code>Element</code> that corresponds to the character
|
||||
* at the specified position.
|
||||
*
|
||||
* @param position the position of which we query the corresponding
|
||||
* <code>Element</code>
|
||||
*
|
||||
* @return the <code>Element</code> that corresponds to the character
|
||||
* at the specified position
|
||||
*/
|
||||
public Element getCharacterElement(int position)
|
||||
{
|
||||
Element element = getDefaultRootElement();
|
||||
|
@ -122,63 +287,172 @@ public class DefaultStyledDocument extends AbstractDocument
|
|||
|
||||
return element;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Extracts a background color from a set of attributes.
|
||||
*
|
||||
* @param attributes the attributes from which to get a background color
|
||||
*
|
||||
* @return the background color that correspond to the attributes
|
||||
*/
|
||||
public Color getBackground(AttributeSet attributes)
|
||||
{
|
||||
StyleContext context = (StyleContext) getAttributeContext();
|
||||
return context.getBackground(attributes);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the default root element.
|
||||
*
|
||||
* @return the default root element
|
||||
*/
|
||||
public Element getDefaultRootElement()
|
||||
{
|
||||
return buffer.getRootElement();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Extracts a font from a set of attributes.
|
||||
*
|
||||
* @param attributes the attributes from which to get a font
|
||||
*
|
||||
* @return the font that correspond to the attributes
|
||||
*/
|
||||
public Font getFont(AttributeSet attributes)
|
||||
{
|
||||
StyleContext context = (StyleContext) getAttributeContext();
|
||||
return context.getFont(attributes);
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts a foreground color from a set of attributes.
|
||||
*
|
||||
* @param attributes the attributes from which to get a foreground color
|
||||
*
|
||||
* @return the foreground color that correspond to the attributes
|
||||
*/
|
||||
public Color getForeground(AttributeSet attributes)
|
||||
{
|
||||
StyleContext context = (StyleContext) getAttributeContext();
|
||||
return context.getForeground(attributes);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the logical <code>Style</code> for the specified position.
|
||||
*
|
||||
* @param position the position from which to query to logical style
|
||||
*
|
||||
* @return the logical <code>Style</code> for the specified position
|
||||
*/
|
||||
public Style getLogicalStyle(int position)
|
||||
{
|
||||
Element paragraph = getParagraphElement(position);
|
||||
AttributeSet attributes = paragraph.getAttributes();
|
||||
return (Style) attributes.getResolveParent();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns the paragraph element for the specified position.
|
||||
*
|
||||
* @param position the position for which to query the paragraph element
|
||||
*
|
||||
* @return the paragraph element for the specified position
|
||||
*/
|
||||
public Element getParagraphElement(int position)
|
||||
{
|
||||
Element element = getCharacterElement(position);
|
||||
return element.getParentElement();
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks up and returns a named <code>Style</code>.
|
||||
*
|
||||
* @param nm the name of the <code>Style</code>
|
||||
*
|
||||
* @return the found <code>Style</code> of <code>null</code> if no such
|
||||
* <code>Style</code> exists
|
||||
*/
|
||||
public Style getStyle(String nm)
|
||||
{
|
||||
StyleContext context = (StyleContext) getAttributeContext();
|
||||
return context.getStyle(nm);
|
||||
}
|
||||
|
||||
/**
|
||||
* Removes a named <code>Style</code> from the style hierarchy.
|
||||
*
|
||||
* @param nm the name of the <code>Style</code> to be removed
|
||||
*/
|
||||
public void removeStyle(String nm)
|
||||
{
|
||||
StyleContext context = (StyleContext) getAttributeContext();
|
||||
context.removeStyle(nm);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets text attributes for the fragment specified by <code>offset</code>
|
||||
* and <code>length</code>.
|
||||
*
|
||||
* @param offset the start offset of the fragment
|
||||
* @param length the length of the fragment
|
||||
* @param attributes the text attributes to set
|
||||
* @param replace if <code>true</code>, the attributes of the current
|
||||
* selection are overridden, otherwise they are merged
|
||||
*/
|
||||
public void setCharacterAttributes(int offset, int length,
|
||||
AttributeSet attributes,
|
||||
boolean replace)
|
||||
{
|
||||
// FIXME: Implement me.
|
||||
throw new Error("not implemented");
|
||||
DefaultDocumentEvent ev =
|
||||
new DefaultDocumentEvent(offset, length,
|
||||
DocumentEvent.EventType.CHANGE);
|
||||
|
||||
// Modify the element structure so that the interval begins at an element
|
||||
// start and ends at an element end.
|
||||
buffer.change(offset, length, ev);
|
||||
|
||||
Element root = getDefaultRootElement();
|
||||
// Visit all paragraph elements within the specified interval
|
||||
int paragraphCount = root.getElementCount();
|
||||
for (int pindex = 0; pindex < paragraphCount; pindex++)
|
||||
{
|
||||
Element paragraph = root.getElement(pindex);
|
||||
// Skip paragraphs that lie outside the interval.
|
||||
if ((paragraph.getStartOffset() > offset + length)
|
||||
|| (paragraph.getEndOffset() < offset))
|
||||
continue;
|
||||
|
||||
// Visit content elements within this paragraph
|
||||
int contentCount = paragraph.getElementCount();
|
||||
for (int cindex = 0; cindex < contentCount; cindex++)
|
||||
{
|
||||
Element content = paragraph.getElement(cindex);
|
||||
// Skip content that lies outside the interval.
|
||||
if ((content.getStartOffset() > offset + length)
|
||||
|| (content.getEndOffset() < offset))
|
||||
continue;
|
||||
|
||||
if (content instanceof AbstractElement)
|
||||
{
|
||||
AbstractElement el = (AbstractElement) content;
|
||||
if (replace)
|
||||
el.removeAttributes(el);
|
||||
el.addAttributes(attributes);
|
||||
}
|
||||
else
|
||||
throw new AssertionError("content elements are expected to be"
|
||||
+ "instances of "
|
||||
+ "javax.swing.text.AbstractDocument.AbstractElement");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the logical style for the paragraph at the specified position.
|
||||
*
|
||||
* @param position the position at which the logical style is added
|
||||
* @param style the style to set for the current paragraph
|
||||
*/
|
||||
public void setLogicalStyle(int position, Style style)
|
||||
{
|
||||
Element el = getParagraphElement(position);
|
||||
|
@ -192,6 +466,15 @@ public class DefaultStyledDocument extends AbstractDocument
|
|||
+ "instances of javax.swing.text.AbstractDocument.AbstractElement");
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets text attributes for the paragraph at the specified fragment.
|
||||
*
|
||||
* @param offset the beginning of the fragment
|
||||
* @param length the length of the fragment
|
||||
* @param attributes the text attributes to set
|
||||
* @param replace if <code>true</code>, the attributes of the current
|
||||
* selection are overridden, otherwise they are merged
|
||||
*/
|
||||
public void setParagraphAttributes(int offset, int length,
|
||||
AttributeSet attributes,
|
||||
boolean replace)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue