278 lines · 8.8 KB · Java
RawDownload
/* * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.  Oracle designates this * particular file as subject to the "Classpath" exception as provided * by Oracle in the LICENSE file that accompanied this code. * * This code 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 * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. */ package javax.swing.undo; import java.io.Serializable;import javax.swing.UIManager; /** * An abstract implementation of <code>UndoableEdit</code>, * implementing simple responses to all boolean methods in * that interface. * * @author Ray Ryan */public class AbstractUndoableEdit implements UndoableEdit, Serializable {     /**     * String returned by <code>getUndoPresentationName</code>;     * as of Java 2 platform v1.3.1 this field is no longer used. This value     * is now localized and comes from the defaults table with key     * <code>AbstractUndoableEdit.undoText</code>.     *     * @see javax.swing.UIDefaults     */    protected static final String UndoName = "Undo";     /**     * String returned by <code>getRedoPresentationName</code>;     * as of Java 2 platform v1.3.1 this field is no longer used. This value     * is now localized and comes from the defaults table with key     * <code>AbstractUndoableEdit.redoText</code>.     *     * @see javax.swing.UIDefaults     */    protected static final String RedoName = "Redo";     /**     * Defaults to true; becomes false if this edit is undone, true     * again if it is redone.     */    boolean hasBeenDone;     /**     * True if this edit has not received <code>die</code>; defaults     * to <code>true</code>.     */    boolean alive;     /**     * Creates an <code>AbstractUndoableEdit</code> which defaults     * <code>hasBeenDone</code> and <code>alive</code> to <code>true</code>.     */    public AbstractUndoableEdit() {        super();         hasBeenDone = true;        alive = true;    }     /**     * Sets <code>alive</code> to false. Note that this     * is a one way operation; dead edits cannot be resurrected.     * Sending <code>undo</code> or <code>redo</code> to     * a dead edit results in an exception being thrown.     *     * <p>Typically an edit is killed when it is consolidated by     * another edit's <code>addEdit</code> or <code>replaceEdit</code>     * method, or when it is dequeued from an <code>UndoManager</code>.     */    public void die() {        alive = false;    }     /**     * Throws <code>CannotUndoException</code> if <code>canUndo</code>     * returns <code>false</code>. Sets <code>hasBeenDone</code>     * to <code>false</code>. Subclasses should override to undo the     * operation represented by this edit. Override should begin with     * a call to super.     *     * @exception CannotUndoException if <code>canUndo</code>     *    returns <code>false</code>     * @see     #canUndo     */    public void undo() throws CannotUndoException {        if (!canUndo()) {            throw new CannotUndoException();        }        hasBeenDone = false;    }     /**     * Returns true if this edit is <code>alive</code>     * and <code>hasBeenDone</code> is <code>true</code>.     *     * @return true if this edit is <code>alive</code>     *    and <code>hasBeenDone</code> is <code>true</code>     *     * @see     #die     * @see     #undo     * @see     #redo     */    public boolean canUndo() {        return alive && hasBeenDone;    }     /**     * Throws <code>CannotRedoException</code> if <code>canRedo</code>     * returns false. Sets <code>hasBeenDone</code> to <code>true</code>.     * Subclasses should override to redo the operation represented by     * this edit. Override should begin with a call to super.     *     * @exception CannotRedoException if <code>canRedo</code>     *     returns <code>false</code>     * @see     #canRedo     */    public void redo() throws CannotRedoException {        if (!canRedo()) {            throw new CannotRedoException();        }        hasBeenDone = true;    }     /**     * Returns <code>true</code> if this edit is <code>alive</code>     * and <code>hasBeenDone</code> is <code>false</code>.     *     * @return <code>true</code> if this edit is <code>alive</code>     *   and <code>hasBeenDone</code> is <code>false</code>     * @see     #die     * @see     #undo     * @see     #redo     */    public boolean canRedo() {        return alive && !hasBeenDone;    }     /**     * This default implementation returns false.     *     * @param anEdit the edit to be added     * @return false     *     * @see UndoableEdit#addEdit     */    public boolean addEdit(UndoableEdit anEdit) {        return false;    }     /**     * This default implementation returns false.     *     * @param anEdit the edit to replace     * @return false     *     * @see UndoableEdit#replaceEdit     */    public boolean replaceEdit(UndoableEdit anEdit) {        return false;    }     /**     * This default implementation returns true.     *     * @return true     * @see UndoableEdit#isSignificant     */    public boolean isSignificant() {        return true;    }     /**     * This default implementation returns "". Used by     * <code>getUndoPresentationName</code> and     * <code>getRedoPresentationName</code> to     * construct the strings they return. Subclasses should override to     * return an appropriate description of the operation this edit     * represents.     *     * @return the empty string ""     *     * @see     #getUndoPresentationName     * @see     #getRedoPresentationName     */    public String getPresentationName() {        return "";    }     /**     * Retreives the value from the defaults table with key     * <code>AbstractUndoableEdit.undoText</code> and returns     * that value followed by a space, followed by     * <code>getPresentationName</code>.     * If <code>getPresentationName</code> returns "",     * then the defaults value is returned alone.     *     * @return the value from the defaults table with key     *    <code>AbstractUndoableEdit.undoText</code>, followed     *    by a space, followed by <code>getPresentationName</code>     *    unless <code>getPresentationName</code> is "" in which     *    case, the defaults value is returned alone.     * @see #getPresentationName     */    public String getUndoPresentationName() {        String name = getPresentationName();        if (!"".equals(name)) {            name = UIManager.getString("AbstractUndoableEdit.undoText") +                " " + name;        } else {            name = UIManager.getString("AbstractUndoableEdit.undoText");        }         return name;    }     /**     * Retreives the value from the defaults table with key     * <code>AbstractUndoableEdit.redoText</code> and returns     * that value followed by a space, followed by     * <code>getPresentationName</code>.     * If <code>getPresentationName</code> returns "",     * then the defaults value is returned alone.     *     * @return the value from the defaults table with key     *    <code>AbstractUndoableEdit.redoText</code>, followed     *    by a space, followed by <code>getPresentationName</code>     *    unless <code>getPresentationName</code> is "" in which     *    case, the defaults value is returned alone.     * @see #getPresentationName     */    public String getRedoPresentationName() {        String name = getPresentationName();        if (!"".equals(name)) {            name = UIManager.getString("AbstractUndoableEdit.redoText") +                " " + name;        } else {            name = UIManager.getString("AbstractUndoableEdit.redoText");        }         return name;    }     /**     * Returns a string that displays and identifies this     * object's properties.     *     * @return a String representation of this object     */    public String toString()    {        return super.toString()            + " hasBeenDone: " + hasBeenDone            + " alive: " + alive;    }}