blob: 6c07f00e19eaf981bc165715f5ad8d6a81806af0 [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2002, 2003 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.gmf.runtime.diagram.ui.editpolicies;
import org.eclipse.gef.EditPart;
import org.eclipse.gef.Request;
import org.eclipse.gef.commands.Command;
import org.eclipse.gef.editpolicies.AbstractEditPolicy;
import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants;
/** Open Shape Edit Policy
* <p>
* This edit policy handles double click (open) gestures on shapes. When the user
* double clicks on an edit part, GEF creates a REQ_OPEN request and subclasses of this
* edit policy should handle that request. This policy should be installed with the
* policy role OPEN_ROLE. Normally, the corresponding edit policy role
* would be defined in {@link org.eclipse.gef.EditPolicy}, but no such role currently exists.
* <p>
* This edit policy is different from "DirectEditPolicy" even though both are a result of
* a double click on a representation in a diagram. With the DIRECT_EDIT_ROLE, some type
* of in-diagram editing is performed (e.g., modify a text label, move line segment nodes,
* etc.). The OPEN_ROLE policy is typically installed on edit part whose underlying data
* can only be examined/modified by opening another editor window. For example, if an edit
* part represented another diagram, then an "open" request on that edit part should result
* in the corresponding diagram being opened in another editor window.
* <p>
* Although edit policies for both DIRECT_EDIT_ROLE and OPEN_ROLE could be installed on
* an edit part, typically only one of these roles is appropriate.
* <p>
* @author Kevin Cornell
*/
public abstract class OpenEditPolicy extends AbstractEditPolicy {
/**
* Returns the <code>Command</code> to perform the open request.
* @param request the Request
* @return the command to perform the open
*/
protected abstract Command getOpenCommand(Request request);
/**
* Intercept a command request for REQ_OPEN.
* <p>
* @see org.eclipse.gef.EditPolicy#getCommand(org.eclipse.gef.Request)
*/
public Command getCommand(Request request) {
if (RequestConstants.REQ_OPEN.equals(request.getType()))
return getOpenCommand(request);
return null;
}
/**
* Determine if the request type is supported by this edit policy.
* <p>
* @see org.eclipse.gef.EditPolicy#understandsRequest(org.eclipse.gef.Request)
*/
public boolean understandsRequest(Request request) {
if (RequestConstants.REQ_OPEN.equals(request.getType()))
return true;
return false;
}
/**
* By default, the target edit part is the host edit part.
* <p>
* @see org.eclipse.gef.EditPolicy#getTargetEditPart(Request)
*/
public EditPart getTargetEditPart(Request request) {
if (understandsRequest(request))
return getHost();
return null;
}
}