Skip to content

Package: ViewerContextMenuHelper$1

ViewerContextMenuHelper$1

nameinstructionbranchcomplexitylinemethod
menuAboutToShow(IMenuManager)
M: 0 C: 5
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 2
100%
M: 0 C: 1
100%
{...}
M: 0 C: 9
100%
M: 0 C: 0
100%
M: 0 C: 1
100%
M: 0 C: 1
100%
M: 0 C: 1
100%

Coverage

1: /*******************************************************************************
2: * Copyright (c) 2015 RCP Vision (http://www.rcp-vision.com) and others.
3: * All rights reserved. This program and the accompanying materials
4: * are made available under the terms of the Eclipse Public License v1.0
5: * which accompanies this distribution, and is available at
6: * http://www.eclipse.org/legal/epl-v10.html
7: *
8: * Contributors:
9: * Lorenzo Bettini - initial API and implementation
10: *******************************************************************************/
11: package org.eclipse.emf.parsley.menus;
12:
13: import org.eclipse.emf.edit.domain.EditingDomain;
14: import org.eclipse.emf.edit.ui.provider.UnwrappingSelectionProvider;
15: import org.eclipse.emf.parsley.edit.actionbar.LightweightActionBarContributor;
16: import org.eclipse.emf.parsley.edit.actionbar.WorkbenchActionBarContributor;
17: import org.eclipse.emf.parsley.viewers.ViewerSelectionProvider;
18: import org.eclipse.jface.action.IMenuListener;
19: import org.eclipse.jface.action.IMenuManager;
20: import org.eclipse.jface.action.MenuManager;
21: import org.eclipse.jface.action.Separator;
22: import org.eclipse.jface.viewers.StructuredViewer;
23: import org.eclipse.jface.viewers.Viewer;
24: import org.eclipse.swt.widgets.Menu;
25: import org.eclipse.ui.IWorkbenchPart;
26:
27: import com.google.inject.Inject;
28: import com.google.inject.Provider;
29:
30: /**
31: * Provides utility methods for adding context menu to a viewer.
32: *
33: * @author Lorenzo Bettini - Initial contribution and API
34: * @author Francesco Guidieri - refactoring for
35: * https://bugs.eclipse.org/bugs/show_bug.cgi?id=455727
36: */
37: public class ViewerContextMenuHelper {
38:
39:         @Inject
40:         private Provider<LightweightActionBarContributor> lightweightActionBarContributorProvider;
41:
42:         @Inject
43:         private Provider<WorkbenchActionBarContributor> workbenchActionBarContributorProvider;
44:
45:         protected MenuManager createMenuManager() {
46:                 MenuManager menuManager = new MenuManager("#PopUp");
47:                 menuManager.add(new Separator("additions"));
48:                 menuManager.setRemoveAllWhenShown(true);
49:                 return menuManager;
50:         }
51:
52:         /**
53:          * Adds a context menu to the passed {@link Viewer}.
54:          *
55:          * The passed {@link IMenuListener} should implement a method like
56:          *
57:          * <pre>
58:          * public void menuAboutToShow(IMenuManager menuManager) {
59:          *         actionBarContributor.menuAboutToShow(menuManager);
60:          * }
61:          * </pre>
62:          *
63:          * @param viewer
64:          * @param activePart
65:          * @param menuListener
66:          * @param workbenchActionBarContributor
67:          */
68:         public void addViewerContextMenu(Viewer viewer, IWorkbenchPart activePart, IMenuListener menuListener,
69:                         WorkbenchActionBarContributor workbenchActionBarContributor) {
70:
71:                 MenuManager menuManager = createContextMenu(viewer);
72:                 menuManager.addMenuListener(menuListener);
73:
74:                 setupWorkbenchActionBarContributorContextMenu(viewer, activePart, workbenchActionBarContributor, menuManager);
75:         }
76:
77:         /**
78:          * Adds a context menu to the passed {@link StructuredViewer}.
79:          *
80:          * @param viewer
81:          * @param activePart
82:          */
83:         public void addViewerContextMenu(StructuredViewer viewer, IWorkbenchPart activePart) {
84:                 final WorkbenchActionBarContributor workbenchActionBarContributor = workbenchActionBarContributorProvider.get();
85:                 MenuManager menuManager = createContextMenu(viewer, workbenchActionBarContributor);
86:
87:                 setupWorkbenchActionBarContributorContextMenu(viewer, activePart, workbenchActionBarContributor, menuManager);
88:         }
89:
90:         private void setupWorkbenchActionBarContributorContextMenu(Viewer viewer, IWorkbenchPart activePart,
91:                         WorkbenchActionBarContributor workbenchActionBarContributor, MenuManager menuManager) {
92:                 activePart.getSite().registerContextMenu(menuManager, new UnwrappingSelectionProvider(viewer));
93:                 bridgeSelectionProviderAndActionBarContributor(viewer, workbenchActionBarContributor);
94:                 workbenchActionBarContributor.setActivePart(activePart);
95:         }
96:
97:         private void bridgeSelectionProviderAndActionBarContributor(Viewer viewer,
98:                         WorkbenchActionBarContributor actionBarContributor) {
99:                 ViewerSelectionProvider viewerSelectionProvider = new ViewerSelectionProvider(viewer);
100:                 actionBarContributor.setExplicitSelectionProvider(viewerSelectionProvider);
101:                 viewerSelectionProvider.addSelectionChangedListener(actionBarContributor);
102:         }
103:
104:         /**
105:          * Adds a context menu to the passed {@link StructuredViewer}.
106:          *
107:          * @param viewer
108:          */
109:         public void addViewerContextMenu(StructuredViewer viewer) {
110:                 addViewerContextMenu(viewer, (EditingDomain) null);
111:         }
112:
113:         /**
114:          * Adds a context menu to the passed {@link StructuredViewer}.
115:          *
116:          * @param viewer
117:          * @param editingDomain
118:          */
119:         public void addViewerContextMenu(Viewer viewer, EditingDomain editingDomain) {
120:                 final LightweightActionBarContributor lightweightActionBarContributor = lightweightActionBarContributorProvider
121:                                 .get();
122:                 createContextMenu(viewer, lightweightActionBarContributor);
123:                 viewer.addSelectionChangedListener(lightweightActionBarContributor);
124:                 lightweightActionBarContributor.initialize(editingDomain);
125:         }
126:
127:         private MenuManager createContextMenu(Viewer viewer) {
128:                 MenuManager menuManager = createMenuManager();
129:                 Menu menu = menuManager.createContextMenu(viewer.getControl());
130:                 viewer.getControl().setMenu(menu);
131:                 return menuManager;
132:         }
133:
134:         private MenuManager createContextMenu(Viewer viewer, final IMenuListener menuListener) {
135:                 MenuManager menuManager = createContextMenu(viewer);
136:                 menuManager.addMenuListener(new IMenuListener() {
137:                         @Override
138:                         public void menuAboutToShow(IMenuManager manager) {
139:                                 menuListener.menuAboutToShow(manager);
140:                         }
141:                 });
142:                 return menuManager;
143:         }
144:
145: }