/*******************************************************************************
* Copyright (c) 2000, 2005 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.gef.ui.actions;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.RequestConstants;
import org.eclipse.gef.internal.GEFMessages;
/**
* An action to perform direct editing on a selected part. The DirectEditAction provides
* the function of sending a <code>Request</code> of the type {@link
* RequestConstants#REQ_DIRECT_EDIT} to a single EditPart. The request will be sent to the
* editpart using {@link org.eclipse.gef.EditPart#performRequest(Request)}.
* <P>
* This action will be enabled whenever the current selection is one EditPart, and that
* editpart returns <code>true</code> for {@link EditPart#understandsRequest(Request)},
* using the {@link #getDirectEditRequest()}.
* <P>
* Clients can control the request that is sent by calling {@link
* #setDirectEditRequest(Request)}. The {@link org.eclipse.gef.requests.DirectEditRequest}
* class allows the client to specify the <i>feature</i> that should be edited when
* invoked.
* @author hudsonr
*/
public class DirectEditAction
extends SelectionAction
{
/** @deprecated */
public static final String ID = GEFActionConstants.DIRECT_EDIT;
private Request directEditRequest = new Request(RequestConstants.REQ_DIRECT_EDIT);
/**
* Same as {@link #DirectEditAction(IWorkbenchPart)}.
* @param editor the editor
*/
public DirectEditAction(IEditorPart editor) {
this((IWorkbenchPart)editor);
}
/**
* Constructs a DirectEditAction using the specified part.
* @param part the workbench part
*/
public DirectEditAction(IWorkbenchPart part) {
super(part);
}
/**
* returns <code>true</code> if there is exactly 1 EditPart selected that understand
* a request of type: {@link RequestConstants#REQ_DIRECT_EDIT}.
* @return <code>true</code> if enabled
*/
protected boolean calculateEnabled() {
if (getSelectedObjects().size() == 1
&& (getSelectedObjects().get(0) instanceof EditPart)) {
EditPart part = (EditPart)getSelectedObjects().get(0);
return part.understandsRequest(getDirectEditRequest());
}
return false;
}
/**
* Returns the <code>Request</code> being used.
* @return the request
*/
protected Request getDirectEditRequest() {
return directEditRequest;
}
/**
* @see org.eclipse.jface.action.IAction#run()
*/
public void run() {
try {
EditPart part = (EditPart)getSelectedObjects().get(0);
part.performRequest(getDirectEditRequest());
} catch (ClassCastException e) {
Display.getCurrent().beep();
} catch (IndexOutOfBoundsException e) {
Display.getCurrent().beep();
}
}
/**
* Clients may override the request that is used to perform the direct edit.
* @param req the new request to be used
*/
public void setDirectEditRequest(Request req) {
directEditRequest = req;
}
/**
* @see org.eclipse.gef.ui.actions.WorkbenchPartAction#init()
*/
protected void init() {
super.init();
setText(GEFMessages.RenameAction_Label);
setToolTipText(GEFMessages.RenameAction_Tooltip);
setId(GEFActionConstants.DIRECT_EDIT);
}
}