Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2015-01-10 23:32:43 +0000
committerPaul Webster2015-01-23 23:56:49 +0000
commit1d3294204c71b0cd1e7e2e831feb2faf6133ec38 (patch)
tree9741ee09393183c1e0756ef0637f11b43102c291
parent5412a23113b109d3b889b05a740c9c3aa2f52c13 (diff)
downloadeclipse.platform.ui-1d3294204c71b0cd1e7e2e831feb2faf6133ec38.tar.gz
eclipse.platform.ui-1d3294204c71b0cd1e7e2e831feb2faf6133ec38.tar.xz
eclipse.platform.ui-1d3294204c71b0cd1e7e2e831feb2faf6133ec38.zip
Bug 420956 - Fix perspective customization on 4.x
The CustomizePerspectiveDialog shows now all toolbar/menubar contributions from action sets (with right labels) previously shown in 3.x stream, allows disable/enable button status per perspective and persist the state in the model. Additionally the label provider is enhanced to show the availability of almost all contribution depending on the action set state. Note: disabling and re-enabling entire toolbars is still broken as described in bug 383569 comment 24 and will be fixed in the next patches. Change-Id: I6f002c518e671437775187ffcc6c51050aa8e0ae Signed-off-by: Andrey Loskutov <loskutov@gmx.de> Also-by: Erik Chou <ekchou@ymail.com> Also-by: Paul Webster <pwebster@ca.ibm.com> Also-by: René Brandstetter <Rene.Brandstetter@gmx.net>
-rw-r--r--bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java15
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionSetMenuManager.java7
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CoolBarToTrimManager.java89
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java1
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java14
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java5
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizeActionBars.java83
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizePerspectiveDialog.java564
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/GrayOutUnavailableLabelProvider.java21
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/TreeManager.java23
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java2
-rw-r--r--bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties1
12 files changed, 532 insertions, 293 deletions
diff --git a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
index 73346b49154..32ad5c87b0d 100644
--- a/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
+++ b/bundles/org.eclipse.e4.ui.workbench.renderers.swt/src/org/eclipse/e4/ui/workbench/renderers/swt/MenuManagerRenderer.java
@@ -12,6 +12,8 @@
* Steven Spungin <steven@spungin.tv> - Bug 437747
* Alan Staves <alan.staves@microfocus.com> - Bug 435274
* Patrick Naish <patrick.naish@microfocus.com> - Bug 435274
+ * René Brandstetter <Rene.Brandstetter@gmx.net> - Bug 378849
+ * Andrey Loskutov <loskutov@gmx.de> - Bug 378849
*******************************************************************************/
package org.eclipse.e4.ui.workbench.renderers.swt;
@@ -64,6 +66,7 @@ import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.action.SubContributionItem;
import org.eclipse.jface.internal.MenuManagerEventHelper;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
@@ -928,6 +931,12 @@ MenuManagerEventHelper.getInstance()
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);
@@ -935,6 +944,8 @@ MenuManagerEventHelper.getInstance()
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) {
@@ -966,6 +977,10 @@ MenuManagerEventHelper.getInstance()
}
}
}
+
+ if (childModel.getChildren().size() != childManager.getSize()) {
+ reconcileManagerToModel(childManager, childModel);
+ }
}
} else if (item.isSeparator() || item.isGroupMarker()) {
MMenuElement menuElement = getMenuElement(item);
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionSetMenuManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionSetMenuManager.java
index f1a12adc82b..a07cad2a478 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionSetMenuManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/ActionSetMenuManager.java
@@ -57,6 +57,13 @@ public class ActionSetMenuManager extends SubMenuManager {
return item;
}
+ /**
+ * @return Returns the actionSetId.
+ */
+ public String getActionSetId() {
+ return actionSetId;
+ }
+
@Override
public IContributionItem[] getItems() {
return getParentMenuManager().getItems();
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CoolBarToTrimManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CoolBarToTrimManager.java
index 21bf1dc11bf..967692e61be 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CoolBarToTrimManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/CoolBarToTrimManager.java
@@ -9,12 +9,14 @@
* IBM Corporation - initial API and implementation
* Maxime Porhel <maxime.porhel@obeo.fr> Obeo - Bug 430116
* Lars Vogel <Lars.Vogel@vogella.com> - Bug 457237
+ * Andrey Loskutov <loskutov@gmx.de> - Bug 420956 - Fix perspective customization on 4.x
******************************************************************************/
package org.eclipse.ui.internal;
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.e4.core.contexts.ContextInjectionFactory;
import org.eclipse.e4.ui.internal.workbench.OpaqueElementUtil;
import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
@@ -22,11 +24,14 @@ import org.eclipse.e4.ui.model.application.ui.SideValue;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow;
+import org.eclipse.e4.ui.model.application.ui.menu.MHandledToolItem;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
import org.eclipse.e4.ui.model.application.ui.menu.MToolItem;
+import org.eclipse.e4.ui.model.application.ui.menu.MTrimContribution;
import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.renderers.swt.HandledContributionItem;
import org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer;
import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
import org.eclipse.jface.action.AbstractGroupMarker;
@@ -46,6 +51,7 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.internal.menus.ActionSet;
import org.eclipse.ui.internal.menus.MenuHelper;
import org.eclipse.ui.menus.CommandContributionItem;
@@ -73,7 +79,7 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
private static final String TOOLBAR_SEPARATOR = "toolbarSeparator"; //$NON-NLS-1$
private static final String MAIN_TOOLBAR_ID = ActionSet.MAIN_TOOLBAR;
- private static final String OBJECT = "coolbar.object"; //$NON-NLS-1$
+ public static final String OBJECT = "coolbar.object"; //$NON-NLS-1$
private static final String PREV_CHILD_VISIBLE = "prevChildVisible"; //$NON-NLS-1$
private MTrimBar topTrim;
private List<MTrimElement> workbenchTrimElements;
@@ -128,7 +134,8 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
}
if (item instanceof IToolBarContributionItem) {
- IToolBarManager mgr = ((IToolBarContributionItem) item).getToolBarManager();
+ IToolBarContributionItem tbc = (IToolBarContributionItem) item;
+ IToolBarManager mgr = tbc.getToolBarManager();
if (!(mgr instanceof ToolBarManager)) {
return;
}
@@ -147,6 +154,10 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
}
toolBar.setElementId(item.getId());
toolBar.getTransientData().put(OBJECT, item);
+ String toolbarLabel = getToolbarLabel(application, item.getId());
+ if (toolbarLabel != null) {
+ toolBar.getTransientData().put("Name", toolbarLabel); //$NON-NLS-1$
+ }
renderer.linkModelToManager(toolBar, manager);
toolBar.setToBeRendered(true);
if (!tbFound) {
@@ -200,6 +211,49 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
}
+ public static String getToolbarLabel(MApplication application, MUIElement elt) {
+ String name = getTransientName(elt);
+ if (name != null) {
+ return name;
+ }
+ String elementId = elt.getElementId();
+ return getToolbarLabel(application, elementId);
+ }
+
+ // See MenuAdditionCacheEntry
+ private static String getToolbarLabel(MApplication application, String elementId) {
+ String name;
+ if (IWorkbenchActionConstants.TOOLBAR_FILE.equalsIgnoreCase(elementId)) {
+ return WorkbenchMessages.WorkbenchWindow_FileToolbar;
+ }
+ if (IWorkbenchActionConstants.TOOLBAR_NAVIGATE.equalsIgnoreCase(elementId)) {
+ return WorkbenchMessages.WorkbenchWindow_NavigateToolbar;
+ }
+ if (IWorkbenchActionConstants.TOOLBAR_HELP.equalsIgnoreCase(elementId)) {
+ return WorkbenchMessages.WorkbenchWindow_HelpToolbar;
+ }
+ List<MTrimContribution> trimContributions = application.getTrimContributions();
+ for (MTrimContribution mtb : trimContributions) {
+ for (MTrimElement e : mtb.getChildren()) {
+ if (e.getElementId().equals(elementId)) {
+ name = getTransientName(e);
+ if (name != null) {
+ return name;
+ }
+ }
+ }
+ }
+ return null;
+ }
+
+ static String getTransientName(MUIElement elt) {
+ Object name = elt.getTransientData().get("Name"); //$NON-NLS-1$
+ if (name instanceof String) {
+ return (String) name;
+ }
+ return null;
+ }
+
@Override
public void add(final IToolBarManager toolBarManager) {
if (toolBarManager instanceof ToolBarManager) {
@@ -537,7 +591,9 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
private void fill(MToolBar container, IContributionManager manager) {
ToolBarManagerRenderer renderer = (ToolBarManagerRenderer) rendererFactory.getRenderer(container, null);
- for (IContributionItem item : manager.getItems()) {
+ IContributionItem[] items = manager.getItems();
+ for (int index = 0; index < items.length; index++) {
+ IContributionItem item = items[index];
if (item == null) {
continue;
}
@@ -558,12 +614,25 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
} else if (item instanceof IContributionManager) {
fill(container, (IContributionManager) item);
} else if (item instanceof CommandContributionItem) {
- CommandContributionItem cci = (CommandContributionItem) item;
- MToolItem toolItem = MenuHelper.createToolItem(application, cci);
- manager.remove(item);
- if (toolItem != null) {
- container.getChildren().add(toolItem);
+ MHandledToolItem toolItem = MenuHelper.createToolItem(application, (CommandContributionItem) item);
+ if (toolItem == null) {
+ continue;
+ }
+ // this section below should match what's in
+ // org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer.processHandledItem(ToolBarManager,
+ // MHandledToolItem)
+ toolItem.setRenderer(renderer);
+ HandledContributionItem ci = ContextInjectionFactory.make(HandledContributionItem.class,
+ window.getContext());
+ if (manager instanceof ContributionManager) {
+ ContributionManager cm = (ContributionManager) manager;
+ cm.insert(index, ci);
+ cm.remove(item);
}
+ ci.setModel(toolItem);
+ ci.setVisible(toolItem.isVisible());
+ renderer.linkModelToContribution(toolItem, ci);
+ container.getChildren().add(toolItem);
} else {
MToolItem toolItem = OpaqueElementUtil.createOpaqueToolItem();
toolItem.setElementId(item.getId());
@@ -607,4 +676,8 @@ public class CoolBarToTrimManager extends ContributionManager implements ICoolBa
}
return null;
}
+
+ public MTrimBar getTopTrim() {
+ return topTrim;
+ }
}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
index 4559a186b19..42240f1cb0b 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchMessages.java
@@ -362,6 +362,7 @@ public class WorkbenchMessages extends NLS {
//--- Coolbar ---
public static String WorkbenchWindow_FileToolbar;
public static String WorkbenchWindow_NavigateToolbar;
+ public static String WorkbenchWindow_HelpToolbar;
public static String WorkbenchWindow_searchCombo_toolTip;
public static String WorkbenchWindow_searchCombo_text;
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
index 6c9e9c4f32c..6a1ff78aefd 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPage.java
@@ -2822,11 +2822,8 @@ public class WorkbenchPage implements IWorkbenchPage {
private void addActionSet(MPerspective perspective, MPerspective temporary) {
List<String> tags = perspective.getTags();
List<String> extendedTags = temporary.getTags();
- String excludedTags = perspective.getPersistedState().get(
- ModeledPageLayout.HIDDEN_ITEMS_KEY);
for (String extendedTag : extendedTags) {
- if (!tags.contains(extendedTag) && excludedTags != null
- && !excludedTags.contains(extendedTag + ",")) { //$NON-NLS-1$
+ if (!tags.contains(extendedTag)) {
tags.add(extendedTag);
}
}
@@ -3457,6 +3454,9 @@ public class WorkbenchPage implements IWorkbenchPage {
updateActionSets(getPerspective(persp), getPerspective(dummyPerspective));
modelToPerspectiveMapping.remove(dummyPerspective);
+ // partly fixing toolbar refresh issue, see bug 383569 comment 10
+ legacyWindow.updateActionSets();
+
// migrate the tags
List<String> tags = persp.getTags();
tags.clear();
@@ -4047,6 +4047,12 @@ public class WorkbenchPage implements IWorkbenchPage {
IActionSetDescriptor desc = reg.findActionSet(actionSetID);
if (desc != null) {
+ IActionSetDescriptor[] offActionSets = persp.getAlwaysOffActionSets();
+ for (IActionSetDescriptor off : offActionSets) {
+ if (off.getId().equals(desc.getId())) {
+ return;
+ }
+ }
persp.addActionSet(desc);
legacyWindow.updateActionSets();
legacyWindow.firePerspectiveChanged(this, getPerspective(),
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
index 12f2700106c..a46cd569f64 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchWindow.java
@@ -17,8 +17,6 @@
package org.eclipse.ui.internal;
-import org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog;
-
import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.Arrays;
@@ -162,6 +160,7 @@ import org.eclipse.ui.internal.StartupThreading.StartupRunnable;
import org.eclipse.ui.internal.actions.CommandAction;
import org.eclipse.ui.internal.commands.SlaveCommandService;
import org.eclipse.ui.internal.contexts.ContextService;
+import org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog;
import org.eclipse.ui.internal.e4.compatibility.CompatibilityPart;
import org.eclipse.ui.internal.e4.compatibility.ModeledPageLayout;
import org.eclipse.ui.internal.e4.compatibility.SelectionService;
@@ -1248,7 +1247,7 @@ public class WorkbenchWindow implements IWorkbenchWindow {
return null;
}
- private void fill(MenuManagerRenderer renderer, MMenu menu, IMenuManager manager) {
+ public void fill(MenuManagerRenderer renderer, MMenu menu, IMenuManager manager) {
for (IContributionItem item : manager.getItems()) {
if (item instanceof MenuManager) {
MenuManager menuManager = (MenuManager) item;
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizeActionBars.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizeActionBars.java
index ee8a43e147f..b4545b2a0bd 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizeActionBars.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizeActionBars.java
@@ -7,12 +7,23 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Erik Chou <ekchou@ymail.com> - Bug 378849
+ * Paul Webster <pwebster@ca.ibm.com> - Bug 378849
+ * Andrey Loskutov <loskutov@gmx.de> - Bug 420956 - Fix perspective customization on 4.x
*******************************************************************************/
package org.eclipse.ui.internal.dialogs.cpd;
-import org.eclipse.jface.action.CoolBarManager;
+import java.util.ArrayList;
+import org.eclipse.e4.core.contexts.IEclipseContext;
+import org.eclipse.e4.ui.model.application.MApplication;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimElement;
+import org.eclipse.e4.ui.model.application.ui.basic.MTrimmedWindow;
+import org.eclipse.e4.ui.model.application.ui.basic.MWindow;
+import org.eclipse.e4.ui.model.application.ui.menu.MMenu;
+import org.eclipse.e4.ui.workbench.modeling.EModelService;
+import org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer;
+import org.eclipse.e4.ui.workbench.swt.factories.IRendererFactory;
import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.action.ICoolBarManager;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IStatusLineManager;
import org.eclipse.jface.action.IToolBarManager;
@@ -21,40 +32,70 @@ import org.eclipse.jface.action.StatusLineManager;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.internal.provisional.action.IToolBarContributionItem;
import org.eclipse.jface.internal.provisional.action.ToolBarContributionItem2;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IActionBars2;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
+import org.eclipse.ui.internal.CoolBarToTrimManager;
+import org.eclipse.ui.internal.menus.ActionSet;
import org.eclipse.ui.internal.provisional.application.IActionBarConfigurer2;
import org.eclipse.ui.services.IServiceLocator;
/**
- * The proxy IActionBarConfigurer that gets passed to the application's
- * ActionBarAdvisor. This is used to construct a representation of the
- * window's hardwired menus and toolbars in order to display their structure
- * properly in the preview panes.
+ * Fake action bars to build the menus and toolbar contributions for the
+ * workbench. We cannot use the actual workbench action bars, since doing so
+ * would make the action set items visible.
*
* @since 3.5
*/
public class CustomizeActionBars implements IActionBarConfigurer2, IActionBars2 {
- IWorkbenchWindowConfigurer configurer;
+ private final IWorkbenchWindowConfigurer configurer;
+ private final StatusLineManager statusLineManager;
+ private final MApplication app;
- /**
- * Fake action bars to use to build the menus and toolbar contributions
- * for the workbench. We cannot use the actual workbench action bars,
- * since doing so would make the action set items visible.
- */
- MenuManager menuManager = new MenuManager();
- CoolBarManager coolBarManager = new CoolBarManager();
- private StatusLineManager statusLineManager = new StatusLineManager();
+ final MenuManager menuManager;
+ final CoolBarToTrimManager coolBarManager;
+ final MTrimmedWindow windowModel;
+ final MMenu mainMenu;
+ final MenuManagerRenderer menuRenderer;
/**
* Create a new instance of this class.
*
* @param configurer
- * the configurer
+ * non null
+ * @param context
+ * non null
*/
- public CustomizeActionBars(IWorkbenchWindowConfigurer configurer) {
+ public CustomizeActionBars(IWorkbenchWindowConfigurer configurer, IEclipseContext context) {
this.configurer = configurer;
+ statusLineManager = new StatusLineManager();
+ menuManager = new MenuManager("MenuBar", ActionSet.MAIN_MENU); //$NON-NLS-1$
+
+ IRendererFactory rendererFactory = context.get(IRendererFactory.class);
+ EModelService modelService = context.get(EModelService.class);
+
+ windowModel = modelService.createModelElement(MTrimmedWindow.class);
+ app = context.get(MApplication.class);
+ IEclipseContext eclipseContext = app.getContext().createChild("window - CustomizeActionBars"); //$NON-NLS-1$
+ windowModel.setContext(eclipseContext);
+ eclipseContext.set(MWindow.class, windowModel);
+
+ Shell shell = new Shell();
+ windowModel.setWidget(shell);
+ windowModel.setToBeRendered(false);
+ app.getChildren().add(windowModel);
+ shell.setData(org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.OWNING_ME, windowModel);
+
+ // See WorkbenchWindow.setup()
+ mainMenu = modelService.createModelElement(MMenu.class);
+ mainMenu.setElementId(ActionSet.MAIN_MENU);
+
+ menuRenderer = (MenuManagerRenderer) rendererFactory.getRenderer(mainMenu, null);
+ menuRenderer.linkModelToManager(mainMenu, menuManager);
+ windowModel.setMainMenu(mainMenu);
+
+ coolBarManager = new CoolBarToTrimManager(app, windowModel, new ArrayList<MTrimElement>(), rendererFactory);
}
@Override
@@ -73,7 +114,7 @@ public class CustomizeActionBars implements IActionBarConfigurer2, IActionBars2
}
@Override
- public ICoolBarManager getCoolBarManager() {
+ public CoolBarToTrimManager getCoolBarManager() {
return coolBarManager;
}
@@ -110,6 +151,10 @@ public class CustomizeActionBars implements IActionBarConfigurer2, IActionBars2
coolBarManager.dispose();
menuManager.dispose();
statusLineManager.dispose();
+ windowModel.getContext().deactivate();
+ windowModel.getContext().dispose();
+ ((Shell) windowModel.getWidget()).dispose();
+ app.getChildren().remove(windowModel);
}
@Override
@@ -126,4 +171,4 @@ public class CustomizeActionBars implements IActionBarConfigurer2, IActionBars2
public IToolBarManager createToolBarManager() {
return new ToolBarManager();
}
-} \ No newline at end of file
+}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizePerspectiveDialog.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizePerspectiveDialog.java
index 7057230e543..c0afd31d838 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizePerspectiveDialog.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/CustomizePerspectiveDialog.java
@@ -9,7 +9,7 @@
* IBM Corporation - initial API and implementation
* Tom Hochstein (Freescale) - Bug 407522 - Perspective reset not working correctly
* Lars Vogel <Lars.Vogel@gmail.com> - Bug 422040, 431992
- * Andrey Loskutov <loskutov@gmx.de> - Bug 456729, 404348, 421178
+ * Andrey Loskutov <loskutov@gmx.de> - Bug 456729, 404348, 421178, 420956
*******************************************************************************/
package org.eclipse.ui.internal.dialogs.cpd;
@@ -27,6 +27,7 @@ import org.eclipse.e4.core.commands.ECommandService;
import org.eclipse.e4.core.contexts.IEclipseContext;
import org.eclipse.e4.ui.bindings.EBindingService;
import org.eclipse.e4.ui.internal.workbench.OpaqueElementUtil;
+import org.eclipse.e4.ui.model.application.MApplication;
import org.eclipse.e4.ui.model.application.commands.MParameter;
import org.eclipse.e4.ui.model.application.ui.MUIElement;
import org.eclipse.e4.ui.model.application.ui.basic.MTrimBar;
@@ -39,19 +40,23 @@ import org.eclipse.e4.ui.model.application.ui.menu.MMenuElement;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBar;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarElement;
import org.eclipse.e4.ui.model.application.ui.menu.MToolBarSeparator;
+import org.eclipse.e4.ui.workbench.IPresentationEngine;
import org.eclipse.e4.ui.workbench.IResourceUtilities;
import org.eclipse.e4.ui.workbench.renderers.swt.MenuManagerRenderer;
import org.eclipse.e4.ui.workbench.renderers.swt.ToolBarManagerRenderer;
import org.eclipse.e4.ui.workbench.swt.util.ISWTResourceUtilities;
import org.eclipse.emf.common.util.URI;
import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.SubContributionItem;
import org.eclipse.jface.action.ToolBarManager;
import org.eclipse.jface.bindings.TriggerSequence;
import org.eclipse.jface.dialogs.TrayDialog;
+import org.eclipse.jface.internal.provisional.action.ToolBarContributionItem2;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.AbstractTreeViewer;
import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -63,7 +68,6 @@ import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.ICheckStateProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
@@ -83,8 +87,6 @@ import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.CoolBar;
-import org.eclipse.swt.widgets.Decorations;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
@@ -96,7 +98,6 @@ import org.eclipse.swt.widgets.ToolItem;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IPerspectiveDescriptor;
import org.eclipse.ui.IPerspectiveRegistry;
-import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
@@ -107,6 +108,8 @@ import org.eclipse.ui.application.ActionBarAdvisor;
import org.eclipse.ui.application.IWorkbenchWindowConfigurer;
import org.eclipse.ui.internal.ActionSetActionBars;
import org.eclipse.ui.internal.ActionSetContributionItem;
+import org.eclipse.ui.internal.ActionSetMenuManager;
+import org.eclipse.ui.internal.CoolBarToTrimManager;
import org.eclipse.ui.internal.IWorkbenchHelpContextIds;
import org.eclipse.ui.internal.Perspective;
import org.eclipse.ui.internal.PluginActionCoolBarContributionItem;
@@ -160,6 +163,8 @@ public class CustomizePerspectiveDialog extends TrayDialog {
WorkbenchWindow window;
+ private WorkbenchPage windowPage;
+
private Perspective perspective;
private TabFolder tabFolder;
@@ -254,6 +259,11 @@ public class CustomizePerspectiveDialog extends TrayDialog {
public IContributionItem getIContributionItem() {
return item;
}
+
+ @Override
+ public String toString() {
+ return super.toString() + item == null ? "" : (" [" + item.getId() + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+ }
}
/**
@@ -512,6 +522,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
this.context = context;
perspective = persp;
window = (WorkbenchWindow) configurer.getWindow();
+ windowPage = (WorkbenchPage) window.getActivePage();
menuMngrRenderer = context.get(MenuManagerRenderer.class);
toolbarMngrRenderer = context.get(ToolBarManagerRenderer.class);
resUtils = (ISWTResourceUtilities) context.get(IResourceUtilities.class);
@@ -701,7 +712,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
.getSelection()).getFirstElement();
menuCategoriesViewer.setInput(category);
menuItemsViewer.setInput(category);
- if (category.getChildren().size() != 0) {
+ if (category.getChildrenCount() != 0) {
setSelectionOn(menuCategoriesViewer, category
.getChildren().get(0));
}
@@ -734,7 +745,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
menusViewer.setInput(shortcuts);
- if (shortcuts.getChildren().size() > 0) {
+ if (shortcuts.getChildrenCount() > 0) {
setSelectionOn(menusViewer, shortcuts.getChildren().get(0));
}
@@ -784,7 +795,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
actionSetAvailabilityTable = actionSetsViewer;
actionSetsViewer.getTable().setLayoutData(
new GridData(SWT.FILL, SWT.FILL, true, true));
- actionSetsViewer.setLabelProvider(new LabelProvider());
+ actionSetsViewer.setLabelProvider(new GrayOutUnavailableLabelProvider(null));
actionSetsViewer.setContentProvider(new ArrayContentProvider());
actionSetsViewer.setComparator(new WorkbenchViewerComparator());
actionSetsViewer.setCheckStateProvider(new ICheckStateProvider() {
@@ -864,7 +875,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
actionSetMenuViewer.setUseHashlookup(true);
actionSetMenuViewer.setContentProvider(TreeManager
.getTreeContentProvider());
- actionSetMenuViewer.setLabelProvider(TreeManager.getLabelProvider());
+ actionSetMenuViewer.setLabelProvider(new GrayOutUnavailableLabelProvider(null));
actionSetMenuViewer.addFilter(setFilter);
actionSetMenuViewer.setInput(menuItems);
@@ -890,7 +901,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
new GridData(SWT.FILL, SWT.FILL, true, true));
actionSetToolbarViewer.setContentProvider(TreeManager
.getTreeContentProvider());
- actionSetToolbarViewer.setLabelProvider(TreeManager.getLabelProvider());
+ actionSetToolbarViewer.setLabelProvider(new GrayOutUnavailableLabelProvider(null));
actionSetToolbarViewer.addFilter(setFilter);
actionSetToolbarViewer.setInput(toolBarItems);
@@ -1201,6 +1212,9 @@ public class CustomizePerspectiveDialog extends TrayDialog {
initSelectAS = (ActionSet) actionSetViewer
.getElementAt(0);
}
+ if (initSelectAS == null) {
+ return;
+ }
setSelectionOn(actionSetViewer, initSelectAS);
actionSetViewer.reveal(initSelectAS);
if (initSelectCI != null) {
@@ -1233,7 +1247,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
| SWT.H_SCROLL | SWT.V_SCROLL);
actionSetViewer.getTable().setLayoutData(
new GridData(GridData.FILL_BOTH));
- actionSetViewer.setLabelProvider(new LabelProvider());
+ actionSetViewer.setLabelProvider(new GrayOutUnavailableLabelProvider(null));
actionSetViewer.setComparator(new WorkbenchViewerComparator());
actionSetViewer.setContentProvider(new ArrayContentProvider());
@@ -1267,7 +1281,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
// if not, inform the user
ctv.addCheckStateListener(new UnavailableContributionItemCheckListener(
this, ctv, checkStateListener));
- ctv.setLabelProvider(new GrayOutUnavailableLabelProvider(parent.getDisplay(), filter));
+ ctv.setLabelProvider(new GrayOutUnavailableLabelProvider(filter));
new ItemDetailToolTip(this, ctv, ctv.getTree(), true, true, filter);
return ctv;
}
@@ -1353,11 +1367,12 @@ public class CustomizePerspectiveDialog extends TrayDialog {
/**
* @param item
* @return true iff the item is available - i.e. if it belongs to an action
- * set, that that action set is available
+ * set, that that action set is available, or has a child which is
+ * available thus must be displayed in order to display the child
*/
static boolean isAvailable(DisplayItem item) {
- if (item.getActionSet() != null && item.getActionSet().isActive()) {
- return true;
+ if (item.getActionSet() != null && item.getChildren().isEmpty()) {
+ return item.getActionSet().isActive();
}
for (TreeItem treeItem : item.getChildren()) {
DisplayItem child = (DisplayItem) treeItem;
@@ -1435,24 +1450,20 @@ public class CustomizePerspectiveDialog extends TrayDialog {
}
}
- private String getToolbarLabel(String actionSetId) {
- if (actionSetId == null) {
- return ""; //$NON-NLS-1$
+ private String getToolbarLabel(MUIElement elt) {
+ MApplication app = context.get(MApplication.class);
+ String toolbarLabel = CoolBarToTrimManager.getToolbarLabel(app, elt);
+ if (toolbarLabel != null) {
+ return toolbarLabel;
}
+ String elementId = elt.getElementId();
ActionSetRegistry registry = WorkbenchPlugin.getDefault().getActionSetRegistry();
- IActionSetDescriptor findActionSet = registry.findActionSet(actionSetId);
+ IActionSetDescriptor findActionSet = registry.findActionSet(elementId);
if (findActionSet != null) {
return findActionSet.getLabel();
}
-
- if (IWorkbenchActionConstants.TOOLBAR_FILE.equalsIgnoreCase(actionSetId)) {
- return WorkbenchMessages.WorkbenchWindow_FileToolbar;
- }
- if (IWorkbenchActionConstants.TOOLBAR_NAVIGATE.equalsIgnoreCase(actionSetId)) {
- return WorkbenchMessages.WorkbenchWindow_NavigateToolbar;
- }
// Nothing is available. Let's smartly guess the name then.
- String[] nameParts = actionSetId.split("\\."); //$NON-NLS-1$
+ String[] nameParts = elementId.split("\\."); //$NON-NLS-1$
return nameParts[nameParts.length - 1];
}
@@ -1592,16 +1603,16 @@ public class CustomizePerspectiveDialog extends TrayDialog {
* items are visible and not.
*/
private void loadMenuAndToolbarStructure() {
- WorkbenchWindow workbenchWindow = (WorkbenchWindow) PlatformUI
- .getWorkbench().getActiveWorkbenchWindow();
-
- customizeActionBars = new CustomizeActionBars(configurer);
+ customizeActionBars = new CustomizeActionBars(configurer, context);
// Fill fake action bars with static menu information.
window.fillActionBars(customizeActionBars, ActionBarAdvisor.FILL_PROXY
| ActionBarAdvisor.FILL_MENU_BAR
| ActionBarAdvisor.FILL_COOL_BAR);
+ window.fill(customizeActionBars.menuRenderer,
+ customizeActionBars.mainMenu, customizeActionBars.menuManager);
+
// Populate the action bars with the action sets' data
for (ActionSet actionSet : actionSets) {
ActionSetDescriptor descriptor = actionSet.descriptor;
@@ -1613,18 +1624,34 @@ public class CustomizePerspectiveDialog extends TrayDialog {
}
}
+ // Add actionSet MenuManagers to menu
+ MenuManager menuManager = customizeActionBars.menuManager;
+ IContributionItem[] items = menuManager.getItems();
+ for (IContributionItem item : items) {
+ if (item instanceof ActionSetContributionItem) {
+ ActionSetContributionItem asci = (ActionSetContributionItem) item;
+ menuManager.add(asci.getInnerItem());
+ }
+ }
+
// Make all menu items visible so they are included in the list.
customizeActionBars.menuManager.setVisible(true);
makeAllContributionsVisible(customizeActionBars.menuManager);
- // Get the menu from the action bars
- customizeActionBars.menuManager
- .createMenuBar((Decorations) workbenchWindow.getShell());
+ customizeActionBars.menuRenderer.reconcileManagerToModel(customizeActionBars.menuManager,
+ customizeActionBars.mainMenu);
+
+ IPresentationEngine engine = context.get(IPresentationEngine.class);
+ engine.createGui(customizeActionBars.mainMenu, customizeActionBars.windowModel.getWidget(),
+ customizeActionBars.windowModel.getContext());
- CoolBar cb = customizeActionBars.coolBarManager
- .createControl(workbenchWindow.getShell());
- cb.equals(cb);
+ MTrimBar topTrim = customizeActionBars.coolBarManager.getTopTrim();
+ topTrim.setToBeRendered(true);
+
+ // Get the menu from the action bars
+ engine.createGui(topTrim, customizeActionBars.windowModel.getWidget(),
+ customizeActionBars.windowModel.getContext());
// Ensure the menu is completely built by updating the menu manager.
// (This method call requires a menu already be created)
@@ -1632,8 +1659,8 @@ public class CustomizePerspectiveDialog extends TrayDialog {
customizeActionBars.coolBarManager.update(true);
shortcuts = new Category(""); //$NON-NLS-1$
- toolBarItems = createTrimBarEntries(window.getTopTrim());
- menuItems = createMenuStructure(window.getModel().getMainMenu());
+ toolBarItems = createTrimBarEntries(topTrim);
+ menuItems = createMenuStructure(customizeActionBars.mainMenu);
}
private PluginActionSet buildMenusAndToolbarsFor(
@@ -1657,6 +1684,9 @@ public class CustomizePerspectiveDialog extends TrayDialog {
return actionSet;
}
+ /**
+ * @return can return null
+ */
static String getCommandID(DisplayItem item) {
Object object = item.getIContributionItem();
@@ -1674,7 +1704,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
* an instance of {@link IContributionItem},
* {@link IPerspectiveDescriptor}, {@link IViewDescriptor} or
* {@link WorkbenchWizardElement}.
- * @return an id
+ * @return an id, can return null
* @throws IllegalArgumentException
* if object is not one of the listed types
*/
@@ -1782,18 +1812,36 @@ public class CustomizePerspectiveDialog extends TrayDialog {
private static String getActionSetID(IContributionItem item) {
if (item instanceof ActionSetContributionItem) {
- ActionSetContributionItem asci = (ActionSetContributionItem) item;
- return asci.getActionSetId();
+ return ((ActionSetContributionItem) item).getActionSetId();
}
if (item instanceof PluginActionCoolBarContributionItem) {
- PluginActionCoolBarContributionItem pacbci = (PluginActionCoolBarContributionItem) item;
- return pacbci.getActionSetId();
+ return ((PluginActionCoolBarContributionItem) item).getActionSetId();
+ }
+ if (item instanceof ContributionItem) {
+ IContributionManager parent = ((ContributionItem) item).getParent();
+ if (parent instanceof ActionSetMenuManager) {
+ return ((ActionSetMenuManager) parent).getActionSetId();
+ }
+ if (item instanceof ToolBarContributionItem2) {
+ return item.getId();
+ }
}
return null;
}
private static String getActionSetID(MUIElement item) {
- return (String) item.getTransientData().get("ActionSet"); //$NON-NLS-1$
+ String id = (String) item.getTransientData().get("ActionSet"); //$NON-NLS-1$
+ if (id != null) {
+ return id;
+ }
+ Object data = OpaqueElementUtil.getOpaqueItem(item);
+ if (data == null) {
+ data = item.getTransientData().get(CoolBarToTrimManager.OBJECT);
+ }
+ if (data instanceof IContributionItem) {
+ return getActionSetID((IContributionItem) data);
+ }
+ return null;
}
/**
@@ -1827,16 +1875,15 @@ public class CustomizePerspectiveDialog extends TrayDialog {
private DisplayItem createMenuStructure(MMenu menu) {
DisplayItem root = new DisplayItem("", null); //$NON-NLS-1$
- createMenuEntries(menu, root, true);
+ createMenuEntries(menu, root);
return root;
}
- private void createMenuEntries(MMenu menu, DisplayItem parent,
- boolean trackDynamics) {
+ private void createMenuEntries(MMenu menu, DisplayItem parent) {
Map<IContributionItem, IContributionItem> findDynamics = new HashMap<IContributionItem, IContributionItem>();
DynamicContributionItem dynamicEntry = null;
- if (trackDynamics && menu.getParent() != null) {
+ if (menu.getParent() != null) {
// Search for any dynamic menu entries which will be handled later
Object data = menuMngrRenderer.getManager(menu);
if (data instanceof IContributionManager) {
@@ -1848,132 +1895,141 @@ public class CustomizePerspectiveDialog extends TrayDialog {
findDynamics.put(i > 0 ? items[i - 1] : null, ci);
}
}
- // If there is an item with no preceeding item, set it up to be
+ // If there is an item with no preceding item, set it up to be
// added first.
if (findDynamics.containsKey(null)) {
IContributionItem item = findDynamics.get(null);
dynamicEntry = new DynamicContributionItem(item);
+ dynamicEntry.setActionSet(idToActionSet.get(getActionSetID(item)));
parent.addChild(dynamicEntry);
}
}
}
for (MMenuElement menuItem : menu.getChildren()) {
- String label = menuItem.getLabel();
- String localizedLabel = menuItem.getLocalizedLabel();
- if ((label != null && label.length() != 0) || (localizedLabel != null && localizedLabel.length() != 0)
- || (menuItem instanceof MHandledMenuItem) || menuItem.getWidget() != null) {
- IContributionItem contributionItem;
- if (menuItem instanceof MMenu) {
- contributionItem = menuMngrRenderer.getManager((MMenu) menuItem);
- } else {
- contributionItem = menuMngrRenderer.getContribution(menuItem);
+ dynamicEntry = createMenuEntry(parent, findDynamics, dynamicEntry, menuItem);
+ }
+ }
+
+ private DynamicContributionItem createMenuEntry(DisplayItem parent,
+ Map<IContributionItem, IContributionItem> findDynamics, DynamicContributionItem dynamicEntry,
+ MMenuElement menuItem) {
+ String text = menuItem.getLocalizedLabel();
+ if (text == null || text.length() == 0) {
+ text = menuItem.getLabel();
+ }
+ if ((text != null && text.length() != 0)
+ || (menuItem instanceof MHandledMenuItem) || menuItem.getWidget() != null) {
+ IContributionItem contributionItem;
+ if (menuItem instanceof MMenu) {
+ contributionItem = menuMngrRenderer.getManager((MMenu) menuItem);
+ } else {
+ contributionItem = menuMngrRenderer.getContribution(menuItem);
+ }
+ if (dynamicEntry != null
+ && contributionItem.equals(dynamicEntry.getIContributionItem())) {
+ // If the last item added is the item meant to go before the
+ // given dynamic entry, add the dynamic entry so it is in
+ // the correct order.
+ dynamicEntry.addCurrentItem((MenuItem) menuItem.getWidget());
+ // TODO: might not work
+ } else {
+ ImageDescriptor iconDescriptor = null;
+ String iconURI = menuItem.getIconURI();
+ if (iconURI != null && iconURI.length() > 0) {
+ iconDescriptor = resUtils.imageDescriptorFromURI(URI.createURI(iconURI));
}
- if (dynamicEntry != null
- && contributionItem.equals(dynamicEntry.getIContributionItem())) {
- // If the last item added is the item meant to go before the
- // given dynamic entry, add the dynamic entry so it is in
- // the
- // correct order.
- dynamicEntry.addCurrentItem((MenuItem) menuItem.getWidget());
- // TODO: might not work
- } else {
- String text = localizedLabel;
- if (text == null || text.length() == 0) {
- text = label;
- }
- ImageDescriptor iconDescriptor = null;
- String iconURI = menuItem.getIconURI();
- if (iconURI != null && iconURI.length() > 0) {
- iconDescriptor = resUtils.imageDescriptorFromURI(URI.createURI(iconURI));
- }
- if (menuItem.getWidget() instanceof MenuItem) {
- MenuItem item = (MenuItem) menuItem.getWidget();
- if (text == null) {
- if ("".equals(item.getText())) { //$NON-NLS-1$
- continue;
- }
- text = item.getText();
- }
- if (iconDescriptor == null) {
- Image image = item.getImage();
- if (image != null) {
- iconDescriptor = ImageDescriptor.createFromImage(image);
- }
- }
- } else if (menuItem instanceof MHandledMenuItem) {
- MHandledMenuItem hmi = (MHandledMenuItem) menuItem;
- final String i18nLabel = hmi.getLocalizedLabel();
- if (i18nLabel != null) {
- text = i18nLabel;
- } else if (hmi.getWbCommand() != null) {
- try {
- text = hmi.getWbCommand().getName();
- } catch (NotDefinedException e) {
- // we'll just ignore a failure
- }
+ if (menuItem.getWidget() instanceof MenuItem) {
+ MenuItem item = (MenuItem) menuItem.getWidget();
+ if (text == null) {
+ if ("".equals(item.getText())) { //$NON-NLS-1$
+ return dynamicEntry;
}
+ text = item.getText();
}
- DisplayItem menuEntry = new DisplayItem(text, contributionItem);
-
- if (iconDescriptor != null) {
- menuEntry.setImageDescriptor(iconDescriptor);
- }
- menuEntry.setActionSet(idToActionSet.get(getActionSetID(menuItem)));
- parent.addChild(menuEntry);
-
- if (ActionFactory.NEW.getId().equals(contributionItem.getId())) {
- initializeNewWizardsMenu(menuEntry);
- wizards = menuEntry;
- } else if (SHORTCUT_CONTRIBUTION_ITEM_ID_OPEN_PERSPECTIVE
- .equals(contributionItem.getId())) {
- initializePerspectivesMenu(menuEntry);
- perspectives = menuEntry;
- } else if (SHORTCUT_CONTRIBUTION_ITEM_ID_SHOW_VIEW.equals(contributionItem
- .getId())) {
- initializeViewsMenu(menuEntry);
- views = menuEntry;
- } else {
- if (menuItem instanceof MMenu) {// TODO:menuItem any
- // other instance
- createMenuEntries((MMenu) menuItem, menuEntry, trackDynamics);
+ if (iconDescriptor == null) {
+ Image image = item.getImage();
+ if (image != null) {
+ iconDescriptor = ImageDescriptor.createFromImage(image);
}
}
-
- if (menuEntry.getChildren().isEmpty()) {
- menuEntry.setCheckState(getMenuItemIsVisible(menuEntry));
+ } else if (menuItem instanceof MHandledMenuItem) {
+ MHandledMenuItem hmi = (MHandledMenuItem) menuItem;
+ final String i18nLabel = hmi.getLocalizedLabel();
+ if (i18nLabel != null) {
+ text = i18nLabel;
+ } else if (hmi.getWbCommand() != null) {
+ try {
+ text = hmi.getWbCommand().getName();
+ } catch (NotDefinedException e) {
+ // we'll just ignore a failure
+ }
}
+ }
+ DisplayItem menuEntry = new DisplayItem(text, contributionItem);
- if (iconDescriptor == null) {
- if (parent != null && parent.getParent() == null) {
- menuEntry.setImageDescriptor(menuImageDescriptor);
- } else if (menuEntry.getChildren().size() > 0) {
- menuEntry.setImageDescriptor(submenuImageDescriptor);
- }
+ if (iconDescriptor != null) {
+ menuEntry.setImageDescriptor(iconDescriptor);
+ }
+ menuEntry.setActionSet(idToActionSet.get(getActionSetID(menuItem)));
+ parent.addChild(menuEntry);
+
+ if (ActionFactory.NEW.getId().equals(contributionItem.getId())) {
+ initializeNewWizardsMenu(menuEntry);
+ wizards = menuEntry;
+ } else if (SHORTCUT_CONTRIBUTION_ITEM_ID_OPEN_PERSPECTIVE
+ .equals(contributionItem.getId())) {
+ initializePerspectivesMenu(menuEntry);
+ perspectives = menuEntry;
+ } else if (SHORTCUT_CONTRIBUTION_ITEM_ID_SHOW_VIEW.equals(contributionItem
+ .getId())) {
+ initializeViewsMenu(menuEntry);
+ views = menuEntry;
+ } else {
+ if (menuItem instanceof MMenu) {// TODO:menuItem any
+ // other instance
+ createMenuEntries((MMenu) menuItem, menuEntry);
}
}
- if (trackDynamics && findDynamics.containsKey(contributionItem)) {
- IContributionItem item = findDynamics.get(contributionItem);
- dynamicEntry = new DynamicContributionItem(item);
- dynamicEntry.setCheckState(getMenuItemIsVisible(dynamicEntry));
- parent.addChild(dynamicEntry);
+
+ if (menuEntry.getChildren().isEmpty()) {
+ menuEntry.setCheckState(getMenuItemIsVisible(menuEntry));
}
- } else if (OpaqueElementUtil.isOpaqueMenuItem(menuItem)) {
- IContributionItem contributionItem = menuMngrRenderer.getContribution(menuItem);
- if (contributionItem instanceof ActionContributionItem) {
- final IAction action = ((ActionContributionItem) contributionItem).getAction();
- DisplayItem menuEntry = new DisplayItem(action.getText(), contributionItem);
- menuEntry.setImageDescriptor(action.getImageDescriptor());
- menuEntry.setActionSet(idToActionSet
- .get(getActionSetID(contributionItem)));
- parent.addChild(menuEntry);
- if (menuEntry.getChildren().isEmpty()) {
- menuEntry.setCheckState(getMenuItemIsVisible(menuEntry));
+
+ if (iconDescriptor == null) {
+ if (parent.getParent() == null) {
+ menuEntry.setImageDescriptor(menuImageDescriptor);
+ } else if (menuEntry.getChildrenCount() > 0) {
+ menuEntry.setImageDescriptor(submenuImageDescriptor);
}
}
}
+ if (findDynamics.containsKey(contributionItem)) {
+ IContributionItem item = findDynamics.get(contributionItem);
+ dynamicEntry = new DynamicContributionItem(item);
+ dynamicEntry.setCheckState(getMenuItemIsVisible(dynamicEntry));
+ dynamicEntry.setActionSet(idToActionSet.get(getActionSetID(contributionItem)));
+ parent.addChild(dynamicEntry);
+ } else {
+ return dynamicEntry;
+ }
+ } else if (OpaqueElementUtil.isOpaqueMenuItem(menuItem)) {
+ IContributionItem contributionItem = menuMngrRenderer.getContribution(menuItem);
+ if (contributionItem instanceof ActionContributionItem) {
+ final IAction action = ((ActionContributionItem) contributionItem).getAction();
+ DisplayItem menuEntry = new DisplayItem(action.getText(), contributionItem);
+ menuEntry.setImageDescriptor(action.getImageDescriptor());
+ menuEntry.setActionSet(idToActionSet.get(getActionSetID(contributionItem)));
+ parent.addChild(menuEntry);
+ if (menuEntry.getChildren().isEmpty()) {
+ menuEntry.setCheckState(getMenuItemIsVisible(menuEntry));
+ }
+ }
+ } else {
+ return dynamicEntry;
}
+ return dynamicEntry;
}
private boolean getMenuItemIsVisible(DisplayItem item) {
@@ -1990,7 +2046,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
private boolean isHiddenItem(DisplayItem item, String prefix) {
String itemId = prefix + getCommandID(item) + ","; //$NON-NLS-1$
- return ((WorkbenchPage) window.getActivePage()).getHiddenItems().contains(itemId);
+ return windowPage.getHiddenItems().contains(itemId);
}
/**
@@ -2016,33 +2072,34 @@ public class CustomizePerspectiveDialog extends TrayDialog {
return false;
}
- private DisplayItem createTrimBarEntries(MTrimBar toolbar) {
+ private DisplayItem createTrimBarEntries(MTrimBar trimBar) {
// create a root element
DisplayItem root = new DisplayItem(null, null);
- if (toolbar == null) {
+ if (trimBar == null) {
return root;
}
- for (MTrimElement trimElement : toolbar.getChildren()) {
- if (trimElement instanceof MToolBar) {
- MToolBar toolBar = (MToolBar) trimElement;
- String text;
- ToolBarManager manager = toolbarMngrRenderer.getManager(toolBar);
- if (manager != null && hasVisibleItems(toolBar)) {
- IContributionItem contributionItem = (IContributionItem) toolBar
- .getTransientData().get("coolbar.object"); //$NON-NLS-1$
- Object name = toolBar.getTransientData().get("Name"); //$NON-NLS-1$
- if (name != null) {// && ((String) name).length() != 0
- text = (String) name;
- } else {
- text = getToolbarLabel(toolBar.getElementId());
- }
- DisplayItem toolBarEntry = new DisplayItem(text, contributionItem);
- toolBarEntry.setImageDescriptor(toolbarImageDescriptor);
- toolBarEntry.setActionSet(idToActionSet.get(getActionSetID(toolBar)));
- root.addChild(toolBarEntry);
- toolBarEntry.setCheckState(getToolbarItemIsVisible(toolBarEntry));
- createToolbarEntries(toolBar, toolBarEntry);
+ for (MTrimElement trimElement : trimBar.getChildren()) {
+ if (!(trimElement instanceof MToolBar)) {
+ continue;
+ }
+ MToolBar toolBar = (MToolBar) trimElement;
+ ToolBarManager manager = toolbarMngrRenderer.getManager(toolBar);
+ if (manager != null) {
+ toolbarMngrRenderer.reconcileManagerToModel(manager, toolBar);
+ IContributionItem contributionItem = (IContributionItem) toolBar.getTransientData().get(
+ CoolBarToTrimManager.OBJECT);
+ String text = getToolbarLabel(toolBar);
+ DisplayItem toolBarEntry = new DisplayItem(text, contributionItem);
+ toolBarEntry.setImageDescriptor(toolbarImageDescriptor);
+ toolBarEntry.setActionSet(idToActionSet.get(getActionSetID(toolBar)));
+ if (!hasVisibleItems(toolBar)) {
+ // TODO: there are two "Launch" toolbars, one of them is
+ // empty. Why?
+ continue;
}
+ root.addChild(toolBarEntry);
+ toolBarEntry.setCheckState(getToolbarItemIsVisible(toolBarEntry));
+ createToolbarEntries(toolBar, toolBarEntry);
}
}
return root;
@@ -2053,67 +2110,70 @@ public class CustomizePerspectiveDialog extends TrayDialog {
return;
}
for (MToolBarElement element : toolbar.getChildren()) {
- IContributionItem contributionItem = toolbarMngrRenderer.getContribution(element);
- if (element instanceof MToolBarSeparator
- || (contributionItem == null || contributionItem.isGroupMarker() || contributionItem
- .isSeparator())) {
- continue;
- }
-
- if (OpaqueElementUtil.isOpaqueToolItem(element)) {
- if (contributionItem instanceof ActionContributionItem) {
- final IAction action = ((ActionContributionItem) contributionItem).getAction();
- DisplayItem toolbarEntry = new DisplayItem(action.getText(), contributionItem);
- toolbarEntry.setImageDescriptor(action.getImageDescriptor());
- toolbarEntry.setActionSet(idToActionSet.get(getActionSetID(contributionItem)));
- if (toolbarEntry.getChildren().isEmpty()) {
- toolbarEntry.setCheckState(getToolbarItemIsVisible(toolbarEntry));
- }
- parent.addChild(toolbarEntry);
- }
- } else {
- String text = null;
- if (element instanceof MItem) {
- text = getToolTipText((MItem) element);
- }
- ImageDescriptor iconDescriptor = null;
- String iconURI = element instanceof MItem ? ((MItem) element).getIconURI() : null;
- if (iconURI != null && iconURI.length() > 0) {
- iconDescriptor = resUtils.imageDescriptorFromURI(URI.createURI(iconURI));
- }
- if (element.getWidget() instanceof ToolItem) {
- ToolItem item = (ToolItem) element.getWidget();
- if (text == null) {
- text = item.getToolTipText();
- }
- if (iconDescriptor == null) {
- Image image = item.getImage();
- if (image != null) {
- iconDescriptor = ImageDescriptor.createFromImage(image);
- }
- }
- }
- if (text == null) {
- Object name = element.getTransientData().get("Name"); //$NON-NLS-1$
- if (name != null) { // && ((String) name).length() != 0
- text = (String) name;
- } else {
- text = getToolbarLabel(element.getElementId());
- }
- }
+ createToolbarEntry(parent, element);
+ }
+ }
- DisplayItem toolBarEntry = new DisplayItem(text, contributionItem);
+ private void createToolbarEntry(DisplayItem parent, MToolBarElement element) {
+ IContributionItem contributionItem = toolbarMngrRenderer.getContribution(element);
+ if (isGroupOrSeparator(element, contributionItem)) {
+ return;
+ }
- if (iconDescriptor != null) {
- toolBarEntry.setImageDescriptor(iconDescriptor);
+ if (OpaqueElementUtil.isOpaqueToolItem(element)) {
+ if (contributionItem instanceof ActionContributionItem) {
+ final IAction action = ((ActionContributionItem) contributionItem).getAction();
+ DisplayItem toolbarEntry = new DisplayItem(action.getText(), contributionItem);
+ toolbarEntry.setImageDescriptor(action.getImageDescriptor());
+ toolbarEntry.setActionSet(idToActionSet.get(getActionSetID(contributionItem)));
+ if (toolbarEntry.getChildren().isEmpty()) {
+ toolbarEntry.setCheckState(getToolbarItemIsVisible(toolbarEntry));
}
- toolBarEntry.setActionSet(idToActionSet.get(getActionSetID(element)));
- if (toolBarEntry.getChildren().isEmpty()) {
- toolBarEntry.setCheckState(getToolbarItemIsVisible(toolBarEntry));
+ parent.addChild(toolbarEntry);
+ }
+ return;
+ }
+
+ String text = null;
+ if (element instanceof MItem) {
+ text = getToolTipText((MItem) element);
+ }
+ ImageDescriptor iconDescriptor = null;
+ String iconURI = element instanceof MItem ? ((MItem) element).getIconURI() : null;
+ if (iconURI != null && iconURI.length() > 0) {
+ iconDescriptor = resUtils.imageDescriptorFromURI(URI.createURI(iconURI));
+ }
+ if (element.getWidget() instanceof ToolItem) {
+ ToolItem item = (ToolItem) element.getWidget();
+ if (text == null) {
+ text = item.getToolTipText();
+ }
+ if (iconDescriptor == null) {
+ Image image = item.getImage();
+ if (image != null) {
+ iconDescriptor = ImageDescriptor.createFromImage(image);
}
- parent.addChild(toolBarEntry);
}
}
+ if (text == null) {
+ text = getToolbarLabel(element);
+ }
+
+ DisplayItem toolBarEntry = new DisplayItem(text, contributionItem);
+ if (iconDescriptor != null) {
+ toolBarEntry.setImageDescriptor(iconDescriptor);
+ }
+ toolBarEntry.setActionSet(idToActionSet.get(getActionSetID(element)));
+ if (toolBarEntry.getChildren().isEmpty()) {
+ toolBarEntry.setCheckState(getToolbarItemIsVisible(toolBarEntry));
+ }
+ parent.addChild(toolBarEntry);
+ }
+
+ private static boolean isGroupOrSeparator(MToolBarElement element, IContributionItem contributionItem) {
+ return element instanceof MToolBarSeparator
+ || (contributionItem == null || contributionItem.isGroupMarker() || contributionItem
+ .isSeparator());
}
private static ParameterizedCommand generateParameterizedCommand(final MHandledItem item,
@@ -2187,7 +2247,7 @@ public class CustomizePerspectiveDialog extends TrayDialog {
if (root == null) {
return new ArrayList<String>();
}
- ArrayList<String> ids = new ArrayList<String>(root.getChildren().size());
+ ArrayList<String> ids = new ArrayList<String>(root.getChildrenCount());
for (TreeItem treeItem : root.getChildren()) {
DisplayItem object = (DisplayItem) treeItem;
if (object instanceof ShortcutItem && object.getState()) {
@@ -2206,13 +2266,15 @@ public class CustomizePerspectiveDialog extends TrayDialog {
// We always want the top-level wizard/perspective/view shortcuts to
// be visible, see bug 293448
return;
- } else if (item.getChildren().size() > 0) {
+ } else if (item.getChildrenCount() > 0) {
if (item.isChangedByUser()) {
String id = getCommandID(item);
- if (item.getState()) {
- visible.add(id);
- } else {
- invisible.add(id);
+ if (id != null) {
+ if (item.getState()) {
+ visible.add(id);
+ } else {
+ invisible.add(id);
+ }
}
}
for (TreeItem treeItem : item.getChildren()) {
@@ -2220,10 +2282,12 @@ public class CustomizePerspectiveDialog extends TrayDialog {
}
} else if (item.isChangedByUser()) {
String id = getCommandID(item);
- if (item.getState()) {
- visible.add(id);
- } else {
- invisible.add(id);
+ if (id != null) {
+ if (item.getState()) {
+ visible.add(id);
+ } else {
+ invisible.add(id);
+ }
}
}
}
@@ -2257,17 +2321,19 @@ public class CustomizePerspectiveDialog extends TrayDialog {
boolean hasChanges = false;
// Remove explicitly 'visible' elements from the current list
for (String id : changedAndVisible) {
- if (id != null && currentHidden.contains(prefix + id)) {
+ String itemId = prefix + id;
+ if (currentHidden.contains(itemId)) {
hasChanges = true;
- ((WorkbenchPage) window.getActivePage()).removeHiddenItems(prefix + id);
+ windowPage.removeHiddenItems(itemId);
}
}
// Add explicitly 'hidden' elements to the current list
for (String id : changedAndInvisible) {
- if (id != null && !currentHidden.contains(prefix + id)) {
+ String itemId = prefix + id;
+ if (!currentHidden.contains(itemId)) {
hasChanges = true;
- ((WorkbenchPage) window.getActivePage()).addHiddenItems(prefix + id);
+ windowPage.addHiddenItems(itemId);
}
}
@@ -2276,12 +2342,12 @@ public class CustomizePerspectiveDialog extends TrayDialog {
@Override
protected void okPressed() {
- WorkbenchPage wPage = (WorkbenchPage) window.getActivePage();
+
// Shortcuts
if (showShortcutTab()) {
- wPage.setNewShortcuts(getVisibleIDs(wizards), ModeledPageLayout.NEW_WIZARD_TAG);
- wPage.setNewShortcuts(getVisibleIDs(perspectives), ModeledPageLayout.PERSP_SHORTCUT_TAG);
- wPage.setNewShortcuts(getVisibleIDs(views), ModeledPageLayout.SHOW_VIEW_TAG);
+ windowPage.setNewShortcuts(getVisibleIDs(wizards), ModeledPageLayout.NEW_WIZARD_TAG);
+ windowPage.setNewShortcuts(getVisibleIDs(perspectives), ModeledPageLayout.PERSP_SHORTCUT_TAG);
+ windowPage.setNewShortcuts(getVisibleIDs(views), ModeledPageLayout.SHOW_VIEW_TAG);
}
// Determine if anything has changed and, if so, update the menu & tb's
@@ -2309,12 +2375,12 @@ public class CustomizePerspectiveDialog extends TrayDialog {
perspective.turnOnActionSets(toAdd.toArray(new IActionSetDescriptor[toAdd.size()]));
perspective.turnOffActionSets(toRemove.toArray(new IActionSetDescriptor[toRemove.size()]));
- requiresUpdate |= updateHiddenElements(actionSets, wPage.getHiddenItems(),
+ requiresUpdate |= updateHiddenElements(actionSets, windowPage.getHiddenItems(),
ModeledPageLayout.HIDDEN_ACTIONSET_PREFIX);
// Menu and Toolbar Items
- requiresUpdate |= updateHiddenElements(menuItems, wPage.getHiddenItems(),
+ requiresUpdate |= updateHiddenElements(menuItems, windowPage.getHiddenItems(),
ModeledPageLayout.HIDDEN_MENU_PREFIX);
- requiresUpdate |= updateHiddenElements(toolBarItems, wPage.getHiddenItems(),
+ requiresUpdate |= updateHiddenElements(toolBarItems, windowPage.getHiddenItems(),
ModeledPageLayout.HIDDEN_TOOLBAR_PREFIX);
if (requiresUpdate) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/GrayOutUnavailableLabelProvider.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/GrayOutUnavailableLabelProvider.java
index 54879945f2a..e374396f918 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/GrayOutUnavailableLabelProvider.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/GrayOutUnavailableLabelProvider.java
@@ -7,6 +7,7 @@
*
* Contributors:
* IBM Corporation - initial API and implementation
+ * Andrey Loskutov <loskutov@gmx.de> - Bug 420956 - Fix perspective customization on 4.x
*******************************************************************************/
package org.eclipse.ui.internal.dialogs.cpd;
@@ -19,6 +20,8 @@ import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog.ActionSet;
import org.eclipse.ui.internal.dialogs.cpd.CustomizePerspectiveDialog.DisplayItem;
/**
@@ -34,8 +37,8 @@ class GrayOutUnavailableLabelProvider extends TreeManager.TreeItemLabelProvider
private ViewerFilter filter;
private Set<Image> toDispose;
- public GrayOutUnavailableLabelProvider(Display display, ViewerFilter filter) {
- this.display = display;
+ public GrayOutUnavailableLabelProvider(ViewerFilter filter) {
+ this.display = PlatformUI.getWorkbench().getDisplay();
this.filter = filter;
toDispose = new HashSet<Image>();
}
@@ -47,8 +50,15 @@ class GrayOutUnavailableLabelProvider extends TreeManager.TreeItemLabelProvider
@Override
public Color getForeground(Object element) {
- if (!CustomizePerspectiveDialog.isEffectivelyAvailable((DisplayItem) element, filter)) {
- return display.getSystemColor(SWT.COLOR_GRAY);
+ if (element instanceof DisplayItem) {
+ if (!CustomizePerspectiveDialog.isEffectivelyAvailable((DisplayItem) element, filter)) {
+ return display.getSystemColor(SWT.COLOR_GRAY);
+ }
+ }
+ if (element instanceof ActionSet) {
+ if (!((ActionSet) element).isActive()) {
+ return display.getSystemColor(SWT.COLOR_GRAY);
+ }
}
return null;
}
@@ -76,6 +86,7 @@ class GrayOutUnavailableLabelProvider extends TreeManager.TreeItemLabelProvider
for (Image image : toDispose) {
image.dispose();
}
+ toDispose.clear();
super.dispose();
}
-} \ No newline at end of file
+}
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/TreeManager.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/TreeManager.java
index f1711b7d63a..105c1408f5c 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/TreeManager.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/dialogs/cpd/TreeManager.java
@@ -140,12 +140,18 @@ public class TreeManager {
public static class TreeItemLabelProvider extends LabelProvider {
@Override
public String getText(Object element) {
- return ((TreeItem)element).getLabel();
+ if (element instanceof TreeItem) {
+ return ((TreeItem) element).getLabel();
+ }
+ return super.getText(element);
}
@Override
public Image getImage(Object element) {
- return ((TreeItem)element).getImage();
+ if (element instanceof TreeItem) {
+ return ((TreeItem) element).getImage();
+ }
+ return super.getImage(element);
}
}
@@ -234,8 +240,7 @@ public class TreeManager {
private TreeItem parent;
private List<TreeItem> children;
private int checkState;
-
- private boolean changedByUser = false;
+ private boolean changedByUser;
public TreeItem(String label) {
this.label = label;
@@ -274,6 +279,10 @@ public class TreeManager {
return children;
}
+ public int getChildrenCount() {
+ return children.size();
+ }
+
public TreeItem getParent() {
return parent;
}
@@ -417,6 +426,12 @@ public class TreeManager {
public boolean isChangedByUser() {
return changedByUser;
}
+
+ @Override
+ public String toString() {
+ return label + ", check=" + getState() + ", changed=" + changedByUser; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+
}
/**
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java
index 8e833ac8228..2f709419190 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/menus/MenuHelper.java
@@ -799,7 +799,7 @@ public class MenuHelper {
return null;
}
- public static MToolItem createToolItem(MApplication application, CommandContributionItem cci) {
+ public static MHandledToolItem createToolItem(MApplication application, CommandContributionItem cci) {
String id = cci.getCommand().getId();
for (MCommand command : application.getCommands()) {
if (id.equals(command.getElementId())) {
diff --git a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
index d4e9cd47af9..d00fd1da2b8 100644
--- a/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
+++ b/bundles/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/internal/messages.properties
@@ -306,6 +306,7 @@ PerspectiveBarContributionItem_toolTip = {0} perspective
PerspectiveBarNewContributionItem_toolTip = Open Perspective
#--- Coolbar ---
+WorkbenchWindow_HelpToolbar = Help
WorkbenchWindow_FileToolbar = File
WorkbenchWindow_NavigateToolbar = Navigate
WorkbenchWindow_searchCombo_toolTip = Enter help search expression and press Enter

Back to the top