mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-22 06:02:11 +02:00
Bug 339708 - [Memory Browser] Need a public method for getting selected memory space
This commit is contained in:
parent
04d4f11b53
commit
e453c2257d
3 changed files with 132 additions and 3 deletions
|
@ -14,4 +14,5 @@ Require-Bundle: org.eclipse.ui,
|
||||||
org.eclipse.cdt.debug.ui;bundle-version="7.0.0"
|
org.eclipse.cdt.debug.ui;bundle-version="7.0.0"
|
||||||
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
Bundle-RequiredExecutionEnvironment: J2SE-1.5
|
||||||
Bundle-ActivationPolicy: lazy
|
Bundle-ActivationPolicy: lazy
|
||||||
Export-Package: org.eclipse.cdt.debug.ui.memory.memorybrowser
|
Export-Package: org.eclipse.cdt.debug.ui.memory.memorybrowser,
|
||||||
|
org.eclipse.cdt.debug.ui.memory.memorybrowser.api
|
||||||
|
|
|
@ -24,6 +24,7 @@ import java.util.Map;
|
||||||
import org.eclipse.cdt.debug.core.model.provisional.IMemoryRenderingViewportProvider;
|
import org.eclipse.cdt.debug.core.model.provisional.IMemoryRenderingViewportProvider;
|
||||||
import org.eclipse.cdt.debug.core.model.provisional.IMemorySpaceAwareMemoryBlockRetrieval;
|
import org.eclipse.cdt.debug.core.model.provisional.IMemorySpaceAwareMemoryBlockRetrieval;
|
||||||
import org.eclipse.cdt.debug.internal.core.CRequest;
|
import org.eclipse.cdt.debug.internal.core.CRequest;
|
||||||
|
import org.eclipse.cdt.debug.ui.memory.memorybrowser.api.IMemoryBrowser;
|
||||||
import org.eclipse.cdt.debug.ui.provisional.IRepositionableMemoryRendering2;
|
import org.eclipse.cdt.debug.ui.provisional.IRepositionableMemoryRendering2;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
|
@ -125,8 +126,9 @@ import org.eclipse.ui.progress.WorkbenchJob;
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@SuppressWarnings("restriction")
|
@SuppressWarnings("restriction") /* Debug Platform's Flexibile hierarchy is still provisional */
|
||||||
public class MemoryBrowser extends ViewPart implements IDebugContextListener, IMemoryRenderingSite, IDebugEventSetListener
|
|
||||||
|
public class MemoryBrowser extends ViewPart implements IDebugContextListener, IMemoryRenderingSite, IDebugEventSetListener, IMemoryBrowser
|
||||||
{
|
{
|
||||||
public static final String ID = "org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"; //$NON-NLS-1$
|
public static final String ID = "org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
@ -476,6 +478,17 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.ui.memory.memorybrowser.api.IMemoryBrowser#getActiveRetrieval()
|
||||||
|
*/
|
||||||
|
public IMemoryBlockRetrieval getActiveRetrieval() {
|
||||||
|
final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
|
||||||
|
if (activeFolder == null)
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return (IMemoryBlockRetrieval) activeFolder.getData(KEY_RETRIEVAL);
|
||||||
|
}
|
||||||
|
|
||||||
public void performGo(boolean inNewTab, final String expression, final String memorySpaceId) {
|
public void performGo(boolean inNewTab, final String expression, final String memorySpaceId) {
|
||||||
final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
|
final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
|
||||||
if (activeFolder != null) {
|
if (activeFolder != null) {
|
||||||
|
@ -1293,4 +1306,56 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
|
||||||
job.schedule();
|
job.schedule();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.ui.memory.memorybrowser.api.IMemoryBrowser#go(java.lang.String, java.lang.String, boolean)
|
||||||
|
*/
|
||||||
|
public void go(String expression, String memorySpaceId, boolean inNewTab)
|
||||||
|
throws CoreException {
|
||||||
|
if (expression == null) {
|
||||||
|
throw new IllegalArgumentException("expression cannot be null");
|
||||||
|
}
|
||||||
|
expression = expression.trim();
|
||||||
|
if (expression.length() == 0) {
|
||||||
|
throw new IllegalArgumentException("expression cannot be empty");
|
||||||
|
}
|
||||||
|
if (!fGotoMemorySpaceControl.isDisposed() && fGotoMemorySpaceControl.isVisible()) {
|
||||||
|
if (memorySpaceId == null) {
|
||||||
|
// if caller passed null, use whatever memory space is selected in the control
|
||||||
|
memorySpaceId = fGotoMemorySpaceControl.getText();
|
||||||
|
if (memorySpaceId.equals(NA_MEMORY_SPACE_ID)) {
|
||||||
|
memorySpaceId = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// if caller passed empty string, it means n/a (same as "----" in the selector)
|
||||||
|
memorySpaceId = memorySpaceId.trim();
|
||||||
|
if (memorySpaceId.length() == 0) {
|
||||||
|
memorySpaceId = null;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Check that the ID requested by the user is a valid one
|
||||||
|
if (fGotoMemorySpaceControl.indexOf(memorySpaceId) == -1) {
|
||||||
|
throw new IllegalArgumentException("unrecognized memory space ID");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fGotoMemorySpaceControl.setText(memorySpaceId == null ? NA_MEMORY_SPACE_ID : memorySpaceId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fGotoAddressBar.setExpressionText(expression);
|
||||||
|
performGo(inNewTab, expression, memorySpaceId);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.cdt.debug.ui.memory.memorybrowser.api.IMemoryBrowser#getSelectedMemorySpace()
|
||||||
|
*/
|
||||||
|
public String getSelectedMemorySpace() {
|
||||||
|
if (!fGotoMemorySpaceControl.isDisposed() && fGotoMemorySpaceControl.isVisible()) {
|
||||||
|
String id = fGotoMemorySpaceControl.getText();
|
||||||
|
return id.equals(NA_MEMORY_SPACE_ID) ? null : id;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
package org.eclipse.cdt.debug.ui.memory.memorybrowser.api;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.debug.core.model.IMemoryBlockRetrieval;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Public API for accessing the memory browser.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* All methods must be called on the UI thread, unless otherwise noted.
|
||||||
|
*/
|
||||||
|
public interface IMemoryBrowser {
|
||||||
|
/**
|
||||||
|
* Tells the memory browser to go to a new memory location. Updates the goto
|
||||||
|
* address bar and memory space selector (if present).
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* This operation is a no-op if there is no active memory retrieval object.
|
||||||
|
*
|
||||||
|
* @param expression
|
||||||
|
* the expression to go to. Cannot be null or empty string.
|
||||||
|
* Expression is trimmed.
|
||||||
|
* @param memorySpaceId
|
||||||
|
* optional memory space ID. Argument is ignored if the memory
|
||||||
|
* browser is not currently showing a memory space selector. If
|
||||||
|
* selector is showing, this argument is interpreted as follows:
|
||||||
|
* empty string means no memory space (as if the user selected
|
||||||
|
* the "----" memory space), and null means use whatever memory
|
||||||
|
* space is selected. Passing an ID that is not present in the
|
||||||
|
* selector will result in an IllegalArgumentException
|
||||||
|
* @param inNewTab
|
||||||
|
* if true, memory is shown in a new tab
|
||||||
|
* @throws CoreException
|
||||||
|
*/
|
||||||
|
public void go(String expression, String memorySpaceId, boolean inNewTab) throws CoreException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the selected memory space.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* The memory browser exposes a memory space selector when debugging a
|
||||||
|
* target with multiple memory spaces. The selection provides the context
|
||||||
|
* for the expression when the user performs a GO action. This method will
|
||||||
|
* return the currently selected memory space.
|
||||||
|
*
|
||||||
|
* @return null if the memory space selector is not shown, or if the n/a
|
||||||
|
* entry is selected. Otherwise the selected memory space ID. Never
|
||||||
|
* an empty string.
|
||||||
|
*/
|
||||||
|
public String getSelectedMemorySpace();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the active memory retrieval object, or null if none is active.
|
||||||
|
*
|
||||||
|
* This is the retrieval object being used to obtain the memory shown in the
|
||||||
|
* active tab. Note that all simultaneously visible tabs use the same
|
||||||
|
* retrieval object. The retrieval object is obtained from the active debug
|
||||||
|
* context.
|
||||||
|
*
|
||||||
|
* @return the active memory retrieval object, or null if none is active
|
||||||
|
*/
|
||||||
|
public IMemoryBlockRetrieval getActiveRetrieval();
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue