[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
|
- From: urs zeidler <me@xxxxxxxxxxxxx>
- Date: Sat, 07 Jun 2008 10:18:48 +0200
- Newsgroups: eclipse.modeling.gmf
- Organization: EclipseCorner
- User-agent: Thunderbird 2.0.0.14 (X11/20080505)
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;
}
}