Bug 339708 - [Memory Browser] Need a public method for getting selected memory space

This commit is contained in:
U-bobgato\cortell 2011-10-14 20:58:16 -05:00 committed by John Cortell
parent 04d4f11b53
commit e453c2257d
3 changed files with 132 additions and 3 deletions

View file

@ -14,4 +14,5 @@ Require-Bundle: org.eclipse.ui,
org.eclipse.cdt.debug.ui;bundle-version="7.0.0"
Bundle-RequiredExecutionEnvironment: J2SE-1.5
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

View file

@ -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.IMemorySpaceAwareMemoryBlockRetrieval;
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.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
@ -125,8 +126,9 @@ import org.eclipse.ui.progress.WorkbenchJob;
*
*/
@SuppressWarnings("restriction")
public class MemoryBrowser extends ViewPart implements IDebugContextListener, IMemoryRenderingSite, IDebugEventSetListener
@SuppressWarnings("restriction") /* Debug Platform's Flexibile hierarchy is still provisional */
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$
@ -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) {
final CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl;
if (activeFolder != null) {
@ -1293,4 +1306,56 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
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;
}
}

View file

@ -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();
}