1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-10 01:35:39 +02:00

Bug 320372 - Memory Browser should invoke becomesVisible/becomesHidden on renderings

Also re-adds public constant MemoryBrowser.ID which got removed in version 1.21
This commit is contained in:
Anton Leherbauer 2010-07-21 12:24:13 +00:00
parent 5a1885c1a6
commit faf5bdce21

View file

@ -1,5 +1,5 @@
/******************************************************************************* /*******************************************************************************
* Copyright (c) 2009-2010 Wind River Systems, Inc. and others. * Copyright (c) 2009, 2010 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials * All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0 * are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at * which accompanies this distribution, and is available at
@ -117,6 +117,8 @@ import org.eclipse.ui.progress.WorkbenchJob;
@SuppressWarnings("restriction") @SuppressWarnings("restriction")
public class MemoryBrowser extends ViewPart implements IDebugContextListener, IMemoryRenderingSite, IDebugEventSetListener public class MemoryBrowser extends ViewPart implements IDebugContextListener, IMemoryRenderingSite, IDebugEventSetListener
{ {
public static final String ID = "org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"; //$NON-NLS-1$
protected StackLayout fStackLayout; protected StackLayout fStackLayout;
private Composite fRenderingsComposite; private Composite fRenderingsComposite;
private GoToAddressBarWidget fGotoAddressBar; private GoToAddressBarWidget fGotoAddressBar;
@ -125,7 +127,8 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
private Label fUnsupportedLabel; private Label fUnsupportedLabel;
private Composite fMainComposite; private Composite fMainComposite;
private String defaultRenderingTypeId = null; private String defaultRenderingTypeId = null;
private IMemoryRendering fActiveRendering;
/** /**
* Every memory retrieval object is given its own tab folder. Typically all * Every memory retrieval object is given its own tab folder. Typically all
* elements of a "process" (process, threads, frames) have the same * elements of a "process" (process, threads, frames) have the same
@ -197,6 +200,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
return fMainComposite; return fMainComposite;
} }
@Override
public void createPartControl(Composite parent) { public void createPartControl(Composite parent) {
// set default rendering type. use the traditional rendering if available. fallback on first registered type. // set default rendering type. use the traditional rendering if available. fallback on first registered type.
// this should eventually be configurable via a preference page. // this should eventually be configurable via a preference page.
@ -326,6 +330,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
return site.getId() + (site.getSecondaryId() != null ? (":" + site.getSecondaryId()) : ""); //$NON-NLS-1$ //$NON-NLS-2$ return site.getId() + (site.getSecondaryId() != null ? (":" + site.getSecondaryId()) : ""); //$NON-NLS-1$ //$NON-NLS-2$
} }
@Override
public void dispose() { public void dispose() {
DebugPlugin.getDefault().removeDebugEventListener(this); DebugPlugin.getDefault().removeDebugEventListener(this);
IDebugContextService contextService = IDebugContextService contextService =
@ -407,6 +412,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
fContextFolders.put(retrieval, activeFolder); fContextFolders.put(retrieval, activeFolder);
activeFolder.setSelection(item); activeFolder.setSelection(item);
getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING))); getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING)));
handleTabActivated(item);
} catch (DebugException e1) { } catch (DebugException e1) {
fGotoAddressBar.handleExpressionStatus(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID, fGotoAddressBar.handleExpressionStatus(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID,
Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), e1)); //$NON-NLS-1$ Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), e1)); //$NON-NLS-1$
@ -426,6 +432,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
rendering = populateTabWithRendering(item, retrieval, context, memorySpaceId, expression); rendering = populateTabWithRendering(item, retrieval, context, memorySpaceId, expression);
activeFolder.setSelection(item); activeFolder.setSelection(item);
getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING))); getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING)));
handleTabActivated(item);
} catch (DebugException e) { } catch (DebugException e) {
fGotoAddressBar.handleExpressionStatus(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID, fGotoAddressBar.handleExpressionStatus(new Status(Status.ERROR, MemoryBrowserPlugin.PLUGIN_ID,
Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), e)); //$NON-NLS-1$ Messages.getString("MemoryBrowser.FailedToGoToAddressTitle"), e)); //$NON-NLS-1$
@ -442,6 +449,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
rendering instanceof IRepositionableMemoryRendering) { rendering instanceof IRepositionableMemoryRendering) {
final IRepositionableMemoryRendering renderingFinal = (IRepositionableMemoryRendering) rendering; final IRepositionableMemoryRendering renderingFinal = (IRepositionableMemoryRendering) rendering;
new Thread() { new Thread() {
@Override
public void run() { public void run() {
try { try {
BigInteger newBase = getExpressionAddress(retrieval, expression, context, memorySpaceId); BigInteger newBase = getExpressionAddress(retrieval, expression, context, memorySpaceId);
@ -542,6 +550,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
// listener to dispose rendering resources for each closed tab // listener to dispose rendering resources for each closed tab
folder.addCTabFolder2Listener(new CTabFolder2Adapter() { folder.addCTabFolder2Listener(new CTabFolder2Adapter() {
@Override
public void close(CTabFolderEvent event) { public void close(CTabFolderEvent event) {
event.doit = true; event.doit = true;
CTabItem item = (CTabItem) event.item; CTabItem item = (CTabItem) event.item;
@ -590,6 +599,9 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
// always deactivate rendering before disposing it. // always deactivate rendering before disposing it.
rendering.deactivated(); rendering.deactivated();
rendering.dispose(); rendering.dispose();
if (rendering == fActiveRendering) {
fActiveRendering = null;
}
} }
map.clear(); map.clear();
@ -640,7 +652,8 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
final Action action = new Action( final Action action = new Action(
type.getLabel(), IAction.AS_RADIO_BUTTON) type.getLabel(), IAction.AS_RADIO_BUTTON)
{ {
public void run() @Override
public void run()
{ {
setDefaultRenderingTypeId(type.getId()); setDefaultRenderingTypeId(type.getId());
} }
@ -699,6 +712,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
}); });
} }
@Override
public void setFocus() { public void setFocus() {
getControl().setFocus(); getControl().setFocus();
} }
@ -760,6 +774,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
public void propertyChange(final PropertyChangeEvent event) { public void propertyChange(final PropertyChangeEvent event) {
WorkbenchJob job = new WorkbenchJob("MemoryBrowser PropertyChanged") { //$NON-NLS-1$ WorkbenchJob job = new WorkbenchJob("MemoryBrowser PropertyChanged") { //$NON-NLS-1$
@Override
public IStatus runInUIThread(IProgressMonitor monitor) { public IStatus runInUIThread(IProgressMonitor monitor) {
if(tab.isDisposed()) if(tab.isDisposed())
return Status.OK_STATUS; return Status.OK_STATUS;
@ -803,6 +818,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
if (retrieval instanceof IMemorySpaceAwareMemoryBlockRetrieval) { if (retrieval instanceof IMemorySpaceAwareMemoryBlockRetrieval) {
final IMemoryBlockRetrieval _retrieval = retrieval; final IMemoryBlockRetrieval _retrieval = retrieval;
((IMemorySpaceAwareMemoryBlockRetrieval)retrieval).getMemorySpaces(context, new GetMemorySpacesRequest(){ ((IMemorySpaceAwareMemoryBlockRetrieval)retrieval).getMemorySpaces(context, new GetMemorySpacesRequest(){
@Override
public void done() { public void done() {
updateTab(_retrieval, context, isSuccess() ? getMemorySpaces() : new String[0]); updateTab(_retrieval, context, isSuccess() ? getMemorySpaces() : new String[0]);
} }
@ -848,6 +864,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
CTabFolder tabFolder = fContextFolders.get(retrieval); CTabFolder tabFolder = fContextFolders.get(retrieval);
if(tabFolder != null) { if(tabFolder != null) {
fStackLayout.topControl = tabFolder; fStackLayout.topControl = tabFolder;
handleTabActivated(tabFolder.getSelection());
} }
else { else {
tabFolder = createTabFolder(fRenderingsComposite); tabFolder = createTabFolder(fRenderingsComposite);
@ -858,6 +875,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
updateExpression(tabItem); updateExpression(tabItem);
updateMemorySpaceControlSelection(tabItem); updateMemorySpaceControlSelection(tabItem);
getSite().getSelectionProvider().setSelection(new StructuredSelection(tabItem.getData(KEY_RENDERING))); getSite().getSelectionProvider().setSelection(new StructuredSelection(tabItem.getData(KEY_RENDERING)));
handleTabActivated(tabItem);
} }
}); });
@ -907,18 +925,40 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
} }
/** /**
* Update the expression text in goto address widget to reflect the memory * Update the expression text in goto address widget to reflect the memory
* rendering expression * rendering expression
* *
* @param item * @param item
* the active tab; may be null if in a "fresh" memory browser instance * the active tab; may be null if in a "fresh" memory browser instance
*/ */
protected void updateExpression(CTabItem activeFolder) { protected void updateExpression(CTabItem activeFolder) {
String expression = (activeFolder != null) ? (String) activeFolder.getData(KEY_EXPRESSION) : null; String expression = (activeFolder != null) ? (String) activeFolder.getData(KEY_EXPRESSION) : null;
if (expression != null) { if (expression != null) {
fGotoAddressBar.setExpressionText(expression); fGotoAddressBar.setExpressionText(expression);
}
}
protected final void handleTabActivated(CTabItem item) {
if (item != null) {
updateActiveRendering((IMemoryRendering) item.getData(KEY_RENDERING));
} }
} }
private void updateActiveRendering(IMemoryRendering rendering) {
if (fActiveRendering == rendering) {
return;
}
if (fActiveRendering != null) {
fActiveRendering.deactivated();
fActiveRendering.becomesHidden();
}
if (rendering != null) {
rendering.activated();
rendering.becomesVisible();
}
fActiveRendering = rendering;
}
private void setMemorySpaceControlVisible(boolean visible) { private void setMemorySpaceControlVisible(boolean visible) {
FormData data = (FormData)fGotoAddressBarControl.getLayoutData(); FormData data = (FormData)fGotoAddressBarControl.getLayoutData();
@ -1155,6 +1195,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
} }
else { else {
UIJob job = new UIJob("Memory Browser UI Job"){ //$NON-NLS-1$ UIJob job = new UIJob("Memory Browser UI Job"){ //$NON-NLS-1$
@Override
public IStatus runInUIThread(IProgressMonitor monitor) { public IStatus runInUIThread(IProgressMonitor monitor) {
runnable.run(); runnable.run();
return Status.OK_STATUS; return Status.OK_STATUS;