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

Bug 356352 : Added DnD capability to the expression text-box in the

Memory Browser
This commit is contained in:
Randy Rohrbach 2011-08-31 17:53:05 -04:00
parent decd827478
commit 48d7a3bcc4

View file

@ -36,7 +36,6 @@ import org.eclipse.debug.core.DebugException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.model.IDebugElement;
import org.eclipse.debug.core.model.IDebugTarget;
import org.eclipse.debug.core.model.IMemoryBlock;
import org.eclipse.debug.core.model.IMemoryBlockExtension;
@ -81,6 +80,15 @@ import org.eclipse.swt.custom.CTabFolder2Adapter;
import org.eclipse.swt.custom.CTabFolderEvent;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.dnd.DND;
import org.eclipse.swt.dnd.DragSource;
import org.eclipse.swt.dnd.DropTarget;
import org.eclipse.swt.dnd.DropTargetAdapter;
import org.eclipse.swt.dnd.DropTargetEvent;
import org.eclipse.swt.dnd.FileTransfer;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionAdapter;
@ -125,6 +133,7 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
protected StackLayout fStackLayout;
private Composite fRenderingsComposite;
private GoToAddressBarWidget fGotoAddressBar;
private DropTarget fDropTarget;
private Control fGotoAddressBarControl;
private Combo fGotoMemorySpaceControl;
private Label fUnsupportedLabel;
@ -203,6 +212,31 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
return fMainComposite;
}
/*
* Handles DnD from other views.
*/
private class MemoryDropAdapter extends DropTargetAdapter {
/*
* @see org.eclipse.swt.dnd.DropTargetListener#drop(org.eclipse.swt.dnd.DropTargetEvent)
*/
public void drop(final DropTargetEvent event) {
if (TextTransfer.getInstance().isSupportedType( event.currentDataType )) {
if ( event.data instanceof String ) {
fGotoAddressBar.setExpressionText( (String) event.data );
performGo(false);
}
}
}
/*
* @see org.eclipse.swt.dnd.DropTargetListener#dragEnter(org.eclipse.swt.dnd.DropTargetEvent)
*/
public void dragEnter(DropTargetEvent event) {
event.detail = DND.DROP_COPY;
event.feedback = DND.FEEDBACK_NONE;
}
}
@Override
public void createPartControl(Composite parent) {
// set default rendering type. use the traditional rendering if available. fallback on first registered type.
@ -241,6 +275,12 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
fGotoAddressBar = new GoToAddressBarWidget();
fGotoAddressBarControl = fGotoAddressBar.createControl(fMainComposite);
if (fDropTarget == null) {
fDropTarget = new DropTarget(fGotoAddressBarControl, DND.DROP_COPY | DND.DROP_DEFAULT);
fDropTarget.setTransfer( new Transfer[] { TextTransfer.getInstance() });
fDropTarget.addDropListener(new MemoryDropAdapter());
}
fGotoAddressBar.getButton(IDialogConstants.OK_ID).addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
performGo(false);
@ -358,6 +398,10 @@ public class MemoryBrowser extends ViewPart implements IDebugContextListener, IM
@Override
public void dispose() {
if (fDropTarget != null) {
fDropTarget.dispose();
fDropTarget = null;
}
DebugPlugin.getDefault().removeDebugEventListener(this);
IDebugContextService contextService =
DebugUITools.getDebugContextManager().getContextService(getSite().getWorkbenchWindow());