Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 263238 Details for
Bug 494663
Visible-When Expression is not evaluated for Tool Items
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Using visibleWhen for setting visibility for toolbar contributions
toolitem-visiblewhen.patch (text/plain), 15.12 KB, created by
Daniel Raap
on 2016-07-21 08:36:32 EDT
(
hide
)
Description:
Using visibleWhen for setting visibility for toolbar contributions
Filename:
MIME Type:
Creator:
Daniel Raap
Created:
2016-07-21 08:36:32 EDT
Size:
15.12 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P eclipse.platform.ui >diff --git bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >index 933ddc4..48d3f0b 100644 >--- bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >+++ bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >@@ -43,10 +43,10 @@ > > public abstract class SWTPartRenderer extends AbstractPartRenderer { > private static final String ICON_URI_FOR_PART = "IconUriForPart"; //$NON-NLS-1$ >+ static final String PIN_URI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$ > > private Map<String, Image> imageMap = new HashMap<>(); > >- private String pinURI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$ > private Image pinImage; > > private ISWTResourceUtilities resUtils; >@@ -327,7 +327,7 @@ > > resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class > .getName()); >- pinImage = getImageFromURI(pinURI); >+ pinImage = getImageFromURI(PIN_URI); > > Display.getCurrent().disposeExec(new Runnable() { > @Override >diff --git bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java >index 6784213..472feea 100644 >--- bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java >+++ bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java >@@ -27,6 +27,7 @@ > import javax.annotation.PostConstruct; > import javax.inject.Inject; > import org.eclipse.core.expressions.ExpressionInfo; >+import org.eclipse.e4.core.commands.ExpressionContext; > import org.eclipse.e4.core.contexts.ContextInjectionFactory; > import org.eclipse.e4.core.contexts.IContextFunction; > import org.eclipse.e4.core.contexts.IEclipseContext; >@@ -40,6 +41,7 @@ > import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils; > import org.eclipse.e4.ui.model.application.MApplication; > import org.eclipse.e4.ui.model.application.MApplicationElement; >+import org.eclipse.e4.ui.model.application.ui.MCoreExpression; > import org.eclipse.e4.ui.model.application.ui.MElementContainer; > import org.eclipse.e4.ui.model.application.ui.MUIElement; > import org.eclipse.e4.ui.model.application.ui.SideValue; >@@ -191,7 +193,7 @@ > } > > if (parent == null) { >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > return; > } > >@@ -199,13 +201,13 @@ > // partial fix for bug 383569: only change state if there are no > // extra override mechanics controlling element visibility > if (ov == null) { >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > } else { > Boolean visible = ov.getVisible(ici); > if (visible == null) { > // same as above: only change state if there are no extra > // override mechanics controlling element visibility >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > } > } > >@@ -711,7 +713,7 @@ > } > itemModel.setRenderer(this); > AbstractGroupMarker marker = null; >- if (itemModel.isVisible() && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) { >+ if (isVisible(itemModel) && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) { > marker = new Separator(); > marker.setId(itemModel.getElementId()); > } else { >@@ -734,7 +736,7 @@ > final IEclipseContext lclContext = getContext(itemModel); > ToolControlContribution ci = ContextInjectionFactory.make(ToolControlContribution.class, lclContext); > ci.setModel(itemModel); >- ci.setVisible(itemModel.isVisible()); >+ ci.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ci); > linkModelToContribution(itemModel, ci); > } >@@ -748,7 +750,7 @@ > final IEclipseContext lclContext = getContext(itemModel); > DirectContributionItem ci = ContextInjectionFactory.make(DirectContributionItem.class, lclContext); > ci.setModel(itemModel); >- ci.setVisible(itemModel.isVisible()); >+ ci.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ci); > linkModelToContribution(itemModel, ci); > } >@@ -762,7 +764,7 @@ > final IEclipseContext lclContext = getContext(itemModel); > HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class, lclContext); > ci.setModel(itemModel); >- ci.setVisible(itemModel.isVisible()); >+ ci.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ci); > linkModelToContribution(itemModel, ci); > } >@@ -780,11 +782,24 @@ > } else { > return; > } >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ici); > linkModelToContribution(itemModel, ici); > } > >+ private boolean isVisible(MToolBarElement element) { >+ return isVisible(element, getContext(element)); >+ } >+ >+ static boolean isVisible(MToolBarElement element, IEclipseContext contextForEvaluation) { >+ boolean visible = element.isVisible(); >+ if (visible && (element.getVisibleWhen() instanceof MCoreExpression)) { >+ final ExpressionContext evalContext = new ExpressionContext(contextForEvaluation); >+ visible = ContributionsAnalyzer.isVisible((MCoreExpression) element.getVisibleWhen(), evalContext); >+ } >+ return visible; >+ } >+ > private void addToManager(ToolBarManager parentManager, > MToolBarElement model, IContributionItem ci) { > MElementContainer<MUIElement> parent = model.getParent(); >### Eclipse Workspace Patch 1.0 >#P eclipse.platform.ui >diff --git bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.core.resources.prefs bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.core.resources.prefs >new file mode 100644 >index 0000000..99f26c0 >--- /dev/null >+++ bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.core.resources.prefs >@@ -0,0 +1,2 @@ >+eclipse.preferences.version=1 >+encoding/<project>=UTF-8 >diff --git bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.m2e.core.prefs bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.m2e.core.prefs >new file mode 100644 >index 0000000..f897a7f >--- /dev/null >+++ bundles/org.eclipse.e4.ui.workbench.renderers.swt/.settings/org.eclipse.m2e.core.prefs >@@ -0,0 +1,4 @@ >+activeProfiles= >+eclipse.preferences.version=1 >+resolveWorkspaceProjects=true >+version=1 >diff --git bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >index 933ddc4..48d3f0b 100644 >--- bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >+++ bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/SWTPartRenderer.java >@@ -43,10 +43,10 @@ > > public abstract class SWTPartRenderer extends AbstractPartRenderer { > private static final String ICON_URI_FOR_PART = "IconUriForPart"; //$NON-NLS-1$ >+ static final String PIN_URI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$ > > private Map<String, Image> imageMap = new HashMap<>(); > >- private String pinURI = "platform:/plugin/org.eclipse.e4.ui.workbench.renderers.swt/icons/full/ovr16/pinned_ovr.gif"; //$NON-NLS-1$ > private Image pinImage; > > private ISWTResourceUtilities resUtils; >@@ -327,7 +327,7 @@ > > resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class > .getName()); >- pinImage = getImageFromURI(pinURI); >+ pinImage = getImageFromURI(PIN_URI); > > Display.getCurrent().disposeExec(new Runnable() { > @Override >diff --git bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java >index 6784213..472feea 100644 >--- bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java >+++ bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRenderer.java >@@ -27,6 +27,7 @@ > import javax.annotation.PostConstruct; > import javax.inject.Inject; > import org.eclipse.core.expressions.ExpressionInfo; >+import org.eclipse.e4.core.commands.ExpressionContext; > import org.eclipse.e4.core.contexts.ContextInjectionFactory; > import org.eclipse.e4.core.contexts.IContextFunction; > import org.eclipse.e4.core.contexts.IEclipseContext; >@@ -40,6 +41,7 @@ > import org.eclipse.e4.ui.internal.workbench.swt.CSSRenderingUtils; > import org.eclipse.e4.ui.model.application.MApplication; > import org.eclipse.e4.ui.model.application.MApplicationElement; >+import org.eclipse.e4.ui.model.application.ui.MCoreExpression; > import org.eclipse.e4.ui.model.application.ui.MElementContainer; > import org.eclipse.e4.ui.model.application.ui.MUIElement; > import org.eclipse.e4.ui.model.application.ui.SideValue; >@@ -191,7 +193,7 @@ > } > > if (parent == null) { >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > return; > } > >@@ -199,13 +201,13 @@ > // partial fix for bug 383569: only change state if there are no > // extra override mechanics controlling element visibility > if (ov == null) { >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > } else { > Boolean visible = ov.getVisible(ici); > if (visible == null) { > // same as above: only change state if there are no extra > // override mechanics controlling element visibility >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > } > } > >@@ -711,7 +713,7 @@ > } > itemModel.setRenderer(this); > AbstractGroupMarker marker = null; >- if (itemModel.isVisible() && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) { >+ if (isVisible(itemModel) && !itemModel.getTags().contains(MenuManagerRenderer.GROUP_MARKER)) { > marker = new Separator(); > marker.setId(itemModel.getElementId()); > } else { >@@ -734,7 +736,7 @@ > final IEclipseContext lclContext = getContext(itemModel); > ToolControlContribution ci = ContextInjectionFactory.make(ToolControlContribution.class, lclContext); > ci.setModel(itemModel); >- ci.setVisible(itemModel.isVisible()); >+ ci.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ci); > linkModelToContribution(itemModel, ci); > } >@@ -748,7 +750,7 @@ > final IEclipseContext lclContext = getContext(itemModel); > DirectContributionItem ci = ContextInjectionFactory.make(DirectContributionItem.class, lclContext); > ci.setModel(itemModel); >- ci.setVisible(itemModel.isVisible()); >+ ci.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ci); > linkModelToContribution(itemModel, ci); > } >@@ -762,7 +764,7 @@ > final IEclipseContext lclContext = getContext(itemModel); > HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class, lclContext); > ci.setModel(itemModel); >- ci.setVisible(itemModel.isVisible()); >+ ci.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ci); > linkModelToContribution(itemModel, ci); > } >@@ -780,11 +782,24 @@ > } else { > return; > } >- ici.setVisible(itemModel.isVisible()); >+ ici.setVisible(isVisible(itemModel)); > addToManager(parentManager, itemModel, ici); > linkModelToContribution(itemModel, ici); > } > >+ private boolean isVisible(MToolBarElement element) { >+ return isVisible(element, getContext(element)); >+ } >+ >+ static boolean isVisible(MToolBarElement element, IEclipseContext contextForEvaluation) { >+ boolean visible = element.isVisible(); >+ if (visible && (element.getVisibleWhen() instanceof MCoreExpression)) { >+ final ExpressionContext evalContext = new ExpressionContext(contextForEvaluation); >+ visible = ContributionsAnalyzer.isVisible((MCoreExpression) element.getVisibleWhen(), evalContext); >+ } >+ return visible; >+ } >+ > private void addToManager(ToolBarManager parentManager, > MToolBarElement model, IContributionItem ci) { > MElementContainer<MUIElement> parent = model.getParent(); >diff --git tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRendererTest.java tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRendererTest.java >new file mode 100644 >index 0000000..33a9b6b >--- /dev/null >+++ tests/org.eclipse.e4.ui.tests/src/org/eclipse/e4/ui/workbench/renderers/swt/ToolBarManagerRendererTest.java >@@ -0,0 +1,54 @@ >+package org.eclipse.e4.ui.workbench.renderers.swt; >+ >+import static org.junit.Assert.assertFalse; >+import static org.junit.Assert.assertTrue; >+import static org.mockito.Matchers.any; >+import static org.mockito.Mockito.mock; >+import static org.mockito.Mockito.when; >+ >+import org.eclipse.core.expressions.EvaluationResult; >+import org.eclipse.core.expressions.Expression; >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.e4.core.contexts.IEclipseContext; >+import org.eclipse.e4.ui.model.application.ui.MCoreExpression; >+import org.eclipse.e4.ui.model.application.ui.menu.MToolItem; >+import org.junit.Before; >+import org.junit.Test; >+ >+public class ToolBarManagerRendererTest { >+ private IEclipseContext context; >+ >+ @Before >+ public void setUp() { >+ context = null; >+ } >+ >+ @Test >+ public void isVisible() { >+ MToolItem toolItem = mock(MToolItem.class); >+ >+ assertFalse(ToolBarManagerRenderer.isVisible(toolItem, context)); >+ >+ when(toolItem.isVisible()).thenReturn(Boolean.TRUE); >+ assertTrue(ToolBarManagerRenderer.isVisible(toolItem, context)); >+ } >+ >+ @Test >+ public void isVisibleWithExpression() throws CoreException { >+ Expression expression = mock(Expression.class); >+ when(expression.evaluate(any())).thenReturn(EvaluationResult.FALSE); >+ MCoreExpression visibleWhen = mock(MCoreExpression.class); >+ when(visibleWhen.getCoreExpression()).thenReturn(expression); >+ >+ MToolItem toolItem = mock(MToolItem.class); >+ when(toolItem.getVisibleWhen()).thenReturn(visibleWhen); >+ // item is visible, but expression must also evaluate to true >+ when(toolItem.isVisible()).thenReturn(Boolean.TRUE); >+ >+ assertFalse(ToolBarManagerRenderer.isVisible(toolItem, context)); >+ >+ when(expression.evaluate(any())).thenReturn(EvaluationResult.TRUE); >+ assertTrue(ToolBarManagerRenderer.isVisible(toolItem, context)); >+ } >+ >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 494663
:
262034
|
262035
| 263238