dmContext, IVariableDMData dmData,
+ String columnId, int idx, ILabelUpdate update)
+ {
+ if (IDebugVMConstants.COLUMN_ID__NAME.equals(columnId)) {
+ update.setLabel(dmData.getName(), idx);
+ } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(columnId)) {
+ update.setLabel(dmData.getValue(), idx);
+ } else {
+ update.setLabel("", idx); //$NON-NLS-1$
+ }
+ }
+
+ @Override
+ protected int getNodeDeltaFlagsForDMEvent(IDMEvent> e) {
+ if (e instanceof IRunControl.ISuspendedDMEvent) {
+ return IModelDelta.CONTENT;
+ }
+ return IModelDelta.NO_CHANGE;
+ }
+
+ @Override
+ protected void buildDeltaForDMEvent(IDMEvent> e, VMDelta parent, int nodeOffset, RequestMonitor rm) {
+ if (e instanceof IRunControl.ISuspendedDMEvent) {
+ // Create a delta that the whole register group has changed.
+ parent.addFlags(IModelDelta.CONTENT);
+ }
+
+ super.buildDeltaForDMEvent(e, parent, nodeOffset, rm);
+ }
+}
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java
new file mode 100644
index 00000000000..9f2f0febf91
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/MessagesForVariablesVM.java
@@ -0,0 +1,21 @@
+package org.eclipse.dd.dsf.debug.ui.viewmodel.variable;
+
+import org.eclipse.osgi.util.NLS;
+
+public class MessagesForVariablesVM extends NLS {
+ private static final String BUNDLE_NAME = "org.eclipse.dd.dsf.debug.ui.viewmodel.variable.messages"; //$NON-NLS-1$
+
+ public static String VariableColumnPresentation_name;
+
+ public static String VariableColumnPresentation_type;
+
+ public static String VariableColumnPresentation_value;
+
+ static {
+ // initialize resource bundle
+ NLS.initializeMessages(BUNDLE_NAME, MessagesForVariablesVM.class);
+ }
+
+ private MessagesForVariablesVM() {
+ }
+}
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java
new file mode 100644
index 00000000000..fd5cfd52ccd
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableColumnPresentation.java
@@ -0,0 +1,69 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Wind River Systems 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.dd.dsf.debug.ui.viewmodel.variable;
+
+import org.eclipse.dd.dsf.debug.ui.DsfDebugUIPlugin;
+import org.eclipse.dd.dsf.debug.ui.viewmodel.IDebugVMConstants;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+import org.eclipse.jface.resource.ImageDescriptor;
+
+/**
+ *
+ */
+@SuppressWarnings("restriction")
+public class VariableColumnPresentation implements IColumnPresentation {
+ public static final String ID = DsfDebugUIPlugin.PLUGIN_ID + ".VARIABLES_COLUMN_PRESENTATION_ID"; //$NON-NLS-1$
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#init(org.eclipse.debug.internal.ui.viewers.provisional.IPresentationContext)
+ public void init(IPresentationContext context) {}
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#dispose()
+ public void dispose() {}
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getAvailableColumns()
+ public String[] getAvailableColumns() {
+ return new String[] { IDebugVMConstants.COLUMN_ID__NAME, IDebugVMConstants.COLUMN_ID__TYPE, IDebugVMConstants.COLUMN_ID__VALUE };
+ }
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getHeader(java.lang.String)
+ public String getHeader(String id) {
+ if (IDebugVMConstants.COLUMN_ID__NAME.equals(id)) {
+ return MessagesForVariablesVM.VariableColumnPresentation_name;
+ } else if (IDebugVMConstants.COLUMN_ID__TYPE.equals(id)) {
+ return MessagesForVariablesVM.VariableColumnPresentation_type;
+ } else if (IDebugVMConstants.COLUMN_ID__VALUE.equals(id)) {
+ return MessagesForVariablesVM.VariableColumnPresentation_value;
+ }
+ return null;
+ }
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getId()
+ public String getId() {
+ return ID;
+ }
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getImageDescriptor(java.lang.String)
+ public ImageDescriptor getImageDescriptor(String id) {
+ return null;
+ }
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#getInitialColumns()
+ public String[] getInitialColumns() {
+ return new String[] { IDebugVMConstants.COLUMN_ID__NAME, IDebugVMConstants.COLUMN_ID__TYPE, IDebugVMConstants.COLUMN_ID__VALUE };
+ }
+
+ // @see org.eclipse.debug.internal.ui.viewers.provisional.IColumnPresentation#isOptional()
+ public boolean isOptional() {
+ return true;
+ }
+
+}
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java
new file mode 100644
index 00000000000..559ee8ba034
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/VariableVMProvider.java
@@ -0,0 +1,44 @@
+/*******************************************************************************
+ * Copyright (c) 2006 Wind River Systems 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:
+ * Wind River Systems - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.dd.dsf.debug.ui.viewmodel.variable;
+
+import org.eclipse.dd.dsf.debug.ui.viewmodel.DebugViewSelectionRootLayoutNode;
+import org.eclipse.dd.dsf.service.DsfSession;
+import org.eclipse.dd.dsf.ui.viewmodel.AbstractVMAdapter;
+import org.eclipse.dd.dsf.ui.viewmodel.IVMLayoutNode;
+import org.eclipse.dd.dsf.ui.viewmodel.IVMRootLayoutNode;
+import org.eclipse.dd.dsf.ui.viewmodel.dm.AbstractDMVMProvider;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
+import org.eclipse.debug.internal.ui.viewers.model.provisional.IPresentationContext;
+
+/**
+ *
+ */
+@SuppressWarnings("restriction")
+public class VariableVMProvider extends AbstractDMVMProvider {
+ public VariableVMProvider(AbstractVMAdapter adapter, IPresentationContext context, DsfSession session) {
+ super(adapter, context, session);
+ IVMRootLayoutNode debugViewSelectionNode = new DebugViewSelectionRootLayoutNode(this);
+ IVMLayoutNode localsNode = new LocalsLayoutNode(this, getSession());
+ debugViewSelectionNode.setChildNodes(new IVMLayoutNode[] { localsNode });
+ setRootLayoutNode(debugViewSelectionNode);
+ }
+
+ @Override
+ public IColumnPresentation createColumnPresentation(IPresentationContext context, Object element) {
+ return new VariableColumnPresentation();
+ }
+
+ @Override
+ public String getColumnPresentationId(IPresentationContext context, Object element) {
+ return VariableColumnPresentation.ID;
+ }
+}
diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/messages.properties b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/messages.properties
new file mode 100644
index 00000000000..d67d7e56fd7
--- /dev/null
+++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/variable/messages.properties
@@ -0,0 +1,3 @@
+VariableColumnPresentation_name=Name
+VariableColumnPresentation_type=Type
+VariableColumnPresentation_value=Value
diff --git a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java
index a9b5463c5d6..09dc3ac517b 100644
--- a/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java
+++ b/plugins/org.eclipse.dd.dsf.ui/src/org/eclipse/dd/dsf/ui/viewmodel/AbstractVMLayoutNode.java
@@ -82,10 +82,19 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode {
/**
* If any of the children nodes have delta flags, that means that this
* node has to generate a delta as well.
+ * Note: If a child node has a IModelDelta.CONTENT
delta
+ * flag, it means that this flag will be added to this node's element.
+ * To allow for optimization change the child's IModelDelta.CONTENT
+ * flag into a IModelDelta.STATE
flag.
*/
public int getDeltaFlags(Object e) {
int retVal = 0;
for (IVMLayoutNode childNode : getChildLayoutNodes()) {
+ int childNodeDeltaFlags = childNode.getDeltaFlags(e);
+ if ((childNodeDeltaFlags | IModelDelta.CONTENT) != 0) {
+ childNodeDeltaFlags &= ~IModelDelta.CONTENT;
+ childNodeDeltaFlags |= IModelDelta.STATE;
+ }
retVal |= childNode.getDeltaFlags(e);
}
return retVal;
@@ -116,7 +125,7 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode {
// Similarly, the index argument is not necessary either.
boolean mustGetElements = false;
for (int childDelta : childNodesWithDeltaFlags.values()) {
- if ((childDelta & ~IModelDelta.CONTENT & ~IModelDelta.STATE) != 0) {
+ if ((childDelta & ~IModelDelta.STATE) != 0) {
mustGetElements = true;
}
}
@@ -391,6 +400,17 @@ abstract public class AbstractVMLayoutNode implements IVMLayoutNode {
abstract public int hashCode();
}
+ protected TreePath getTreePathFromDelta(IModelDelta delta) {
+ List