blob: 40dd03b57e48288a6dba0088ce39b3076d456a79 [file] [log] [blame]
package org.eclipse.gendoc.bundle.acceleo.sirius.service;
import org.eclipse.core.runtime.Assert;
import org.eclipse.emf.transaction.util.TransactionUtil;
import org.eclipse.gef.RootEditPart;
import org.eclipse.gendoc.bundle.acceleo.gmf.service.GMFDiagramRenderer;
import org.eclipse.gmf.runtime.diagram.core.listener.DiagramEventBroker;
import org.eclipse.gmf.runtime.diagram.core.preferences.PreferencesHint;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.diagram.ui.editparts.IDiagramPreferenceSupport;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramCommandStack;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramEditDomain;
import org.eclipse.gmf.runtime.diagram.ui.parts.DiagramGraphicalViewer;
import org.eclipse.gmf.runtime.diagram.ui.services.editpart.EditPartService;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.sirius.diagram.ui.tools.internal.part.SiriusDiagramGraphicalViewer;
import org.eclipse.swt.widgets.Shell;
public class SiriusDiagramRenderer extends GMFDiagramRenderer {
public SiriusDiagramRenderer() {
super();
}
@Override
public DiagramEditPart createDiagramEditPart(Diagram diagram, Shell shell, PreferencesHint preferencesHint) {
if (isSiriusDiagram(diagram)) {
DiagramGraphicalViewer customViewer = new SiriusDiagramGraphicalViewer();
customViewer.createControl(shell);
DiagramEditDomain editDomain = new DiagramEditDomain(null);
editDomain.setCommandStack(
new DiagramCommandStack(editDomain));
customViewer.setEditDomain(editDomain);
// hook in preferences
RootEditPart rootEP = EditPartService.getInstance().createRootEditPart(
diagram);
if (rootEP instanceof IDiagramPreferenceSupport) {
if (preferencesHint == null) {
preferencesHint = ((IDiagramPreferenceSupport) rootEP)
.getPreferencesHint();
} else {
((IDiagramPreferenceSupport) rootEP)
.setPreferencesHint(preferencesHint);
}
customViewer
.hookWorkspacePreferenceStore((IPreferenceStore) preferencesHint
.getPreferenceStore());
}
customViewer.setRootEditPart(rootEP);
customViewer.setEditPartFactory(EditPartService.getInstance());
DiagramEventBroker.startListening(TransactionUtil.getEditingDomain(diagram));
customViewer.setContents(diagram);
customViewer.flush();
Assert.isTrue(customViewer.getContents() instanceof DiagramEditPart);
/*
* We need to flush all the deferred updates.
*/
while (shell.getDisplay().readAndDispatch()) {
// nothing
}
return (DiagramEditPart) customViewer.getContents();
}
return super.createDiagramEditPart(diagram, shell, preferencesHint);
}
private boolean isSiriusDiagram(Diagram diagram) {
return SiriusServices.isSiriusDiagram(diagram);
}
}