/****************************************************************************** * Copyright (c) 2002, 2006 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.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Point; import org.eclipse.emf.transaction.RunnableWithResult; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.Request; import org.eclipse.gef.requests.DirectEditRequest; import org.eclipse.gmf.runtime.common.core.util.Log; import org.eclipse.gmf.runtime.common.core.util.Trace; import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ConstrainedToolbarLayoutEditPolicy; import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIDebugOptions; import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIPlugin; import org.eclipse.gmf.runtime.diagram.ui.internal.DiagramUIStatusCodes; import org.eclipse.gmf.runtime.diagram.ui.internal.editparts.IContainedEditPart; import org.eclipse.gmf.runtime.diagram.ui.requests.RequestConstants; import org.eclipse.gmf.runtime.notation.Node; import org.eclipse.gmf.runtime.notation.NotationPackage; import org.eclipse.gmf.runtime.notation.View; /** * the top graphic controller * @author mmostafa * */ public abstract class TopGraphicEditPart extends GraphicalEditPart implements IContainedEditPart { /** * constructor * @param view the view controlled by this edit part */ public TopGraphicEditPart(View view) { super(view); } protected void createDefaultEditPolicies() { super.createDefaultEditPolicies(); installEditPolicy( EditPolicy.LAYOUT_ROLE, new ConstrainedToolbarLayoutEditPolicy()); } /** * Return a list of all resizable Compartment edit parts that exist in the * children list of this edit part * getResizableCompartments() * @return List of <code>EditPart<code> */ public List getResizableCompartments() { List resizableChildren = new ArrayList(); Iterator it = getChildren().iterator(); while( it.hasNext() ) { Object child = it.next(); if ( child instanceof ResizableCompartmentEditPart) { resizableChildren.add( child ); } } return resizableChildren; } /** * Gets all children, of this <code>EditPart<code>'s model, that had a * <code>DrawerStyle</code> installed on them * @return List of <code>View<code>s */ public List getResizableNotationViews() { View view = getNotationView(); if (view!=null){ List resizableChildren = new ArrayList(); Iterator childrenIterator = view.getChildren().iterator(); while (childrenIterator.hasNext()){ View child = (View)childrenIterator.next(); if (child instanceof Node && ((Node)child).getStyle(NotationPackage.eINSTANCE.getDrawerStyle())!=null){ resizableChildren.add(child); } } return resizableChildren; } return Collections.EMPTY_LIST; } /** * @see org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart#performDirectEditRequest(org.eclipse.gef.requests.DirectEditRequest) */ protected void performDirectEditRequest(Request request) { EditPart editPart = this; if (request instanceof DirectEditRequest){ Point p = new Point(((DirectEditRequest)request).getLocation()); getFigure().translateToRelative(p); IFigure fig = getFigure().findFigureAt(p); editPart =(EditPart) getViewer().getVisualPartMap().get(fig); } if (editPart == this) { try { editPart = (EditPart) getEditingDomain().runExclusive( new RunnableWithResult.Impl() { public void run() { setResult(getPrimaryChildEditPart()); } }); } catch (InterruptedException e) { Trace.catching(DiagramUIPlugin.getInstance(), DiagramUIDebugOptions.EXCEPTIONS_CATCHING, getClass(), "performDirectEditRequest", e); //$NON-NLS-1$ Log.error(DiagramUIPlugin.getInstance(), DiagramUIStatusCodes.IGNORED_EXCEPTION_WARNING, "performDirectEditRequest", e); //$NON-NLS-1$ } if (editPart != null){ editPart.performRequest(request); } } } /** * @see org.eclipse.gef.EditPart#understandsRequest(org.eclipse.gef.Request) */ public boolean understandsRequest(Request req) { return RequestConstants.REQ_DIRECT_EDIT == req.getType() || super.understandsRequest(req); } }