It works!!! mostly...
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
index 725c11e..311591c 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2Editor.java
@@ -73,6 +73,7 @@
import org.eclipse.emf.transaction.impl.TransactionalEditingDomainImpl;
import org.eclipse.emf.workspace.util.WorkspaceSynchronizer;
import org.eclipse.gef.GraphicalViewer;
+import org.eclipse.graphiti.dt.IDiagramTypeProvider;
import org.eclipse.graphiti.features.IFeatureProvider;
import org.eclipse.graphiti.mm.algorithms.GraphicsAlgorithm;
import org.eclipse.graphiti.mm.pictograms.Diagram;
@@ -140,7 +141,7 @@
private Bpmn2Preferences preferences;
private TargetRuntime targetRuntime;
- private Hashtable<BPMNDiagram, GraphicalViewer> mapDiagramToViewer = new Hashtable<BPMNDiagram, GraphicalViewer>();
+// private Hashtable<BPMNDiagram, GraphicalViewer> mapDiagramToViewer = new Hashtable<BPMNDiagram, GraphicalViewer>();
protected DiagramEditorAdapter editorAdapter;
@@ -549,37 +550,42 @@
if (bpmnDiagram==null)
bpmnDiagram = getModelHandler().getDefinitions().getDiagrams().get(0);
- if (bpmnDiagram!=null) {
- GraphicalViewer viewer = getGraphicalViewer();
- mapDiagramToViewer.put(bpmnDiagram, viewer);
- }
+// if (bpmnDiagram!=null) {
+// GraphicalViewer viewer = getGraphicalViewer();
+// mapDiagramToViewer.put(bpmnDiagram, viewer);
+// }
return bpmnDiagram;
}
public void setBpmnDiagram(final BPMNDiagram bpmnDiagram) {
-// if (this.bpmnDiagram == bpmnDiagram)
-// return;
+ IDiagramTypeProvider dtp = getDiagramTypeProvider();
- GraphicalViewer viewer = mapDiagramToViewer.get(bpmnDiagram);
// do we need to create a new Diagram or is this already in the model?
Diagram oldDiagram = null;
Diagram diagram = null;
- final Resource resource = getDiagramTypeProvider().getDiagram().eResource();
- for (EObject o : resource.getContents()) {
- if (o instanceof Diagram) {
- Diagram d = (Diagram)o;
- if (BusinessObjectUtil.getFirstElementOfType(d, BPMNDiagram.class) == bpmnDiagram) {
- oldDiagram = d;
- break;
+ ResourceSet resourceSet = getResourceSet();
+ if (resourceSet!=null) {
+ for (Resource r : resourceSet.getResources()) {
+ for (EObject o : r.getContents()) {
+ if (o instanceof Diagram) {
+ Diagram d = (Diagram)o;
+ if (BusinessObjectUtil.getFirstElementOfType(d, BPMNDiagram.class) == bpmnDiagram) {
+ oldDiagram = d;
+ break;
+ }
+ }
}
+ if (oldDiagram!=null)
+ break;
}
}
if (oldDiagram==null) {
// create a new one
- String typeId = getDiagramTypeProvider().getDiagram().getDiagramTypeId();
+ String typeId = dtp.getDiagram().getDiagramTypeId();
final Diagram newDiagram = Graphiti.getCreateService().createDiagram(typeId, bpmnDiagram.getName(), true);
- final IFeatureProvider featureProvider = getDiagramTypeProvider().getFeatureProvider();
+ final IFeatureProvider featureProvider = dtp.getFeatureProvider();
+ final Resource resource = dtp.getDiagram().eResource();
TransactionalEditingDomain domain = getEditingDomain();
domain.getCommandStack().execute(new RecordingCommand(domain) {
protected void doExecute() {
@@ -598,7 +604,7 @@
// set the new Diagram in the DTP and refresh graphical viewer
getRefreshBehavior().initRefresh();
setPictogramElementsForSelection(null);
- getDiagramTypeProvider().init(diagram, this);
+ dtp.init(diagram, this);
// if (viewer!=null)
// setGraphicalViewer(viewer);
getGraphicalViewer().setContents(diagram);
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MultiPageEditor.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MultiPageEditor.java
index c9335a3..9194362 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MultiPageEditor.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/editor/BPMN2MultiPageEditor.java
@@ -22,6 +22,7 @@
import org.eclipse.bpmn2.Definitions;
import org.eclipse.bpmn2.di.BPMNDiagram;
import org.eclipse.bpmn2.di.BPMNPlane;
+import org.eclipse.bpmn2.modeler.ui.util.PropertyUtil;
import org.eclipse.bpmn2.modeler.ui.wizards.Bpmn2DiagramEditorInput;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.emf.common.command.Command;
@@ -55,11 +56,13 @@
import org.eclipse.swt.custom.CTabFolder2Listener;
import org.eclipse.swt.custom.CTabFolderEvent;
import org.eclipse.swt.custom.CTabItem;
+import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IEditorSite;
+import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.EditorPart;
import org.eclipse.ui.part.FileEditorInput;
@@ -314,6 +317,8 @@
this.setActivePage(pageIndex);
updateTabs();
+
+// dumpTabWidgets();
}
catch (Exception e) {
e.printStackTrace();
@@ -323,13 +328,21 @@
protected void removeDesignPage(BPMNDiagram bpmnDiagram) {
int pageIndex = bpmnDiagrams.indexOf(bpmnDiagram);
if (pageIndex>0) {
+ // go back to "Design" page - the only page that can't be removed
+ setActivePage(0);
+
IEditorPart editor = getEditor(pageIndex);
if (editor instanceof DesignEditor) {
((DesignEditor)editor).disposeBpmnDiagram(bpmnDiagram);
}
- CTabItem item = tabFolder.getItem(pageIndex);
- item.setControl(null);
+
+ // need to manage this ourselves so that the CTabFolder doesn't
+ // dispose our editor site (a child of the CTabItem.control)
+ tabFolder.getItem(pageIndex).setControl(null);
+
removePage(pageIndex);
+
+ tabFolder.getSelection().getControl().setVisible(true);
}
}