mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 14:12:10 +02:00
[292557] Import/Export dialogs do not pick up the renderings current base address
This commit is contained in:
parent
547715d30b
commit
64d3465010
13 changed files with 144 additions and 139 deletions
|
@ -90,7 +90,7 @@ public class Rendering extends Composite implements IDebugEventSetListener
|
||||||
|
|
||||||
private int fCurrentScrollSelection = 0; // current scroll selection;
|
private int fCurrentScrollSelection = 0; // current scroll selection;
|
||||||
|
|
||||||
private BigInteger fCaretAddress = BigInteger.valueOf(0); // -1 ?
|
private BigInteger fCaretAddress;
|
||||||
|
|
||||||
// user settings
|
// user settings
|
||||||
|
|
||||||
|
@ -463,7 +463,11 @@ public class Rendering extends Composite implements IDebugEventSetListener
|
||||||
|
|
||||||
protected BigInteger getCaretAddress()
|
protected BigInteger getCaretAddress()
|
||||||
{
|
{
|
||||||
return fCaretAddress;
|
// Return the caret address if it has been set, otherwise return the
|
||||||
|
// viewport address. When the rendering is first created, the caret is
|
||||||
|
// unset until the user clicks somewhere in the rendering. It also reset
|
||||||
|
// (unset) when the user gives us a new viewport address
|
||||||
|
return (fCaretAddress != null) ? fCaretAddress : fViewportAddress;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doGoToAddress() {
|
private void doGoToAddress() {
|
||||||
|
@ -1469,7 +1473,12 @@ public class Rendering extends Composite implements IDebugEventSetListener
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
fViewportAddress = address; // TODO update fCaretAddress
|
fViewportAddress = address;
|
||||||
|
|
||||||
|
// reset the caret and selection state (no caret and no selection)
|
||||||
|
fCaretAddress = null;
|
||||||
|
fSelection = new Selection();
|
||||||
|
|
||||||
redrawPanes();
|
redrawPanes();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.debug.ui.memory.transport;
|
package org.eclipse.cdt.debug.ui.memory.transport;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
@ -52,13 +53,16 @@ public class ExportMemoryDialog extends SelectionDialog
|
||||||
|
|
||||||
private Properties fProperties = new Properties();
|
private Properties fProperties = new Properties();
|
||||||
|
|
||||||
public ExportMemoryDialog(Shell parent, IMemoryBlock memoryBlock)
|
private BigInteger fInitialStartAddr;
|
||||||
|
|
||||||
|
public ExportMemoryDialog(Shell parent, IMemoryBlock memoryBlock, BigInteger initialStartAddr)
|
||||||
{
|
{
|
||||||
super(parent);
|
super(parent);
|
||||||
super.setTitle("Export Memory");
|
super.setTitle("Export Memory");
|
||||||
setShellStyle(getShellStyle() | SWT.RESIZE);
|
setShellStyle(getShellStyle() | SWT.RESIZE);
|
||||||
|
|
||||||
fMemoryBlock = memoryBlock;
|
fMemoryBlock = memoryBlock;
|
||||||
|
fInitialStartAddr = initialStartAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
@ -181,6 +185,7 @@ public class ExportMemoryDialog extends SelectionDialog
|
||||||
public void widgetSelected(SelectionEvent e) {
|
public void widgetSelected(SelectionEvent e) {
|
||||||
if(fCurrentControl != null)
|
if(fCurrentControl != null)
|
||||||
fCurrentControl.dispose();
|
fCurrentControl.dispose();
|
||||||
|
initProperties(fProperties, fInitialStartAddr);
|
||||||
fCurrentControl = fFormatExporters[fFormatCombo.getSelectionIndex()].createControl(container,
|
fCurrentControl = fFormatExporters[fFormatCombo.getSelectionIndex()].createControl(container,
|
||||||
fMemoryBlock, fProperties, ExportMemoryDialog.this);
|
fMemoryBlock, fProperties, ExportMemoryDialog.this);
|
||||||
}
|
}
|
||||||
|
@ -188,12 +193,25 @@ public class ExportMemoryDialog extends SelectionDialog
|
||||||
|
|
||||||
|
|
||||||
fFormatCombo.select(0);
|
fFormatCombo.select(0);
|
||||||
|
initProperties(fProperties, fInitialStartAddr);
|
||||||
fCurrentControl = fFormatExporters[0].createControl(container,
|
fCurrentControl = fFormatExporters[0].createControl(container,
|
||||||
fMemoryBlock, fProperties, ExportMemoryDialog.this);
|
fMemoryBlock, fProperties, ExportMemoryDialog.this);
|
||||||
|
|
||||||
return composite;
|
return composite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the start and end address properties to a particular value if
|
||||||
|
* and only if we have a fresh/clean properties object.
|
||||||
|
*/
|
||||||
|
static void initProperties(Properties properties, BigInteger addr) {
|
||||||
|
final String addrstr = "0x" + addr.toString(16);
|
||||||
|
if (!properties.containsKey(IMemoryExporter.TRANSFER_START)) {
|
||||||
|
properties.setProperty(IMemoryExporter.TRANSFER_START, addrstr);
|
||||||
|
properties.setProperty(IMemoryExporter.TRANSFER_END, addrstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setValid(boolean isValid)
|
public void setValid(boolean isValid)
|
||||||
{
|
{
|
||||||
getButton(IDialogConstants.OK_ID).setEnabled(isValid);
|
getButton(IDialogConstants.OK_ID).setEnabled(isValid);
|
||||||
|
|
|
@ -15,6 +15,7 @@ import java.math.BigInteger;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Vector;
|
import java.util.Vector;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.debug.ui.memory.transport.model.IMemoryExporter;
|
||||||
import org.eclipse.cdt.debug.ui.memory.transport.model.IMemoryImporter;
|
import org.eclipse.cdt.debug.ui.memory.transport.model.IMemoryImporter;
|
||||||
import org.eclipse.core.runtime.IConfigurationElement;
|
import org.eclipse.core.runtime.IConfigurationElement;
|
||||||
import org.eclipse.core.runtime.IExtensionPoint;
|
import org.eclipse.core.runtime.IExtensionPoint;
|
||||||
|
@ -63,7 +64,9 @@ public class ImportMemoryDialog extends SelectionDialog
|
||||||
|
|
||||||
private IMemoryRenderingSite fMemoryView;
|
private IMemoryRenderingSite fMemoryView;
|
||||||
|
|
||||||
public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock, IMemoryRenderingSite renderingSite)
|
private BigInteger fInitialStartAddr;
|
||||||
|
|
||||||
|
public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock, BigInteger initialStartAddr, IMemoryRenderingSite renderingSite)
|
||||||
{
|
{
|
||||||
super(parent);
|
super(parent);
|
||||||
super.setTitle("Download to Memory");
|
super.setTitle("Download to Memory");
|
||||||
|
@ -71,6 +74,7 @@ public class ImportMemoryDialog extends SelectionDialog
|
||||||
|
|
||||||
fMemoryBlock = memoryBlock;
|
fMemoryBlock = memoryBlock;
|
||||||
fMemoryView = renderingSite;
|
fMemoryView = renderingSite;
|
||||||
|
fInitialStartAddr = initialStartAddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void scrollRenderings(final BigInteger address)
|
protected void scrollRenderings(final BigInteger address)
|
||||||
|
@ -226,18 +230,33 @@ public class ImportMemoryDialog extends SelectionDialog
|
||||||
public void widgetSelected(SelectionEvent e) {
|
public void widgetSelected(SelectionEvent e) {
|
||||||
if(fCurrentControl != null)
|
if(fCurrentControl != null)
|
||||||
fCurrentControl.dispose();
|
fCurrentControl.dispose();
|
||||||
|
|
||||||
|
initProperties(fProperties, fInitialStartAddr); // use utility from export code
|
||||||
fCurrentControl = fFormatImporters[fFormatCombo.getSelectionIndex()].createControl(container,
|
fCurrentControl = fFormatImporters[fFormatCombo.getSelectionIndex()].createControl(container,
|
||||||
fMemoryBlock, fProperties, ImportMemoryDialog.this);
|
fMemoryBlock, fProperties, ImportMemoryDialog.this);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
fFormatCombo.select(0);
|
fFormatCombo.select(0);
|
||||||
|
|
||||||
|
initProperties(fProperties, fInitialStartAddr); // use utility from export code
|
||||||
fCurrentControl =
|
fCurrentControl =
|
||||||
fFormatImporters[0].createControl(container,fMemoryBlock, fProperties, ImportMemoryDialog.this);
|
fFormatImporters[0].createControl(container,fMemoryBlock, fProperties, ImportMemoryDialog.this);
|
||||||
|
|
||||||
return composite;
|
return composite;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initializes the start address properties to a particular value if
|
||||||
|
* and only if we have a fresh/clean properties object.
|
||||||
|
*/
|
||||||
|
static void initProperties(Properties properties, BigInteger addr) {
|
||||||
|
final String addrstr = "0x" + addr.toString(16);
|
||||||
|
if (!properties.containsKey(IMemoryExporter.TRANSFER_START)) {
|
||||||
|
properties.setProperty(IMemoryExporter.TRANSFER_START, addrstr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void setValid(boolean isValid)
|
public void setValid(boolean isValid)
|
||||||
{
|
{
|
||||||
getButton(IDialogConstants.OK_ID).setEnabled(isValid);
|
getButton(IDialogConstants.OK_ID).setEnabled(isValid);
|
||||||
|
|
|
@ -157,26 +157,11 @@ public class PlainTextExporter implements IMemoryExporter {
|
||||||
fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
|
fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BigInteger startAddress = null;
|
|
||||||
if(fMemoryBlock instanceof IMemoryBlockExtension)
|
|
||||||
startAddress = ((IMemoryBlockExtension) fMemoryBlock)
|
|
||||||
.getBigBaseAddress(); // FIXME use selection/caret address?
|
|
||||||
else
|
|
||||||
startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_START) != null)
|
|
||||||
fStartText.setText(properties.getProperty(TRANSFER_START));
|
fStartText.setText(properties.getProperty(TRANSFER_START));
|
||||||
else
|
|
||||||
fStartText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_END) != null)
|
|
||||||
fEndText.setText(properties.getProperty(TRANSFER_END));
|
fEndText.setText(properties.getProperty(TRANSFER_END));
|
||||||
else
|
|
||||||
fEndText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
|
fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
||||||
DebugException.INTERNAL_ERROR, "Failure", e));
|
DebugException.INTERNAL_ERROR, "Failure", e));
|
||||||
|
|
|
@ -144,20 +144,9 @@ public class PlainTextImporter implements IMemoryImporter {
|
||||||
fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
|
fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BigInteger startAddress = null;
|
|
||||||
if(fMemoryBlock instanceof IMemoryBlockExtension)
|
|
||||||
startAddress = ((IMemoryBlockExtension) fMemoryBlock)
|
|
||||||
.getBigBaseAddress(); // FIXME use selection/caret address?
|
|
||||||
else
|
|
||||||
startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_START) != null)
|
|
||||||
fStartText.setText(properties.getProperty(TRANSFER_START));
|
fStartText.setText(properties.getProperty(TRANSFER_START));
|
||||||
else
|
|
||||||
fStartText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
||||||
DebugException.INTERNAL_ERROR, "Failure", e));
|
DebugException.INTERNAL_ERROR, "Failure", e));
|
||||||
|
|
|
@ -155,25 +155,11 @@ public class RAWBinaryExporter implements IMemoryExporter
|
||||||
fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
|
fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BigInteger startAddress = null;
|
|
||||||
if(fMemoryBlock instanceof IMemoryBlockExtension)
|
|
||||||
startAddress = ((IMemoryBlockExtension) fMemoryBlock).getBigBaseAddress();
|
|
||||||
else
|
|
||||||
startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_START) != null)
|
|
||||||
fStartText.setText(properties.getProperty(TRANSFER_START));
|
fStartText.setText(properties.getProperty(TRANSFER_START));
|
||||||
else
|
|
||||||
fStartText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_END) != null)
|
|
||||||
fEndText.setText(properties.getProperty(TRANSFER_END));
|
fEndText.setText(properties.getProperty(TRANSFER_END));
|
||||||
else
|
|
||||||
fEndText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
|
fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
||||||
DebugException.INTERNAL_ERROR, "Failure", e));
|
DebugException.INTERNAL_ERROR, "Failure", e));
|
||||||
|
|
|
@ -121,19 +121,9 @@ public class RAWBinaryImporter implements IMemoryImporter {
|
||||||
fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
|
fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BigInteger startAddress = null;
|
|
||||||
if(fMemoryBlock instanceof IMemoryBlockExtension)
|
|
||||||
startAddress = ((IMemoryBlockExtension) fMemoryBlock).getBigBaseAddress();
|
|
||||||
else
|
|
||||||
startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_START) != null)
|
|
||||||
fStartText.setText(properties.getProperty(TRANSFER_START));
|
fStartText.setText(properties.getProperty(TRANSFER_START));
|
||||||
else
|
|
||||||
fStartText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
||||||
DebugException.INTERNAL_ERROR, "Failure", e));
|
DebugException.INTERNAL_ERROR, "Failure", e));
|
||||||
|
|
|
@ -155,26 +155,11 @@ public class SRecordExporter implements IMemoryExporter
|
||||||
fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
|
fFileText.setText(properties.getProperty(TRANSFER_FILE, ""));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BigInteger startAddress = null;
|
|
||||||
if(fMemoryBlock instanceof IMemoryBlockExtension)
|
|
||||||
startAddress = ((IMemoryBlockExtension) fMemoryBlock)
|
|
||||||
.getBigBaseAddress(); // FIXME use selection/caret address?
|
|
||||||
else
|
|
||||||
startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_START) != null)
|
|
||||||
fStartText.setText(properties.getProperty(TRANSFER_START));
|
fStartText.setText(properties.getProperty(TRANSFER_START));
|
||||||
else
|
|
||||||
fStartText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_END) != null)
|
|
||||||
fEndText.setText(properties.getProperty(TRANSFER_END));
|
fEndText.setText(properties.getProperty(TRANSFER_END));
|
||||||
else
|
|
||||||
fEndText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
|
fLengthText.setText(getEndAddress().subtract(getStartAddress()).toString());
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
||||||
DebugException.INTERNAL_ERROR, "Failure", e));
|
DebugException.INTERNAL_ERROR, "Failure", e));
|
||||||
|
|
|
@ -159,20 +159,9 @@ public class SRecordImporter implements IMemoryImporter {
|
||||||
fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
|
fScrollToStart = new Boolean(properties.getProperty(TRANSFER_SCROLL_TO_START, "true"));
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
BigInteger startAddress = null;
|
|
||||||
if(fMemoryBlock instanceof IMemoryBlockExtension)
|
|
||||||
startAddress = ((IMemoryBlockExtension) fMemoryBlock)
|
|
||||||
.getBigBaseAddress(); // FIXME use selection/caret address?
|
|
||||||
else
|
|
||||||
startAddress = BigInteger.valueOf(fMemoryBlock.getStartAddress());
|
|
||||||
|
|
||||||
if(properties.getProperty(TRANSFER_START) != null)
|
|
||||||
fStartText.setText(properties.getProperty(TRANSFER_START));
|
fStartText.setText(properties.getProperty(TRANSFER_START));
|
||||||
else
|
|
||||||
fStartText.setText("0x" + startAddress.toString(16));
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
catch(IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
MemoryTransportPlugin.getDefault().getLog().log(new Status(IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(),
|
||||||
DebugException.INTERNAL_ERROR, "Failure", e));
|
DebugException.INTERNAL_ERROR, "Failure", e));
|
||||||
|
|
|
@ -11,11 +11,16 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.debug.ui.memory.transport.actions;
|
package org.eclipse.cdt.debug.ui.memory.transport.actions;
|
||||||
|
|
||||||
|
import java.math.BigInteger;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.ui.memory.transport.ExportMemoryDialog;
|
import org.eclipse.cdt.debug.ui.memory.transport.ExportMemoryDialog;
|
||||||
import org.eclipse.cdt.debug.ui.memory.transport.MemoryTransportPlugin;
|
import org.eclipse.cdt.debug.ui.memory.transport.MemoryTransportPlugin;
|
||||||
|
import org.eclipse.debug.core.DebugException;
|
||||||
import org.eclipse.debug.core.model.IMemoryBlock;
|
import org.eclipse.debug.core.model.IMemoryBlock;
|
||||||
|
import org.eclipse.debug.core.model.IMemoryBlockExtension;
|
||||||
import org.eclipse.debug.ui.memory.IMemoryRendering;
|
import org.eclipse.debug.ui.memory.IMemoryRendering;
|
||||||
import org.eclipse.debug.ui.memory.IMemoryRenderingSite;
|
import org.eclipse.debug.ui.memory.IMemoryRenderingSite;
|
||||||
|
import org.eclipse.debug.ui.memory.IRepositionableMemoryRendering;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
|
@ -34,46 +39,89 @@ public class ExportMemoryAction implements IViewActionDelegate {
|
||||||
fView = (IMemoryRenderingSite) view;
|
fView = (IMemoryRenderingSite) view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IMemoryBlock getMemoryBlock(ISelection selection)
|
|
||||||
|
/**
|
||||||
|
* Utility PODS to return a memory block and an address from a method
|
||||||
|
*/
|
||||||
|
static class BlockAndAddress {
|
||||||
|
|
||||||
|
static public final BlockAndAddress EMPTY = new BlockAndAddress(null, BigInteger.valueOf(0));
|
||||||
|
|
||||||
|
public BlockAndAddress(IMemoryBlock block, BigInteger addr) {
|
||||||
|
this.block = block;
|
||||||
|
this.addr = addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IMemoryBlock block;
|
||||||
|
public BigInteger addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the memory block and initial base address for the export
|
||||||
|
* operation.
|
||||||
|
*
|
||||||
|
* @return a result object; null is never returned
|
||||||
|
*/
|
||||||
|
static BlockAndAddress getMemoryBlockAndInitialStartAddress(ISelection selection)
|
||||||
{
|
{
|
||||||
|
|
||||||
IMemoryBlock memBlock = null;
|
IMemoryBlock memBlock = null;
|
||||||
|
BigInteger initialStartAddr = null;
|
||||||
|
|
||||||
if (selection instanceof IStructuredSelection) {
|
if (selection instanceof IStructuredSelection) {
|
||||||
IStructuredSelection strucSel = (IStructuredSelection) selection;
|
IStructuredSelection strucSel = (IStructuredSelection) selection;
|
||||||
|
|
||||||
// return if current selection is empty
|
// return if current selection is empty
|
||||||
if (strucSel.isEmpty())
|
if (strucSel.isEmpty())
|
||||||
return null;
|
return BlockAndAddress.EMPTY;
|
||||||
|
|
||||||
Object obj = strucSel.getFirstElement();
|
Object obj = strucSel.getFirstElement();
|
||||||
|
|
||||||
if (obj == null)
|
if (obj == null)
|
||||||
return null;
|
return BlockAndAddress.EMPTY;
|
||||||
|
|
||||||
|
// Get the initial start address for the operation.
|
||||||
if (obj instanceof IMemoryRendering) {
|
if (obj instanceof IMemoryRendering) {
|
||||||
memBlock = ((IMemoryRendering) obj).getMemoryBlock();
|
memBlock = ((IMemoryRendering) obj).getMemoryBlock();
|
||||||
|
if (obj instanceof IRepositionableMemoryRendering) {
|
||||||
|
initialStartAddr = ((IRepositionableMemoryRendering)obj).getSelectedAddress();
|
||||||
|
}
|
||||||
} else if (obj instanceof IMemoryBlock) {
|
} else if (obj instanceof IMemoryBlock) {
|
||||||
memBlock = (IMemoryBlock) obj;
|
memBlock = (IMemoryBlock) obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (initialStartAddr == null) {
|
||||||
|
if (memBlock instanceof IMemoryBlockExtension) {
|
||||||
|
try {
|
||||||
|
initialStartAddr = ((IMemoryBlockExtension)memBlock).getBigBaseAddress();
|
||||||
|
} catch (DebugException e) {
|
||||||
|
initialStartAddr = BigInteger.valueOf(memBlock.getStartAddress());
|
||||||
}
|
}
|
||||||
return memBlock;
|
}
|
||||||
|
else {
|
||||||
|
initialStartAddr = BigInteger.valueOf(memBlock.getStartAddress());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return new BlockAndAddress(memBlock, initialStartAddr);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void run(IAction action) {
|
public void run(IAction action) {
|
||||||
|
|
||||||
ISelection selection = fView.getSite().getSelectionProvider()
|
ISelection selection = fView.getSite().getSelectionProvider()
|
||||||
.getSelection();
|
.getSelection();
|
||||||
IMemoryBlock memBlock = getMemoryBlock(selection);
|
BlockAndAddress blockAndAddr = getMemoryBlockAndInitialStartAddress(selection);
|
||||||
if(memBlock == null)
|
if(blockAndAddr.block == null)
|
||||||
return;
|
return;
|
||||||
ExportMemoryDialog dialog = new ExportMemoryDialog(MemoryTransportPlugin.getShell(), memBlock);
|
ExportMemoryDialog dialog = new ExportMemoryDialog(MemoryTransportPlugin.getShell(), blockAndAddr.block, blockAndAddr.addr);
|
||||||
dialog.open();
|
dialog.open();
|
||||||
|
|
||||||
dialog.getResult();
|
dialog.getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectionChanged(IAction action, ISelection selection) {
|
public void selectionChanged(IAction action, ISelection selection) {
|
||||||
action.setEnabled(getMemoryBlock(selection) != null);
|
action.setEnabled(getMemoryBlockAndInitialStartAddress(selection).block != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,13 +13,9 @@ package org.eclipse.cdt.debug.ui.memory.transport.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.debug.ui.memory.transport.ImportMemoryDialog;
|
import org.eclipse.cdt.debug.ui.memory.transport.ImportMemoryDialog;
|
||||||
import org.eclipse.cdt.debug.ui.memory.transport.MemoryTransportPlugin;
|
import org.eclipse.cdt.debug.ui.memory.transport.MemoryTransportPlugin;
|
||||||
import org.eclipse.debug.core.model.IMemoryBlock;
|
|
||||||
import org.eclipse.debug.internal.ui.views.memory.MemoryView;
|
|
||||||
import org.eclipse.debug.ui.memory.IMemoryRendering;
|
|
||||||
import org.eclipse.debug.ui.memory.IMemoryRenderingSite;
|
import org.eclipse.debug.ui.memory.IMemoryRenderingSite;
|
||||||
import org.eclipse.jface.action.IAction;
|
import org.eclipse.jface.action.IAction;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
|
||||||
import org.eclipse.ui.IViewActionDelegate;
|
import org.eclipse.ui.IViewActionDelegate;
|
||||||
import org.eclipse.ui.IViewPart;
|
import org.eclipse.ui.IViewPart;
|
||||||
|
|
||||||
|
@ -36,47 +32,25 @@ public class ImportMemoryAction implements IViewActionDelegate {
|
||||||
fView = (IMemoryRenderingSite) view;
|
fView = (IMemoryRenderingSite) view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IMemoryBlock getMemoryBlock(ISelection selection)
|
|
||||||
{
|
|
||||||
IMemoryBlock memBlock = null;
|
|
||||||
|
|
||||||
if (selection instanceof IStructuredSelection) {
|
|
||||||
IStructuredSelection strucSel = (IStructuredSelection) selection;
|
|
||||||
|
|
||||||
// return if current selection is empty
|
|
||||||
if (strucSel.isEmpty())
|
|
||||||
return null;
|
|
||||||
|
|
||||||
Object obj = strucSel.getFirstElement();
|
|
||||||
|
|
||||||
if (obj == null)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
if (obj instanceof IMemoryRendering) {
|
|
||||||
memBlock = ((IMemoryRendering) obj).getMemoryBlock();
|
|
||||||
} else if (obj instanceof IMemoryBlock) {
|
|
||||||
memBlock = (IMemoryBlock) obj;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return memBlock;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void run(IAction action) {
|
public void run(IAction action) {
|
||||||
|
|
||||||
ISelection selection = fView.getSite().getSelectionProvider()
|
ISelection selection = fView.getSite().getSelectionProvider()
|
||||||
.getSelection();
|
.getSelection();
|
||||||
IMemoryBlock memBlock = getMemoryBlock(selection);
|
|
||||||
if(memBlock == null)
|
// use utility function in export code
|
||||||
|
ExportMemoryAction.BlockAndAddress blockAndAddr = ExportMemoryAction.getMemoryBlockAndInitialStartAddress(selection);
|
||||||
|
if(blockAndAddr.block == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ImportMemoryDialog dialog = new ImportMemoryDialog(MemoryTransportPlugin.getShell(), memBlock, fView);
|
ImportMemoryDialog dialog = new ImportMemoryDialog(MemoryTransportPlugin.getShell(), blockAndAddr.block, blockAndAddr.addr, fView);
|
||||||
dialog.open();
|
dialog.open();
|
||||||
|
|
||||||
dialog.getResult();
|
dialog.getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void selectionChanged(IAction action, ISelection selection) {
|
public void selectionChanged(IAction action, ISelection selection) {
|
||||||
action.setEnabled(getMemoryBlock(selection) != null);
|
// use utility function in export code
|
||||||
|
action.setEnabled(ExportMemoryAction.getMemoryBlockAndInitialStartAddress(selection).block != null);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,13 @@ public interface IMemoryExporter
|
||||||
public static final String TRANSFER_START = "Start";
|
public static final String TRANSFER_START = "Start";
|
||||||
public static final String TRANSFER_END = "End";
|
public static final String TRANSFER_END = "End";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param parent
|
||||||
|
* @param memBlock
|
||||||
|
* @param properties This will contain initial values for TRANSFER_START and TRANSFER_END.
|
||||||
|
* @param parentDialog
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public Control createControl(Composite parent, IMemoryBlock memBlock, Properties properties, ExportMemoryDialog parentDialog);
|
public Control createControl(Composite parent, IMemoryBlock memBlock, Properties properties, ExportMemoryDialog parentDialog);
|
||||||
|
|
||||||
public void exportMemory();
|
public void exportMemory();
|
||||||
|
|
|
@ -22,10 +22,16 @@ public interface IMemoryImporter
|
||||||
{
|
{
|
||||||
public static final String TRANSFER_FILE = "File";
|
public static final String TRANSFER_FILE = "File";
|
||||||
public static final String TRANSFER_START = "Start";
|
public static final String TRANSFER_START = "Start";
|
||||||
public static final String TRANSFER_END = "End";
|
|
||||||
public static final String TRANSFER_CUSTOM_START_ADDRESS = "CustomStartAddress";
|
public static final String TRANSFER_CUSTOM_START_ADDRESS = "CustomStartAddress";
|
||||||
public static final String TRANSFER_SCROLL_TO_START = "ScrollToStart";
|
public static final String TRANSFER_SCROLL_TO_START = "ScrollToStart";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param parent
|
||||||
|
* @param memBlock
|
||||||
|
* @param properties This will contain an initial values for TRANSFER_START
|
||||||
|
* @param parentDialog
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
public Control createControl(Composite parent, IMemoryBlock memBlock, Properties properties, ImportMemoryDialog parentDialog);
|
public Control createControl(Composite parent, IMemoryBlock memBlock, Properties properties, ImportMemoryDialog parentDialog);
|
||||||
|
|
||||||
public void importMemory();
|
public void importMemory();
|
||||||
|
|
Loading…
Add table
Reference in a new issue