List of usage examples for org.eclipse.jface.action IContributionManager find
IContributionItem find(String id);
From source file:org.eclipse.ui.texteditor.BasicTextEditorActionContributor.java
License:Open Source License
/** * The <code>item</code> is {@link IContributionManager#add(IContributionItem) added} to * <code>menu</code> if no item with the same id currently exists. If there already is an * contribution item with the same id, the new item gets * {@link IContributionManager#insertAfter(String, IContributionItem) inserted after} it. * * @param menu the contribution manager/*w ww . j av a2 s . com*/ * @param item the contribution item * @since 3.2 */ private void addOrInsert(IContributionManager menu, IContributionItem item) { String id = item.getId(); if (menu.find(id) == null) menu.add(item); else menu.insertAfter(id, item); }
From source file:org.fusesource.ide.foundation.ui.util.Menus.java
License:Open Source License
/** * Adds the action or contribution item to the menu only if its not already been added *//* w ww. j a v a2s .c om*/ public static void addAction(IContributionManager manager, Object actionOrContributionItem) { if (actionOrContributionItem instanceof IAction) { IAction action = (IAction) actionOrContributionItem; String id = getActionId(action); if (id == null || manager.find(id) != null) { return; } manager.add(action); } else if (actionOrContributionItem instanceof IContributionItem) { IContributionItem contributionItem = (IContributionItem) actionOrContributionItem; String id = getContributionItemId(contributionItem); if (id == null || manager.find(id) != null) { return; } manager.add(contributionItem); } }
From source file:org.nightlabs.base.ui.action.registry.AbstractActionRegistry.java
License:Open Source License
/** * Removes all contributions of this registry from the CoolBar of the * given coolBarManager. Ideally this is done by making the contributions * invisible, so Eclipse can remember their positions. However * this is currently not possible and thats why this method * removes the affected contributions from the CoolBar. * This behaviour can is configured via {@link #useRemoveInsteadOfUnvisibleWorkaround}. * * @param coolBarManager The {@link ICoolBarManager} where the contributions of this registry should be removed from. *//*from ww w .ja v a 2s . c o m*/ public void removeAllFromCoolBar(ICoolBarManager coolBarManager) { if (Display.getCurrent() == null) throw new IllegalStateException("This method must be called on the UI thread!"); //$NON-NLS-1$ IContributionManager coolBarContributionManager = coolBarManager; if (coolBarManager instanceof SubCoolBarManager) coolBarContributionManager = ((SubCoolBarManager) coolBarManager).getParent(); if (!useRemoveInsteadOfUnvisibleWorkaround) ((SubCoolBarManager) coolBarManager).setVisible(false); String baseID = this.getClass().getName(); String orphanageToolbarID = baseID + '.' + ORPHANAGE_TOOLBAR_ID; // We use a temporary MenuManager which will be translated into the real // coolbar afterwards. MenuManager tmpMenu = new MenuManager(); ActionVisibilityDecider backupActionVisibilityDecider = this.actionVisibilityDecider; try { this.actionVisibilityDecider = actionVisibilityDeciderAlwaysVisible; contribute(tmpMenu, ContributionManagerKind.coolBar); } finally { this.actionVisibilityDecider = backupActionVisibilityDecider; } // convert the existing items of the real coolbar-manager into a Map - the new items might // already exist because of Eclipse's workspace memory (and then the old ones need to be // manipulated - new ones would be ignored because of a bug/feature in the EclipseRCP) // IContributionItem[] coolBarItems = ((SubCoolBarManager)coolBarManager).getParent().getItems(); IContributionItem[] coolBarItems = coolBarContributionManager.getItems(); // key: String itemId // value: IXContributionItem Map<String, IContributionItem> coolBarItemMap = new HashMap<String, IContributionItem>(coolBarItems.length); for (int i = 0; i < coolBarItems.length; ++i) { IContributionItem coolBarItem = coolBarItems[i]; coolBarItemMap.put(coolBarItem.getId(), coolBarItem); logger.debug("Having " + coolBarItem.getId() + " in CoolBar"); //$NON-NLS-1$ //$NON-NLS-2$ } ToolBarContributionItem orphanageToolBarContributionItem = getToolBarContributionItem( coolBarItemMap.get(orphanageToolbarID)); if (orphanageToolBarContributionItem != null) { IContributionItem item = coolBarContributionManager.find(orphanageToolBarContributionItem.getId()); if (item != null) { if (useRemoveInsteadOfUnvisibleWorkaround) { coolBarContributionManager.remove(orphanageToolBarContributionItem.getId()); } else { orphanageToolBarContributionItem.setVisible(false); item.setVisible(false); } } } // Now, we iterate all the "precompiled" items and contribute them to the coolbar IContributionItem[] tmpItems = tmpMenu.getItems(); for (int i = 0; i < tmpItems.length; ++i) { IContributionItem tmpItem = tmpItems[i]; // Test for items that are already in the parent if (tmpItem instanceof IMenuManager) { IMenuManager tmpSubMenu = (IMenuManager) tmpItem; String tmpSubMenuID = baseID + '.' + tmpSubMenu.getId(); ToolBarContributionItem toolBarContributionItem = getToolBarContributionItem( coolBarItemMap.get(tmpSubMenuID)); if (toolBarContributionItem != null) { IContributionItem item = coolBarContributionManager.find(toolBarContributionItem.getId()); if (item != null) { if (useRemoveInsteadOfUnvisibleWorkaround) { coolBarContributionManager.remove(tmpSubMenuID); } else { toolBarContributionItem.setVisible(false); item.setVisible(false); } } } } } try { coolBarContributionManager.update(true); } catch (Exception x) { // https://bugs.eclipse.org/bugs/show_bug.cgi?id=239945 logger.error("CoolBarManager.update failed: " + x.getLocalizedMessage(), x); //$NON-NLS-1$ } }
From source file:org.nightlabs.base.ui.action.registry.AbstractActionRegistry.java
License:Open Source License
/** * @param manager The manager in which to search. * @param path A slash ('/') separated path or <code>null</code>. If <code>path</code> is * <code>null</code>, this method will always return <code>null</code>. * @return Returns the contribution item specified by path or <code>null</code>, if nothing * could be found.//ww w. java 2 s . c o m */ protected static IContributionItem findUsingPath(IContributionManager manager, String path) { if (path == null) return null; if (manager instanceof IMenuManager) return ((IMenuManager) manager).findUsingPath(path); String[] parts = path.split("/"); //$NON-NLS-1$ IContributionManager mgr = manager; for (int i = 0; i < parts.length; ++i) { String id = parts[i]; if (mgr != null) { IContributionItem item = mgr.find(id); if (i == parts.length - 1) return item; if (item instanceof IMenuManager) { StringBuffer sbSubPath = new StringBuffer(); for (int n = i + 1; n < parts.length; ++n) { if (sbSubPath.length() != 0) sbSubPath.append('/'); sbSubPath.append(parts[n]); } return ((IMenuManager) item).findUsingPath(sbSubPath.toString()); } if (item instanceof IContributionManager) mgr = (IContributionManager) item; else return null; } } return null; }
From source file:org.nightlabs.base.ui.action.registry.AbstractActionRegistry.java
License:Open Source License
/** * This method contributes WITHOUT removing items before. * * @param contributionManager//from w ww.ja v a 2 s . co m * @param kind * @return Returns the number of visible contribution items (i.e. actions) that have been added. */ protected Map<Class<? extends ItemDescriptor>, List<ItemDescriptor>> contribute( IContributionManager contributionManager, ContributionManagerKind kind) { Map<Class<? extends ItemDescriptor>, List<ItemDescriptor>> visibleItemDescriptors = new HashMap<Class<? extends ItemDescriptor>, List<ItemDescriptor>>(); ActionVisibilityContext actionVisibilityContext = new ActionVisibilityContext(kind); List<ItemDescriptor> menuSorted = contributionManagerKind2menuSorted.get(kind); boolean firstRun = menuSorted == null; LinkedList<ItemDescriptor> menuRaw = null; int lastMenuRawSize = 0; if (firstRun) { menuRaw = new LinkedList<ItemDescriptor>(this.menuRaw); menuRaw.add(new SeparatorDescriptor("additions")); //$NON-NLS-1$ lastMenuRawSize = menuRaw.size(); menuSorted = new LinkedList<ItemDescriptor>(); } // contributionManager.removeAll(); while ((firstRun && !menuRaw.isEmpty()) || !firstRun) { for (Iterator<?> itTopLevel = (firstRun ? menuRaw : menuSorted).iterator(); itTopLevel.hasNext();) { ItemDescriptor item = (ItemDescriptor) itTopLevel.next(); if (item instanceof ActionDescriptor) { ActionDescriptor ad = (ActionDescriptor) item; String path = getPath(ad, kind); IContributionItem anchor = path == null ? null : findUsingPath(contributionManager, path); if (anchor != null) { if (actionVisibilityDecider.isVisible(actionVisibilityContext, ad)) { addVisibleItemDescriptor(visibleItemDescriptors, ActionDescriptor.class, ad); if (anchor instanceof MenuManager) { if (ad.getAction() != null) ((MenuManager) anchor).add(ad.getAction()); else if (ad.getContributionItem() != null) ((MenuManager) anchor).add(ad.getContributionItem()); } else { if (ad.getAction() != null) ((ContributionItem) anchor).getParent().insertAfter(anchor.getId(), ad.getAction()); else if (ad.getContributionItem() != null) ((ContributionItem) anchor).getParent().insertAfter(anchor.getId(), ad.getContributionItem()); } } if (firstRun) { menuSorted.add(item); itTopLevel.remove(); } } } else if (item instanceof SeparatorDescriptor) { addVisibleItemDescriptor(visibleItemDescriptors, SeparatorDescriptor.class, item); SeparatorDescriptor s = (SeparatorDescriptor) item; String path = s.getPath(); IContributionItem anchor = path == null ? null : findUsingPath(contributionManager, path); if (path == null || anchor != null) { Separator separator = new Separator(s.getName()); if (anchor == null) { if (contributionManager.find(item.getID()) == null) contributionManager.add(separator); } else { if (((ContributionItem) anchor).getParent().find(item.getID()) == null) ((ContributionItem) anchor).getParent().insertAfter(anchor.getId(), separator); } if (firstRun) { menuSorted.add(item); itTopLevel.remove(); } } } else if (item instanceof GroupMarkerDescriptor) { addVisibleItemDescriptor(visibleItemDescriptors, GroupMarkerDescriptor.class, item); GroupMarkerDescriptor gm = (GroupMarkerDescriptor) item; String path = gm.getPath(); IContributionItem anchor = path == null ? null : findUsingPath(contributionManager, path); if (path == null || anchor != null) { GroupMarker groupMarker = new GroupMarker(gm.getName()); if (anchor == null) { if (contributionManager.find(item.getID()) == null) contributionManager.add(groupMarker); } else { if (((ContributionItem) anchor).getParent().find(item.getID()) == null) ((ContributionItem) anchor).getParent().insertAfter(anchor.getId(), groupMarker); } if (firstRun) { menuSorted.add(item); itTopLevel.remove(); } } } else if (item instanceof MenuDescriptor) { addVisibleItemDescriptor(visibleItemDescriptors, MenuDescriptor.class, item); MenuDescriptor md = (MenuDescriptor) item; String path = md.getPath(); // already existing in the contribution-manager? IContributionItem anchor = path == null ? null : findUsingPath(contributionManager, path); if (path == null || anchor != null) { MenuManager subMenu = new MenuManager(md.getLabel(), md.getID()); for (Iterator<?> itSub = md.getSubItems().iterator(); itSub.hasNext();) { Object obj = itSub.next(); if (obj instanceof SeparatorDescriptor) { SeparatorDescriptor separator = (SeparatorDescriptor) obj; subMenu.add(new Separator(separator.getName())); } else if (obj instanceof GroupMarkerDescriptor) { GroupMarkerDescriptor groupMarker = (GroupMarkerDescriptor) obj; subMenu.add(new GroupMarker(groupMarker.getName())); } else throw new IllegalStateException( "SubItem of menu is neither a SeparatorDescriptor nor a GroupMarkerDescriptor but " //$NON-NLS-1$ + obj.getClass().getName()); } if (anchor == null) { if (contributionManager.find(item.getID()) == null) contributionManager.add(subMenu); } else { if (((ContributionItem) anchor).getParent().find(item.getID()) == null) ((ContributionItem) anchor).getParent().insertAfter(anchor.getId(), subMenu); } if (firstRun) { menuSorted.add(item); itTopLevel.remove(); } } } else throw new IllegalStateException( "Item in menuRaw of type " + item.getClass() + " is an instance of an unknown class!"); //$NON-NLS-1$ //$NON-NLS-2$ } if (firstRun && (lastMenuRawSize == menuRaw.size())) { if (logger.isDebugEnabled()) { logger.debug("Could not add the following contributions to the menu (kind " + kind + "):"); //$NON-NLS-1$ //$NON-NLS-2$ for (Iterator<ItemDescriptor> it = menuRaw.iterator(); it.hasNext();) { ItemDescriptor item = it.next(); if (item instanceof ActionDescriptor) { logger.debug(" Action with id=" + ((ActionDescriptor) item).getID()); //$NON-NLS-1$ } else if (item instanceof MenuDescriptor) { logger.debug(" Menu with id=" + ((MenuDescriptor) item).getID()); //$NON-NLS-1$ } else if (item instanceof SeparatorDescriptor) { logger.debug(" Separator with name=" + ((SeparatorDescriptor) item).getName()); //$NON-NLS-1$ } else if (item instanceof GroupMarkerDescriptor) { logger.debug(" GroupMarker with name=" + ((GroupMarkerDescriptor) item).getName()); //$NON-NLS-1$ } else logger.debug(" " + item); //$NON-NLS-1$ } } break; } if (!firstRun) break; lastMenuRawSize = menuRaw.size(); } // while ((firstRun && !menuRaw.isEmpty()) || !firstRun) { if (firstRun) contributionManagerKind2menuSorted.put(kind, menuSorted); // flatten the menus if we're contributing to the toolbar (which doesn't understand sub-menus) // the coolbar is handled by contributeToCoolBar(...) directly if (ContributionManagerKind.toolBar == kind) { IContributionItem[] items = contributionManager.getItems(); contributionManager.removeAll(); for (int i = 0; i < items.length; ++i) { IContributionItem item = items[i]; if (item instanceof IMenuManager) addFlattenedMenu(contributionManager, null, (IMenuManager) item); else contributionManager.add(item); } } contributionManager.update(true); debugContributions(visibleItemDescriptors, kind, true); return visibleItemDescriptors; }
From source file:org.nightlabs.base.ui.search.SearchContributionItem.java
License:Open Source License
@Override public void fill(Menu menu, int index) { if (logger.isDebugEnabled()) logger.debug("fill called for menu " + menu); //$NON-NLS-1$ String id = SearchContributionItem.class.getName(); if (getParent() != null) { IContributionManager parent = getParent(); IContributionItem removedItem = parent.remove(id); if (removedItem != null) { if (logger.isDebugEnabled()) logger.debug("item " + removedItem + " was removed from contributionManager " + parent); //$NON-NLS-1$ //$NON-NLS-2$ }/* w w w. j a v a 2 s . c o m*/ IMenuManager menuManager = new MenuManager( Messages.getString("org.nightlabs.base.ui.search.SearchContributionItem.menu.search.title"), //$NON-NLS-1$ id); Map<ISearchResultProviderFactory, ISearchResultProvider> factory2Instance = getUseCase() .getFactory2Instance(); for (Map.Entry<ISearchResultProviderFactory, ISearchResultProvider> entry : factory2Instance .entrySet()) { ISearchResultProviderFactory factory = entry.getKey(); MenuContributionItem item = new MenuContributionItem(factory); menuManager.add(item); } if (parent != null) { if (parent.find(IWorkbenchActionConstants.M_FILE) != null) { parent.insertAfter(IWorkbenchActionConstants.M_FILE, menuManager); if (logger.isDebugEnabled()) logger.debug("added contribution after file menu of contributionManager " + getParent()); //$NON-NLS-1$ } else { parent.add(menuManager); if (logger.isDebugEnabled()) logger.debug("added contribution to the end of the contributionManager " + getParent()); //$NON-NLS-1$ } } else { if (logger.isDebugEnabled()) logger.info("getParent() == null, nothing contributed"); //$NON-NLS-1$ } } if (logger.isDebugEnabled()) logger.info("getParent() == null, nothing contributed"); //$NON-NLS-1$ // createMenu(menu); }