1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

[268625] target Find/Replace & Import/Export actions to Memory Browser

This commit is contained in:
Ted Williams 2009-03-14 00:25:27 +00:00
parent fd7027d65f
commit 12b1558637
9 changed files with 229 additions and 113 deletions

View file

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

View file

@ -24,6 +24,30 @@
menubarPath="additions">
</action>
</viewContribution>
<viewContribution
id="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.findNext"
targetID="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser">
<action
class="org.eclipse.cdt.debug.ui.memory.search.FindAction"
enablesFor="1"
id="org.eclipse.cdt.debug.ui.memory.search.FindAction"
label="Find Next"
menubarPath="additions">
</action>
</viewContribution>
<viewContribution
id="org.eclipse.debug.ui.MemoryView.findReplace"
targetID="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser">
<action
class="org.eclipse.cdt.debug.ui.memory.search.FindAction"
enablesFor="1"
id="org.eclipse.cdt.debug.ui.memory.search.FindAction"
label="Find/Replace..."
menubarPath="additions">
</action>
</viewContribution>
</extension>
<extension point="org.eclipse.search.searchResultViewPages">

View file

@ -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) {

View file

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

View file

@ -16,14 +16,6 @@
</renderingBindings>
</extension>
<extension point="org.eclipse.debug.ui.memoryRenderings">
<renderingType
name="Traditional Go To Address"
id="org.eclipse.cdt.debug.ui.memory.traditional.TraditionalGoToAddressRendering"
class="org.eclipse.cdt.debug.ui.memory.traditional.TraditionalGoToAddressRenderingTypeDelegate">
</renderingType>
</extension>
<extension
point="org.eclipse.ui.preferencePages">
<page

View file

@ -47,16 +47,16 @@
targetID="org.eclipse.debug.ui.MemoryView"
id="org.eclipse.debug.ui.memoryView.toolbar">
<action
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"/>
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"/>
<action
class="org.eclipse.cdt.debug.ui.memory.transport.actions.ImportMemoryAction"
enablesFor="1"
@ -69,5 +69,32 @@
toolbarPath="additions"
tooltip="%ImportMemoryAction.label"/>
</viewContribution>
<viewContribution
targetID="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser"
id="org.eclipse.cdt.debug.ui.memory.memorybrowser.MemoryBrowser.toolbar">
<action
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"/>
<action
class="org.eclipse.cdt.debug.ui.memory.transport.actions.ImportMemoryAction"
enablesFor="1"
helpContextId="ImportMemoryAction_context"
icon="icons/import.png"
id="org.eclipse.cdt.debug.ui.memory.transport.actions.ImportMemoryAction2"
label="%ImportMemoryAction.label"
state="false"
style="push"
toolbarPath="additions"
tooltip="%ImportMemoryAction.label"/>
</viewContribution>
</extension>
</plugin>

View file

@ -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)

View file

@ -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)

View file

@ -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)