Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 316303 | Differences between
and this patch

Collapse All | Expand All

(-)Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java (-6 / +17 lines)
Lines 11-22 Link Here
11
11
12
package org.eclipse.ui.internal;
12
package org.eclipse.ui.internal;
13
13
14
import org.eclipse.e4.ui.workbench.UIEvents;
15
16
import org.eclipse.e4.ui.workbench.modeling.EModelService;
17
import org.eclipse.e4.ui.workbench.modeling.EPartService;
18
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
19
20
import java.util.ArrayList;
14
import java.util.ArrayList;
21
import java.util.Arrays;
15
import java.util.Arrays;
22
import java.util.Collection;
16
import java.util.Collection;
Lines 46-51 Link Here
46
import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
40
import org.eclipse.e4.ui.model.application.ui.basic.MPartStack;
47
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
41
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
48
import org.eclipse.e4.ui.model.application.ui.basic.MWindowElement;
42
import org.eclipse.e4.ui.model.application.ui.basic.MWindowElement;
43
import org.eclipse.e4.ui.services.EContextService;
44
import org.eclipse.e4.ui.workbench.UIEvents;
45
import org.eclipse.e4.ui.workbench.modeling.EModelService;
46
import org.eclipse.e4.ui.workbench.modeling.EPartService;
47
import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState;
49
import org.eclipse.jface.preference.IPreferenceStore;
48
import org.eclipse.jface.preference.IPreferenceStore;
50
import org.eclipse.jface.util.IPropertyChangeListener;
49
import org.eclipse.jface.util.IPropertyChangeListener;
51
import org.eclipse.jface.util.PropertyChangeEvent;
50
import org.eclipse.jface.util.PropertyChangeEvent;
Lines 2135-2140 Link Here
2135
				// this perspective already exists, switch to this one
2134
				// this perspective already exists, switch to this one
2136
				perspectives.setSelectedElement(mperspective);
2135
				perspectives.setSelectedElement(mperspective);
2137
				window.getContext().set(IContextConstants.ACTIVE_CHILD, mperspective.getContext());
2136
				window.getContext().set(IContextConstants.ACTIVE_CHILD, mperspective.getContext());
2137
				EContextService contextService = mperspective.getContext().get(
2138
						EContextService.class);
2139
				for (String setId : modelLayout.getActionSets()) {
2140
					System.err.println("activating: " + setId); //$NON-NLS-1$
2141
					contextService.activateContext(setId);
2142
				}
2138
				legacyWindow.firePerspectiveDeactivated(this, perspective);
2143
				legacyWindow.firePerspectiveDeactivated(this, perspective);
2139
				return;
2144
				return;
2140
			}
2145
			}
Lines 2163-2168 Link Here
2163
		// activate it
2168
		// activate it
2164
		perspectives.setSelectedElement(modelPerspective);
2169
		perspectives.setSelectedElement(modelPerspective);
2165
		window.getContext().set(IContextConstants.ACTIVE_CHILD, modelPerspective.getContext());
2170
		window.getContext().set(IContextConstants.ACTIVE_CHILD, modelPerspective.getContext());
2171
		EContextService contextService = modelPerspective.getContext().get(EContextService.class);
2172
		for (String setId : modelLayout.getActionSets()) {
2173
			System.err.println("activating: " + setId); //$NON-NLS-1$
2174
			contextService.activateContext(setId);
2175
		}
2176
2166
		legacyWindow.firePerspectiveDeactivated(this, perspective);
2177
		legacyWindow.firePerspectiveDeactivated(this, perspective);
2167
2178
2168
		// FIXME: we need to fire events
2179
		// FIXME: we need to fire events
(-)Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java (-4 / +7 lines)
Lines 11-19 Link Here
11
11
12
package org.eclipse.ui.internal.e4.compatibility;
12
package org.eclipse.ui.internal.e4.compatibility;
13
13
14
import org.eclipse.e4.ui.workbench.modeling.EModelService;
15
import org.eclipse.e4.ui.workbench.modeling.EPartService;
16
17
import java.util.ArrayList;
14
import java.util.ArrayList;
18
import java.util.List;
15
import java.util.List;
19
import org.eclipse.e4.ui.model.application.MApplication;
16
import org.eclipse.e4.ui.model.application.MApplication;
Lines 30-35 Link Here
30
import org.eclipse.e4.ui.model.application.ui.basic.MStackElement;
27
import org.eclipse.e4.ui.model.application.ui.basic.MStackElement;
31
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
28
import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
32
import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl;
29
import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl;
30
import org.eclipse.e4.ui.workbench.modeling.EModelService;
31
import org.eclipse.e4.ui.workbench.modeling.EPartService;
33
import org.eclipse.swt.SWT;
32
import org.eclipse.swt.SWT;
34
import org.eclipse.ui.IFolderLayout;
33
import org.eclipse.ui.IFolderLayout;
35
import org.eclipse.ui.IPageLayout;
34
import org.eclipse.ui.IPageLayout;
Lines 54-60 Link Here
54
	private ArrayList perspectiveShortcut = new ArrayList();
53
	private ArrayList perspectiveShortcut = new ArrayList();
55
	private ArrayList showInPart = new ArrayList();
54
	private ArrayList showInPart = new ArrayList();
56
	private ArrayList showViewShortcut = new ArrayList();
55
	private ArrayList showViewShortcut = new ArrayList();
57
	private ArrayList actionSet = new ArrayList();
56
	private ArrayList<String> actionSet = new ArrayList<String>();
58
57
59
	boolean createReferences;
58
	boolean createReferences;
60
59
Lines 113-118 Link Here
113
		actionSet.add(actionSetId);
112
		actionSet.add(actionSetId);
114
	}
113
	}
115
114
115
	public List<String> getActionSets() {
116
		return actionSet;
117
	}
118
116
	public void addFastView(String viewId) {
119
	public void addFastView(String viewId) {
117
	}
120
	}
118
121
(-)Eclipse UI/org/eclipse/ui/internal/menus/ActionSet.java (+66 lines)
Lines 12-27 Link Here
12
package org.eclipse.ui.internal.menus;
12
package org.eclipse.ui.internal.menus;
13
13
14
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.Collection;
16
import org.eclipse.core.commands.contexts.Context;
17
import org.eclipse.core.expressions.EvaluationResult;
18
import org.eclipse.core.expressions.Expression;
19
import org.eclipse.core.expressions.ExpressionInfo;
20
import org.eclipse.core.expressions.IEvaluationContext;
21
import org.eclipse.core.runtime.CoreException;
15
import org.eclipse.core.runtime.IConfigurationElement;
22
import org.eclipse.core.runtime.IConfigurationElement;
16
import org.eclipse.core.runtime.Path;
23
import org.eclipse.core.runtime.Path;
17
import org.eclipse.e4.core.contexts.IEclipseContext;
24
import org.eclipse.e4.core.contexts.IEclipseContext;
18
import org.eclipse.e4.ui.model.application.MApplication;
25
import org.eclipse.e4.ui.model.application.MApplication;
26
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
19
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
27
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
28
import org.eclipse.e4.ui.model.application.ui.impl.UiFactoryImpl;
20
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
29
import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
21
import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
30
import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution;
22
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
31
import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
23
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
32
import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl;
33
import org.eclipse.e4.ui.services.EContextService;
24
import org.eclipse.e4.ui.workbench.swt.modeling.MenuServiceFilter;
34
import org.eclipse.e4.ui.workbench.swt.modeling.MenuServiceFilter;
35
import org.eclipse.ui.ISources;
25
import org.eclipse.ui.IWorkbenchActionConstants;
36
import org.eclipse.ui.IWorkbenchActionConstants;
26
import org.eclipse.ui.internal.e4.compatibility.E4Util;
37
import org.eclipse.ui.internal.e4.compatibility.E4Util;
27
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
38
import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
Lines 36-41 Link Here
36
47
37
	private MApplication application;
48
	private MApplication application;
38
49
50
	private ActiveContextExpression visibleWhen;
51
39
	public ActionSet(MApplication application, IEclipseContext appContext,
52
	public ActionSet(MApplication application, IEclipseContext appContext,
40
			IConfigurationElement element) {
53
			IConfigurationElement element) {
41
		this.application = application;
54
		this.application = application;
Lines 45-50 Link Here
45
	public void addToModel(ArrayList<MMenuContribution> contributions) {
58
	public void addToModel(ArrayList<MMenuContribution> contributions) {
46
59
47
		String idContrib = MenuHelper.getId(configElement);
60
		String idContrib = MenuHelper.getId(configElement);
61
		visibleWhen = new ActiveContextExpression(idContrib);
62
63
		EContextService contextService = application.getContext().get(EContextService.class);
64
		Context actionSetContext = contextService.getContext(idContrib);
65
		if (!actionSetContext.isDefined()) {
66
			actionSetContext.define(MenuHelper.getLabel(configElement),
67
					MenuHelper.getDescription(configElement), "org.eclipse.ui.contexts.actionSet"); //$NON-NLS-1$
68
		}
69
48
		IConfigurationElement[] menus = configElement
70
		IConfigurationElement[] menus = configElement
49
				.getChildren(IWorkbenchRegistryConstants.TAG_MENU);
71
				.getChildren(IWorkbenchRegistryConstants.TAG_MENU);
50
		for (IConfigurationElement element : menus) {
72
		for (IConfigurationElement element : menus) {
Lines 61-69 Link Here
61
		// printContributions(contributions);
83
		// printContributions(contributions);
62
	}
84
	}
63
85
86
	static class ActiveContextExpression extends Expression {
87
		private String id;
88
89
		public ActiveContextExpression(String id) {
90
			this.id = id;
91
		}
92
93
		@Override
94
		public void collectExpressionInfo(ExpressionInfo info) {
95
			info.addVariableNameAccess(ISources.ACTIVE_CONTEXT_NAME);
96
		}
97
98
		@Override
99
		public EvaluationResult evaluate(IEvaluationContext context) throws CoreException {
100
			Object obj = context.getVariable(ISources.ACTIVE_CONTEXT_NAME);
101
			if (obj instanceof Collection<?>) {
102
				return EvaluationResult.valueOf(((Collection) obj).contains(id));
103
			}
104
			return EvaluationResult.FALSE;
105
		}
106
107
		@Override
108
		public boolean equals(Object obj) {
109
			if (!(obj instanceof ActiveContextExpression)) {
110
				return false;
111
			}
112
			return id.equals(((ActiveContextExpression) obj).id);
113
		}
114
115
		@Override
116
		public int hashCode() {
117
			return id.hashCode();
118
		}
119
	}
120
121
	private MCoreExpression createVisibleWhen() {
122
		MCoreExpression exp = UiFactoryImpl.eINSTANCE.createCoreExpression();
123
		exp.setCoreExpressionId("programmatic." + MenuHelper.getId(configElement)); //$NON-NLS-1$
124
		exp.setCoreExpression(visibleWhen);
125
		return exp;
126
	}
127
64
	private void addContribution(String idContrib, ArrayList<MMenuContribution> contributions,
128
	private void addContribution(String idContrib, ArrayList<MMenuContribution> contributions,
65
			IConfigurationElement element, boolean isMenu) {
129
			IConfigurationElement element, boolean isMenu) {
66
		MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution();
130
		MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution();
131
		menuContribution.setVisibleWhen(createVisibleWhen());
67
		menuContribution.getTags().add(MenuServiceFilter.MC_MENU);
132
		menuContribution.getTags().add(MenuServiceFilter.MC_MENU);
68
		final String elementId = MenuHelper.getId(element);
133
		final String elementId = MenuHelper.getId(element);
69
		if (idContrib != null && idContrib.length() > 0) {
134
		if (idContrib != null && idContrib.length() > 0) {
Lines 114-119 Link Here
114
	private void processGroups(String idContrib, ArrayList<MMenuContribution> contributions,
179
	private void processGroups(String idContrib, ArrayList<MMenuContribution> contributions,
115
			IConfigurationElement element) {
180
			IConfigurationElement element) {
116
		MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution();
181
		MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution();
182
		menuContribution.setVisibleWhen(createVisibleWhen());
117
		menuContribution.getTags().add(MenuServiceFilter.MC_MENU);
183
		menuContribution.getTags().add(MenuServiceFilter.MC_MENU);
118
		final String elementId = MenuHelper.getId(element);
184
		final String elementId = MenuHelper.getId(element);
119
		if (idContrib != null && idContrib.length() > 0) {
185
		if (idContrib != null && idContrib.length() > 0) {
(-)Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java (-9 / +81 lines)
Lines 168-179 Link Here
168
		return null;
168
		return null;
169
	}
169
	}
170
170
171
	private static String getKey(MMenuContribution contribution) {
171
	static class Key {
172
		String key = contribution.getParentID();
172
		private MMenuContribution contribution;
173
		key = key + "?" //$NON-NLS-1$
173
		private int tag = -1;
174
				+ (contribution.getPositionInParent() == null ? "after=additions" //$NON-NLS-1$
174
		private int hc = -1;
175
						: contribution.getPositionInParent());
175
176
		return key;
176
		public Key(MMenuContribution mc) {
177
			this.contribution = mc;
178
			mc.setWidget(this);
179
		}
180
181
		int getSchemeTag() {
182
			if (tag == -1) {
183
				List<String> tags = contribution.getTags();
184
				if (tags.contains("scheme:menu")) { //$NON-NLS-1$
185
					tag = 1;
186
				} else if (tags.contains("scheme:popup")) { //$NON-NLS-1$
187
					tag = 2;
188
				} else if (tags.contains("scheme:toolbar")) { //$NON-NLS-1$
189
					tag = 3;
190
				} else {
191
					tag = 0;
192
				}
193
			}
194
			return tag;
195
		}
196
197
		/*
198
		 * (non-Javadoc)
199
		 * 
200
		 * @see java.lang.Object#equals(java.lang.Object)
201
		 */
202
		@Override
203
		public boolean equals(Object obj) {
204
			if (!(obj instanceof Key)) {
205
				return false;
206
			}
207
			Key other = (Key) obj;
208
			MCoreExpression vexp1 = (MCoreExpression) contribution.getVisibleWhen();
209
			Object exp1 = vexp1 == null ? null : vexp1.getCoreExpression();
210
			MCoreExpression vexp2 = (MCoreExpression) other.contribution.getVisibleWhen();
211
			Object exp2 = vexp2 == null ? null : vexp2.getCoreExpression();
212
			return Util.equals(contribution.getParentID(), other.contribution.getParentID())
213
					&& Util.equals(contribution.getPositionInParent(),
214
							other.contribution.getPositionInParent())
215
					&& getSchemeTag() == other.getSchemeTag() && Util.equals(exp1, exp2);
216
		}
217
218
		@Override
219
		public int hashCode() {
220
			if (hc == -1) {
221
				MCoreExpression vexp1 = (MCoreExpression) contribution.getVisibleWhen();
222
				Object exp1 = vexp1 == null ? null : vexp1.getCoreExpression();
223
				hc = Util.hashCode(contribution.getParentID());
224
				hc = hc * 87 + Util.hashCode(contribution.getPositionInParent());
225
				hc = hc * 87 + getSchemeTag();
226
				hc = hc * 87 + Util.hashCode(exp1);
227
			}
228
			return hc;
229
		}
230
231
		@Override
232
		public String toString() {
233
			return "Key " + contribution.getParentID() + "--" + contribution.getPositionInParent() //$NON-NLS-1$ //$NON-NLS-2$
234
					+ "--" + getSchemeTag() + "--" + contribution.getVisibleWhen(); //$NON-NLS-1$//$NON-NLS-2$
235
		}
236
	}
237
238
	private static Key getKey(MMenuContribution contribution) {
239
		if (contribution.getWidget() instanceof Key) {
240
			return (Key) contribution.getWidget();
241
		}
242
		return new Key(contribution);
177
	}
243
	}
178
244
179
	public static void printContributions(ArrayList<MMenuContribution> contributions) {
245
	public static void printContributions(ArrayList<MMenuContribution> contributions) {
Lines 201-211 Link Here
201
267
202
	public static void mergeContributions(ArrayList<MMenuContribution> contributions,
268
	public static void mergeContributions(ArrayList<MMenuContribution> contributions,
203
			ArrayList<MMenuContribution> result) {
269
			ArrayList<MMenuContribution> result) {
204
		HashMap<String, ArrayList<MMenuContribution>> buckets = new HashMap<String, ArrayList<MMenuContribution>>();
270
		HashMap<Key, ArrayList<MMenuContribution>> buckets = new HashMap<Key, ArrayList<MMenuContribution>>();
205
		trace("mergeContributions size: " + contributions.size(), null); //$NON-NLS-1$
271
		trace("mergeContributions size: " + contributions.size(), null); //$NON-NLS-1$
206
		printContributions(contributions);
272
		printContributions(contributions);
273
		// first pass, sort by parentId?position,scheme,visibleWhen
207
		for (MMenuContribution contribution : contributions) {
274
		for (MMenuContribution contribution : contributions) {
208
			String key = getKey(contribution);
275
			Key key = getKey(contribution);
209
			ArrayList<MMenuContribution> slot = buckets.get(key);
276
			ArrayList<MMenuContribution> slot = buckets.get(key);
210
			if (slot == null) {
277
			if (slot == null) {
211
				slot = new ArrayList<MMenuContribution>();
278
				slot = new ArrayList<MMenuContribution>();
Lines 216-222 Link Here
216
		Iterator<MMenuContribution> i = contributions.iterator();
283
		Iterator<MMenuContribution> i = contributions.iterator();
217
		while (i.hasNext() && !buckets.isEmpty()) {
284
		while (i.hasNext() && !buckets.isEmpty()) {
218
			MMenuContribution contribution = i.next();
285
			MMenuContribution contribution = i.next();
219
			String key = getKey(contribution);
286
			Key key = getKey(contribution);
220
			ArrayList<MMenuContribution> slot = buckets.remove(key);
287
			ArrayList<MMenuContribution> slot = buckets.remove(key);
221
			if (slot == null) {
288
			if (slot == null) {
222
				continue;
289
				continue;
Lines 233-238 Link Here
233
				}
300
				}
234
			}
301
			}
235
			if (toContribute != null) {
302
			if (toContribute != null) {
303
				toContribute.setWidget(null);
236
				result.add(toContribute);
304
				result.add(toContribute);
237
			}
305
			}
238
		}
306
		}
Lines 455-458 Link Here
455
		}
523
		}
456
		return item;
524
		return item;
457
	}
525
	}
526
527
	public static String getDescription(IConfigurationElement configElement) {
528
		return configElement.getAttribute(IWorkbenchRegistryConstants.TAG_DESCRIPTION);
529
	}
458
}
530
}

Return to bug 316303