Index: javax/swing/text/AbstractDocument.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/AbstractDocument.java,v
retrieving revision 1.31
diff -u -r1.31 AbstractDocument.java
--- javax/swing/text/AbstractDocument.java 4 Oct 2005 19:37:19 -0000 1.31
+++ javax/swing/text/AbstractDocument.java 5 Oct 2005 15:12:26 -0000
@@ -616,10 +616,38 @@
DefaultDocumentEvent event =
new DefaultDocumentEvent(offset, length,
DocumentEvent.EventType.REMOVE);
+
+ // Here we set up the parameters for an ElementChange, if one
+ // needs to be added to the DocumentEvent later
+ Element root = getDefaultRootElement();
+ int start = root.getElementIndex(offset);
+ int end = root.getElementIndex(offset + length);
+
+ Element[] removed = new Element[end - start + 1];
+ for (int i = start; i <= end; i++)
+ removed[i - start] = root.getElement(i);
+
removeUpdate(event);
+
+ Element[] added = new Element[1];
+ added[0] = root.getElement(start);
boolean shouldFire = content.getString(offset, length).length() != 0;
- content.remove(offset, length);
+
+ UndoableEdit temp = content.remove(offset, length);
+
postRemoveUpdate(event);
+
+ GapContent.UndoRemove changes = null;
+ if (content instanceof GapContent)
+ changes = (GapContent.UndoRemove) temp;
+
+ if (changes != null)
+ {
+ // We need to add an ElementChange to our DocumentEvent
+ ElementEdit edit = new ElementEdit (root, start, removed, added);
+ event.addEdit(edit);
+ }
+
if (shouldFire)
fireRemoveUpdate(event);
}
Index: javax/swing/text/GapContent.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/text/GapContent.java,v
retrieving revision 1.29
diff -u -r1.29 GapContent.java
--- javax/swing/text/GapContent.java 4 Oct 2005 19:37:19 -0000 1.29
+++ javax/swing/text/GapContent.java 5 Oct 2005 15:12:26 -0000
@@ -168,6 +168,44 @@
}
+ class UndoRemove extends AbstractUndoableEdit
+ {
+ public int where;
+ String text;
+ public UndoRemove(int start, String removedText)
+ {
+ where = start;
+ text = removedText;
+ }
+
+ public void undo () throws CannotUndoException
+ {
+ super.undo();
+ try
+ {
+ insertString(where, text);
+ }
+ catch (BadLocationException ble)
+ {
+ throw new CannotUndoException();
+ }
+ }
+
+ public void redo () throws CannotUndoException
+ {
+ super.redo();
+ try
+ {
+ remove(where, text.length());
+ }
+ catch (BadLocationException ble)
+ {
+ throw new CannotRedoException();
+ }
+ }
+
+ }
+
/** The serialization UID (compatible with JDK1.5). */
private static final long serialVersionUID = -6226052713477823730L;
@@ -259,8 +297,7 @@
* @param where the position where the string is inserted
* @param str the string that is to be inserted
*
- * @return an UndoableEdit object (currently not supported, so
- * null
is returned)
+ * @return an UndoableEdit object
*
* @throws BadLocationException if where
is not a valid
* location in the buffer
@@ -287,8 +324,7 @@
* @param where the position where the content is to be removed
* @param nitems number of characters to be removed
*
- * @return an UndoableEdit object (currently not supported, so
- * null
is returned)
+ * @return an UndoableEdit object
*
* @throws BadLocationException if where
is not a valid
* location in the buffer
@@ -305,9 +341,10 @@
throw new BadLocationException("where + nitems cannot be greater"
+ " than the content length", where + nitems);
+ String removedText = getString(where, nitems);
replace(where, nitems, null, 0);
- return null;
+ return new UndoRemove(where, removedText);
}
/**