From 4276eab9a216434a51e3f3fe0ee6641ebbc93ceb Mon Sep 17 00:00:00 2001 From: Ted Williams Date: Sun, 15 Mar 2009 22:56:45 +0000 Subject: [PATCH] [268693] [TraditionalRendering] update mode support --- .../ui/memory/traditional/Rendering.java | 58 +++++++++++++------ .../traditional/TraditionalRendering.java | 43 ++++++++++++++ .../TraditionalRendering_messages.properties | 6 +- 3 files changed, 89 insertions(+), 18 deletions(-) diff --git a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java index 8c5f82e88a8..8d9d97dc1bd 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/Rendering.java @@ -142,6 +142,12 @@ public class Rendering extends Composite implements IDebugEventSetListener // flag whether the memory cache is dirty private boolean fCacheDirty = false; + + // update modes + public final static int UPDATE_ALWAYS = 1; + public final static int UPDATE_ON_BREAKPOINT = 2; + public final static int UPDATE_MANUAL = 3; + public int fUpdateMode = UPDATE_ALWAYS; public Rendering(Composite parent, TraditionalRendering renderingParent) { @@ -535,6 +541,7 @@ public class Rendering extends Composite implements IDebugEventSetListener boolean isChangeOnly = false; boolean isSuspend = false; + boolean isBreakpointHit = false; for(int i = 0; i < events.length; i++) { @@ -548,6 +555,8 @@ public class Rendering extends Composite implements IDebugEventSetListener if(source.getDebugTarget() == getMemoryBlock() .getDebugTarget()) { + if((detail & DebugEvent.BREAKPOINT) != 0) + isBreakpointHit = true; if(kind == DebugEvent.SUSPEND) { handleSuspendEvent(detail); @@ -563,32 +572,39 @@ public class Rendering extends Composite implements IDebugEventSetListener } if(isSuspend) - handleSuspend(); + handleSuspend(isBreakpointHit); else if(isChangeOnly) handleChange(); } - protected void handleSuspend() + protected void handleSuspend(boolean isBreakpointHit) { - Display.getDefault().asyncExec(new Runnable() - { - public void run() + if(getUpdateMode() == UPDATE_ALWAYS || + (getUpdateMode() == UPDATE_ON_BREAKPOINT && isBreakpointHit)) + { + Display.getDefault().asyncExec(new Runnable() { - archiveDeltas(); - refresh(); - } - }); + public void run() + { + archiveDeltas(); + refresh(); + } + }); + } } protected void handleChange() { - Display.getDefault().asyncExec(new Runnable() - { - public void run() - { - refresh(); - } - }); + if(getUpdateMode() == UPDATE_ALWAYS) + { + Display.getDefault().asyncExec(new Runnable() + { + public void run() + { + refresh(); + } + }); + } } protected void handleSuspendEvent(int detail) @@ -1629,7 +1645,15 @@ public class Rendering extends Composite implements IDebugEventSetListener return fTextMode; } - protected String getCharacterSet(int mode) + public int getUpdateMode() { + return fUpdateMode; + } + + public void setUpdateMode(int fUpdateMode) { + this.fUpdateMode = fUpdateMode; + } + + protected String getCharacterSet(int mode) { switch(mode) { diff --git a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering.java b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering.java index 22345cb42ba..733672fe156 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering.java @@ -1061,6 +1061,49 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe sub.add(displayColumnCountCustom); manager.add(sub); + + final Action updateAlwaysAction = new Action( + TraditionalRenderingMessages + .getString("TraditionalRendering.UPDATE_ALWAYS"), //$NON-NLS-1$ + IAction.AS_RADIO_BUTTON) + { + public void run() + { + fRendering.setUpdateMode(Rendering.UPDATE_ALWAYS); + } + }; + updateAlwaysAction.setChecked(fRendering.getUpdateMode() == Rendering.UPDATE_ALWAYS); + + final Action updateOnBreakpointAction = new Action( + TraditionalRenderingMessages + .getString("TraditionalRendering.UPDATE_ON_BREAKPOINT"), //$NON-NLS-1$ + IAction.AS_RADIO_BUTTON) + { + public void run() + { + fRendering.setUpdateMode(Rendering.UPDATE_ON_BREAKPOINT); + } + }; + updateOnBreakpointAction.setChecked(fRendering.getUpdateMode() == Rendering.UPDATE_ON_BREAKPOINT); + + final Action updateManualAction = new Action( + TraditionalRenderingMessages + .getString("TraditionalRendering.UPDATE_MANUAL"), //$NON-NLS-1$ + IAction.AS_RADIO_BUTTON) + { + public void run() + { + fRendering.setUpdateMode(Rendering.UPDATE_MANUAL); + } + }; + updateManualAction.setChecked(fRendering.getUpdateMode() == Rendering.UPDATE_MANUAL); + + sub = new MenuManager(TraditionalRenderingMessages + .getString("TraditionalRendering.UPDATEMODE")); //$NON-NLS-1$ + sub.add(updateAlwaysAction); + sub.add(updateOnBreakpointAction); + sub.add(updateManualAction); + manager.add(sub); manager.add(new Separator()); BigInteger start = fRendering.getSelection().getStart(); diff --git a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering_messages.properties b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering_messages.properties index 041aa4d356f..4593423253b 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering_messages.properties +++ b/memory/org.eclipse.cdt.debug.ui.memory.traditional/src/org/eclipse/cdt/debug/ui/memory/traditional/TraditionalRendering_messages.properties @@ -46,4 +46,8 @@ TraditionalRendering.COLUMN_COUNT_32=32 TraditionalRendering.COLUMN_COUNT_64=64 TraditionalRendering.COLUMN_COUNT_128=128 TraditionalRendering.COLUMN_COUNT_CUSTOM=Custom... -TraditionalRendering.COPY_ADDRESS=Copy Address \ No newline at end of file +TraditionalRendering.COPY_ADDRESS=Copy Address +TraditionalRendering.UPDATEMODE=Update Mode +TraditionalRendering.UPDATE_ALWAYS=Always +TraditionalRendering.UPDATE_ON_BREAKPOINT=On Breakpoint +TraditionalRendering.UPDATE_MANUAL=Manual \ No newline at end of file