private void contributeMenuGroup(ArrayList<MMenuContribution> contributions, String parentId, String positionInParent) { String group = positionInParent.substring(6); if (menuContributionGroupIds.contains(parentId + group)) { return; } menuContributionGroupIds.add(parentId + group); MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); menuContribution.setVisibleWhen(createVisibleWhen()); menuContribution.getTags().add(ContributionsAnalyzer.MC_MENU); menuContribution.getTags().add("scheme:menu"); //$NON-NLS-1$ menuContribution.setParentId(parentId); menuContribution.setPositionInParent("after=additions"); //$NON-NLS-1$ MMenuElement sep = MenuFactoryImpl.eINSTANCE.createMenuSeparator(); sep.getTags().add(MenuManagerRenderer.GROUP_MARKER); sep.setVisible(false); sep.setElementId(group); menuContribution.getChildren().add(sep); contributions.add(menuContribution); }
public MenuKey(MMenuContribution mc) { super(mc.getParentId(), mc.getPositionInParent(), mc.getTags(), (MCoreExpression) mc .getVisibleWhen(), mc.getTransientData().get(FACTORY)); this.contribution = mc; mc.setWidget(this); }
public boolean mergeIntoModel() { int idx = getIndex(menuModel, menuContribution.getPositionInParent()); if (idx == -1) { return false; if (menuContribution.getTransientData().get(FACTORY) != null) { copyElements = mergeFactoryIntoModel(); } else { copyElements = new ArrayList<MMenuElement>(); for (MMenuElement item : menuContribution.getChildren()) { MMenuElement copy = (MMenuElement) EcoreUtil .copy((EObject) item);
continue; Object[] array = item.getChildren().toArray(); int idx = getIndex(toContribute, item.getPositionInParent()); if (idx == -1) { idx = 0; if (!containsMatching(toContribute.getChildren(), me)) { toContribute.getChildren().add(idx, me); idx++; toContribute.setWidget(null); result.add(toContribute);
MMenuContribution menuContribution, final HashSet<String> existingMenuIds, HashSet<String> existingSeparatorNames) { int idx = getIndex(menuModel, menuContribution.getPositionInParent()); if (idx == -1) { return false; for (MMenuElement item : menuContribution.getChildren()) { if (item instanceof MMenu && existingMenuIds.contains(item.getElementId())) {
public static boolean isVisible(MMenuContribution menuContribution, ExpressionContext eContext) { if (menuContribution.getVisibleWhen() == null) { return true; } return isVisible((MCoreExpression) menuContribution.getVisibleWhen(), eContext); }
/** * @return */ private List<MMenuElement> mergeFactoryIntoModel() { Object obj = menuContribution.getTransientData().get(FACTORY); if (!(obj instanceof IContextFunction)) { return Collections.EMPTY_LIST; } IEclipseContext staticContext = getStaticContext(); staticContext.remove(List.class); factoryDispose = (Runnable) ((IContextFunction) obj) .compute(staticContext, null); return staticContext.get(List.class); }
public static void printContributions(ArrayList<MMenuContribution> contributions) { for (MMenuContribution c : contributions) { trace("\n" + c, null); //$NON-NLS-1$ for (MMenuElement element : c.getChildren()) { printElement(1, element); } } }
String parentID = menuContribution.getParentId(); if (parentID == null) { && POPUP_PARENT_ID.equals(parentID); boolean filtered = isFiltered(menuModel, menuContribution, includePopups); if (!filtered && menuContribution.isToBeRendered() && popupAny) { || !menuContribution.isToBeRendered()) { continue;
static boolean isFiltered(MMenu menuModel, MMenuContribution menuContribution, boolean includePopups) { if (includePopups || menuModel.getTags().contains(ContributionsAnalyzer.MC_POPUP)) { return !menuContribution.getTags().contains(ContributionsAnalyzer.MC_POPUP) && menuContribution.getTags().contains(ContributionsAnalyzer.MC_MENU); } if (menuModel.getTags().contains(ContributionsAnalyzer.MC_MENU)) { return !menuContribution.getTags().contains(ContributionsAnalyzer.MC_MENU) && menuContribution.getTags().contains(ContributionsAnalyzer.MC_POPUP); } if (!includePopups) { // not including popups, so filter out popup menu contributions if the menu is a regular // menu return menuContribution.getTags().contains(ContributionsAnalyzer.MC_POPUP); } return false; }
public boolean mergeIntoModel() { int idx = getIndex(menuModel, menuContribution.getPositionInParent()); if (idx == -1) { return false; if (menuContribution.getTransientData().get(FACTORY) != null) { copyElements = mergeFactoryIntoModel(); } else { copyElements = new ArrayList<>(); for (MMenuElement item : menuContribution.getChildren()) { MMenuElement copy = (MMenuElement) EcoreUtil .copy((EObject) item);
toContribute.add(menuContribution); } else { if (menuContribution.getVisibleWhen() != null) { ctx.runAndTrack(new RunAndTrack() { @Override
/** * @return */ private List<MMenuElement> mergeFactoryIntoModel() { Object obj = menuContribution.getTransientData().get(FACTORY); if (!(obj instanceof IContextFunction)) { return Collections.EMPTY_LIST; } IEclipseContext staticContext = getStaticContext(); staticContext.remove(List.class); factoryDispose = (Runnable) ((IContextFunction) obj).compute( staticContext, null); return staticContext.get(List.class); }
public static void gatherMenuContributions(final MMenu menuModel, final List<MMenuContribution> menuContributionList, final String id, final ArrayList<MMenuContribution> toContribute, final ExpressionContext eContext, boolean includePopups) { if (id == null || id.length() == 0) { return; } boolean menuBar = (((MUIElement) ((EObject) menuModel).eContainer()) instanceof MWindow); for (MMenuContribution menuContribution : menuContributionList) { String parentID = menuContribution.getParentId(); if (parentID == null) { // it doesn't make sense for this to be null, temporary workaround for bug 320790 continue; } boolean popup = parentID.equals(POPUP_PARENT_ID) && (menuModel instanceof MPopupMenu) && includePopups; boolean filtered = isFiltered(menuModel, menuContribution, includePopups); if (filtered || (!popup && !parentID.equals(id)) || !menuContribution.isToBeRendered()) { continue; } if (menuBar || isVisible(menuContribution, eContext)) { toContribute.add(menuContribution); } } }
private void processGroups(String idContrib, ArrayList<MMenuContribution> contributions, IConfigurationElement element) { MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); menuContribution.setVisibleWhen(createVisibleWhen()); menuContribution.getTags().add(ContributionsAnalyzer.MC_MENU); menuContribution.getTags().add("scheme:menu"); //$NON-NLS-1$ final String elementId = MenuHelper.getId(element); if (idContrib != null && idContrib.length() > 0) { menuContribution.setElementId(idContrib + "/" + elementId + ".groups"); //$NON-NLS-1$ //$NON-NLS-2$ } else { menuContribution.setElementId(elementId + ".groups"); //$NON-NLS-1$ } menuContribution.setParentId(elementId); menuContribution.setPositionInParent("after=additions"); //$NON-NLS-1$ IConfigurationElement[] children = element.getChildren(); for (IConfigurationElement sepAddition : children) { String name = sepAddition.getAttribute(IWorkbenchRegistryConstants.ATT_NAME); String tag = sepAddition.getName(); MMenuElement sep = MenuFactoryImpl.eINSTANCE.createMenuSeparator(); sep.setElementId(name); if ("groupMarker".equals(tag)) { //$NON-NLS-1$ sep.setVisible(false); sep.getTags().add(MenuManagerRenderer.GROUP_MARKER); } menuContribution.getChildren().add(sep); } if (menuContribution.getChildren().size() > 0) { contributions.add(menuContribution); } }
public void collectInfo(ExpressionInfo info) { ContributionsAnalyzer.collectInfo(info, menuContribution.getVisibleWhen()); for (MMenuElement item : generatedElements) { ContributionsAnalyzer.collectInfo(info, item.getVisibleWhen()); } for (MMenuElement item : sharedElements) { ContributionsAnalyzer.collectInfo(info, item.getVisibleWhen()); } }
/** * @param menuContributions * @param filter */ private void processMenuChildren(ArrayList<MMenuContribution> menuContributions, IConfigurationElement element, String filter) { IConfigurationElement[] menus = element.getChildren(IWorkbenchRegistryConstants.TAG_MENU); if (menus.length == 0) { return; } for (IConfigurationElement menu : menus) { MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); String idContrib = MenuHelper.getId(menu); if (idContrib != null && idContrib.length() > 0) { menuContribution.setElementId(idContrib); } menuContribution.setParentId(idContrib); menuContribution.setPositionInParent(AFTER_ADDITIONS); menuContribution.getTags().add("scheme:" + location.getScheme()); //$NON-NLS-1$ menuContribution.getTags().add(filter); menuContribution.setVisibleWhen(MenuHelper.getVisibleWhen(menu)); addMenuChildren(menuContribution, menu, filter); menuContributions.add(menuContribution); processMenuChildren(menuContributions, menu, filter); } }
public void collectInfo(ExpressionInfo info) { ContributionsAnalyzer.collectInfo(info, menuContribution.getVisibleWhen()); for (MMenuElement item : generatedElements) { ContributionsAnalyzer.collectInfo(info, item.getVisibleWhen()); } for (MMenuElement item : sharedElements) { ContributionsAnalyzer.collectInfo(info, item.getVisibleWhen()); } }
protected void addContribution(String idContrib, ArrayList<MMenuContribution> contributions, IConfigurationElement element, boolean isMenu, String parentId) { MMenuContribution menuContribution = MenuFactoryImpl.eINSTANCE.createMenuContribution(); menuContribution.setVisibleWhen(createVisibleWhen()); menuContribution.getTags().add(ContributionsAnalyzer.MC_MENU); menuContribution.getTags().add("scheme:menu"); //$NON-NLS-1$ final String elementId = MenuHelper.getId(element); if (idContrib != null && idContrib.length() > 0) { menuContribution.setElementId(idContrib + "/" + elementId); //$NON-NLS-1$ } else { menuContribution.setElementId(elementId); menuContribution.setParentId(parentId); menuContribution.setPositionInParent(positionInParent); if (isMenu) { MMenu menu = MenuHelper.createMenuAddition(element); if (menu != null) { contributeMenuGroup(contributions, parentId, positionInParent); menuContribution.getChildren().add(menu); menu.getTransientData().put("ActionSet", id); //$NON-NLS-1$ E4Util.unsupported("****MC: bad pie: " + menuPath); //$NON-NLS-1$ parentId = IWorkbenchActionConstants.M_WINDOW; menuContribution.setParentId(parentId); menuContribution.getChildren().add(action); action.getTransientData().put("ActionSet", id); //$NON-NLS-1$ if (menuContribution.getChildren().size() > 0) { contributions.add(menuContribution);