blob: 19567dda113d0c678cf5defe75caab4853719da2 [file] [log] [blame]
/**
* <copyright>
*
* Copyright (c) 2002-2004 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v10.html
*
* Contributors:
* IBM - Initial API and implementation
*
* </copyright>
*
* $Id: CommandStack.java,v 1.1 2005/04/15 23:31:25 david_williams Exp $
*/
package org.eclipse.emf.common.command;
/**
* A simple and obvious interface for an undoable stack of commands with a listener.
* See {@link Command} for more details about the command methods that this implementation uses
* and {@link CommandStackListener} for details about the listener.
*/
public interface CommandStack
{
/**
* Clears any redoable commands not yet redone, adds the command, and then executes the command.
* @param command the command to execute.
*/
void execute(Command command);
/**
* Returns whether the top command on the stack can be undone.
* @return whether the top command on the stack can be undone.
*/
boolean canUndo();
/**
* Moves the top of the stack down, undoing what was formerly the top command.
*/
void undo();
/**
* Returns whether there are commands past the top of the stack that can be redone.
* @return whether there are commands past the top of the stack that can be redone.
*/
boolean canRedo();
/**
* Returns the command that will be undone if {@link #undo} is called.
* @return the command that will be undone if {@link #undo} is called.
*/
public Command getUndoCommand();
/**
* Returns the command that will be redone if {@link #redo} is called.
* @return the command that will be redone if {@link #redo} is called.
*/
public Command getRedoCommand();
/**
* Returns the command most recently executed, undone, or redone.
* @return the command most recently executed, undone, or redone.
*/
public Command getMostRecentCommand();
/**
* Moves the top of the stack up, redoing the new top command.
*/
void redo();
/**
* Disposes all the commands in the stack.
*/
void flush();
/**
* Adds a listener to the command stack, which will be notified whenever a command has been processed on the stack.
* @param listener the listener to add.
*/
void addCommandStackListener(CommandStackListener listener);
/**
* Removes a listener from the command stack.
* @param listener the listener to remove.
*/
void removeCommandStackListener(CommandStackListener listener);
}