blob: 052131c60bb454cb8d0d2e3f56ca2715a477ec70 [file] [log] [blame]
package org.eclipse.gmf.examples.layers.subdiagrams.popup;
import org.eclipse.gmf.examples.layers.SubDiagramSpec;
import org.eclipse.gmf.examples.layers.SubDiagramSupport;
import org.eclipse.gmf.examples.layers.subdiagrams.SubDiagramManager;
import org.eclipse.gmf.examples.layers.subdiagrams.SubDiagramManagerImpl;
import org.eclipse.gmf.runtime.common.core.service.IProvider;
import org.eclipse.gmf.runtime.common.ui.services.action.contributionitem.AbstractContributionItemProvider;
import org.eclipse.gmf.runtime.common.ui.util.IWorkbenchPartDescriptor;
import org.eclipse.gmf.runtime.diagram.ui.editparts.DiagramEditPart;
import org.eclipse.gmf.runtime.notation.Diagram;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IWorkbenchPage;
public class SubDiagramsItemProvider extends AbstractContributionItemProvider implements IProvider {
public static final String MENU_MANAGE_SUB_DIAGRAMS = "menu_manage_subdiagrams"; //$NON-NLS-1$
@Override
protected IMenuManager createMenuManager(String menuId, IWorkbenchPartDescriptor partDescriptor) {
if (!MENU_MANAGE_SUB_DIAGRAMS.equals(menuId)) {
return super.createMenuManager(menuId, partDescriptor);
}
MenuManager menuManager = new MenuManager("Open Sub Diagram");
MenuBuilder builder = new MenuBuilder(partDescriptor);
// XXX: build initial content -- otherwise menu is never shown
builder.buildMenu(menuManager);
menuManager.addMenuListener(builder);
return menuManager;
}
private class MenuBuilder implements IMenuListener {
private final IWorkbenchPartDescriptor myWorkbenchPart;
public MenuBuilder(IWorkbenchPartDescriptor workbenchPart) {
myWorkbenchPart = workbenchPart;
}
public void menuAboutToShow(IMenuManager manager) {
buildMenu(manager);
}
public void buildMenu(IMenuManager manager) {
manager.removeAll();
DiagramEditPart selected = (DiagramEditPart) getSelectedObject(myWorkbenchPart);
Diagram diagram = selected.getDiagramView();
SubDiagramManager subsetManager = SubDiagramManagerImpl.findOrCreateSubsetManager(diagram);
SubDiagramSupport support = subsetManager.getSubDiagramSupport();
if (support == null) {
return;
}
SubDiagramSpec thisSpec = support.findDiagramSpec(diagram);
if (thisSpec == null) {
return;
}
for (SubDiagramSpec nextSpec : support.getAllDiagrams()) {
if (nextSpec == thisSpec) {
continue;
}
OpenSubDiagramAction action = new OpenSubDiagramAction(getWorkbenchPage(), nextSpec);
action.init();
manager.add(action);
}
manager.add(new Separator());
CreateSubDiagramAction createNew = new CreateSubDiagramAction(getWorkbenchPage(), thisSpec, support);
createNew.init();
manager.add(createNew);
}
private IWorkbenchPage getWorkbenchPage() {
return myWorkbenchPart.getPartPage();
}
}
}