diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AbstractPane.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AbstractPane.java index b8c399f3086..870a842ab89 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AbstractPane.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AbstractPane.java @@ -414,6 +414,8 @@ public abstract class AbstractPane extends Canvas fCaretAddress = fRendering.getMemoryBlockEndAddress().add( BigInteger.valueOf(cellOffset / fRendering.getAddressableSize())); } + + fRendering.setCaretAddress(fCaretAddress); } protected boolean isOdd(int value) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AddressPane.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AddressPane.java index 2c37b1cbff1..0d9769c2566 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AddressPane.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/AddressPane.java @@ -181,6 +181,7 @@ public class AddressPane extends AbstractPane this.fCaretAddress = cellAddress; this.fSubCellCaretPosition = x2; + setCaretAddress(fCaretAddress); } } catch(Exception e) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java index 5fc835944cf..e35a7309161 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/DataPane.java @@ -211,6 +211,7 @@ public class DataPane extends AbstractPane this.fCaretAddress = cellAddress; this.fSubCellCaretPosition = subCellCharacterPosition; + setCaretAddress(fCaretAddress); } } catch(Exception e) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java index b2fdf416399..bd4498e02d6 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/Rendering.java @@ -23,6 +23,9 @@ import org.eclipse.debug.internal.ui.views.memory.renderings.GoToAddressComposit import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; import org.eclipse.swt.events.KeyAdapter; @@ -1568,6 +1571,28 @@ public class Rendering extends Composite implements IDebugEventSetListener fBinaryPane.settingsChanged(); fTextPane.settingsChanged(); } + + protected void copyAddressToClipboard() + { + Clipboard clip = null; + try + { + clip = new Clipboard(getDisplay()); + + String addressString = "0x" + getCaretAddress().toString(16); + + TextTransfer plainTextTransfer = TextTransfer.getInstance(); + clip.setContents(new Object[] { addressString }, + new Transfer[] { plainTextTransfer }); + } + finally + { + if(clip != null) + { + clip.dispose(); + } + } + } static final char[] hexdigits = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java index 5f07888b079..ced26698daa 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TextPane.java @@ -183,6 +183,7 @@ public class TextPane extends AbstractPane this.fCaretAddress = cellAddress; this.fSubCellCaretPosition = x2; + setCaretAddress(fCaretAddress); } } catch(Exception e) diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java index 92bd208d622..faaa4502084 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering.java @@ -484,6 +484,24 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe // copy final Action copyAction = new CopyAction(this.fRendering); + + // copy address + + final Action copyAddressAction = new Action( + TraditionalRenderingMessages + .getString("TraditionalRendering.COPY_ADDRESS")) //$NON-NLS-1$ + { + public void run() + { + Display.getDefault().asyncExec(new Runnable() + { + public void run() + { + TraditionalRendering.this.fRendering.copyAddressToClipboard(); + } + }); + } + }; // go to address @@ -925,6 +943,7 @@ public class TraditionalRendering extends AbstractMemoryRendering implements IRe manager.add(new Separator()); manager.add(copyAction); + manager.add(copyAddressAction); manager.add(gotoAddressAction); manager.add(gotoBaseAddressAction); diff --git a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering_messages.properties b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering_messages.properties index a1f4ec4c951..aeea82814a0 100644 --- a/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering_messages.properties +++ b/plugins/org.eclipse.dd.debug.memory.renderings.traditional/src/org/eclipse/dd/debug/memory/renderings/traditional/TraditionalRendering_messages.properties @@ -45,4 +45,5 @@ TraditionalRendering.COLUMN_COUNT_5=5 TraditionalRendering.COLUMN_COUNT_6=6 TraditionalRendering.COLUMN_COUNT_7=7 TraditionalRendering.COLUMN_COUNT_8=8 -TraditionalRendering.COLUMN_COUNT_CUSTOM=Custom... \ No newline at end of file +TraditionalRendering.COLUMN_COUNT_CUSTOM=Custom... +TraditionalRendering.COPY_ADDRESS=Copy Address \ No newline at end of file