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);
}
}
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);
}
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);
}
}
}
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);
}
Aggregations