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 172179 Details for
Bug 316303
[Compatibility] turn actionSets into MenuContributions
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
actionSet visibleWhen v02 (draft)
visibleWhen-v02.txt (text/plain), 14.12 KB, created by
Paul Webster
on 2010-06-17 20:51:42 EDT
(
hide
)
Description:
actionSet visibleWhen v02 (draft)
Filename:
MIME Type:
Creator:
Paul Webster
Created:
2010-06-17 20:51:42 EDT
Size:
14.12 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.ui.workbench >Index: Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.compatibility/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java,v >retrieving revision 1.53 >diff -u -r1.53 WorkbenchPage.java >--- Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java 7 Jun 2010 21:46:39 -0000 1.53 >+++ Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java 18 Jun 2010 00:48:21 -0000 >@@ -11,12 +11,6 @@ > > package org.eclipse.ui.internal; > >-import org.eclipse.e4.ui.workbench.UIEvents; >- >-import org.eclipse.e4.ui.workbench.modeling.EModelService; >-import org.eclipse.e4.ui.workbench.modeling.EPartService; >-import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState; >- > import java.util.ArrayList; > import java.util.Arrays; > import java.util.Collection; >@@ -46,6 +40,11 @@ > import org.eclipse.e4.ui.model.application.ui.basic.MPartStack; > import org.eclipse.e4.ui.model.application.ui.basic.MWindow; > import org.eclipse.e4.ui.model.application.ui.basic.MWindowElement; >+import org.eclipse.e4.ui.services.EContextService; >+import org.eclipse.e4.ui.workbench.UIEvents; >+import org.eclipse.e4.ui.workbench.modeling.EModelService; >+import org.eclipse.e4.ui.workbench.modeling.EPartService; >+import org.eclipse.e4.ui.workbench.modeling.EPartService.PartState; > import org.eclipse.jface.preference.IPreferenceStore; > import org.eclipse.jface.util.IPropertyChangeListener; > import org.eclipse.jface.util.PropertyChangeEvent; >@@ -2135,6 +2134,12 @@ > // this perspective already exists, switch to this one > perspectives.setSelectedElement(mperspective); > window.getContext().set(IContextConstants.ACTIVE_CHILD, mperspective.getContext()); >+ EContextService contextService = mperspective.getContext().get( >+ EContextService.class); >+ for (String setId : modelLayout.getActionSets()) { >+ System.err.println("activating: " + setId); //$NON-NLS-1$ >+ contextService.activateContext(setId); >+ } > legacyWindow.firePerspectiveDeactivated(this, perspective); > return; > } >@@ -2163,6 +2168,12 @@ > // activate it > perspectives.setSelectedElement(modelPerspective); > window.getContext().set(IContextConstants.ACTIVE_CHILD, modelPerspective.getContext()); >+ EContextService contextService = modelPerspective.getContext().get(EContextService.class); >+ for (String setId : modelLayout.getActionSets()) { >+ System.err.println("activating: " + setId); //$NON-NLS-1$ >+ contextService.activateContext(setId); >+ } >+ > legacyWindow.firePerspectiveDeactivated(this, perspective); > > // FIXME: we need to fire events >Index: Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.compatibility/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java,v >retrieving revision 1.20 >diff -u -r1.20 ModeledPageLayout.java >--- Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java 4 Jun 2010 20:22:16 -0000 1.20 >+++ Eclipse UI/org/eclipse/ui/internal/e4/compatibility/ModeledPageLayout.java 18 Jun 2010 00:48:21 -0000 >@@ -11,9 +11,6 @@ > > package org.eclipse.ui.internal.e4.compatibility; > >-import org.eclipse.e4.ui.workbench.modeling.EModelService; >-import org.eclipse.e4.ui.workbench.modeling.EPartService; >- > import java.util.ArrayList; > import java.util.List; > import org.eclipse.e4.ui.model.application.MApplication; >@@ -30,6 +27,8 @@ > import org.eclipse.e4.ui.model.application.ui.basic.MStackElement; > import org.eclipse.e4.ui.model.application.ui.basic.MWindow; > import org.eclipse.e4.ui.model.application.ui.basic.impl.BasicFactoryImpl; >+import org.eclipse.e4.ui.workbench.modeling.EModelService; >+import org.eclipse.e4.ui.workbench.modeling.EPartService; > import org.eclipse.swt.SWT; > import org.eclipse.ui.IFolderLayout; > import org.eclipse.ui.IPageLayout; >@@ -54,7 +53,7 @@ > private ArrayList perspectiveShortcut = new ArrayList(); > private ArrayList showInPart = new ArrayList(); > private ArrayList showViewShortcut = new ArrayList(); >- private ArrayList actionSet = new ArrayList(); >+ private ArrayList<String> actionSet = new ArrayList<String>(); > > boolean createReferences; > >@@ -113,6 +112,10 @@ > actionSet.add(actionSetId); > } > >+ public List<String> getActionSets() { >+ return actionSet; >+ } >+ > public void addFastView(String viewId) { > } > >Index: Eclipse UI/org/eclipse/ui/internal/menus/ActionSet.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.compatibility/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/ActionSet.java,v >retrieving revision 1.1 >diff -u -r1.1 ActionSet.java >--- Eclipse UI/org/eclipse/ui/internal/menus/ActionSet.java 16 Jun 2010 00:57:10 -0000 1.1 >+++ Eclipse UI/org/eclipse/ui/internal/menus/ActionSet.java 18 Jun 2010 00:48:22 -0000 >@@ -12,16 +12,27 @@ > package org.eclipse.ui.internal.menus; > > import java.util.ArrayList; >+import java.util.Collection; >+import org.eclipse.core.commands.contexts.Context; >+import org.eclipse.core.expressions.EvaluationResult; >+import org.eclipse.core.expressions.Expression; >+import org.eclipse.core.expressions.ExpressionInfo; >+import org.eclipse.core.expressions.IEvaluationContext; >+import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IConfigurationElement; > import org.eclipse.core.runtime.Path; > import org.eclipse.e4.core.contexts.IEclipseContext; > import org.eclipse.e4.ui.model.application.MApplication; >+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.impl.UiFactoryImpl; > import org.eclipse.e4.ui.model.application.ui.menu.MMenu; > import org.eclipse.e4.ui.model.application.ui.menu.MMenuContribution; > import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement; > import org.eclipse.e4.ui.model.application.ui.menu.impl.MenuFactoryImpl; >+import org.eclipse.e4.ui.services.EContextService; > import org.eclipse.e4.ui.workbench.swt.modeling.MenuServiceFilter; >+import org.eclipse.ui.ISources; > import org.eclipse.ui.IWorkbenchActionConstants; > import org.eclipse.ui.internal.e4.compatibility.E4Util; > import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants; >@@ -36,6 +47,8 @@ > > private MApplication application; > >+ private ActiveContextExpression visibleWhen; >+ > public ActionSet(MApplication application, IEclipseContext appContext, > IConfigurationElement element) { > this.application = application; >@@ -45,6 +58,15 @@ > public void addToModel(ArrayList<MMenuContribution> contributions) { > > String idContrib = MenuHelper.getId(configElement); >+ visibleWhen = new ActiveContextExpression(idContrib); >+ >+ EContextService contextService = application.getContext().get(EContextService.class); >+ Context actionSetContext = contextService.getContext(idContrib); >+ if (!actionSetContext.isDefined()) { >+ actionSetContext.define(MenuHelper.getLabel(configElement), >+ MenuHelper.getDescription(configElement), "org.eclipse.ui.contexts.actionSet"); //$NON-NLS-1$ >+ } >+ > IConfigurationElement[] menus = configElement > .getChildren(IWorkbenchRegistryConstants.TAG_MENU); > for (IConfigurationElement element : menus) { >@@ -61,9 +83,52 @@ > // printContributions(contributions); > } > >+ static class ActiveContextExpression extends Expression { >+ private String id; >+ >+ public ActiveContextExpression(String id) { >+ this.id = id; >+ } >+ >+ @Override >+ public void collectExpressionInfo(ExpressionInfo info) { >+ info.addVariableNameAccess(ISources.ACTIVE_CONTEXT_NAME); >+ } >+ >+ @Override >+ public EvaluationResult evaluate(IEvaluationContext context) throws CoreException { >+ Object obj = context.getVariable(ISources.ACTIVE_CONTEXT_NAME); >+ if (obj instanceof Collection<?>) { >+ return EvaluationResult.valueOf(((Collection) obj).contains(id)); >+ } >+ return EvaluationResult.FALSE; >+ } >+ >+ @Override >+ public boolean equals(Object obj) { >+ if (!(obj instanceof ActiveContextExpression)) { >+ return false; >+ } >+ return id.equals(((ActiveContextExpression) obj).id); >+ } >+ >+ @Override >+ public int hashCode() { >+ return id.hashCode(); >+ } >+ } >+ >+ private MCoreExpression createVisibleWhen() { >+ MCoreExpression exp = UiFactoryImpl.eINSTANCE.createCoreExpression(); >+ exp.setCoreExpressionId("programmatic." + MenuHelper.getId(configElement)); //$NON-NLS-1$ >+ exp.setCoreExpression(visibleWhen); >+ return exp; >+ } >+ > private void addContribution(String idContrib, ArrayList<MMenuContribution> contributions, > IConfigurationElement element, boolean isMenu) { > MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); >+ menuContribution.setVisibleWhen(createVisibleWhen()); > menuContribution.getTags().add(MenuServiceFilter.MC_MENU); > final String elementId = MenuHelper.getId(element); > if (idContrib != null && idContrib.length() > 0) { >@@ -114,6 +179,7 @@ > private void processGroups(String idContrib, ArrayList<MMenuContribution> contributions, > IConfigurationElement element) { > MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); >+ menuContribution.setVisibleWhen(createVisibleWhen()); > menuContribution.getTags().add(MenuServiceFilter.MC_MENU); > final String elementId = MenuHelper.getId(element); > if (idContrib != null && idContrib.length() > 0) { >Index: Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java >=================================================================== >RCS file: /cvsroot/eclipse/e4/org.eclipse.e4.compatibility/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java,v >retrieving revision 1.4 >diff -u -r1.4 MenuHelper.java >--- Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java 16 Jun 2010 16:42:48 -0000 1.4 >+++ Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java 18 Jun 2010 00:48:22 -0000 >@@ -168,12 +168,78 @@ > return null; > } > >- private static String getKey(MMenuContribution contribution) { >- String key = contribution.getParentID(); >- key = key + "?" //$NON-NLS-1$ >- + (contribution.getPositionInParent() == null ? "after=additions" //$NON-NLS-1$ >- : contribution.getPositionInParent()); >- return key; >+ static class Key { >+ private MMenuContribution contribution; >+ private int tag = -1; >+ private int hc = -1; >+ >+ public Key(MMenuContribution mc) { >+ this.contribution = mc; >+ mc.setWidget(this); >+ } >+ >+ int getSchemeTag() { >+ if (tag == -1) { >+ List<String> tags = contribution.getTags(); >+ if (tags.contains("scheme:menu")) { //$NON-NLS-1$ >+ tag = 1; >+ } else if (tags.contains("scheme:popup")) { //$NON-NLS-1$ >+ tag = 2; >+ } else if (tags.contains("scheme:toolbar")) { //$NON-NLS-1$ >+ tag = 3; >+ } else { >+ tag = 0; >+ } >+ } >+ return tag; >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see java.lang.Object#equals(java.lang.Object) >+ */ >+ @Override >+ public boolean equals(Object obj) { >+ if (!(obj instanceof Key)) { >+ return false; >+ } >+ Key other = (Key) obj; >+ MCoreExpression vexp1 = (MCoreExpression) contribution.getVisibleWhen(); >+ Object exp1 = vexp1 == null ? null : vexp1.getCoreExpression(); >+ MCoreExpression vexp2 = (MCoreExpression) other.contribution.getVisibleWhen(); >+ Object exp2 = vexp2 == null ? null : vexp2.getCoreExpression(); >+ return Util.equals(contribution.getParentID(), other.contribution.getParentID()) >+ && Util.equals(contribution.getPositionInParent(), >+ other.contribution.getPositionInParent()) >+ && getSchemeTag() == other.getSchemeTag() && Util.equals(exp1, exp2); >+ } >+ >+ @Override >+ public int hashCode() { >+ if (hc == -1) { >+ MCoreExpression vexp1 = (MCoreExpression) contribution.getVisibleWhen(); >+ Object exp1 = vexp1 == null ? null : vexp1.getCoreExpression(); >+ hc = Util.hashCode(contribution.getParentID()); >+ hc = hc * 87 + Util.hashCode(contribution.getPositionInParent()); >+ hc = hc * 87 + getSchemeTag(); >+ hc = hc * 87 + Util.hashCode(exp1); >+ } >+ return hc; >+ } >+ >+ @Override >+ public String toString() { >+ return "Key " + contribution.getParentID() + "--" + contribution.getPositionInParent() //$NON-NLS-1$ //$NON-NLS-2$ >+ + "--" + getSchemeTag() + "--" + contribution.getVisibleWhen(); //$NON-NLS-1$//$NON-NLS-2$ >+ } >+ } >+ >+ private static Key getKey(MMenuContribution contribution) { >+ if (contribution.getWidget() instanceof Key) { >+ return (Key) contribution.getWidget(); >+ } >+ return new Key(contribution); > } > > public static void printContributions(ArrayList<MMenuContribution> contributions) { >@@ -201,11 +267,12 @@ > > public static void mergeContributions(ArrayList<MMenuContribution> contributions, > ArrayList<MMenuContribution> result) { >- HashMap<String, ArrayList<MMenuContribution>> buckets = new HashMap<String, ArrayList<MMenuContribution>>(); >+ HashMap<Key, ArrayList<MMenuContribution>> buckets = new HashMap<Key, ArrayList<MMenuContribution>>(); > trace("mergeContributions size: " + contributions.size(), null); //$NON-NLS-1$ > printContributions(contributions); >+ // first pass, sort by parentId?position,scheme,visibleWhen > for (MMenuContribution contribution : contributions) { >- String key = getKey(contribution); >+ Key key = getKey(contribution); > ArrayList<MMenuContribution> slot = buckets.get(key); > if (slot == null) { > slot = new ArrayList<MMenuContribution>(); >@@ -216,7 +283,7 @@ > Iterator<MMenuContribution> i = contributions.iterator(); > while (i.hasNext() && !buckets.isEmpty()) { > MMenuContribution contribution = i.next(); >- String key = getKey(contribution); >+ Key key = getKey(contribution); > ArrayList<MMenuContribution> slot = buckets.remove(key); > if (slot == null) { > continue; >@@ -233,6 +300,7 @@ > } > } > if (toContribute != null) { >+ toContribute.setWidget(null); > result.add(toContribute); > } > } >@@ -455,4 +523,8 @@ > } > return item; > } >+ >+ public static String getDescription(IConfigurationElement configElement) { >+ return configElement.getAttribute(IWorkbenchRegistryConstants.TAG_DESCRIPTION); >+ } > }
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 316303
:
171886
|
172005
|
172179
|
172665
|
172806
|
172855