javax.swing.undo

Class CompoundEdit

Implemented Interfaces:
Serializable, UndoableEdit
Known Direct Subclasses:
AbstractDocument.DefaultDocumentEvent, UndoManager

public class CompoundEdit
extends AbstractUndoableEdit

An editing action that consists of multiple UndoableEdits.

The use of a CompoundEdit is divided in two separate phases.

  1. In the first phase, the CompoundEdit is initialized. After a new instance of CompoundEdit has been created, addEdit(UndoableEdit) is called for each element of the compound. To terminate the initialization phase, call end().
  2. In the second phase, the the CompoundEdit can be used, typically by invoking undo() and redo().
See Also:
Serialized Form

Field Summary

protected Vector
edits
The UndoableEdits being combined into a compound editing action.

Fields inherited from class javax.swing.undo.AbstractUndoableEdit

RedoName, UndoName

Constructor Summary

CompoundEdit()
Constructs a new CompoundEdit.

Method Summary

boolean
addEdit(UndoableEdit edit)
Incorporates another editing action into this one, thus forming a combined edit.
boolean
canRedo()
Determines whether it would be possible to redo this editing action.
boolean
canUndo()
Determines whether it would be possible to undo this editing action.
void
die()
Informs this edit action, and all compound edits, that they will no longer be used.
void
end()
Informs this CompoundEdit that its construction phase has been completed.
String
getPresentationName()
Returns a human-readable, localized name that describes this editing action and can be displayed to the user.
String
getRedoPresentationName()
Calculates a localized message text for presenting the redo action to the user.
String
getUndoPresentationName()
Calculates a localized message text for presenting the undo action to the user.
boolean
isInProgress()
Determines whether the initial construction phase of this CompoundEdit is still in progress.
boolean
isSignificant()
Determines whether this editing action is significant enough for being seperately undoable by the user.
protected UndoableEdit
lastEdit()
Returns the the UndoableEdit that was last added to this compound.
void
redo()
Redoes all edits that are part of of this CompoundEdit.
String
toString()
Calculates a string that may be useful for debugging.
void
undo()
Undoes all edits that are part of of this CompoundEdit.

Methods inherited from class javax.swing.undo.AbstractUndoableEdit

addEdit, canRedo, canUndo, die, getPresentationName, getRedoPresentationName, getUndoPresentationName, isSignificant, redo, replaceEdit, toString, undo

Methods inherited from class java.lang.Object

clone, equals, extends Object> getClass, finalize, hashCode, notify, notifyAll, toString, wait, wait, wait

Field Details

edits

protected Vector edits
The UndoableEdits being combined into a compound editing action.

Constructor Details

CompoundEdit

public CompoundEdit()
Constructs a new CompoundEdit.

Method Details

addEdit

public boolean addEdit(UndoableEdit edit)
Incorporates another editing action into this one, thus forming a combined edit.

If this edit’s end() method has been called before, false is returned immediately. Otherwise, the last added edit is given the opportunity to incorporate edit. If this fails, edit is given the opportunity to replace the last added edit. If this fails as well, edit gets added as a new compound to edits.

Specified by:
addEdit in interface UndoableEdit
Overrides:
addEdit in interface AbstractUndoableEdit
Parameters:
edit - the editing action being added.
Returns:
true if edit could somehow be incorporated; false if edit has not been incorporated because end() was called before.

canRedo

public boolean canRedo()
Determines whether it would be possible to redo this editing action. The result will be true if end() has been called on this CompoundEdit, die() has not yet been called, and the edit has not been redone already.
Specified by:
canRedo in interface UndoableEdit
Overrides:
canRedo in interface AbstractUndoableEdit
Returns:
true to indicate that this action can be redone; false otherwise.
See Also:
redo(), canUndo()

canUndo

public boolean canUndo()
Determines whether it would be possible to undo this editing action. The result will be true if end() has been called on this CompoundEdit, die() has not yet been called, and the edit has not been undone already.
Specified by:
canUndo in interface UndoableEdit
Overrides:
canUndo in interface AbstractUndoableEdit
Returns:
true to indicate that this action can be undone; false otherwise.
See Also:
undo(), canRedo()

die

public void die()
Informs this edit action, and all compound edits, that they will no longer be used. Some actions might use this information to release resources such as open files. Called by UndoManager before this action is removed from the edit queue.

The compound elements will receive the die message in the reverse order of addition.

Specified by:
die in interface UndoableEdit
Overrides:
die in interface AbstractUndoableEdit

end

public void end()
Informs this CompoundEdit that its construction phase has been completed. After this method has been called, undo() and redo() may be called, isInProgress() will return false, and all attempts to add further edits will fail.

getPresentationName

public String getPresentationName()
Returns a human-readable, localized name that describes this editing action and can be displayed to the user.

The implementation delegates the call to the last added edit action. If no edit has been added yet, the inherited implementation will be invoked, which always returns an empty string.

Specified by:
getPresentationName in interface UndoableEdit
Overrides:
getPresentationName in interface AbstractUndoableEdit

getRedoPresentationName

public String getRedoPresentationName()
Calculates a localized message text for presenting the redo action to the user.

The implementation delegates the call to the last added edit action. If no edit has been added yet, the inherited implementation will be invoked.

Specified by:
getRedoPresentationName in interface UndoableEdit
Overrides:
getRedoPresentationName in interface AbstractUndoableEdit

getUndoPresentationName

public String getUndoPresentationName()
Calculates a localized message text for presenting the undo action to the user.

The implementation delegates the call to the last added edit action. If no edit has been added yet, the inherited implementation will be invoked.

Specified by:
getUndoPresentationName in interface UndoableEdit
Overrides:
getUndoPresentationName in interface AbstractUndoableEdit

isInProgress

public boolean isInProgress()
Determines whether the initial construction phase of this CompoundEdit is still in progress. During this phase, edits may be added. After initialization has been terminated by calling end(), undo() and redo() can be used.
Returns:
true if the initialization phase is still in progress; false if end() has been called.
See Also:
end()

isSignificant

public boolean isSignificant()
Determines whether this editing action is significant enough for being seperately undoable by the user. A typical significant action would be the resizing of an object. However, changing the selection in a text document would usually not be considered significant.

A CompoundEdit is significant if any of its elements are significant.

Specified by:
isSignificant in interface UndoableEdit
Overrides:
isSignificant in interface AbstractUndoableEdit

lastEdit

protected UndoableEdit lastEdit()
Returns the the UndoableEdit that was last added to this compound.

redo

public void redo()
            throws CannotRedoException
Redoes all edits that are part of of this CompoundEdit. The compound elements will receive the undo message in the same order as they were added.
Specified by:
redo in interface UndoableEdit
Overrides:
redo in interface AbstractUndoableEdit
Throws:
CannotRedoException - if canRedo() returns false. This can happen if end() has not been called on this CompoundEdit, or if this edit has already been redone.
See Also:
canRedo(), undo()

toString

public String toString()
Calculates a string that may be useful for debugging.
Overrides:
toString in interface AbstractUndoableEdit

undo

public void undo()
            throws CannotUndoException
Undoes all edits that are part of of this CompoundEdit. The compound elements will receive the undo message in the reverse order of addition.
Specified by:
undo in interface UndoableEdit
Overrides:
undo in interface AbstractUndoableEdit
Throws:
CannotUndoException - if canUndo() returns false. This can happen if end() has not been called on this CompoundEdit, or if this edit has already been undone.
See Also:
canUndo(), redo()

CompoundEdit.java -- Combines multiple UndoableEdits. Copyright (C) 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version.