diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java index 392e2dc6a14..6ffa7b5b7f5 100644 --- a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java +++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/ImportMemoryDialog.java @@ -11,21 +11,26 @@ package org.eclipse.dd.debug.ui.memory.transport; +import java.math.BigInteger; import java.util.Properties; import java.util.Vector; -import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IExtensionRegistry; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; -import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryExporter; import org.eclipse.dd.debug.ui.memory.transport.model.IMemoryImporter; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IMemoryBlock; import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.views.memory.MemoryView; +import org.eclipse.debug.internal.ui.views.memory.RenderingViewPane; +import org.eclipse.debug.ui.memory.IMemoryRendering; +import org.eclipse.debug.ui.memory.IMemoryRenderingContainer; +import org.eclipse.debug.ui.memory.IRepositionableMemoryRendering; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; @@ -36,10 +41,12 @@ import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.SelectionDialog; +import org.eclipse.ui.progress.UIJob; public class ImportMemoryDialog extends SelectionDialog { @@ -55,13 +62,50 @@ public class ImportMemoryDialog extends SelectionDialog private Properties fProperties = new Properties(); - public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock) + private MemoryView fMemoryView; + + public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock, MemoryView view) { super(parent); super.setTitle("Download to Memory"); setShellStyle(getShellStyle() | SWT.RESIZE); fMemoryBlock = memoryBlock; + fMemoryView = view; + } + + protected void scrollRenderings(final BigInteger address) + { + UIJob job = new UIJob("repositionRenderings"){ //$NON-NLS-1$ + public IStatus runInUIThread(IProgressMonitor monitor) { + final IMemoryRenderingContainer containers[] = fMemoryView.getMemoryRenderingContainers(); + for(int i = 0; i < containers.length; i++) + { + if(containers[i] instanceof RenderingViewPane) + { + IMemoryRendering rendering = containers[i].getActiveRendering(); + + if(rendering instanceof IRepositionableMemoryRendering) + { + try + { + ((IRepositionableMemoryRendering) rendering).goToAddress(address); + } + catch (DebugException e) + { + // do nothing + } + } + } + } + + return Status.OK_STATUS; + }}; + job.setSystem(true); + job.setThread(Display.getDefault().getThread()); + job.schedule(); + + } /* (non-Javadoc) diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java index 2913d266eac..dc0443691c6 100644 --- a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java +++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/PlainTextImporter.java @@ -294,6 +294,8 @@ public class PlainTextImporter implements IMemoryImporter { if(!fUseCustomAddress) offset = BigInteger.ZERO; + BigInteger scrollToAddress = null; + BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fInputFile))); BigInteger jobs = BigInteger.valueOf(fInputFile.length()); @@ -323,6 +325,9 @@ public class PlainTextImporter implements IMemoryImporter { data[i] = new BigInteger(valueString.substring(position++, position++ + 1), 16).byteValue(); } + if(scrollToAddress == null) + scrollToAddress = recordAddress; + ((IMemoryBlockExtension) fMemoryBlock).setValue(recordAddress.subtract(((IMemoryBlockExtension) fMemoryBlock).getBigBaseAddress()).add(BigInteger.valueOf(bytesRead)), data); @@ -343,6 +348,9 @@ public class PlainTextImporter implements IMemoryImporter { reader.close(); monitor.done(); + + if(fProperties.getProperty(TRANSFER_SCROLL_TO_START, "false").equals("true")) + fParentDialog.scrollRenderings(scrollToAddress); } catch(Exception e) { diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java index 9fcef67f40c..a0de0236109 100644 --- a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java +++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/SRecordImporter.java @@ -289,6 +289,8 @@ public class SRecordImporter implements IMemoryImporter { final int CHECKSUM_LENGTH = 1; + BigInteger scrollToAddress = null; + BigInteger offset = null; if(!fUseCustomAddress) offset = BigInteger.ZERO; @@ -364,6 +366,9 @@ public class SRecordImporter implements IMemoryImporter { return new Status( IStatus.ERROR, MemoryTransportPlugin.getUniqueIdentifier(), "Checksum failure of line = " + line); //$NON-NLS-1$ } + if(scrollToAddress == null) + scrollToAddress = recordAddress; + // FIXME error on incorrect checksum ((IMemoryBlockExtension) fMemoryBlock).setValue(recordAddress.subtract(((IMemoryBlockExtension) fMemoryBlock).getBigBaseAddress()), data); @@ -380,6 +385,9 @@ public class SRecordImporter implements IMemoryImporter { reader.close(); monitor.done(); + + if(fProperties.getProperty(TRANSFER_SCROLL_TO_START, "false").equals("true")) + fParentDialog.scrollRenderings(scrollToAddress); } catch(Exception e) { diff --git a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java index cc3bc9cd4a1..b2c3f34aa16 100644 --- a/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java +++ b/plugins/org.eclipse.dd.debug.ui.memory.transport/src/org/eclipse/dd/debug/ui/memory/transport/actions/ImportMemoryAction.java @@ -16,7 +16,9 @@ import org.eclipse.debug.core.model.IMemoryBlock; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.views.memory.MemoryView; import org.eclipse.debug.internal.ui.views.memory.MemoryViewIdRegistry; +import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.debug.ui.contexts.IDebugContextService; import org.eclipse.debug.ui.memory.IMemoryRendering; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; @@ -36,6 +38,10 @@ public class ImportMemoryAction implements IViewActionDelegate { public void init(IViewPart view) { if (view instanceof MemoryView) fView = (MemoryView) view; + +// IDebugContextService debugContextService = DebugUITools.getDebugContextManager().getContextService(view.getSite().getWorkbenchWindow()); +// this. +// debugContextService.getActiveContext(); } private IMemoryBlock getMemoryBlock(ISelection selection) @@ -71,7 +77,7 @@ public class ImportMemoryAction implements IViewActionDelegate { if(memBlock == null) return; - ImportMemoryDialog dialog = new ImportMemoryDialog(DebugUIPlugin.getShell(), memBlock); + ImportMemoryDialog dialog = new ImportMemoryDialog(DebugUIPlugin.getShell(), memBlock, fView); dialog.open(); dialog.getResult();