diff --git a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java index c91b417e3c5..6a398a823ee 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.memorybrowser/src/org/eclipse/cdt/debug/ui/memory/memorybrowser/MemoryBrowser.java @@ -13,12 +13,15 @@ package org.eclipse.cdt.debug.ui.memory.memorybrowser; import java.lang.reflect.Method; import java.math.BigInteger; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; 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.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; @@ -52,11 +55,14 @@ import org.eclipse.jface.resource.ColorRegistry; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; +import org.eclipse.jface.util.SafeRunnable; import org.eclipse.jface.viewers.IBasicPropertyConstants; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.jface.viewers.TreeSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabFolder2Adapter; @@ -74,11 +80,12 @@ import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; +import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; -import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.IWorkbenchPreferenceConstants; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; @@ -96,7 +103,7 @@ import org.eclipse.ui.progress.WorkbenchJob; * */ -public class MemoryBrowser extends ViewPart implements IDebugContextListener, ILaunchListener +public class MemoryBrowser extends ViewPart implements IDebugContextListener, ILaunchListener, IMemoryRenderingSite { public static final String ID = "org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"; //$NON-NLS-1$ @@ -140,20 +147,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL else if(types.length > 0) defaultRenderingTypeId = types[0].getId(); - getSite().setSelectionProvider(new ISelectionProvider() { - - public void addSelectionChangedListener( - ISelectionChangedListener listener) {} - - public ISelection getSelection() { - return null; - } - - public void removeSelectionChangedListener( - ISelectionChangedListener listener) {} - - public void setSelection(ISelection selection) {} - }); + getSite().setSelectionProvider(new SelectionProviderAdapter()); fMainComposite = new Composite(parent, SWT.NONE); @@ -218,6 +212,11 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL .addDebugContextListener(this); DebugPlugin.getDefault().getLaunchManager().addLaunchListener(this); + + Object selection = DebugUITools.getDebugContextManager() + .getContextService(getSite().getWorkbenchWindow()).getActiveContext(); + if(selection instanceof StructuredSelection) + handleDebugContextChanged(((StructuredSelection) selection).getFirstElement()); } public void dispose() { @@ -236,6 +235,57 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL releaseTabFolder(retrieval); } + public IMemoryRenderingContainer getContainer(String id) { + return null; + } + + public IMemoryRenderingContainer[] getMemoryRenderingContainers() { + return new IMemoryRenderingContainer[] { + new IMemoryRenderingContainer() + { + + public void addMemoryRendering(IMemoryRendering rendering) { + + } + + public IMemoryRendering getActiveRendering() { + if(fStackLayout.topControl instanceof CTabFolder) + { + CTabFolder activeFolder = (CTabFolder) fStackLayout.topControl; + if(activeFolder.getSelection() != null) + return (IMemoryRendering) activeFolder.getSelection().getData(KEY_RENDERING); + } + return null; + } + + public String getId() { + return null; + } + + public String getLabel() { + return null; + } + + public IMemoryRenderingSite getMemoryRenderingSite() { + return MemoryBrowser.this; + } + + public IMemoryRendering[] getRenderings() { + return null; + } + + public void removeMemoryRendering(IMemoryRendering rendering) { + + } + + } + }; + } + + public IMemoryRenderingSynchronizationService getSynchronizationService() { + return null; + } + private void handleUnsupportedSelection() { fStackLayout.topControl = fUnsupportedLabel; @@ -256,6 +306,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL populateTabWithRendering(item, retrieval, context); setTabFolder(retrieval, activeFolder); activeFolder.setSelection(item); + getSite().getSelectionProvider().setSelection(new StructuredSelection(item.getData(KEY_RENDERING))); } Control c = activeFolder.getSelection().getControl(); @@ -350,8 +401,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL private void contributeToActionBars() { IActionBars bars = getViewSite().getActionBars(); fillLocalPullDown(bars.getMenuManager()); - fillLocalToolBar(bars.getToolBarManager()); - bars.getToolBarManager().add(new Action() { }); + fillLocalToolBar(bars.getToolBarManager()); } private void fillLocalPullDown(IMenuManager manager) { @@ -426,49 +476,57 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL public void setFocus() { getControl().setFocus(); } - + public void debugContextChanged(DebugContextEvent event) { + handleDebugContextChanged(((StructuredSelection) event.getContext()).getFirstElement()); + } + + public void handleDebugContextChanged(Object context) { if(defaultRenderingTypeId == null) return; - - if(event.getContext() instanceof StructuredSelection) + + if(context instanceof IAdaptable) { - Object context = ((StructuredSelection) event.getContext()).getFirstElement(); - if(context instanceof IAdaptable) + IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) ((IAdaptable) context).getAdapter(IMemoryBlockRetrieval.class)); + if(retrieval != null) { - IMemoryBlockRetrieval retrieval = ((IMemoryBlockRetrieval) ((IAdaptable) context).getAdapter(IMemoryBlockRetrieval.class)); - if(retrieval != null) + fGotoAddressBarControl.setVisible(true); + if(getTabFolder(retrieval) != null) { - fGotoAddressBarControl.setVisible(true); - if(getTabFolder(retrieval) != null) - { - fStackLayout.topControl = getTabFolder(retrieval); - } - else - { - CTabFolder newFolder = this.createTabFolder(fRenderingsComposite); - newFolder.addCTabFolder2Listener(new CTabFolder2Adapter() { - public void close(CTabFolderEvent event) { - event.doit = true; - } - }); - - newFolder.setData(KEY_CONTEXT, context); - newFolder.setData(KEY_RETRIEVAL, retrieval); - - CTabItem item = createTab(newFolder, 0); - populateTabWithRendering(item, retrieval, context); - setTabFolder(retrieval, newFolder); - - fStackLayout.topControl = getTabFolder(retrieval); - } + fStackLayout.topControl = getTabFolder(retrieval); } else { - handleUnsupportedSelection(); + CTabFolder newFolder = this.createTabFolder(fRenderingsComposite); + newFolder.addCTabFolder2Listener(new CTabFolder2Adapter() { + public void close(CTabFolderEvent event) { + event.doit = true; + } + }); + newFolder.addSelectionListener(new SelectionListener() + { + public void widgetDefaultSelected(SelectionEvent e) {} + + public void widgetSelected(SelectionEvent e) { + getSite().getSelectionProvider().setSelection(new StructuredSelection(((CTabItem) e.item).getData(KEY_RENDERING))); + } + }); + + newFolder.setData(KEY_CONTEXT, context); + newFolder.setData(KEY_RETRIEVAL, retrieval); + + CTabItem item = createTab(newFolder, 0); + populateTabWithRendering(item, retrieval, context); + setTabFolder(retrieval, newFolder); + + fStackLayout.topControl = getTabFolder(retrieval); } - fStackLayout.topControl.getParent().layout(true); } + else + { + handleUnsupportedSelection(); + } + fStackLayout.topControl.getParent().layout(true); } } @@ -504,24 +562,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL } public IMemoryRenderingSite getMemoryRenderingSite() { - return new IMemoryRenderingSite() { - public IMemoryRenderingContainer getContainer(String id) { - return null; - } - - public IMemoryRenderingContainer[] getMemoryRenderingContainers() { - return null; - } - - public IWorkbenchPartSite getSite() { - return MemoryBrowser.this.getSite(); - } - - public IMemoryRenderingSynchronizationService getSynchronizationService() { - return null; - } - - }; + return MemoryBrowser.this; } public IMemoryRendering[] getRenderings() { @@ -546,6 +587,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL tab.setControl(rendering.getControl()); tab.getParent().setSelection(0); tab.setData(KEY_RENDERING, rendering); + getSite().getSelectionProvider().setSelection(new StructuredSelection(tab.getData(KEY_RENDERING))); updateLabel(tab, rendering); rendering.addPropertyChangeListener(new IPropertyChangeListener() @@ -591,6 +633,42 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IL } fContextFolders.remove(context); } + + class SelectionProviderAdapter implements ISelectionProvider { + + List listeners = new ArrayList(); + + ISelection theSelection = StructuredSelection.EMPTY; + + public void addSelectionChangedListener(ISelectionChangedListener listener) { + listeners.add(listener); + } + + public ISelection getSelection() { + return theSelection; + } + + public void removeSelectionChangedListener( + ISelectionChangedListener listener) { + listeners.remove(listener); + } + + public void setSelection(ISelection selection) { + theSelection = selection; + final SelectionChangedEvent e = new SelectionChangedEvent(this, selection); + Object[] listenersArray = listeners.toArray(); + + for (int i = 0; i < listenersArray.length; i++) { + final ISelectionChangedListener l = (ISelectionChangedListener) listenersArray[i]; + Platform.run(new SafeRunnable() { + public void run() { + l.selectionChanged(e); + } + }); + } + } + + } } diff --git a/memory/org.eclipse.cdt.debug.ui.memory.search/plugin.xml b/memory/org.eclipse.cdt.debug.ui.memory.search/plugin.xml index 084932a3e20..537129480c9 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.search/plugin.xml +++ b/memory/org.eclipse.cdt.debug.ui.memory.search/plugin.xml @@ -24,6 +24,30 @@ menubarPath="additions"> + + + + + + + + + + diff --git a/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindAction.java b/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindAction.java index 9aad2e62874..0b7c0de2f0a 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindAction.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindAction.java @@ -18,6 +18,7 @@ import org.eclipse.debug.core.model.IMemoryBlockExtension; import org.eclipse.debug.internal.ui.DebugUIPlugin; 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.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; @@ -27,13 +28,13 @@ import org.eclipse.ui.IViewPart; public class FindAction implements IViewActionDelegate { - private MemoryView fView; + private IMemoryRenderingSite fView; private static Properties fSearchDialogProperties = new Properties(); public void init(IViewPart view) { - if (view instanceof MemoryView) - fView = (MemoryView) view; + if (view instanceof IMemoryRenderingSite) + fView = (IMemoryRenderingSite) view; } public void run(IAction action) { diff --git a/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java b/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java index 57fdb03c6b2..d1fc6d6fb7f 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.search/src/org/eclipse/cdt/debug/ui/memory/search/FindReplaceDialog.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.debug.ui.memory.search; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigInteger; import java.util.Properties; @@ -26,11 +25,9 @@ import org.eclipse.core.runtime.jobs.Job; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IMemoryBlockExtension; import org.eclipse.debug.core.model.MemoryByte; -import org.eclipse.debug.internal.ui.DebugUIPlugin; -import org.eclipse.debug.internal.ui.views.memory.MemoryView; -import org.eclipse.debug.ui.IDebugUIConstants; import org.eclipse.debug.ui.memory.IMemoryRendering; import org.eclipse.debug.ui.memory.IMemoryRenderingContainer; +import org.eclipse.debug.ui.memory.IMemoryRenderingSite; import org.eclipse.debug.ui.memory.IRepositionableMemoryRendering; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ISelection; @@ -80,7 +77,7 @@ public class FindReplaceDialog extends SelectionDialog private Button fReplaceAllButton; private Button fCloseButton; - private MemoryView fMemoryView; + private IMemoryRenderingSite fMemoryView; private Button fFormatAsciiButton; private Button fFormatHexButton; @@ -114,7 +111,7 @@ public class FindReplaceDialog extends SelectionDialog protected final static String SEARCH_FORMAT_WRAP = "SEARCH_FORMAT_WRAP"; //$NON-NLS-1$ protected final static String SEARCH_ENABLE_FIND_NEXT = "SEARCH_ENABLE_FIND_NEXT"; //$NON-NLS-1$ - public FindReplaceDialog(Shell parent, IMemoryBlockExtension memoryBlock, MemoryView memoryView, Properties properties) + public FindReplaceDialog(Shell parent, IMemoryBlockExtension memoryBlock, IMemoryRenderingSite memoryView, Properties properties) { super(parent); super.setTitle(Messages.getString("FindReplaceDialog.Title")); //$NON-NLS-1$ @@ -456,7 +453,7 @@ public class FindReplaceDialog extends SelectionDialog private String getViewportStart() { - ISelection selection = fMemoryView.getViewPane(IDebugUIConstants.ID_RENDERING_VIEW_PANE_1).getSelectionProvider().getSelection(); + ISelection selection = fMemoryView.getMemoryRenderingContainers()[0].getMemoryRenderingSite().getSite().getSelectionProvider().getSelection(); if(selection instanceof StructuredSelection) { if(((StructuredSelection) selection).getFirstElement() instanceof IRepositionableMemoryRendering) @@ -1029,7 +1026,7 @@ public class FindReplaceDialog extends SelectionDialog return Status.OK_STATUS; } - public MemoryView getMemoryView() { + public IMemoryRenderingSite getMemoryView() { return fMemoryView; } }; @@ -1190,7 +1187,7 @@ public class FindReplaceDialog extends SelectionDialog interface IMemorySearchQuery extends ISearchQuery { - public MemoryView getMemoryView(); + public IMemoryRenderingSite getMemoryView(); }; } diff --git a/memory/org.eclipse.cdt.debug.ui.memory.traditional/plugin.xml b/memory/org.eclipse.cdt.debug.ui.memory.traditional/plugin.xml index 9db0d7c8060..4fce86fdeb6 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.traditional/plugin.xml +++ b/memory/org.eclipse.cdt.debug.ui.memory.traditional/plugin.xml @@ -16,14 +16,6 @@ - - - - - + class="org.eclipse.cdt.debug.ui.memory.transport.actions.ExportMemoryAction" + enablesFor="1" + helpContextId="ExportMemoryAction_context" + icon="icons/export.png" + id="org.eclipse.cdt.debug.ui.memory.transport.actions.ExportMemoryAction" + label="%ExportMemoryAction.label" + state="false" + style="push" + toolbarPath="additions" + tooltip="%ExportMemoryAction.label"/> + + + + + diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java index 98574c8a504..68cce024e96 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/ImportMemoryDialog.java @@ -25,10 +25,10 @@ import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.model.IMemoryBlock; -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.IMemoryRenderingSite; import org.eclipse.debug.ui.memory.IRepositionableMemoryRendering; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; @@ -61,16 +61,16 @@ public class ImportMemoryDialog extends SelectionDialog private Properties fProperties = new Properties(); - private MemoryView fMemoryView; + private IMemoryRenderingSite fMemoryView; - public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock, MemoryView view) + public ImportMemoryDialog(Shell parent, IMemoryBlock memoryBlock, IMemoryRenderingSite renderingSite) { super(parent); super.setTitle("Download to Memory"); setShellStyle(getShellStyle() | SWT.RESIZE); fMemoryBlock = memoryBlock; - fMemoryView = view; + fMemoryView = renderingSite; } protected void scrollRenderings(final BigInteger address) diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ExportMemoryAction.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ExportMemoryAction.java index e722e9a906a..460ded8bbe6 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ExportMemoryAction.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ExportMemoryAction.java @@ -14,8 +14,8 @@ package org.eclipse.cdt.debug.ui.memory.transport.actions; import org.eclipse.cdt.debug.ui.memory.transport.ExportMemoryDialog; 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.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; @@ -27,11 +27,11 @@ import org.eclipse.ui.IViewPart; */ public class ExportMemoryAction implements IViewActionDelegate { - private MemoryView fView; + private IMemoryRenderingSite fView; public void init(IViewPart view) { - if (view instanceof MemoryView) - fView = (MemoryView) view; + if (view instanceof IMemoryRenderingSite) + fView = (IMemoryRenderingSite) view; } private IMemoryBlock getMemoryBlock(ISelection selection) diff --git a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ImportMemoryAction.java b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ImportMemoryAction.java index 37f81921ae4..872fa075f60 100644 --- a/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ImportMemoryAction.java +++ b/memory/org.eclipse.cdt.debug.ui.memory.transport/src/org/eclipse/cdt/debug/ui/memory/transport/actions/ImportMemoryAction.java @@ -16,6 +16,7 @@ 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.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; @@ -28,15 +29,11 @@ import org.eclipse.ui.IViewPart; public class ImportMemoryAction implements IViewActionDelegate { - private MemoryView fView; + private IMemoryRenderingSite fView; public void init(IViewPart view) { - if (view instanceof MemoryView) - fView = (MemoryView) view; - -// IDebugContextService debugContextService = DebugUITools.getDebugContextManager().getContextService(view.getSite().getWorkbenchWindow()); -// this. -// debugContextService.getActiveContext(); + if (view instanceof IMemoryRenderingSite) + fView = (IMemoryRenderingSite) view; } private IMemoryBlock getMemoryBlock(ISelection selection)