### Eclipse Workspace Patch 1.0 #P org.eclipse.gmf.graphdef.editor Index: src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/AbstractFigureEditPart.java =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.graphdef.editor/src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/AbstractFigureEditPart.java,v retrieving revision 1.1 diff -u -r1.1 AbstractFigureEditPart.java --- src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/AbstractFigureEditPart.java 2 Mar 2007 18:36:49 -0000 1.1 +++ src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/AbstractFigureEditPart.java 13 Apr 2007 15:03:17 -0000 @@ -10,8 +10,10 @@ */ package org.eclipse.gmf.graphdef.editor.edit.parts; +import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; +import java.util.List; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; @@ -21,10 +23,13 @@ import org.eclipse.draw2d.XYLayout; import org.eclipse.draw2d.geometry.PointList; import org.eclipse.draw2d.geometry.Rectangle; +import org.eclipse.gef.DragTracker; import org.eclipse.gef.EditPart; +import org.eclipse.gef.tools.AbstractTool; import org.eclipse.gmf.gmfgraph.Alignment; import org.eclipse.gmf.gmfgraph.BorderLayout; import org.eclipse.gmf.gmfgraph.BorderLayoutData; +import org.eclipse.gmf.gmfgraph.Figure; import org.eclipse.gmf.gmfgraph.FlowLayout; import org.eclipse.gmf.gmfgraph.GMFGraphPackage; import org.eclipse.gmf.gmfgraph.GridLayout; @@ -35,10 +40,15 @@ import org.eclipse.gmf.gmfgraph.Point; import org.eclipse.gmf.gmfgraph.XYLayoutData; import org.eclipse.gmf.runtime.diagram.ui.editparts.GraphicalEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart; import org.eclipse.gmf.runtime.diagram.ui.editparts.ShapeNodeEditPart; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.ConnectionHandleEditPolicy; +import org.eclipse.gmf.runtime.diagram.ui.editpolicies.EditPolicyRoles; +import org.eclipse.gmf.runtime.diagram.ui.handles.ConnectionHandle; import org.eclipse.gmf.runtime.notation.View; public abstract class AbstractFigureEditPart extends ShapeNodeEditPart { + public static final String EMPTY_STRING = ""; //$NON-NLS-1$ public AbstractFigureEditPart(View view) { super(view); @@ -201,15 +211,13 @@ // not implemented yet in .gmfgraph // GridLayout gridLayout = (GridLayout) layout; /* - * < % = - * importManager.getImportedName("org.eclipse.gmf.internal.codegen.draw2d.GridLayout")%> - * layoutManager; if (myFigure.getLayoutManager() instanceof < % = - * importManager.getImportedName("org.eclipse.gmf.internal.codegen.draw2d.GridLayout")%>) { - * layoutManager = (< % = - * importManager.getImportedName("org.eclipse.gmf.internal.codegen.draw2d.GridLayout")%>) - * myFigure.getLayoutManager(); } else { layoutManager = new < % = - * importManager.getImportedName("org.eclipse.gmf.internal.codegen.draw2d.GridLayout")%>(); - * myFigure.setLayoutManager(layoutManager); } + org.eclipse.gmf.internal.codegen.draw2d.GridLayout layoutManager; + if (getFigureLayoutManager() instanceof org.eclipse.gmf.internal.codegen.draw2d.GridLayout) { + layoutManager = (org.eclipse.gmf.internal.codegen.draw2d.GridLayout)getFigureLayoutManager(); + } else { + layoutManager = new org.eclipse.gmf.internal.codegen.draw2d.GridLayout(); + } + setFigureLayoutManager(layoutManager); } */ break; } @@ -284,5 +292,65 @@ } return result; } + + protected void createDefaultEditPolicies() { + super.createDefaultEditPolicies(); + + // override default connection handles behavior, that could be installed by parent + installEditPolicy(EditPolicyRoles.CONNECTION_HANDLES_ROLE, new MyConnectionHandleEditPolicy()); + } + + private static class MyConnectionHandleEditPolicy extends ConnectionHandleEditPolicy { + + protected List getHandleFigures() { + IGraphicalEditPart selectedPart = (IGraphicalEditPart) getHost(); + List result = new ArrayList(selectedPart.getChildren().size()); + for (int i=0; i + + + + + + + + + Index: templates/aspects/xpt/diagram/editparts/NodeEditPart.xpt =================================================================== RCS file: /cvsroot/modeling/org.eclipse.gmf/plugins/org.eclipse.gmf.graphdef.editor/templates/aspects/xpt/diagram/editparts/NodeEditPart.xpt,v retrieving revision 1.2 diff -u -r1.2 NodeEditPart.xpt --- templates/aspects/xpt/diagram/editparts/NodeEditPart.xpt 2 Mar 2007 15:39:20 -0000 1.2 +++ templates/aspects/xpt/diagram/editparts/NodeEditPart.xpt 13 Apr 2007 15:03:17 -0000 @@ -511,6 +511,18 @@ «ENDDEFINE» «AROUND setupNodePlate FOR gmfgen::GenNode-» -«IF generateSyncronizationCode(metaclass()) && isInnerClassViewmap(viewmap)»myNodeFigure = result;«ELSE»«targetDef.proceed()»«ENDIF-» -«ENDAROUND» +«IF generateSyncronizationCode(metaclass()) && isInnerClassViewmap(viewmap)-» +«EXPAND setInsets-» +myNodeFigure = result; +«ELSE»«targetDef.proceed()-»«ENDIF»«ENDAROUND» + +«DEFINE setInsets FOR gmfgen::GenChildNode-» +«IF containers.typeSelect(gmfgen::GenCompartment).size() > 0-» +org.eclipse.draw2d.LineBorder contourBorder = new org.eclipse.draw2d.LineBorder(org.eclipse.swt.widgets.Display.getDefault().getSystemColor(org.eclipse.swt.SWT.COLOR_WIDGET_NORMAL_SHADOW)); +org.eclipse.draw2d.MarginBorder marginBorder = new org.eclipse.draw2d.MarginBorder(5); +org.eclipse.draw2d.CompoundBorder compoundBorder = new org.eclipse.draw2d.CompoundBorder(contourBorder, marginBorder); +result.setBorder(compoundBorder);«ENDIF»«ENDDEFINE» + +«DEFINE setInsets FOR gmfgen::GenNode-» +«ENDDEFINE» Index: templates/editor/manifest.mfjet =================================================================== RCS file: templates/editor/manifest.mfjet diff -N templates/editor/manifest.mfjet --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ templates/editor/manifest.mfjet 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,80 @@ +<%@ jet package="org.eclipse.gmf.codegen.templates.editor" class="ManifestGenerator" + imports="org.eclipse.gmf.codegen.gmfgen.* org.eclipse.emf.codegen.ecore.genmodel.* java.util.*"%> +<% +final GenPlugin genPlugin = (GenPlugin) argument; +final GenModel genModel = genPlugin.getEditorGen().getDomainGenModel(); +final Set requiredPluginIDs = new LinkedHashSet(); +if (genModel != null) { + requiredPluginIDs.add(genModel.getModelPluginID()); + requiredPluginIDs.add(genModel.getEditPluginID()); + + for (Iterator it = genModel.getAllUsedGenPackagesWithClassifiers().iterator(); it.hasNext();) { + GenModel nextGenModel = ((GenPackage) it.next()).getGenModel(); + if (nextGenModel.hasEditSupport()) { + requiredPluginIDs.add(nextGenModel.getModelPluginID()); + requiredPluginIDs.add(nextGenModel.getEditPluginID()); + } + } +} + requiredPluginIDs.addAll(genPlugin.getRequiredPluginIDs()); + for (Iterator it = requiredPluginIDs.iterator(); it.hasNext();) { + String next = it.next(); + if (next == null || next.trim().length() == 0) { + it.remove(); + } + } + +Iterator requiredBundleIterator = requiredPluginIDs.iterator(); +%> +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: %pluginName +Bundle-SymbolicName: <%=genPlugin.getID()%>; singleton:=true +Bundle-Version: <%=genPlugin.getVersion()%> +Bundle-ClassPath: . +Bundle-Activator: <%=genPlugin.getActivatorQualifiedClassName()%> +Bundle-Vendor: %providerName +Bundle-Localization: plugin +Export-Package: <%=genPlugin.getEditorGen().getDiagram().getEditPartsPackageName()%>, + <%=genPlugin.getEditorGen().getEditor().getPackageName()%>, + <%=genPlugin.getEditorGen().getDiagram().getProvidersPackageName()%> +Require-Bundle: org.eclipse.core.runtime, +<%if (genPlugin.getEditorGen().getApplication() == null) {%> + org.eclipse.core.resources,<%}%> +<%if (genPlugin.getEditorGen().getDiagram().generateShortcutIcon() || (genPlugin.getEditorGen().getNavigator() != null && genPlugin.getEditorGen().getNavigator().isGenerateDomainModelNavigator())) {%> + org.eclipse.core.expressions,<%}%> + org.eclipse.jface, +<%if (genPlugin.getEditorGen().getApplication() == null) {%> + org.eclipse.ui.ide,<%}%> + org.eclipse.ui.views, +<%if (genPlugin.getEditorGen().getNavigator() != null) {%> + org.eclipse.ui.navigator,<%}%> + org.eclipse.emf.ecore, + org.eclipse.emf.ecore.xmi, + org.eclipse.emf.edit.ui, + org.eclipse.gef;visibility:=reexport, + <%//XXX start: this dependency is essential for xPand templates%> + org.eclipse.gmf.codegen, + <%//XXX end.%> + org.eclipse.gmf.runtime.emf.core, + org.eclipse.gmf.runtime.emf.commands.core, + org.eclipse.gmf.runtime.emf.ui.properties, + org.eclipse.gmf.runtime.diagram.ui, + <%if (genPlugin.isPrintingEnabled()) {%> + org.eclipse.gmf.runtime.diagram.ui.printing.render, + org.eclipse.gmf.runtime.diagram.ui.printing,<%}%> + <%if (genPlugin.getEditorGen().getPropertySheet() != null) {%> + org.eclipse.gmf.runtime.diagram.ui.properties,<%}%> + org.eclipse.gmf.runtime.diagram.ui.providers, +<%if (genPlugin.getEditorGen().getApplication() == null) {%> + org.eclipse.gmf.runtime.diagram.ui.providers.ide,<%}%> + org.eclipse.gmf.runtime.diagram.ui.render, + org.eclipse.gmf.runtime.diagram.ui.resources.editor, +<%if (genPlugin.getEditorGen().getApplication() == null) {%> + org.eclipse.gmf.runtime.diagram.ui.resources.editor.ide,<%}%> + org.eclipse.gmf.runtime.notation.providers +<%while(requiredBundleIterator.hasNext()) {%>, + <%=requiredBundleIterator.next()%>;visibility:=reexport +<%}%> +Eclipse-LazyStart: true +Bundle-RequiredExecutionEnvironment: J2SE-1.4 Index: src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/SelectStackedElementsAction.java =================================================================== RCS file: src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/SelectStackedElementsAction.java diff -N src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/SelectStackedElementsAction.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src-extra/org/eclipse/gmf/graphdef/editor/edit/parts/SelectStackedElementsAction.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,260 @@ +/* + * Copyright (c) 2006, 2007 Borland Software 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: + * Borland Software Corporation - initial API and implementation + */ +package org.eclipse.gmf.graphdef.editor.edit.parts; + +import java.text.Collator; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.gef.EditPart; +import org.eclipse.gmf.gmfgraph.Figure; +import org.eclipse.gmf.runtime.notation.View; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.ActionContributionItem; +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.action.IMenuCreator; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.MenuEvent; +import org.eclipse.swt.events.MenuListener; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Menu; +import org.eclipse.swt.widgets.MenuItem; +import org.eclipse.swt.widgets.Widget; +import org.eclipse.ui.IObjectActionDelegate; +import org.eclipse.ui.IWorkbenchPart; + +public class SelectStackedElementsAction extends Action implements IMenuCreator, MenuListener, IObjectActionDelegate { + public static final String EMPTY_STRING = ""; //$NON-NLS-1$ + + /** + * The menu created by this action + */ + private Menu myMenu; + + private AbstractFigureEditPart mySelectedElement; + + public void setActivePart(IAction action, IWorkbenchPart targetPart) { + action.setMenuCreator(getMenuCreator()); + } + + public IMenuCreator getMenuCreator() { + return this; + } + + public Menu getMenu(Control parent) { + return createMenu(parent); + } + + public Menu getMenu(Menu parent) { + return createMenu(parent); + } + + protected Menu createMenu(Widget parent) { + if (parent == null) { + return null; + } + if (myMenu != null) { + myMenu.dispose(); + } + myMenu = createMenuFromMenuOrControlParent(parent); + myMenu.addMenuListener(this); + return myMenu; + } + + public void menuShown(MenuEvent e) { + clearMenu(myMenu); + fillMenu(myMenu, mySelectedElement); + } + + public void menuHidden(MenuEvent e) { + } + + public void dispose() { + if (myMenu != null) { + myMenu.dispose(); + } + myMenu = null; + } + + private void clearMenu(Menu menu) { + MenuItem[] actions = menu.getItems(); + for (int i=0; i 0) { + String expandChildrenCommandName = numChildren > 1 ? MessageFormat.format("Select Children of {0}", new Object[] {selectChildCommandName}) : "Select Children"; + expandChildrenActions.add(new ExpandChildrenAction(next, expandChildrenCommandName)); + } + } + for (int i=0; i 0) { + new MenuItem(menu, SWT.SEPARATOR, selectChildActions.length); + for (int i=0; i 0; + } + + private static class SelectChildAction extends Action implements Comparable { + private final EditPart myTarget; + private final String myName; + + public SelectChildAction(EditPart target, String name) { + super(name, IAction.AS_PUSH_BUTTON); + myName = name; + myTarget = target; + } + + public EditPart getTargetPart() { + return myTarget; + } + + public String getName() { + return myName; + } + + public void run() { + myTarget.getViewer().select(myTarget); + } + + public int compareTo(Object o) { + if (!(o instanceof SelectChildAction)) { + return -1; + } + String otherName = ((SelectChildAction)o).getName(); + return Collator.getInstance().compare(getName(), otherName); + } + } + + private static class ExpandChildrenAction extends Action implements IMenuCreator, Comparable { + private final EditPart myTarget; + private final String myName; + private Menu myMenu; + + public ExpandChildrenAction(EditPart target, String name) { + super(name, IAction.AS_DROP_DOWN_MENU); + myName = name; + myTarget = target; + } + + public IMenuCreator getMenuCreator() { + return this; + } + + public EditPart getTargetPart() { + return myTarget; + } + + public String getName() { + return myName; + } + + public void run() { + //do nothing, this action just creates a cascading menu. + } + + public int compareTo(Object o) { + if (!(o instanceof SelectChildAction)) { + return -1; + } + String otherName = ((SelectChildAction)o).getName(); + return Collator.getInstance().compare(getName(), otherName); + } + + public void dispose() { + if (myMenu != null) { + myMenu.dispose(); + } + myMenu = null; + } + + public Menu getMenu(Control parent) { + return createMenu(parent); + } + + public Menu getMenu(Menu parent) { + return createMenu(parent); + } + + private Menu createMenu(Widget parent) { + if (myMenu == null) { + if (parent == null) { + return null; + } + myMenu = SelectStackedElementsAction.createMenuFromMenuOrControlParent(parent); + SelectStackedElementsAction.fillMenu(myMenu, myTarget); + } + return myMenu; + } + } +}