[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Newsgroup Home]
[news.eclipse.modeling.gmf] Re: Integration between Graphical editor and outline view

gaurav bhargav wrote:
Thanks for the link, but i am not able to implement the outline plug in which is provided in that link, Can you please tell me how to integrate the org.eclipse.gmf.runtime.diagram.ui.outline plug in in our graphical editor

waiting for reply




OK, first you need the emft ecore diagram modeler. If you are using eclipse 3.3 you can't install it with the update site, because it need emf 2.4. The outline itself will work in 3.3. So you grep the archive and unpack it, just like other plug ins.
You only needed to build two classes (xxxDiagramOutlinePage and xxxModelNavigator), and changed one method in xxxDiagramEditor, getAdapter(Class type) where you need to create and return the xxxDiagramOutlinePage. I have attached these files as an example.
After this the outline will be present. In 3.3 and GMF 2.01 you will also need to add D&D by hand, as I did this for my current plug in I just peek in the EMFT code, load it in your workspace via cvs.
The heavy part is to get the multi diagramming feature to work. I did not really understand what's going on, I just did what I found. You will need to check the emft sources and reproduce the solution for your plug in, just like I did.


Perhaps we are lucky and Jacques Lescot will explain us what he did, and why.

In https://bugs.eclipse.org/bugs/show_bug.cgi?id=206778 is an other integration solution I did not tried out. You could patch the gmf source, provided by Enrico Schnepel.

I hope this will help.

You could vote for this bug. :)

greetings, urs.
/**
 * 
 */
package de.urszeidler.eclipse.callchain.diagram.outline;

import org.eclipse.emf.common.notify.AdapterFactory;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.gmf.runtime.diagram.ui.outline.AbstractModelNavigator;
import org.eclipse.gmf.runtime.diagram.ui.outline.IOutlineMenuConstants;
import org.eclipse.gmf.runtime.diagram.ui.outline.actions.CreateDiagramAction;
import org.eclipse.gmf.runtime.diagram.ui.outline.actions.DeleteDiagramAction;
import org.eclipse.gmf.runtime.diagram.ui.parts.IDiagramWorkbenchPart;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.IPageSite;

import de.urszeidler.eclipse.callchain.Calls;
import de.urszeidler.eclipse.callchain.diagram.edit.parts.CallsEditPart;
import de.urszeidler.eclipse.callchain.diagram.part.CallchainDiagramEditorPlugin;

/**
 * @author urs
 *
 */
public class CallchainNavigator extends AbstractModelNavigator {

	public CallchainNavigator(Composite parent,
			IDiagramWorkbenchPart diagEditor, IPageSite pageSite) {
		super(parent, diagEditor, pageSite);
	}

	/* (non-Javadoc)
	 * @see org.eclipse.gmf.runtime.diagram.ui.outline.AbstractModelNavigator#getAdapterFactory()
	 */
	@Override
	protected AdapterFactory getAdapterFactory() {
		return CallchainDiagramEditorPlugin.getInstance().getItemProvidersAdapterFactory();
	}

	/**
	 * @see org.eclipse.gmf.runtime.diagram.ui.outline.AbstractModelNavigator#createDiagramsMenu(org.eclipse.jface.action.IMenuManager,
	 *      org.eclipse.emf.ecore.EObject)
	 */
	@Override
	protected void createDiagramsMenu(IMenuManager manager, EObject selectedObject) {
		super.createDiagramsMenu(manager, selectedObject);
		
		if (selectedObject instanceof Calls) {
			final EObject selectedObj = selectedObject;
			manager.appendToGroup(IOutlineMenuConstants.NEW_GROUP, new CreateDiagramAction(selectedObject, getDiagramResource(), CallsEditPart.MODEL_ID,
					CallchainDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT));
			//final 
//			manager.appendToGroup(IOutlineMenuConstants.NEW_GROUP, new CreateDiagramAction(selectedObject, getDiagramResource(), CallsEditPart.MODEL_ID,
//					CallchainDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT){
//				/**
//				 * This methods creates a new Diagram to be associated with the given domain
//				 * element
//				 * 
//				 * @see org.eclipse.jface.action.Action#run()
//				 */
//				public void run() {
//					InputDialog dialog = new InputDialog(Activator.getDefault().getWorkbench().getDisplay().getActiveShell(), "Create new Diagram", "Diagram name : ", "diagram", null);
//					if (dialog.open() == Window.OK) {
//						String name = dialog.getValue();
//						if (name != null && !name.equals("")) {
//							Diagram d = ViewService.createDiagram(selectedObj, CallsEditPart.MODEL_ID,
//									CallchainDiagramEditorPlugin.DIAGRAM_PREFERENCES_HINT);
//							d.setName(name);
//							// TODO if we want to initialize diagram contents, the action
//							// should be moved into the appropriate editor plugin. No
//							// generic method here
//							// new EcoreDiagramContentInitializer().initDiagramContent(d);
//
//							TransactionalEditingDomain editingDomain = TransactionUtil.getEditingDomain(getDiagramResource());
//							AddCommand addcmd = new AddCommand(editingDomain, getDiagramResource().getContents(), d);
//							editingDomain.getCommandStack().execute(addcmd);
//							try {
//								getDiagramResource().save(getDiagramResource().getResourceSet().getLoadOptions());
//							} catch (IOException e) {
//								// TODO Auto-generated catch block
//								e.printStackTrace();
//							}
//							Collection<?> collection = addcmd.getCollection();
//						}
//					}
//				}
//
//				
//			});
		}
		if (selectedObject instanceof Diagram) {
			// Check that this is not the current diagram
			if (getEditor().getDiagram() != selectedObject) {
				manager.appendToGroup(IOutlineMenuConstants.NEW_GROUP, new DeleteDiagramAction((Diagram) selectedObject));
			}
		}
	}

	protected void initDragAndDrop() {
	super.initDragAndDrop();
	}
	
	protected void createEMFMenu(IMenuManager manager, EObject selectedObject) {

		if (!isEMFMenuEnabledFor(selectedObject)) {
			
			return;
		}
//
//		// TODO Restore this
//		 MixedEditDomain domain = (MixedEditDomain) modeler
//				.getAdapter(MixedEditDomain.class);
//
//		if (domain != null) {
//			IPreferenceStore ps = modeler.getPreferenceStore();
//			if (ps != null) {
//				String id = ps
//						.getString(ModelerPreferenceConstants.CREATE_CHILD_MENU_PREF);
//				CreateChildMenuConfiguration config = OutlineManager
//						.getInstance().getCreateChildMenuConfiguration(id);
//				ICreateChildMenu createChildMenu = null;
//				if (config != null) {
//					createChildMenu = config.getMenu();
//				}
//				if (createChildMenu == null) {
//					createChildMenu = new DefaultCreateChildMenu();
//				}
//
//				createChildMenu.removeAll();
//				createChildMenu.setMixedEditDomain(domain);
//				createChildMenu.setSelectedEObject(selectedObject);
//				createChildMenu.createMenuContents();
//
//				manager.appendToGroup(IOutlineMenuConstants.NEW_GROUP,
//						createChildMenu);
//			}
//		}
	}

}
package de.urszeidler.eclipse.callchain.diagram.outline;

import org.eclipse.gmf.runtime.diagram.ui.outline.AbstractDiagramsOutlinePage;
import org.eclipse.gmf.runtime.diagram.ui.outline.AbstractModelNavigator;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditor;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.part.IPageSite;

import de.urszeidler.eclipse.callchain.diagram.part.CallchainDiagramEditor;
import de.urszeidler.eclipse.callchain.diagram.part.CallchainDiagramEditorPlugin;

public class CallChainDiagramOutlinePage extends AbstractDiagramsOutlinePage {
	public CallChainDiagramOutlinePage(DiagramEditor editor) {
		super(editor);
	}

	
	/**
	 * @see org.eclipse.gmf.runtime.diagram.ui.outline.AbstractDiagramsOutlinePage#createNavigator(org.eclipse.swt.widgets.Composite,
	 *      org.eclipse.ui.part.IPageSite)
	 */
	@Override
	protected AbstractModelNavigator createNavigator(Composite parent, IPageSite pageSite) {
		return new CallchainNavigator(parent, getEditor(), pageSite);
	}

	/**
	 * @see org.eclipse.gmf.runtime.diagram.ui.outline.AbstractDiagramsOutlinePage#getPreferenceStore()
	 */
	@Override
	protected IPreferenceStore getPreferenceStore() {
		return CallchainDiagramEditorPlugin.getInstance().getPreferenceStore();
	}

	/**
	 * @see org.eclipse.gmf.runtime.diagram.ui.outline.AbstractDiagramsOutlinePage#getEditorID()
	 */
	@Override
	protected String getEditorID() {
		return CallchainDiagramEditor.ID;
	}


}