Example usage for org.eclipse.jface.action IContributionItem isSeparator

List of usage examples for org.eclipse.jface.action IContributionItem isSeparator

Introduction

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

Prototype

boolean isSeparator();

Source Link

Document

Returns whether this contribution item is a separator.

Usage

From source file:com.github.haixing_hu.swt.menu.MenuManagerEx.java

License:Open Source License

/**
 * Incrementally builds the menu from the contribution items. This method
 * leaves out double separators and separators in the first or last position.
 *
 * @param force/*from w  w w  .ja va 2  s .  c om*/
 *          <code>true</code> means update even if not dirty, and
 *          <code>false</code> for normal incremental updating
 * @param recursive
 *          <code>true</code> means recursively update all submenus, and
 *          <code>false</code> means just this menu
 */
protected void update(boolean force, boolean recursive) {
    if (isDirty() || force) {
        if (menuExist()) {
            // clean contains all active items without double separators
            final IContributionItem[] items = getItems();
            final List<IContributionItem> clean = new ArrayList<IContributionItem>(items.length);
            IContributionItem separator = null;
            for (final IContributionItem item : items) {
                final IContributionItem ci = item;
                if (!isChildVisible(ci)) {
                    continue;
                }
                if (ci.isSeparator()) {
                    // delay creation until necessary
                    // (handles both adjacent separators, and separator at end)
                    separator = ci;
                } else {
                    if (separator != null) {
                        if (clean.size() > 0) {
                            clean.add(separator);
                        }
                        separator = null;
                    }
                    clean.add(ci);
                }
            }

            // remove obsolete (removed or non active)
            Item[] mi = getMenuItems();

            for (final Item element : mi) {
                final Object data = element.getData();

                if ((data == null) || !clean.contains(data)) {
                    element.dispose();
                } else if ((data instanceof IContributionItem) && ((IContributionItem) data).isDynamic()
                        && ((IContributionItem) data).isDirty()) {
                    element.dispose();
                }
            }

            // add new
            mi = getMenuItems();
            int srcIx = 0;
            int destIx = 0;

            for (final Object element : clean) {
                final IContributionItem src = (IContributionItem) element;
                IContributionItem dest;

                // get corresponding item in SWT widget
                if (srcIx < mi.length) {
                    dest = (IContributionItem) mi[srcIx].getData();
                } else {
                    dest = null;
                }

                if ((dest != null) && src.equals(dest)) {
                    srcIx++;
                    destIx++;
                } else if ((dest != null) && dest.isSeparator() && src.isSeparator()) {
                    mi[srcIx].setData(src);
                    srcIx++;
                    destIx++;
                } else {
                    final int start = getMenuItemCount();
                    doItemFill(src, destIx);
                    final int newItems = getMenuItemCount() - start;
                    for (int i = 0; i < newItems; i++) {
                        final Item item = getMenuItem(destIx++);
                        item.setData(src);
                    }
                }

                // May be we can optimize this call. If the menu has just
                // been created via the call src.fill(fMenuBar, destIx) then
                // the menu has already been updated with update(true)
                // (see MenuManagerEx). So if force is true we do it again. But
                // we can't set force to false since then information for the
                // sub sub menus is lost.
                if (recursive) {
                    IContributionItem item = src;
                    if (item instanceof SubContributionItem) {
                        item = ((SubContributionItem) item).getInnerItem();
                    }
                    if (item instanceof IMenuManager) {
                        ((IMenuManager) item).updateAll(force);
                    }
                }

            }

            // remove any old menu items not accounted for
            for (; srcIx < mi.length; srcIx++) {
                mi[srcIx].dispose();
            }

            setDirty(false);
        }
    } else {
        // I am not dirty. Check if I must recursivly walk down the hierarchy.
        if (recursive) {
            final IContributionItem[] items = getItems();
            for (final IContributionItem ci : items) {
                if (ci instanceof IMenuManager) {
                    final IMenuManager mm = (IMenuManager) ci;
                    if (isChildVisible(mm)) {
                        mm.updateAll(force);
                    }
                }
            }
        }
    }
    updateMenuItem();
}

From source file:com.sap.dirigible.ide.ui.rap.managers.ContribItem.java

License:Open Source License

public boolean isVisible() {
    boolean visibleItem = false;
    if (toolBarManager != null) {
        IContributionItem[] contributionItems = toolBarManager.getItems();
        for (int i = 0; i < contributionItems.length && !visibleItem; i++) {
            IContributionItem contributionItem = contributionItems[i];
            if ((!contributionItem.isGroupMarker()) && (!contributionItem.isSeparator())
                    && (contributionItem.isVisible())) {
                visibleItem = true;/*from   ww  w  .ja v  a 2  s.c  o m*/
            }
        }
    }

    return (visibleItem || super.isVisible());
}

From source file:com.sap.dirigible.ide.ui.rap.managers.CoolBarManager.java

License:Open Source License

public void update(final boolean force) {
    if ((isDirty() || force) && getControl2() != null) {
        refresh();//from w w w.j a  v  a  2  s .  c  om
        boolean changed = false;

        /*
         * Make a list of items including only those items that are visible.
         * Separators are being removed. Because we use only one Toolbar all
         * ToolBarContributionItems will be extracted in their IContribution
         * Items.
         */
        final IContributionItem[] items = getItems();
        final List<IContributionItem> visibleItems = new ArrayList<IContributionItem>(items.length);
        for (int i = 0; i < items.length; i++) {
            final IContributionItem item = items[i];
            if (item.isVisible()) {
                if (item instanceof IToolBarContributionItem) {
                    IToolBarContributionItem toolbarItem = (IToolBarContributionItem) item;
                    IToolBarManager toolBarManager = toolbarItem.getToolBarManager();
                    IContributionItem[] toolbarItems = toolBarManager.getItems();
                    for (int j = 0; j < toolbarItems.length; j++) {
                        final IContributionItem toolItem = toolbarItems[j];
                        if (toolItem.isVisible() && !toolItem.isSeparator()) {
                            visibleItems.add(toolItem);
                        }
                    }
                }
            }
        }

        /*
         * Make a list of ToolItem widgets in the tool bar for which there
         * is no current visible contribution item. These are the widgets to
         * be disposed. Dynamic items are also removed.
         */
        ToolItem[] toolItems = toolbar.getItems();
        final ArrayList<ToolItem> toolItemsToRemove = new ArrayList<ToolItem>(toolItems.length);
        for (int i = 0; i < toolItems.length; i++) {
            final Object data = toolItems[i].getData();
            if ((data == null) || (!visibleItems.contains(data))
                    || ((data instanceof IContributionItem) && ((IContributionItem) data).isDynamic())) {
                toolItemsToRemove.add(toolItems[i]);
            }
        }

        // Dispose of any items in the list to be removed.
        for (int i = toolItemsToRemove.size() - 1; i >= 0; i--) {
            ToolItem toolItem = (ToolItem) toolItemsToRemove.get(i);
            if (!toolItem.isDisposed()) {
                Control control = toolItem.getControl();
                if (control != null) {
                    toolItem.setControl(null);
                    control.dispose();
                }
                toolItem.dispose();
            }
        }

        // Add any new items by telling them to fill.
        toolItems = toolbar.getItems();
        IContributionItem sourceItem;
        IContributionItem destinationItem;
        int sourceIndex = 0;
        int destinationIndex = 0;
        final Iterator<IContributionItem> visibleItemItr = visibleItems.iterator();
        while (visibleItemItr.hasNext()) {
            sourceItem = visibleItemItr.next();

            // Retrieve the corresponding contribution item from SWT's
            // data.
            if (sourceIndex < toolItems.length) {
                destinationItem = (IContributionItem) toolItems[sourceIndex].getData();
            } else {
                destinationItem = null;
            }

            // The items match if they are equal or both separators.
            if (destinationItem != null) {
                if (sourceItem.equals(destinationItem)) {
                    sourceIndex++;
                    destinationIndex++;
                    sourceItem.update();
                    continue;
                } else if ((destinationItem.isSeparator()) && (sourceItem.isSeparator())) {
                    toolItems[sourceIndex].setData(sourceItem);
                    sourceIndex++;
                    destinationIndex++;
                    sourceItem.update();
                    continue;
                }
            }

            // Otherwise, a new item has to be added.
            final int start = toolbar.getItemCount();
            sourceItem.fill(toolbar, destinationIndex);
            final int newItems = toolbar.getItemCount() - start;
            // add the selection listener for the styling
            StylingSelectionAdapter listener = new StylingSelectionAdapter(HEADER_TOOLBAR_VARIANT);
            for (int i = 0; i < newItems; i++) {
                ToolItem item = toolbar.getItem(destinationIndex++);
                item.setData(sourceItem);
                item.addSelectionListener(listener);
            }
            changed = true;
        }

        // Remove any old widgets not accounted for.
        for (int i = toolItems.length - 1; i >= sourceIndex; i--) {
            final ToolItem item = toolItems[i];
            if (!item.isDisposed()) {
                Control control = item.getControl();
                if (control != null) {
                    item.setControl(null);
                    control.dispose();
                }
                item.dispose();
                changed = true;
            }
        }

        // Update wrap indices. only needed by a coolbar
        // updateWrapIndices();

        // Update the sizes.
        for (int i = 0; i < items.length; i++) {
            IContributionItem item = items[i];
            item.update(SIZE);
        }

        if (changed) {
            updateToolbarTabOrder();
        }

        // We are no longer dirty.
        setDirty(false);
        styleToolItems();
        toolbar.pack();
        toolbar.layout(true, true);
        manageOverflow();
    }
}

From source file:net.yatomiya.e4.ui.workbench.renderers.swt.MenuManagerRenderer.java

License:Open Source License

/**
 * @param menuManager/*from   w w  w.  j a  v  a2  s. c o m*/
 * @param menuModel
 */
public void reconcileManagerToModel(MenuManager menuManager, MMenu menuModel) {
    List<MMenuElement> modelChildren = menuModel.getChildren();

    HashSet<MMenuItem> oldModelItems = new HashSet<>();
    HashSet<MMenu> oldMenus = new HashSet<>();
    HashSet<MMenuSeparator> oldSeps = new HashSet<>();
    for (MMenuElement itemModel : modelChildren) {
        if (OpaqueElementUtil.isOpaqueMenuSeparator(itemModel)) {
            oldSeps.add((MMenuSeparator) itemModel);
        } else if (OpaqueElementUtil.isOpaqueMenuItem(itemModel)) {
            oldModelItems.add((MMenuItem) itemModel);
        } else if (OpaqueElementUtil.isOpaqueMenu(itemModel)) {
            oldMenus.add((MMenu) itemModel);
        }
    }

    IContributionItem[] items = menuManager.getItems();
    for (int src = 0, dest = 0; src < items.length; src++, dest++) {
        IContributionItem item = items[src];

        if (item instanceof SubContributionItem) {
            // get the wrapped contribution item
            item = ((SubContributionItem) item).getInnerItem();
        }

        if (item instanceof MenuManager) {
            MenuManager childManager = (MenuManager) item;
            MMenu childModel = getMenuModel(childManager);
            if (childModel == null) {
                MMenu legacyModel = OpaqueElementUtil.createOpaqueMenu();
                legacyModel.setElementId(childManager.getId());
                legacyModel.setVisible(childManager.isVisible());
                legacyModel.setLabel(childManager.getMenuText());

                linkModelToManager(legacyModel, childManager);
                OpaqueElementUtil.setOpaqueItem(legacyModel, childManager);
                if (modelChildren.size() > dest) {
                    modelChildren.add(dest, legacyModel);
                } else {
                    modelChildren.add(legacyModel);
                }
                reconcileManagerToModel(childManager, legacyModel);
            } else {
                if (OpaqueElementUtil.isOpaqueMenu(childModel)) {
                    oldMenus.remove(childModel);
                }
                if (modelChildren.size() > dest) {
                    if (modelChildren.get(dest) != childModel) {
                        modelChildren.remove(childModel);
                        modelChildren.add(dest, childModel);
                    }
                } else {
                    modelChildren.add(childModel);
                }
                if (childModel instanceof MPopupMenu) {
                    if (((MPopupMenu) childModel).getContext() == null) {
                        IEclipseContext lclContext = getContext(menuModel);
                        if (lclContext != null) {
                            ((MPopupMenu) childModel)
                                    .setContext(lclContext.createChild(childModel.getElementId()));
                        }
                    }
                }

                if (childModel.getChildren().size() != childManager.getSize()) {
                    reconcileManagerToModel(childManager, childModel);
                }
            }
        } else if (item.isSeparator() || item.isGroupMarker()) {
            MMenuElement menuElement = getMenuElement(item);
            if (menuElement == null) {
                MMenuSeparator legacySep = OpaqueElementUtil.createOpaqueMenuSeparator();
                legacySep.setElementId(item.getId());
                legacySep.setVisible(item.isVisible());
                OpaqueElementUtil.setOpaqueItem(legacySep, item);
                linkModelToContribution(legacySep, item);
                if (modelChildren.size() > dest) {
                    modelChildren.add(dest, legacySep);
                } else {
                    modelChildren.add(legacySep);
                }
            } else if (OpaqueElementUtil.isOpaqueMenuSeparator(menuElement)) {
                MMenuSeparator legacySep = (MMenuSeparator) menuElement;
                oldSeps.remove(legacySep);
                if (modelChildren.size() > dest) {
                    if (modelChildren.get(dest) != legacySep) {
                        modelChildren.remove(legacySep);
                        modelChildren.add(dest, legacySep);
                    }
                } else {
                    modelChildren.add(legacySep);
                }
            }
        } else {
            MMenuElement menuElement = getMenuElement(item);
            if (menuElement == null) {
                MMenuItem legacyItem = OpaqueElementUtil.createOpaqueMenuItem();
                legacyItem.setElementId(item.getId());
                legacyItem.setVisible(item.isVisible());
                OpaqueElementUtil.setOpaqueItem(legacyItem, item);
                linkModelToContribution(legacyItem, item);
                if (modelChildren.size() > dest) {
                    modelChildren.add(dest, legacyItem);
                } else {
                    modelChildren.add(legacyItem);
                }
            } else if (OpaqueElementUtil.isOpaqueMenuItem(menuElement)) {
                MMenuItem legacyItem = (MMenuItem) menuElement;
                oldModelItems.remove(legacyItem);
                if (modelChildren.size() > dest) {
                    if (modelChildren.get(dest) != legacyItem) {
                        modelChildren.remove(legacyItem);
                        modelChildren.add(dest, legacyItem);
                    }
                } else {
                    modelChildren.add(legacyItem);
                }
            }
        }
    }
    if (!oldModelItems.isEmpty()) {
        modelChildren.removeAll(oldModelItems);
        for (MMenuItem model : oldModelItems) {
            IContributionItem ici = (IContributionItem) OpaqueElementUtil.getOpaqueItem(model);
            clearModelToContribution(model, ici);
        }
    }
    if (!oldMenus.isEmpty()) {
        modelChildren.removeAll(oldMenus);
        for (MMenu oldMenu : oldMenus) {
            MenuManager oldManager = getManager(oldMenu);
            clearModelToManager(oldMenu, oldManager);
        }
    }
    if (!oldSeps.isEmpty()) {
        modelChildren.removeAll(oldSeps);
        for (MMenuSeparator model : oldSeps) {
            IContributionItem item = (IContributionItem) OpaqueElementUtil.getOpaqueItem(model);
            clearModelToContribution(model, item);
        }
    }
}

From source file:org.eclipse.babel.runtime.MenuAnalyzer.java

License:Open Source License

private TranslatableMenuItem createTranslatableMenu(IContributionItem item,
        ITranslatableText parentLocalizableText) {
    TranslatableMenuItem translatableMenuItem = new TranslatableMenuItem(parentLocalizableText);

    if (item == null) {
        return translatableMenuItem;
    }//  w  w  w. j  a  v  a2  s.com

    if (item instanceof MenuManager) {
        MenuManager menuManager = (MenuManager) item;

        //         System.out.print("\n children of " + item.toString() + "are:\n\n");
        //         for (IContributionItem contributionItem: menuManager.getItems()) {
        //            System.out.println(contributionItem.toString());
        //         }

        for (IContributionItem contributionItem : menuManager.getItems()) {

            if (!contributionItem.isVisible()) {
                continue;
            }

            if (contributionItem.isSeparator()) {
                continue;
            }

            if (contributionItem instanceof SubContributionItem) {
                contributionItem = ((SubContributionItem) contributionItem).getInnerItem();
            }

            if (contributionItem instanceof ShowViewMenu) {
                addShowViewChildren(translatableMenuItem);
            } else {
                /*
                 * Fetch the original localization text for this item.
                 */
                ITranslatableText localizableText = null;

                if (contributionItem instanceof MenuManager) {
                    MenuManager subMenuManager = (MenuManager) contributionItem;
                    String id = subMenuManager.getId();

                    localizableText = extractFromPluginXml("org.eclipse.ui.commands", "category", id, "name",
                            true);
                    if (localizableText == null) {
                        localizableText = extractFromPluginXml("org.eclipse.ui.commands", "command", id, "name",
                                true);
                    }
                    if (localizableText == null) {
                        localizableText = extractFromPluginXml("org.eclipse.ui.menus", "menuContribution",
                                "menu", id, "label", false);
                    }
                    if (localizableText == null) {
                        localizableText = extractFromPluginXml("org.eclipse.ui.actionSets", "actionSet", "menu",
                                id, "label", false);
                    }
                    if (localizableText == null) {
                        localizableText = new NonTranslatableText(subMenuManager.getMenuText());
                    }
                } else if (contributionItem instanceof ActionContributionItem) {
                    ActionContributionItem pluginAction = (ActionContributionItem) contributionItem;
                    String localId = pluginAction.getId();

                    // Something weird happens here.
                    // A null localId occurs here when running the plug-in in normal deployed
                    // mode but is never null when running the plug-in by starting a new JVM
                    // from within the IDE.
                    if (localId != null) { // needed???
                        // Does this line find anything????
                        localizableText = extractFromPluginXml("org.eclipse.ui.actionSets", "actionSet",
                                "action", localId, "label", false);
                        if (localizableText != null) {
                            textSet.associate(pluginAction, localizableText);
                        } else {
                            String fullId = pluginAction.getAction().getActionDefinitionId();
                            localizableText = extractFromPluginXml("org.eclipse.ui.commands", "command", fullId,
                                    "name", false);
                            if (localizableText != null) {
                                textSet.associate(pluginAction, localizableText);
                            } else {
                                localizableText = new NonTranslatableText(pluginAction.getAction().getText());
                            }
                        }
                    } // needed???
                } else if (contributionItem instanceof CommandContributionItem) {
                    CommandContributionItem pluginAction = (CommandContributionItem) contributionItem;
                    String id = pluginAction.getId();
                    //                  for (IConfigurationElement element: RegistryFactory.getRegistry().getConfigurationElementsFor("org.eclipse.ui.commands")) {
                    //                     if (element instanceof ConfigurationElementHandle) {
                    //                        System.out.println(element.toString());
                    //                     }
                    //                  }

                    Bundle bundle = null;
                    String commandId = null;

                    outer1: for (IConfigurationElement element : RegistryFactory.getRegistry()
                            .getConfigurationElementsFor("org.eclipse.ui.menus")) {
                        if (element instanceof ConfigurationElementHandle) {
                            //                        System.out.println(element.toString());

                            for (IConfigurationElement element2 : element.getChildren()) {
                                if (element2 instanceof ConfigurationElementHandle) {
                                    if (element2.toString().equals(id)) {
                                        commandId = element2.getAttribute("commandId");
                                        String contributorName = element2.getDeclaringExtension()
                                                .getContributor().getName();
                                        bundle = InternalPlatform.getDefault().getBundle(contributorName);
                                        break outer1;
                                    }
                                }
                            }
                        }
                    }

                    if (commandId == null) {

                        outer: for (IConfigurationElement element : Platform.getExtensionRegistry()
                                .getConfigurationElementsFor("org.eclipse.ui.menus")) {
                            if (element.getName().equals("menuContribution")) {
                                for (IConfigurationElement subElement1 : element.getChildren("menu")) {
                                    for (IConfigurationElement subElement : subElement1
                                            .getChildren("command")) {
                                        if (subElement.getAttribute("id").equals(id)) {
                                            String contributorName = element.getDeclaringExtension()
                                                    .getContributor().getName();
                                            bundle = InternalPlatform.getDefault().getBundle(contributorName);

                                            try {
                                                LocalizableContribution contribution = PluginXmlRegistry
                                                        .getInstance().getLocalizableContribution(bundle);
                                                commandId = contribution.getValue("org.eclipse.ui.menus",
                                                        "menuContribution", "menu", "command", id, "commandId");
                                            } catch (ParserConfigurationException e1) {
                                                e1.printStackTrace();
                                                commandId = null;
                                            } catch (SAXException e1) {
                                                e1.printStackTrace();
                                                commandId = null;
                                            } catch (IOException e1) {
                                                e1.printStackTrace();
                                                commandId = null;
                                            }

                                            break outer;
                                        }
                                    }
                                }
                            }
                        }
                    }

                    if (commandId != null) {

                        try {

                            // repeat whole process with the command id
                            LocalizableContribution contribution = PluginXmlRegistry.getInstance()
                                    .getLocalizableContribution(bundle);
                            localizableText = contribution.getLocalizableText("org.eclipse.ui.commands",
                                    "command", commandId, "name");

                            textSet.associate(pluginAction, localizableText);
                        } catch (ParserConfigurationException e1) {
                            e1.printStackTrace();
                            localizableText = new NonTranslatableText(pluginAction.getId());
                        } catch (SAXException e1) {
                            e1.printStackTrace();
                            localizableText = new NonTranslatableText(pluginAction.getId());
                        } catch (IOException e1) {
                            e1.printStackTrace();
                            localizableText = new NonTranslatableText(pluginAction.getId());
                        }
                    } else {
                        localizableText = new NonTranslatableText(pluginAction.getId());
                    }

                    //               } else if (contributionItem instanceof NewWizardMenu) {
                } else if (contributionItem instanceof SubMenuManager) {

                    SubMenuManager pluginAction = (SubMenuManager) contributionItem;
                    // TODO: Sort this out.  Problem occurs because of bad use of action sets in
                    // the copier plug-in.  Generally these should be completely ignored, so set
                    // the localized text object to null which will result in nothing being added.                  
                    localizableText = null;
                    /*
                                              
                                      //                  String id = pluginAction.getId();
                            
                                      for (IContributionItem subItem: pluginAction.getItems()) {
                                         if (subItem instanceof SubContributionItem) {
                                            subItem = ((SubContributionItem) subItem).getInnerItem();
                                         }
                            
                                         if (!(subItem instanceof GroupMarker)
                                               && !(subItem instanceof Separator)) {
                                         String id = subItem.getId();
                                         localizableText = extractFromPluginXml("org.eclipse.ui.actionSets", "actionSet", "action", id, "label", true);
                                         if (localizableText != null) {
                    //                        textSet.associate(subItem, localizableText);
                                         } else {
                                            localizableText = extractFromPluginXml("org.eclipse.ui.commands", "command", id, "name", true);
                                            if (localizableText != null) {
                    //                           textSet.associate(pluginAction, localizableText);
                                            } else {
                                               localizableText = new NonTranslatableText(subItem.toString());
                                            }
                                         }
                            
                                         TranslatableMenuItem childItem = createTranslatableMenu(subItem, localizableText);
                                         translatableMenuItem.add(childItem);
                                         }
                                      }
                    */

                } else {
                    localizableText = new NonTranslatableText(contributionItem.toString());
                }

                if (localizableText != null) {
                    //                  System.out.print("\n " + contributionItem.toString() + " resulted in " + localizableText.getLocalizedText(Locale.getDefault()) + "\n");
                    TranslatableMenuItem childItem = createTranslatableMenu(contributionItem, localizableText);
                    translatableMenuItem.add(childItem);
                }
            }
        }
    }

    return translatableMenuItem;
}

From source file:org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer.java

License:Open Source License

/**
 * @param menuManager/*w  w  w .  j a  va  2  s  .  com*/
 * @param menuModel
 */
public void reconcileManagerToModel(MenuManager menuManager, MMenu menuModel) {
    List<MMenuElement> modelChildren = menuModel.getChildren();

    HashSet<MOpaqueMenuItem> oldModelItems = new HashSet<MOpaqueMenuItem>();
    HashSet<MOpaqueMenu> oldMenus = new HashSet<MOpaqueMenu>();
    HashSet<MOpaqueMenuSeparator> oldSeps = new HashSet<MOpaqueMenuSeparator>();
    for (MMenuElement itemModel : modelChildren) {
        if (itemModel instanceof MOpaqueMenuSeparator) {
            oldSeps.add((MOpaqueMenuSeparator) itemModel);
        } else if (itemModel instanceof MOpaqueMenuItem) {
            oldModelItems.add((MOpaqueMenuItem) itemModel);
        } else if (itemModel instanceof MOpaqueMenu) {
            oldMenus.add((MOpaqueMenu) itemModel);
        }
    }

    IContributionItem[] items = menuManager.getItems();
    for (int src = 0, dest = 0; src < items.length; src++, dest++) {
        IContributionItem item = items[src];
        if (item instanceof MenuManager) {
            MenuManager childManager = (MenuManager) item;
            MMenu childModel = getMenuModel(childManager);
            if (childModel == null) {
                MMenu legacyModel = MenuFactoryImpl.eINSTANCE.createOpaqueMenu();
                legacyModel.setElementId(childManager.getId());
                legacyModel.setVisible(childManager.isVisible());
                linkModelToManager(legacyModel, childManager);
                modelChildren.add(dest, legacyModel);
                reconcileManagerToModel(childManager, legacyModel);
            } else {
                if (childModel instanceof MOpaqueMenu) {
                    oldMenus.remove(childModel);
                }
                if (modelChildren.size() > dest) {
                    if (modelChildren.get(dest) != childModel) {
                        modelChildren.remove(childModel);
                        modelChildren.add(dest, childModel);
                    }
                } else {
                    modelChildren.add(childModel);
                }
                if (childModel instanceof MPopupMenu) {
                    if (((MPopupMenu) childModel).getContext() == null) {
                        IEclipseContext lclContext = getContext(menuModel);
                        if (lclContext != null) {
                            ((MPopupMenu) childModel)
                                    .setContext(lclContext.createChild(childModel.getElementId()));
                        }
                    }
                }
            }
        } else if (item.isSeparator() || item.isGroupMarker()) {
            MMenuElement menuElement = getMenuElement(item);
            if (menuElement == null) {
                MOpaqueMenuSeparator legacySep = MenuFactoryImpl.eINSTANCE.createOpaqueMenuSeparator();
                legacySep.setElementId(item.getId());
                legacySep.setVisible(item.isVisible());
                legacySep.setOpaqueItem(item);
                linkModelToContribution(legacySep, item);
                modelChildren.add(dest, legacySep);
            } else if (menuElement instanceof MOpaqueMenuSeparator) {
                MOpaqueMenuSeparator legacySep = (MOpaqueMenuSeparator) menuElement;
                oldSeps.remove(legacySep);
                if (modelChildren.size() > dest) {
                    if (modelChildren.get(dest) != legacySep) {
                        modelChildren.remove(legacySep);
                        modelChildren.add(dest, legacySep);
                    }
                } else {
                    modelChildren.add(legacySep);
                }
            }
        } else {
            MMenuElement menuElement = getMenuElement(item);
            if (menuElement == null) {
                MOpaqueMenuItem legacyItem = MenuFactoryImpl.eINSTANCE.createOpaqueMenuItem();
                legacyItem.setElementId(item.getId());
                legacyItem.setVisible(item.isVisible());
                legacyItem.setOpaqueItem(item);
                linkModelToContribution(legacyItem, item);
                modelChildren.add(dest, legacyItem);
            } else if (menuElement instanceof MOpaqueMenuItem) {
                MOpaqueMenuItem legacyItem = (MOpaqueMenuItem) menuElement;
                oldModelItems.remove(legacyItem);
                if (modelChildren.size() > dest) {
                    if (modelChildren.get(dest) != legacyItem) {
                        modelChildren.remove(legacyItem);
                        modelChildren.add(dest, legacyItem);
                    }
                } else {
                    modelChildren.add(legacyItem);
                }
            }
        }
    }
    if (!oldModelItems.isEmpty()) {
        modelChildren.removeAll(oldModelItems);
        for (MOpaqueMenuItem model : oldModelItems) {
            clearModelToContribution(model, (IContributionItem) model.getOpaqueItem());
        }
    }
    if (!oldMenus.isEmpty()) {
        modelChildren.removeAll(oldMenus);
        for (MOpaqueMenu oldMenu : oldMenus) {
            MenuManager oldManager = getManager(oldMenu);
            clearModelToManager(oldMenu, oldManager);
        }
    }
    if (!oldSeps.isEmpty()) {
        modelChildren.removeAll(oldSeps);
        for (MOpaqueMenuSeparator model : oldSeps) {
            clearModelToContribution(model, (IContributionItem) model.getOpaqueItem());
        }
    }
}

From source file:org.eclipse.gmf.runtime.gef.ui.internal.actions.MenuManagerEx.java

License:Open Source License

/**
 * Incrementally builds the menu from the contribution items.
 * This method leaves out double separators and separators in the first 
 * or last position./*from w w  w . ja  va 2  s  .com*/
 *
 * @param force <code>true</code> means update even if not dirty,
 *   and <code>false</code> for normal incremental updating
 * @param recursive <code>true</code> means recursively update 
 *   all submenus, and <code>false</code> means just this menu
 */
protected void update(boolean force, boolean recursive) {
    if (isDirty() || force) {
        if (menu != null && !menu.isDisposed()) {

            // clean contains all active items without double separators
            IContributionItem[] items = getItems();
            List clean = new ArrayList(items.length);
            IContributionItem separator = null;
            for (int i = 0; i < items.length; ++i) {
                IContributionItem ci = items[i];
                if (!shouldDisplay(ci)) {
                    continue;
                }
                if (ci.isSeparator()) {
                    // delay creation until necessary 
                    // (handles both adjacent separators, and separator at end)
                    separator = ci;
                } else {
                    if (separator != null) {
                        if (clean.size() > 0) // no separator if first item
                            clean.add(separator);
                        separator = null;
                    }
                    clean.add(ci);
                }
            }

            // remove obsolete (removed or non active)
            Item[] mi = menu.getItems();
            for (int i = 0; i < mi.length; i++) {
                Object data = mi[i].getData();
                if (data == null || !clean.contains(data)
                        || (data instanceof IContributionItem && ((IContributionItem) data).isDynamic()))
                    mi[i].dispose();
            }

            // add new
            mi = menu.getItems();
            int srcIx = 0;
            int destIx = 0;
            for (Iterator e = clean.iterator(); e.hasNext();) {
                IContributionItem src = (IContributionItem) e.next();
                IContributionItem dest;

                // get corresponding item in SWT widget
                if (srcIx < mi.length)
                    dest = (IContributionItem) mi[srcIx].getData();
                else
                    dest = null;

                if (dest != null && src.equals(dest)) {
                    srcIx++;
                    destIx++;
                } else if (dest != null && dest.isSeparator() && src.isSeparator()) {
                    mi[srcIx].setData(src);
                    srcIx++;
                    destIx++;
                } else {
                    int start = menu.getItemCount();
                    src.fill(menu, destIx);
                    int newItems = menu.getItemCount() - start;
                    Item[] tis = menu.getItems();
                    for (int i = 0; i < newItems; i++)
                        tis[destIx + i].setData(src);
                    destIx += newItems;
                }

                // May be we can optimize this call. If the menu has just
                // been created via the call src.fill(fMenuBar, destIx) then
                // the menu has already been updated with update(true) 
                // (see MenuManager). So if force is true we do it again. But
                // we can't set force to false since then information for the
                // sub sub menus is lost.
                if (recursive) {
                    if (src instanceof IMenuManager)
                        ((IMenuManager) src).updateAll(force);
                }

            }

            setDirty(false);

            updateMenuItem();
        }
    } else {
        // I am not dirty. Check if I must recursivly walk down the hierarchy.
        if (recursive) {
            IContributionItem[] items = getItems();
            for (int i = 0; i < items.length; ++i) {
                IContributionItem ci = items[i];
                if (ci instanceof IMenuManager) {
                    IMenuManager mm = (IMenuManager) ci;
                    if (mm.isVisible()) {
                        mm.updateAll(force);
                    }
                }
            }
        }
    }
}

From source file:org.eclipse.rap.internal.design.example.managers.CoolBarManager.java

License:Open Source License

@Override
public void update(final boolean force) {
    if ((isDirty() || force) && getControl2() != null) {
        refresh();// ww w. jav  a 2s. com
        boolean changed = false;

        /*
         * Make a list of items including only those items that are
         * visible. Separators are being removed. Because we use only one Toolbar
         * all ToolBarContributionItems will be extracted in their IContribution
         * Items.
         */
        final IContributionItem[] items = getItems();
        final List visibleItems = new ArrayList(items.length);
        for (int i = 0; i < items.length; i++) {
            final IContributionItem item = items[i];
            if (item.isVisible()) {
                if (item instanceof IToolBarContributionItem) {
                    IToolBarContributionItem toolbarItem = (IToolBarContributionItem) item;
                    IToolBarManager toolBarManager = toolbarItem.getToolBarManager();
                    IContributionItem[] toolbarItems = toolBarManager.getItems();
                    for (int j = 0; j < toolbarItems.length; j++) {
                        final IContributionItem toolItem = toolbarItems[j];
                        if (toolItem.isVisible() && !toolItem.isSeparator()) {
                            visibleItems.add(toolItem);
                        }
                    }
                }
            }
        }

        /*
         * Make a list of ToolItem widgets in the tool bar for which there
         * is no current visible contribution item. These are the widgets
         * to be disposed. Dynamic items are also removed.
         */
        ToolItem[] toolItems = toolbar.getItems();
        final ArrayList toolItemsToRemove = new ArrayList(toolItems.length);
        for (int i = 0; i < toolItems.length; i++) {
            final Object data = toolItems[i].getData();
            if ((data == null) || (!visibleItems.contains(data))
                    || ((data instanceof IContributionItem) && ((IContributionItem) data).isDynamic())) {
                toolItemsToRemove.add(toolItems[i]);
            }
        }

        // Dispose of any items in the list to be removed.
        for (int i = toolItemsToRemove.size() - 1; i >= 0; i--) {
            ToolItem toolItem = (ToolItem) toolItemsToRemove.get(i);
            if (!toolItem.isDisposed()) {
                Control control = toolItem.getControl();
                if (control != null) {
                    toolItem.setControl(null);
                    control.dispose();
                }
                toolItem.dispose();
            }
        }

        // Add any new items by telling them to fill.
        toolItems = toolbar.getItems();
        IContributionItem sourceItem;
        IContributionItem destinationItem;
        int sourceIndex = 0;
        int destinationIndex = 0;
        final Iterator visibleItemItr = visibleItems.iterator();
        while (visibleItemItr.hasNext()) {
            sourceItem = (IContributionItem) visibleItemItr.next();

            // Retrieve the corresponding contribution item from SWT's
            // data.
            if (sourceIndex < toolItems.length) {
                destinationItem = (IContributionItem) toolItems[sourceIndex].getData();
            } else {
                destinationItem = null;
            }

            // The items match if they are equal or both separators.
            if (destinationItem != null) {
                if (sourceItem.equals(destinationItem)) {
                    sourceIndex++;
                    destinationIndex++;
                    sourceItem.update();
                    continue;
                } else if ((destinationItem.isSeparator()) && (sourceItem.isSeparator())) {
                    toolItems[sourceIndex].setData(sourceItem);
                    sourceIndex++;
                    destinationIndex++;
                    sourceItem.update();
                    continue;
                }
            }

            // Otherwise, a new item has to be added.
            final int start = toolbar.getItemCount();
            sourceItem.fill(toolbar, destinationIndex);
            final int newItems = toolbar.getItemCount() - start;
            // add the selection listener for the styling
            StylingSelectionAdapter listener = new StylingSelectionAdapter(HEADER_TOOLBAR_VARIANT);
            for (int i = 0; i < newItems; i++) {
                ToolItem item = toolbar.getItem(destinationIndex++);
                item.setData(sourceItem);
                item.addSelectionListener(listener);
            }
            changed = true;
        }

        // Remove any old widgets not accounted for.
        for (int i = toolItems.length - 1; i >= sourceIndex; i--) {
            final ToolItem item = toolItems[i];
            if (!item.isDisposed()) {
                Control control = item.getControl();
                if (control != null) {
                    item.setControl(null);
                    control.dispose();
                }
                item.dispose();
                changed = true;
            }
        }

        // Update wrap indices. only needed by a coolbar
        //updateWrapIndices();

        // Update the sizes.
        for (int i = 0; i < items.length; i++) {
            IContributionItem item = items[i];
            item.update(SIZE);
        }

        if (changed) {
            updateToolbarTabOrder();
        }

        // We are no longer dirty.
        setDirty(false);
        styleToolItems();
        toolbar.pack();
        toolbar.layout(true, true);
        manageOverflow();
    }
}

From source file:org.eclipse.rap.internal.design.example.managers.ViewToolBarManager.java

License:Open Source License

@Override
public void update(final boolean force) {
    if (isDirty() || force) {
        if (toolBarExist()) {
            ToolBar toolBar = getControl();
            // clean contains all active items without double separators
            IContributionItem[] items = getItems();
            ArrayList clean = new ArrayList(items.length);
            IContributionItem separator = null;
            for (int i = 0; i < items.length; ++i) {
                IContributionItem ci = items[i];
                if (ci.isSeparator()) {
                    separator = ci;//w  ww  .  j av  a  2  s.co m
                } else {
                    if (separator != null) {
                        if (clean.size() > 0) {
                            clean.add(separator);
                        }
                        separator = null;
                    }
                    clean.add(ci);
                }
            }
            // determine obsolete items (removed or non active)
            ToolItem[] mi = toolBar.getItems();
            ArrayList toRemove = new ArrayList(mi.length);
            for (int i = 0; i < mi.length; i++) {
                // there may be null items in a toolbar
                if (mi[i] == null) {
                    continue;
                }
                Object data = mi[i].getData();
                if (data == null || !clean.contains(data)
                        || (data instanceof IContributionItem && ((IContributionItem) data).isDynamic())) {
                    toRemove.add(mi[i]);
                }
            }
            // Turn redraw off if the number of items to be added
            // is above a certain threshold, to minimize flicker,
            // otherwise the toolbar can be seen to redraw after each item.
            // Do this before any modifications are made.
            // We assume each contribution item will contribute at least one
            // toolbar item.
            boolean useRedraw = clean.size() - (mi.length - toRemove.size()) >= 3;
            try {
                if (useRedraw) {
                    toolBar.setRedraw(false);
                }
                // remove obsolete items
                for (int i = toRemove.size(); --i >= 0;) {
                    ToolItem item = (ToolItem) toRemove.get(i);
                    if (!item.isDisposed()) {
                        Control ctrl = item.getControl();
                        if (ctrl != null) {
                            item.setControl(null);
                            ctrl.dispose();
                        }
                        item.dispose();
                    }
                }
                // add new items
                IContributionItem src, dest;
                mi = toolBar.getItems();
                int srcIx = 0;
                int destIx = 0;
                for (Iterator e = clean.iterator(); e.hasNext();) {
                    src = (IContributionItem) e.next();
                    // get corresponding item in SWT widget
                    if (srcIx < mi.length) {
                        dest = (IContributionItem) mi[srcIx].getData();
                    } else {
                        dest = null;
                    }
                    if (dest != null && src.equals(dest)) {
                        srcIx++;
                        destIx++;
                        continue;
                    }
                    if (dest != null && dest.isSeparator() && src.isSeparator()) {
                        mi[srcIx].setData(src);
                        srcIx++;
                        destIx++;
                        continue;
                    }
                    int start = toolBar.getItemCount();
                    src.fill(toolBar, destIx);
                    int newItems = toolBar.getItemCount() - start;
                    for (int i = 0; i < newItems; i++) {
                        ToolItem item = toolBar.getItem(destIx++);
                        item.setData(src);
                        item.setData(RWT.CUSTOM_VARIANT, STYLING_VARIANT);
                    }
                }
                // remove any old tool items not accounted for
                for (int i = mi.length; --i >= srcIx;) {
                    ToolItem item = mi[i];
                    if (!item.isDisposed()) {
                        Control ctrl = item.getControl();
                        if (ctrl != null) {
                            item.setControl(null);
                            ctrl.dispose();
                        }
                        item.dispose();
                    }
                }
                setDirty(false);
                updateItemsData();
                disposeInvisibleItems();
            } finally {
                // turn redraw back on if we turned it off above
                if (useRedraw) {
                    toolBar.setRedraw(true);
                }
            }
        }
    }
}

From source file:org.eclipse.rap.internal.design.example.managers.ViewToolBarManager.java

License:Open Source License

private void updateItemsData() {
    ToolBar toolBar = getControl();/*from   w  w w  . j  a  v a2  s. c  om*/
    ToolItem[] items = toolBar.getItems();
    List<ItemData> data = new ArrayList<ItemData>();
    for (int i = 0; i < items.length; i++) {
        IContributionItem contributionItem = (IContributionItem) items[i].getData();
        if (!contributionItem.isGroupMarker() && !contributionItem.isSeparator()) {
            ItemData itemData = new ItemData(contributionItem.getId(), items[i].getText(),
                    items[i].getToolTipText(), items[i].getImage());
            data.add(itemData);
        }
    }
    itemsData = data.toArray(new ItemData[0]);
}