Search in sources :

Example 11 with Element

use of org.apache.pivot.wtk.text.Element in project pivot by apache.

the class TextPane method removeText.

/**
 * Remove the text from the document starting at the given position
 * for the given number of characters.
 * @param offset Starting location to remove text.
 * @param characterCount The number of characters to remove.
 */
public void removeText(int offset, int characterCount) {
    checkDocumentExists();
    if (offset >= 0 && offset < document.getCharacterCount()) {
        Node descendant = document.getDescendantAt(offset);
        // Used to be: if (selectionLength == 0 && ...
        if (characterCount <= 1 && descendant instanceof Paragraph) {
            // We are deleting a paragraph terminator
            Paragraph paragraph = (Paragraph) descendant;
            Element parent = paragraph.getParent();
            int index = parent.indexOf(paragraph);
            // Attempt to merge any successive content into the paragraph
            if (index < parent.getLength() - 1) {
                // TODO This won't always be a paragraph - we'll need to
                // find the next paragraph by walking the tree, then
                // remove any empty nodes
                Sequence<Node> removed = parent.remove(index + 1, 1);
                Paragraph nextParagraph = (Paragraph) removed.get(0);
                paragraph.insertRange(nextParagraph, paragraph.getCharacterCount() - 1);
            }
        } else {
            removeDocumentRange(offset, characterCount);
        }
    }
    // Ensure that the document remains editable
    if (document.getCharacterCount() == 0) {
        document.add(new Paragraph());
    }
    // Move the caret to the removal point
    if (offset >= 0) {
        setSelection(offset, 0);
    }
}
Also used : ImageNode(org.apache.pivot.wtk.text.ImageNode) ComponentNode(org.apache.pivot.wtk.text.ComponentNode) Node(org.apache.pivot.wtk.text.Node) TextNode(org.apache.pivot.wtk.text.TextNode) Element(org.apache.pivot.wtk.text.Element) Paragraph(org.apache.pivot.wtk.text.Paragraph)

Example 12 with Element

use of org.apache.pivot.wtk.text.Element in project pivot by apache.

the class TextPane method insertComponent.

public void insertComponent(Component component) {
    Utils.checkNull(component, "component");
    checkDocumentExists();
    if (selectionLength > 0) {
        removeDocumentRange(selectionStart, selectionLength);
    }
    // If the insertion is at the end of the document, then just add
    if (selectionStart >= document.getCharacterCount() - 1) {
        document.add(new ComponentNode(component));
    } else {
        // Walk up the tree until we find a block
        Node descendant = document.getDescendantAt(selectionStart);
        while (!(descendant instanceof Block)) {
            descendant = descendant.getParent();
        }
        Element parent = descendant.getParent();
        if (parent != null) {
            int index = parent.indexOf(descendant);
            parent.insert(new ComponentNode(component), index + 1);
        }
    }
    // Set the selection start to the character following the insertion
    setSelection(selectionStart + 1, selectionLength);
}
Also used : ImageNode(org.apache.pivot.wtk.text.ImageNode) ComponentNode(org.apache.pivot.wtk.text.ComponentNode) Node(org.apache.pivot.wtk.text.Node) TextNode(org.apache.pivot.wtk.text.TextNode) Element(org.apache.pivot.wtk.text.Element) Block(org.apache.pivot.wtk.text.Block) ComponentNode(org.apache.pivot.wtk.text.ComponentNode)

Example 13 with Element

use of org.apache.pivot.wtk.text.Element in project pivot by apache.

the class TextPane method dumpNode.

public static void dumpNode(String msg, Node node, int indent) {
    if (msg != null && !msg.isEmpty()) {
        System.out.println(msg + ":");
    }
    String indenting = StringUtils.fromNChars(' ', indent * 2);
    System.out.format(FORMAT, indenting, node.getClass().getSimpleName(), node.getDocumentOffset(), node.getCharacterCount());
    if (node instanceof Element) {
        for (Node n : (Element) node) {
            dumpNode("", n, indent + 1);
        }
    }
}
Also used : Element(org.apache.pivot.wtk.text.Element) ImageNode(org.apache.pivot.wtk.text.ImageNode) ComponentNode(org.apache.pivot.wtk.text.ComponentNode) Node(org.apache.pivot.wtk.text.Node) TextNode(org.apache.pivot.wtk.text.TextNode)

Example 14 with Element

use of org.apache.pivot.wtk.text.Element in project pivot by apache.

the class TextPane method insertImage.

public void insertImage(Image image) {
    Utils.checkNull(image, "image");
    checkDocumentExists();
    if (selectionLength > 0) {
        removeDocumentRange(selectionStart, selectionLength);
    }
    // If the insertion is at the end of the document, then just add
    if (selectionStart >= document.getCharacterCount() - 1) {
        document.add(new ImageNode(image));
    } else {
        // Walk up the tree until we find a block
        Node descendant = document.getDescendantAt(selectionStart);
        while (!(descendant instanceof Block)) {
            descendant = descendant.getParent();
        }
        Element parent = descendant.getParent();
        if (parent != null) {
            int index = parent.indexOf(descendant);
            parent.insert(new ImageNode(image), index + 1);
        }
    }
    // Set the selection start to the character following the insertion
    setSelection(selectionStart + 1, selectionLength);
}
Also used : ImageNode(org.apache.pivot.wtk.text.ImageNode) ComponentNode(org.apache.pivot.wtk.text.ComponentNode) Node(org.apache.pivot.wtk.text.Node) TextNode(org.apache.pivot.wtk.text.TextNode) Element(org.apache.pivot.wtk.text.Element) Block(org.apache.pivot.wtk.text.Block) ImageNode(org.apache.pivot.wtk.text.ImageNode)

Aggregations

Element (org.apache.pivot.wtk.text.Element)14 TextNode (org.apache.pivot.wtk.text.TextNode)12 Node (org.apache.pivot.wtk.text.Node)11 ComponentNode (org.apache.pivot.wtk.text.ComponentNode)7 ImageNode (org.apache.pivot.wtk.text.ImageNode)7 Paragraph (org.apache.pivot.wtk.text.Paragraph)5 TextSpan (org.apache.pivot.wtk.text.TextSpan)5 Block (org.apache.pivot.wtk.text.Block)2 Font (java.awt.Font)1 FontRenderContext (java.awt.font.FontRenderContext)1 LineBreakMeasurer (java.awt.font.LineBreakMeasurer)1 TextLayout (java.awt.font.TextLayout)1 AttributedCharacterIterator (java.text.AttributedCharacterIterator)1 AttributedStringCharacterIterator (org.apache.pivot.text.AttributedStringCharacterIterator)1 CharSpan (org.apache.pivot.text.CharSpan)1 CompositeIterator (org.apache.pivot.text.CompositeIterator)1 Dimensions (org.apache.pivot.wtk.Dimensions)1 Span (org.apache.pivot.wtk.Span)1 TextPane (org.apache.pivot.wtk.TextPane)1