Example usage for org.eclipse.jface.action IContributionManager find

List of usage examples for org.eclipse.jface.action IContributionManager find

Introduction

In this page you can find the example usage for org.eclipse.jface.action IContributionManager find.

Prototype

IContributionItem find(String id);

Source Link

Document

Finds the contribution item with the given id.

Usage

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);
}