diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui')
4 files changed, 64 insertions, 6 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.java index 59a254352..f8aa7ef78 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.java @@ -252,12 +252,12 @@ public class DebugUIMessages extends NLS { public static String ViewPaneOrientationAction_3; public static String GoToAddressComposite_0; public static String GoToAddressComposite_1; - public static String GoToAddressComposite_2; + public static String GoToAddressComposite_2; + public static String GoToAddressComposite_3; + public static String GoToAddressComposite_4; static { // load message values from bundle file NLS.initializeMessages(BUNDLE_NAME, DebugUIMessages.class); } - - }
\ No newline at end of file diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.properties index 769cff065..132460b0d 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.properties +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/DebugUIMessages.properties @@ -81,6 +81,8 @@ GoToAddressAction_title = Go to Address... GoToAddressComposite_0=Go to Address: GoToAddressComposite_1=OK GoToAddressComposite_2=Cancel +GoToAddressComposite_3=Offset +GoToAddressComposite_4=Go to Offset: GoToAddressAction_Go_to_address_failed = Go To Address Failed GoToAddressAction_Address_is_invalid = Address is invalid GoToAddressAction_tooltip = Go to Address... diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java index 6171b7784..bec4477aa 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/memory/provisional/AbstractAsyncTableRendering.java @@ -2790,7 +2790,11 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende */ private void doGoToAddress() { try { - String exp = fGoToAddressAction.parseExpression(fGoToAddressComposite.getExpressionText()); + String exp = null; + if (fGoToAddressComposite.isOffset()) + exp = getOffsetAddress(getSelectedAddress(), fGoToAddressComposite.getExpressionText()); + else + exp = fGoToAddressAction.parseExpression(fGoToAddressComposite.getExpressionText()); fGoToAddressAction.doGoToAddress(exp); hideGotoAddressComposite(); } catch (DebugException e1) { @@ -2803,6 +2807,37 @@ public abstract class AbstractAsyncTableRendering extends AbstractBaseTableRende } } + private String getOffsetAddress(BigInteger address, String expression) throws NumberFormatException + { + boolean add = true; + boolean hex = false; + + if (expression.startsWith("+")) //$NON-NLS-1$ + { + expression = expression.substring(1); + } + else if (expression.startsWith("-")) //$NON-NLS-1$ + { + expression = expression.substring(1); + add = false; + } + + if (expression.startsWith("0x") || expression.startsWith("0X")) //$NON-NLS-1$ //$NON-NLS-2$ + hex = true; + + expression = fGoToAddressAction.parseExpression(expression); + + BigInteger gotoAddress = hex?new BigInteger(expression, 16):new BigInteger(expression); + + if (add) + gotoAddress = address.add(gotoAddress); + else + gotoAddress = address.subtract(gotoAddress); + + return gotoAddress.toString(16); + + } + public void activated() { super.activated(); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressComposite.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressComposite.java index 844c9fa5b..25a0d5a65 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressComposite.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/memory/renderings/GoToAddressComposite.java @@ -13,6 +13,8 @@ package org.eclipse.debug.internal.ui.views.memory.renderings; import org.eclipse.debug.internal.ui.DebugUIMessages; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; @@ -28,6 +30,7 @@ public class GoToAddressComposite { private Button fOKButton; private Button fCancelButton; private Composite fComposite; + private Button fOffsetButton; /** * @param parent @@ -37,7 +40,7 @@ public class GoToAddressComposite { { fComposite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); - layout.numColumns = 4; + layout.numColumns = 5; layout.makeColumnsEqualWidth = false; layout.marginHeight = 0; layout.marginLeft = 0; @@ -49,9 +52,20 @@ public class GoToAddressComposite { fExpression = new Text(fComposite, SWT.SINGLE | SWT.BORDER); fExpression.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + fOffsetButton = new Button(fComposite, SWT.CHECK); + fOffsetButton.setText(DebugUIMessages.GoToAddressComposite_3); + fOffsetButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + if (fOffsetButton.getSelection()) + fLabel.setText(DebugUIMessages.GoToAddressComposite_4); + else + fLabel.setText(DebugUIMessages.GoToAddressComposite_0); + fComposite.layout(); + }}); + + fOKButton = new Button(fComposite, SWT.NONE); fOKButton.setText(DebugUIMessages.GoToAddressComposite_1); - fCancelButton = new Button(fComposite, SWT.NONE); fCancelButton.setText(DebugUIMessages.GoToAddressComposite_2); @@ -83,4 +97,11 @@ public class GoToAddressComposite { { return fExpression; } + + public boolean isOffset() + { + return fOffsetButton.getSelection(); + } + + } |