diff --git a/dsf/org.eclipse.cdt.dsf.ui/plugin.xml b/dsf/org.eclipse.cdt.dsf.ui/plugin.xml
index 95ad92131b9..5233ceaa15a 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/plugin.xml
+++ b/dsf/org.eclipse.cdt.dsf.ui/plugin.xml
@@ -168,6 +168,13 @@
id="org.eclipse.cdt.dsf.debug.ui.registersNumberFormats"
class="org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat.ElementNumberFormatsContribution">
+
+
+
+
@@ -231,6 +238,13 @@
id="org.eclipse.cdt.dsf.debug.ui.variablesNumberFormats"
class="org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat.ElementNumberFormatsContribution">
+
+
+
+
@@ -294,6 +308,13 @@
id="org.eclipse.cdt.dsf.debug.ui.expressionNumberFormats"
class="org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat.ElementNumberFormatsContribution">
+
+
+
+
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/ElementNumberFormatsContribution.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/ElementNumberFormatsContribution.java
index 1a582560440..73e517a2096 100644
--- a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/ElementNumberFormatsContribution.java
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/ElementNumberFormatsContribution.java
@@ -22,14 +22,15 @@ import org.eclipse.cdt.dsf.ui.viewmodel.IVMContext;
import org.eclipse.cdt.dsf.ui.viewmodel.IVMNode;
import org.eclipse.cdt.dsf.ui.viewmodel.IVMProvider;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.ui.AbstractDebugView;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.ContributionItem;
import org.eclipse.jface.action.IContributionItem;
-import org.eclipse.jface.action.Separator;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
@@ -43,7 +44,7 @@ import org.eclipse.swt.widgets.MenuItem;
*/
public class ElementNumberFormatsContribution extends NumberFormatsContribution {
- private class SelectFormatAction extends Action {
+ static class SelectFormatAction extends Action {
private final IElementFormatProvider fProvider;
private final IPresentationContext fContext;
private final IVMNode[] fNodes;
@@ -98,8 +99,6 @@ public class ElementNumberFormatsContribution extends NumberFormatsContribution
return NO_ITEMS;
}
IVMProvider provider = VMHandlerUtils.getVMProviderForSelection(selection);
- if (provider instanceof IElementFormatProvider == false) {
- }
if (FORMATS.size() == 0) {
return NO_ITEMS;
}
@@ -108,6 +107,17 @@ public class ElementNumberFormatsContribution extends NumberFormatsContribution
IVMNode[] nodes = new IVMNode[elementPaths.length];
final String[] formats = new String[elementPaths.length];
Object viewerInput = null;
+ if (context.getPart() instanceof AbstractDebugView) {
+ Viewer viewer = ((AbstractDebugView)context.getPart()).getViewer();
+ if (viewer != null) {
+ viewerInput = viewer.getInput();
+ }
+ }
+ // Here we keep using hard-coded formats, which are common formats.
+ // We expect clients may add extra formats before and after these formats.
+ // For details, please refer to 371012.
+ // For now, we do not use vm provider's cache entry to get available formats
+ // because it shows something extra than what we have been expecting. See 371012 comment #2.
final List actions = new ArrayList(FORMATS.size());
for (String formatId : FORMATS) {
actions.add(new SelectFormatAction((IElementFormatProvider) provider,
@@ -123,12 +133,14 @@ public class ElementNumberFormatsContribution extends NumberFormatsContribution
} else if (activeFormat != null
&& activeFormat.equals(formats[i]) == false) {
activeFormat = null;
+ break;
}
}
if (activeFormat != null) {
for (int i = 0; i < actions.size(); i++) {
if (activeFormat.equals(actions.get(i).fFormatId)) {
actions.get(i).setChecked(true);
+ break;
}
}
}
@@ -153,13 +165,10 @@ public class ElementNumberFormatsContribution extends NumberFormatsContribution
}
crm.setDoneCount(elementPaths.length);
int count = actions.size();
- IContributionItem[] items = new IContributionItem[count + 2];
+ IContributionItem[] items = new IContributionItem[count];
for (int i = 0; i < actions.size(); i++) {
items[i] = new ActionContributionItem(actions.get(i));
}
- items[count] = new Separator();
- items[count + 1] = new ActionContributionItem(new SelectFormatAction(
- (IElementFormatProvider) provider, context, nodes, viewerInput, elementPaths, null));
return items;
}
}
diff --git a/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/RestoreNumberFormatPreferenceContribution.java b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/RestoreNumberFormatPreferenceContribution.java
new file mode 100644
index 00000000000..4b852c743d2
--- /dev/null
+++ b/dsf/org.eclipse.cdt.dsf.ui/src/org/eclipse/cdt/dsf/debug/ui/viewmodel/numberformat/RestoreNumberFormatPreferenceContribution.java
@@ -0,0 +1,66 @@
+/*****************************************************************
+ * Copyright (c) 2012 Texas Instruments and others
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Winnie Lai (Texas Instruments) - Individual Element Number Format (Bug 202556)
+ * Winnie Lai (Texas Instruments) - Allow contributions around number format menu (Bug 371012)
+ *****************************************************************/
+package org.eclipse.cdt.dsf.debug.ui.viewmodel.numberformat;
+
+import org.eclipse.cdt.dsf.debug.ui.viewmodel.actions.VMHandlerUtils;
+import org.eclipse.cdt.dsf.ui.viewmodel.IVMContext;
+import org.eclipse.cdt.dsf.ui.viewmodel.IVMNode;
+import org.eclipse.cdt.dsf.ui.viewmodel.IVMProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.debug.ui.AbstractDebugView;
+import org.eclipse.jface.action.ActionContributionItem;
+import org.eclipse.jface.action.IContributionItem;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ITreeSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Dynamic menu contribution that restores the element number format in the current
+ * selection of the view to view's preference.
+ *
+ * We pull 'restore to preference' menu item out from ElementNumberFormatsContribution
+ * so that clients can add extra contribution before or after it. See 371012.
+ * @since 2.3
+ */
+public class RestoreNumberFormatPreferenceContribution extends ElementNumberFormatsContribution {
+ @Override
+ protected IContributionItem[] getContributionItems() {
+ ISelection selection = VMHandlerUtils.getSelection(fServiceLocator);
+ if (selection == null || selection.isEmpty() || selection instanceof ITreeSelection == false) {
+ return new IContributionItem[0];
+ }
+ IVMProvider provider = VMHandlerUtils.getVMProviderForSelection(selection);
+ IPresentationContext context = provider.getPresentationContext();
+ TreePath[] elementPaths = ((ITreeSelection) selection).getPaths();
+ IVMNode[] nodes = new IVMNode[elementPaths.length];
+ Object viewerInput = null;
+ if (context.getPart() instanceof AbstractDebugView) {
+ Viewer viewer = ((AbstractDebugView)context.getPart()).getViewer();
+ if (viewer != null) {
+ viewerInput = viewer.getInput();
+ }
+ }
+ for (int i = 0; i < elementPaths.length; i++) {
+ Object segment = elementPaths[i].getLastSegment();
+ if (segment instanceof IVMContext) {
+ nodes[i] = ((IVMContext) segment).getVMNode();
+ } else {
+ nodes[i] = null;
+ }
+ }
+ IContributionItem[] items = new IContributionItem[1];
+ items[0] = new ActionContributionItem(new SelectFormatAction(
+ (IElementFormatProvider) provider, context, nodes, viewerInput, elementPaths, null));
+ return items;
+ }
+}
\ No newline at end of file