List of usage examples for org.eclipse.jface.action IContributionItem isSeparator
boolean isSeparator();
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]); }