| /******************************************************************************* |
| * Copyright (c) 2001, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.wst.wsdl.ui.internal.asd.design; |
| |
| import org.eclipse.gef.ContextMenuProvider; |
| import org.eclipse.gef.EditPart; |
| import org.eclipse.gef.EditPartViewer; |
| import org.eclipse.gef.commands.CommandStack; |
| import org.eclipse.gef.ui.actions.ActionRegistry; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IContributionItem; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.action.MenuManager; |
| import org.eclipse.jface.action.Separator; |
| import org.eclipse.jface.viewers.ISelection; |
| import org.eclipse.jface.viewers.ISelectionProvider; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| import org.eclipse.ui.IEditorPart; |
| import org.eclipse.ui.IWorkbenchActionConstants; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.wst.wsdl.ui.internal.asd.ASDEditorPlugin; |
| import org.eclipse.wst.wsdl.ui.internal.asd.actions.BaseSelectionAction; |
| import org.eclipse.wst.wsdl.ui.internal.asd.actions.ShowPropertiesViewAction; |
| import org.eclipse.wst.wsdl.ui.internal.asd.design.editparts.ColumnEditPart; |
| import org.eclipse.wst.wsdl.ui.internal.asd.design.editparts.model.IActionProvider; |
| import org.eclipse.wst.xsd.ui.internal.adt.editor.ContextMenuParticipant; |
| import org.eclipse.wst.xsd.ui.internal.adt.editor.EditorModeManager; |
| |
| |
| public class DesignViewContextMenuProvider extends ContextMenuProvider |
| { |
| ISelectionProvider selectionProvider; |
| |
| /** |
| * Constructor for GraphContextMenuProvider. |
| * |
| * @param selectionProvider |
| * @param editor |
| */ |
| public DesignViewContextMenuProvider(EditPartViewer viewer, ISelectionProvider selectionProvider) |
| { |
| super(viewer); |
| this.selectionProvider = selectionProvider; |
| } |
| |
| protected Object getAppropriateSelection(Object selection) { |
| if (selection instanceof ColumnEditPart) { |
| return ((EditPart) selection).getParent(); |
| } |
| |
| return selection; |
| } |
| |
| /** |
| * @see org.eclipse.gef.ui.parts.ContextMenuProvider#buildContextMenu(org.eclipse.jface.action.IMenuManager, |
| * org.eclipse.gef.EditPartViewer) |
| */ |
| public void buildContextMenu(IMenuManager menu) |
| { |
| IMenuManager currentMenu = menu; |
| |
| IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); |
| EditorModeManager manager = (EditorModeManager)editor.getAdapter(EditorModeManager.class); |
| ContextMenuParticipant contextMenuParticipant = manager != null ? manager.getCurrentMode().getContextMenuParticipant() : null; |
| |
| |
| currentMenu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
| ActionRegistry registry = getEditorActionRegistry(); |
| ISelection selection = selectionProvider.getSelection(); |
| |
| Object activePart = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart(); |
| |
| if (selection != null) |
| { |
| Object selectedObject = ((StructuredSelection) selection).getFirstElement(); |
| selectedObject = getAppropriateSelection(selectedObject); |
| |
| if (contextMenuParticipant != null) |
| { |
| // Convert editparts to model objects as selections |
| Object o = selectedObject; |
| if (o instanceof EditPart) |
| { |
| o = ((EditPart)selectedObject).getModel(); |
| } |
| contextMenuParticipant.contributeActions(o, menu); |
| } |
| |
| if (selectedObject instanceof IActionProvider) |
| { |
| IActionProvider actionProvider = (IActionProvider) selectedObject; |
| String[] actions = actionProvider.getActions(activePart); |
| for (int i = 0; i < actions.length; i++) |
| { |
| String id = actions[i]; |
| if (contextMenuParticipant == null || contextMenuParticipant.isApplicable(selectedObject, id)) |
| { |
| if (id.startsWith(BaseSelectionAction.SUBMENU_START_ID)) { |
| String text = id.substring(BaseSelectionAction.SUBMENU_START_ID.length()); |
| IMenuManager subMenu = new MenuManager(text); |
| currentMenu.add(subMenu); |
| currentMenu = subMenu; |
| } |
| else if (id.startsWith(BaseSelectionAction.SUBMENU_END_ID)) { |
| currentMenu = getParentMenu(menu, currentMenu); |
| } |
| else |
| { |
| IAction action = registry.getAction(id); |
| if (action != null) { |
| action.isEnabled(); |
| currentMenu.add(action); |
| } |
| } |
| } |
| } |
| |
| menu.add(registry.getAction(ShowPropertiesViewAction.ID)); |
| menu.add(new Separator()); |
| menu.add(new Separator("refactoring-slot-temp")); //$NON-NLS-1$ |
| menu.add(new Separator()); |
| menu.add(new Separator("search_slot_temp")); //$NON-NLS-1$ |
| menu.add(new Separator()); |
| } |
| } |
| menu.add(new Separator()); |
| } |
| |
| protected IMenuManager getParentMenu(IMenuManager root, IMenuManager child) { |
| IMenuManager parent = null; |
| |
| IContributionItem[] kids = root.getItems(); |
| int index = 0; |
| while (index < kids.length && parent == null) { |
| IContributionItem item = kids[index]; |
| if (item.equals(child)) { |
| parent = root; |
| } |
| else { |
| if (item instanceof IMenuManager) { |
| parent = getParentMenu((IMenuManager) item, child); |
| } |
| } |
| index++; |
| } |
| |
| return parent; |
| } |
| |
| protected ActionRegistry getEditorActionRegistry() |
| { |
| return (ActionRegistry) ASDEditorPlugin.getActiveEditor().getAdapter(ActionRegistry.class); |
| } |
| protected CommandStack commandStack; |
| |
| protected CommandStack getCommandStack() |
| { |
| if (commandStack == null) |
| commandStack = getViewer().getEditDomain().getCommandStack(); |
| return commandStack; |
| } |
| } |