View | Details | Raw Unified | Return to bug 494663
Collapse All | Expand All

(-)bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java (-2 / +2 lines)
Lines 43-52 Link Here
43
43
44
public abstract class SWTPartRenderer extends AbstractPartRenderer {
44
public abstract class SWTPartRenderer extends AbstractPartRenderer {
45
	private static final String ICON_URI_FOR_PART = "IconUriForPart"; //$NON-NLS-1$
45
	private static final String ICON_URI_FOR_PART = "IconUriForPart"; //$NON-NLS-1$
46
	static final String PIN_URI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$
46
47
47
	private Map<String, Image> imageMap = new HashMap<>();
48
	private Map<String, Image> imageMap = new HashMap<>();
48
49
49
	private String pinURI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$
50
	private Image pinImage;
50
	private Image pinImage;
51
51
52
	private ISWTResourceUtilities resUtils;
52
	private ISWTResourceUtilities resUtils;
Lines 327-333 Link Here
327
327
328
		resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class
328
		resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class
329
				.getName());
329
				.getName());
330
		pinImage = getImageFromURI(pinURI);
330
		pinImage = getImageFromURI(PIN_URI);
331
331
332
		Display.getCurrent().disposeExec(new Runnable() {
332
		Display.getCurrent().disposeExec(new Runnable() {
333
			@Override
333
			@Override
(-)bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java (-8 / +23 lines)
Lines 27-32 Link Here
27
import javax.annotation.PostConstruct;
27
import javax.annotation.PostConstruct;
28
import javax.inject.Inject;
28
import javax.inject.Inject;
29
import org.eclipse.core.expressions.ExpressionInfo;
29
import org.eclipse.core.expressions.ExpressionInfo;
30
import org.eclipse.e4.core.commands.ExpressionContext;
30
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
31
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
31
import org.eclipse.e4.core.contexts.IContextFunction;
32
import org.eclipse.e4.core.contexts.IContextFunction;
32
import org.eclipse.e4.core.contexts.IEclipseContext;
33
import org.eclipse.e4.core.contexts.IEclipseContext;
Lines 40-45 Link Here
40
import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils;
41
import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils;
41
import org.eclipse.e4.ui.model.application.MApplication;
42
import org.eclipse.e4.ui.model.application.MApplication;
42
import org.eclipse.e4.ui.model.application.MApplicationElement;
43
import org.eclipse.e4.ui.model.application.MApplicationElement;
44
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
43
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
45
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
44
import org.eclipse.e4.ui.model.application.ui.MUIElement;
46
import org.eclipse.e4.ui.model.application.ui.MUIElement;
45
import org.eclipse.e4.ui.model.application.ui.SideValue;
47
import org.eclipse.e4.ui.model.application.ui.SideValue;
Lines 191-197 Link Here
191
			}
193
			}
192
194
193
			if (parent == null) {
195
			if (parent == null) {
194
				ici.setVisible(itemModel.isVisible());
196
				ici.setVisible(isVisible(itemModel));
195
				return;
197
				return;
196
			}
198
			}
197
199
Lines 199-211 Link Here
199
			// partial fix for bug 383569: only change state if there are no
201
			// partial fix for bug 383569: only change state if there are no
200
			// extra override mechanics controlling element visibility
202
			// extra override mechanics controlling element visibility
201
			if (ov == null) {
203
			if (ov == null) {
202
				ici.setVisible(itemModel.isVisible());
204
				ici.setVisible(isVisible(itemModel));
203
			} else {
205
			} else {
204
				Boolean visible = ov.getVisible(ici);
206
				Boolean visible = ov.getVisible(ici);
205
				if (visible == null) {
207
				if (visible == null) {
206
					// same as above: only change state if there are no extra
208
					// same as above: only change state if there are no extra
207
					// override mechanics controlling element visibility
209
					// override mechanics controlling element visibility
208
					ici.setVisible(itemModel.isVisible());
210
					ici.setVisible(isVisible(itemModel));
209
				}
211
				}
210
			}
212
			}
211
213
Lines 711-717 Link Here
711
		}
713
		}
712
		itemModel.setRenderer(this);
714
		itemModel.setRenderer(this);
713
		AbstractGroupMarker marker = null;
715
		AbstractGroupMarker marker = null;
714
		if (itemModel.isVisible() && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) {
716
		if (isVisible(itemModel) && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) {
715
			marker = new Separator();
717
			marker = new Separator();
716
			marker.setId(itemModel.getElementId());
718
			marker.setId(itemModel.getElementId());
717
		} else {
719
		} else {
Lines 734-740 Link Here
734
		final IEclipseContext lclContext = getContext(itemModel);
736
		final IEclipseContext lclContext = getContext(itemModel);
735
		ToolControlContribution ci = ContextInjectionFactory.make(ToolControlContribution.class, lclContext);
737
		ToolControlContribution ci = ContextInjectionFactory.make(ToolControlContribution.class, lclContext);
736
		ci.setModel(itemModel);
738
		ci.setModel(itemModel);
737
		ci.setVisible(itemModel.isVisible());
739
		ci.setVisible(isVisible(itemModel));
738
		addToManager(parentManager, itemModel, ci);
740
		addToManager(parentManager, itemModel, ci);
739
		linkModelToContribution(itemModel, ci);
741
		linkModelToContribution(itemModel, ci);
740
	}
742
	}
Lines 748-754 Link Here
748
		final IEclipseContext lclContext = getContext(itemModel);
750
		final IEclipseContext lclContext = getContext(itemModel);
749
		DirectContributionItem ci = ContextInjectionFactory.make(DirectContributionItem.class, lclContext);
751
		DirectContributionItem ci = ContextInjectionFactory.make(DirectContributionItem.class, lclContext);
750
		ci.setModel(itemModel);
752
		ci.setModel(itemModel);
751
		ci.setVisible(itemModel.isVisible());
753
		ci.setVisible(isVisible(itemModel));
752
		addToManager(parentManager, itemModel, ci);
754
		addToManager(parentManager, itemModel, ci);
753
		linkModelToContribution(itemModel, ci);
755
		linkModelToContribution(itemModel, ci);
754
	}
756
	}
Lines 762-768 Link Here
762
		final IEclipseContext lclContext = getContext(itemModel);
764
		final IEclipseContext lclContext = getContext(itemModel);
763
		HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class, lclContext);
765
		HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class, lclContext);
764
		ci.setModel(itemModel);
766
		ci.setModel(itemModel);
765
		ci.setVisible(itemModel.isVisible());
767
		ci.setVisible(isVisible(itemModel));
766
		addToManager(parentManager, itemModel, ci);
768
		addToManager(parentManager, itemModel, ci);
767
		linkModelToContribution(itemModel, ci);
769
		linkModelToContribution(itemModel, ci);
768
	}
770
	}
Lines 780-790 Link Here
780
		} else {
782
		} else {
781
			return;
783
			return;
782
		}
784
		}
783
		ici.setVisible(itemModel.isVisible());
785
		ici.setVisible(isVisible(itemModel));
784
		addToManager(parentManager, itemModel, ici);
786
		addToManager(parentManager, itemModel, ici);
785
		linkModelToContribution(itemModel, ici);
787
		linkModelToContribution(itemModel, ici);
786
	}
788
	}
787
789
790
	private boolean isVisible(MToolBarElement element) {
791
		return isVisible(element, getContext(element));
792
	}
793
794
	static boolean isVisible(MToolBarElement element, IEclipseContext contextForEvaluation) {
795
		boolean visible = element.isVisible();
796
		if (visible && (element.getVisibleWhen() instanceof MCoreExpression)) {
797
			final ExpressionContext evalContext = new ExpressionContext(contextForEvaluation);
798
			visible = ContributionsAnalyzer.isVisible((MCoreExpression) element.getVisibleWhen(), evalContext);
799
		}
800
		return visible;
801
	}
802
788
	private void addToManager(ToolBarManager parentManager,
803
	private void addToManager(ToolBarManager parentManager,
789
			MToolBarElement model, IContributionItem ci) {
804
			MToolBarElement model, IContributionItem ci) {
790
		MElementContainer<MUIElement> parent = model.getParent();
805
		MElementContainer<MUIElement> parent = model.getParent();
(-)bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.core.resources.prefs (+2 lines)
Added Link Here
1
eclipse.preferences.version=1
2
encoding/<project>=UTF-8
(-)bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.m2e.core.prefs (+4 lines)
Added Link Here
1
activeProfiles=
2
eclipse.preferences.version=1
3
resolveWorkspaceProjects=true
4
version=1
(-)bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java (-2 / +2 lines)
Lines 43-52 Link Here
43
43
44
public abstract class SWTPartRenderer extends AbstractPartRenderer {
44
public abstract class SWTPartRenderer extends AbstractPartRenderer {
45
	private static final String ICON_URI_FOR_PART = "IconUriForPart"; //$NON-NLS-1$
45
	private static final String ICON_URI_FOR_PART = "IconUriForPart"; //$NON-NLS-1$
46
	static final String PIN_URI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$
46
47
47
	private Map<String, Image> imageMap = new HashMap<>();
48
	private Map<String, Image> imageMap = new HashMap<>();
48
49
49
	private String pinURI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$
50
	private Image pinImage;
50
	private Image pinImage;
51
51
52
	private ISWTResourceUtilities resUtils;
52
	private ISWTResourceUtilities resUtils;
Lines 327-333 Link Here
327
327
328
		resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class
328
		resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class
329
				.getName());
329
				.getName());
330
		pinImage = getImageFromURI(pinURI);
330
		pinImage = getImageFromURI(PIN_URI);
331
331
332
		Display.getCurrent().disposeExec(new Runnable() {
332
		Display.getCurrent().disposeExec(new Runnable() {
333
			@Override
333
			@Override
(-)bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java (-8 / +23 lines)
Lines 27-32 Link Here
27
import javax.annotation.PostConstruct;
27
import javax.annotation.PostConstruct;
28
import javax.inject.Inject;
28
import javax.inject.Inject;
29
import org.eclipse.core.expressions.ExpressionInfo;
29
import org.eclipse.core.expressions.ExpressionInfo;
30
import org.eclipse.e4.core.commands.ExpressionContext;
30
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
31
import org.eclipse.e4.core.contexts.ContextInjectionFactory;
31
import org.eclipse.e4.core.contexts.IContextFunction;
32
import org.eclipse.e4.core.contexts.IContextFunction;
32
import org.eclipse.e4.core.contexts.IEclipseContext;
33
import org.eclipse.e4.core.contexts.IEclipseContext;
Lines 40-45 Link Here
40
import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils;
41
import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils;
41
import org.eclipse.e4.ui.model.application.MApplication;
42
import org.eclipse.e4.ui.model.application.MApplication;
42
import org.eclipse.e4.ui.model.application.MApplicationElement;
43
import org.eclipse.e4.ui.model.application.MApplicationElement;
44
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
43
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
45
import org.eclipse.e4.ui.model.application.ui.MElementContainer;
44
import org.eclipse.e4.ui.model.application.ui.MUIElement;
46
import org.eclipse.e4.ui.model.application.ui.MUIElement;
45
import org.eclipse.e4.ui.model.application.ui.SideValue;
47
import org.eclipse.e4.ui.model.application.ui.SideValue;
Lines 191-197 Link Here
191
			}
193
			}
192
194
193
			if (parent == null) {
195
			if (parent == null) {
194
				ici.setVisible(itemModel.isVisible());
196
				ici.setVisible(isVisible(itemModel));
195
				return;
197
				return;
196
			}
198
			}
197
199
Lines 199-211 Link Here
199
			// partial fix for bug 383569: only change state if there are no
201
			// partial fix for bug 383569: only change state if there are no
200
			// extra override mechanics controlling element visibility
202
			// extra override mechanics controlling element visibility
201
			if (ov == null) {
203
			if (ov == null) {
202
				ici.setVisible(itemModel.isVisible());
204
				ici.setVisible(isVisible(itemModel));
203
			} else {
205
			} else {
204
				Boolean visible = ov.getVisible(ici);
206
				Boolean visible = ov.getVisible(ici);
205
				if (visible == null) {
207
				if (visible == null) {
206
					// same as above: only change state if there are no extra
208
					// same as above: only change state if there are no extra
207
					// override mechanics controlling element visibility
209
					// override mechanics controlling element visibility
208
					ici.setVisible(itemModel.isVisible());
210
					ici.setVisible(isVisible(itemModel));
209
				}
211
				}
210
			}
212
			}
211
213
Lines 711-717 Link Here
711
		}
713
		}
712
		itemModel.setRenderer(this);
714
		itemModel.setRenderer(this);
713
		AbstractGroupMarker marker = null;
715
		AbstractGroupMarker marker = null;
714
		if (itemModel.isVisible() && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) {
716
		if (isVisible(itemModel) && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) {
715
			marker = new Separator();
717
			marker = new Separator();
716
			marker.setId(itemModel.getElementId());
718
			marker.setId(itemModel.getElementId());
717
		} else {
719
		} else {
Lines 734-740 Link Here
734
		final IEclipseContext lclContext = getContext(itemModel);
736
		final IEclipseContext lclContext = getContext(itemModel);
735
		ToolControlContribution ci = ContextInjectionFactory.make(ToolControlContribution.class, lclContext);
737
		ToolControlContribution ci = ContextInjectionFactory.make(ToolControlContribution.class, lclContext);
736
		ci.setModel(itemModel);
738
		ci.setModel(itemModel);
737
		ci.setVisible(itemModel.isVisible());
739
		ci.setVisible(isVisible(itemModel));
738
		addToManager(parentManager, itemModel, ci);
740
		addToManager(parentManager, itemModel, ci);
739
		linkModelToContribution(itemModel, ci);
741
		linkModelToContribution(itemModel, ci);
740
	}
742
	}
Lines 748-754 Link Here
748
		final IEclipseContext lclContext = getContext(itemModel);
750
		final IEclipseContext lclContext = getContext(itemModel);
749
		DirectContributionItem ci = ContextInjectionFactory.make(DirectContributionItem.class, lclContext);
751
		DirectContributionItem ci = ContextInjectionFactory.make(DirectContributionItem.class, lclContext);
750
		ci.setModel(itemModel);
752
		ci.setModel(itemModel);
751
		ci.setVisible(itemModel.isVisible());
753
		ci.setVisible(isVisible(itemModel));
752
		addToManager(parentManager, itemModel, ci);
754
		addToManager(parentManager, itemModel, ci);
753
		linkModelToContribution(itemModel, ci);
755
		linkModelToContribution(itemModel, ci);
754
	}
756
	}
Lines 762-768 Link Here
762
		final IEclipseContext lclContext = getContext(itemModel);
764
		final IEclipseContext lclContext = getContext(itemModel);
763
		HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class, lclContext);
765
		HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class, lclContext);
764
		ci.setModel(itemModel);
766
		ci.setModel(itemModel);
765
		ci.setVisible(itemModel.isVisible());
767
		ci.setVisible(isVisible(itemModel));
766
		addToManager(parentManager, itemModel, ci);
768
		addToManager(parentManager, itemModel, ci);
767
		linkModelToContribution(itemModel, ci);
769
		linkModelToContribution(itemModel, ci);
768
	}
770
	}
Lines 780-790 Link Here
780
		} else {
782
		} else {
781
			return;
783
			return;
782
		}
784
		}
783
		ici.setVisible(itemModel.isVisible());
785
		ici.setVisible(isVisible(itemModel));
784
		addToManager(parentManager, itemModel, ici);
786
		addToManager(parentManager, itemModel, ici);
785
		linkModelToContribution(itemModel, ici);
787
		linkModelToContribution(itemModel, ici);
786
	}
788
	}
787
789
790
	private boolean isVisible(MToolBarElement element) {
791
		return isVisible(element, getContext(element));
792
	}
793
794
	static boolean isVisible(MToolBarElement element, IEclipseContext contextForEvaluation) {
795
		boolean visible = element.isVisible();
796
		if (visible && (element.getVisibleWhen() instanceof MCoreExpression)) {
797
			final ExpressionContext evalContext = new ExpressionContext(contextForEvaluation);
798
			visible = ContributionsAnalyzer.isVisible((MCoreExpression) element.getVisibleWhen(), evalContext);
799
		}
800
		return visible;
801
	}
802
788
	private void addToManager(ToolBarManager parentManager,
803
	private void addToManager(ToolBarManager parentManager,
789
			MToolBarElement model, IContributionItem ci) {
804
			MToolBarElement model, IContributionItem ci) {
790
		MElementContainer<MUIElement> parent = model.getParent();
805
		MElementContainer<MUIElement> parent = model.getParent();
(-)tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRendererTest.java (+54 lines)
Added Link Here
1
package org.eclipse.e4.ui.workbench.renderers.swt;
2
3
import static org.junit.Assert.assertFalse;
4
import static org.junit.Assert.assertTrue;
5
import static org.mockito.Matchers.any;
6
import static org.mockito.Mockito.mock;
7
import static org.mockito.Mockito.when;
8
9
import org.eclipse.core.expressions.EvaluationResult;
10
import org.eclipse.core.expressions.Expression;
11
import org.eclipse.core.runtime.CoreException;
12
import org.eclipse.e4.core.contexts.IEclipseContext;
13
import org.eclipse.e4.ui.model.application.ui.MCoreExpression;
14
import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
15
import org.junit.Before;
16
import org.junit.Test;
17
18
public class ToolBarManagerRendererTest {
19
	private IEclipseContext context;
20
21
	@Before
22
	public void setUp() {
23
		context = null;
24
	}
25
26
	@Test
27
	public void isVisible() {
28
		MToolItem toolItem = mock(MToolItem.class);
29
30
		assertFalse(ToolBarManagerRenderer.isVisible(toolItem, context));
31
32
		when(toolItem.isVisible()).thenReturn(Boolean.TRUE);
33
		assertTrue(ToolBarManagerRenderer.isVisible(toolItem, context));
34
	}
35
36
	@Test
37
	public void isVisibleWithExpression() throws CoreException {
38
		Expression expression = mock(Expression.class);
39
		when(expression.evaluate(any())).thenReturn(EvaluationResult.FALSE);
40
		MCoreExpression visibleWhen = mock(MCoreExpression.class);
41
		when(visibleWhen.getCoreExpression()).thenReturn(expression);
42
43
		MToolItem toolItem = mock(MToolItem.class);
44
		when(toolItem.getVisibleWhen()).thenReturn(visibleWhen);
45
		// item is visible, but expression must also evaluate to true
46
		when(toolItem.isVisible()).thenReturn(Boolean.TRUE);
47
48
		assertFalse(ToolBarManagerRenderer.isVisible(toolItem, context));
49
50
		when(expression.evaluate(any())).thenReturn(EvaluationResult.TRUE);
51
		assertTrue(ToolBarManagerRenderer.isVisible(toolItem, context));
52
	}
53
54
}

Return to bug 494663