/******************************************************************************* * Copyright (c) 2006 Sybase, Inc. and others. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Sybase, Inc. - initial API and implementation *******************************************************************************/ package org.eclipse.jst.pagedesigner.editors.actions; import java.text.MessageFormat; import org.eclipse.emf.common.command.Command; import org.eclipse.gef.ui.actions.UpdateAction; import org.eclipse.jface.action.Action; import org.eclipse.jst.pagedesigner.editors.SimpleGraphicalEditor; import org.eclipse.wst.sse.core.internal.undo.IStructuredTextUndoManager; /** * SSE has a IDocumentSelectionMediator mechanism, basically it let the viewer * that invoke the redo/undo to reset the selection after redo/undo. * * To utilize this feature, we can't directly use the undo/redo action of the * text editor for the designer, since in that way it will be the TextEditor to * handle selection after redo/undo. * * @author mengbo * @version 1.5 */ public class DesignerUndoRedoAction extends Action implements UpdateAction { private boolean _undo = true; // if false means redo private final SimpleGraphicalEditor _designer; /** * @param undo * @param designer * */ public DesignerUndoRedoAction(boolean undo, SimpleGraphicalEditor designer) { this._undo = undo; this._designer = designer; if (undo) { setText(ActionsMessages.getString("DesignerUndoRedoAction.UNDO")); //$NON-NLS-1$ } else { setText(ActionsMessages.getString("DesignerUndoRedoAction.REDO")); //$NON-NLS-1$ } } /* * (non-Javadoc) * * @see org.eclipse.gef.ui.actions.UpdateAction#update() */ public void update() { IStructuredTextUndoManager undoManager = _designer.getHTMLEditor() .getModel().getUndoManager(); if (_undo) { Command c = undoManager.getUndoCommand(); this.setEnabled(undoManager.undoable()); if (c != null) { String label = c.getLabel(); this .setText(MessageFormat .format( ActionsMessages .getString("DesignerUndoRedoAction.UNDO_LABEL"), new Object[] { label })); //$NON-NLS-1$ } else { this.setText(ActionsMessages .getString("DesignerUndoRedoAction.UNDO")); //$NON-NLS-1$ } } else { Command c = undoManager.getRedoCommand(); this.setEnabled(undoManager.redoable()); if (c != null) { String label = c.getLabel(); this .setText(MessageFormat .format( ActionsMessages .getString("DesignerUndoRedoAction.REDO_LABEL"), new Object[] { label })); //$NON-NLS-1$ } else { this.setText(ActionsMessages .getString("DesignerUndoRedoAction.REDO")); //$NON-NLS-1$ } } } /* * (non-Javadoc) * * @see org.eclipse.jface.action.Action#run() */ public void run() { IStructuredTextUndoManager undoManager = _designer.getHTMLEditor() .getModel().getUndoManager(); if (_undo) { undoManager.undo(_designer); } else { undoManager.redo(_designer); } } }