| /****************************************************************************** |
| * Copyright (c) 2000, 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.editparts; |
| |
| import java.util.Iterator; |
| |
| import org.eclipse.emf.ecore.EObject; |
| import org.eclipse.gef.DragTracker; |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.gef.Request; |
| import org.eclipse.gef.requests.SelectionRequest; |
| import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; |
| import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.IContainedEditPart; |
| import org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies.DelegatingMouseEventsEditPolicy; |
| import org.eclipse.gmf.runtime.gef.ui.internal.tools.DelegatingDragEditPartsTracker; |
| |
| /** |
| * @author melaasar |
| * |
| * An editpart that controls a compartment view |
| */ |
| public abstract class CompartmentEditPart extends GraphicalEditPart implements IContainedEditPart { |
| |
| /** |
| * Constructs a new compartment edit part |
| * @param view |
| */ |
| public CompartmentEditPart(EObject model) { |
| super(model); |
| } |
| |
| protected void createDefaultEditPolicies() { |
| super.createDefaultEditPolicies(); |
| installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE, |
| new DelegatingMouseEventsEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE)); |
| installEditPolicy(EditPolicyRoles.POPUPBAR_ROLE, |
| new DelegatingMouseEventsEditPolicy(EditPolicyRoles.POPUPBAR_ROLE)); |
| } |
| |
| /** |
| * By default, all compartment edit parts get selectable only if |
| * the compartment's top level container matches the top level |
| * container of the editpart that currently has the keyboard focus |
| * i.e: you need to select the shape first before selecting a compartment |
| * but once a compartment is selected, a peer compartment can also be selected |
| * @see org.eclipse.gef.EditPart#isSelectable() |
| */ |
| public boolean isSelectable() { |
| if (super.isSelectable()) { |
| EditPart focusPart = getViewer().getFocusEditPart(); |
| if (focusPart instanceof IGraphicalEditPart) { |
| TopGraphicEditPart focusTopEP = |
| ((IGraphicalEditPart) focusPart).getTopGraphicEditPart(); |
| TopGraphicEditPart myTopEP = getTopGraphicEditPart(); |
| if (myTopEP == focusTopEP) { |
| // check if the selection contains only editparts belonging to |
| // the same top level editpart |
| Iterator selection = |
| getViewer().getSelectedEditParts().iterator(); |
| while (selection.hasNext()) { |
| Object editPart = selection.next(); |
| if (editPart instanceof IGraphicalEditPart |
| && (((IGraphicalEditPart) editPart) |
| .getTopGraphicEditPart() |
| != myTopEP)) |
| return false; |
| } |
| return true; |
| } |
| } |
| } |
| return false; |
| } |
| |
| /** |
| * @see org.eclipse.gef.EditPart#getDragTracker(org.eclipse.gef.Request) |
| */ |
| public DragTracker getDragTracker(Request request) { |
| if (request instanceof SelectionRequest |
| && ((SelectionRequest) request).getLastButtonPressed() == 3) |
| return null; |
| return new DelegatingDragEditPartsTracker( |
| this, |
| getTopGraphicEditPart()); |
| } |
| |
| } |