From 85c4ae5f243bfc0cbd5f75d65f3577b60027a488 Mon Sep 17 00:00:00 2001 From: Randy Rohrbach Date: Tue, 3 Jul 2007 16:48:52 +0000 Subject: [PATCH] Bugzilla 195291 Added GroupEvent changed for values as opposed to contents in IRegisters.java and changed the Group and Register layout nodes to properly deal with all of the defined events. --- .../register/RegisterGroupLayoutNode.java | 18 ++++++++++++---- .../register/RegisterLayoutNode.java | 21 ++++++++++++++++--- .../dd/dsf/debug/service/IRegisters.java | 3 +++ 3 files changed, 35 insertions(+), 7 deletions(-) diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupLayoutNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupLayoutNode.java index ddc7b9799f7..29ec2e7732d 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterGroupLayoutNode.java @@ -20,6 +20,7 @@ import org.eclipse.dd.dsf.datamodel.IDMContext; import org.eclipse.dd.dsf.datamodel.IDMEvent; import org.eclipse.dd.dsf.debug.service.IRegisters; import org.eclipse.dd.dsf.debug.service.IRunControl; +import org.eclipse.dd.dsf.debug.service.IRegisters.IGroupChangedDMEvent; import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMContext; import org.eclipse.dd.dsf.debug.service.IRegisters.IRegisterGroupDMData; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; @@ -204,21 +205,30 @@ public class RegisterGroupLayoutNode extends AbstractExpressionLayoutNode e) { if (e instanceof IRunControl.ISuspendedDMEvent) { return IModelDelta.CONTENT; - }else if (e instanceof IRegisters.IRegistersChangedDMEvent) { + } + else if (e instanceof IRegisters.IGroupsChangedDMEvent) { return IModelDelta.CONTENT; } + else if (e instanceof IRegisters.IGroupChangedDMEvent) { + return IModelDelta.STATE; + } 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. + // Create a delta that indicates all groups have changed parent.addFlags(IModelDelta.CONTENT); } - if (e instanceof IRegisters.IRegistersChangedDMEvent) { - parent.addNode( createVMContext(((IRegisters.IRegistersChangedDMEvent)e).getDMContext()), IModelDelta.STATE ); + else if (e instanceof IRegisters.IGroupsChangedDMEvent) { + // Create a delta that indicates all groups have changed + parent.addFlags(IModelDelta.CONTENT); } + else if (e instanceof IRegisters.IGroupChangedDMEvent) { + // Create a delta that indicates that specific group changed + parent.addNode( createVMContext(((IGroupChangedDMEvent)e).getDMContext()), IModelDelta.STATE ); + } super.buildDeltaForDMEvent(e, parent, nodeOffset, rm); } diff --git a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterLayoutNode.java b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterLayoutNode.java index 807edd3a7d9..e3e9c065f2e 100644 --- a/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterLayoutNode.java +++ b/plugins/org.eclipse.dd.dsf.debug.ui/src/org/eclipse/dd/dsf/debug/ui/viewmodel/register/RegisterLayoutNode.java @@ -386,20 +386,35 @@ public class RegisterLayoutNode extends AbstractExpressionLayoutNode e) { if (e instanceof IRunControl.ISuspendedDMEvent) { return IModelDelta.CONTENT; - } else if (e instanceof IRegisters.IRegisterChangedDMEvent) { - return IModelDelta.STATE; + } + else if (e instanceof IRegisters.IRegistersChangedDMEvent) { + return IModelDelta.CONTENT; + } + else if (e instanceof IRegisters.IRegisterChangedDMEvent) { + /* + * Logically one would think that STATE should be specified here. But we specifiy CONTENT + * as well so that if there are subregisters ( BIT FIELDS ) they will be forced to update + * and show new values when the total register changes. + */ + return IModelDelta.CONTENT | IModelDelta.STATE; } 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); } + + if (e instanceof IRegisters.IRegistersChangedDMEvent) { + parent.addFlags(IModelDelta.CONTENT);; + } + if (e instanceof IRegisters.IRegisterChangedDMEvent) { - parent.addNode( createVMContext(((IRegisterChangedDMEvent)e).getDMContext()), IModelDelta.STATE ); + parent.addNode( createVMContext(((IRegisterChangedDMEvent)e).getDMContext()), IModelDelta.CONTENT | IModelDelta.STATE ); } super.buildDeltaForDMEvent(e, parent, nodeOffset, rm); diff --git a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRegisters.java b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRegisters.java index d443b167419..46812eb93bf 100644 --- a/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRegisters.java +++ b/plugins/org.eclipse.dd.dsf.debug/src/org/eclipse/dd/dsf/debug/service/IRegisters.java @@ -29,6 +29,9 @@ public interface IRegisters extends IFormattedValues { public String getName(); } + /** Event indicating values for the group have changed. */ + public interface IGroupChangedDMEvent extends IDMEvent {} + /** Event indicating registers in a group have changed. */ public interface IRegistersChangedDMEvent extends IDMEvent {}