diff options
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui')
5 files changed, 154 insertions, 98 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java index afcfebc40..5bde43af2 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2006, 2009 IBM Corporation and others. + * Copyright (c) 2006, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,8 +19,14 @@ import org.eclipse.debug.internal.ui.DebugPluginImages; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages; import org.eclipse.debug.ui.actions.DebugCommandAction; +import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Tree; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; /** * Terminate and remove action. @@ -71,6 +77,20 @@ public class TerminateAndRemoveAction extends DebugCommandAction { } } } - + /* (non-Javadoc) + * @see org.eclipse.debug.ui.actions.DebugCommandAction#runWithEvent(org.eclipse.swt.widgets.Event) + */ + public void runWithEvent(Event event) { + // prompt if invoked via keyboard shortcut (don't prompt when menu is used) + if (event.widget instanceof Tree) { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window != null) { + if (!MessageDialog.openQuestion(window.getShell(), DebugUIViewsMessages.LaunchView_Terminate_and_Remove_1, DebugUIViewsMessages.LaunchView_Terminate_and_remove_selected__2)) { + return; + } + } + } + super.runWithEvent(event); + } } diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java index 599a12b8b..1771f15a4 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2009 IBM Corporation and others. + * Copyright (c) 2000, 2010 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -19,9 +19,6 @@ public class DebugUIViewsMessages extends NLS { public static String LaunchView_Exception_occurred_opening_editor_for_debugger__2; public static String LaunchView_Terminate_and_Remove_1; public static String LaunchView_Terminate_and_remove_selected__2; - public static String LaunchView_Exceptions_occurred_attempting_to_terminate_and_remove_3; - public static String LaunchView_Terminate_and_Remove_4; - public static String LaunchView_Terminate_and_remove_failed_5; public static String SourceNotFoundEditorInput_Source_Not_Found_1; public static String SourceNotFoundEditorInput_Source_not_found_for__0__2; diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties index 9eacb2459..eb51f0955 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/DebugUIViewsMessages.properties @@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000, 2009 IBM Corporation and others. +# Copyright (c) 2000, 2010 IBM Corporation and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at @@ -13,9 +13,6 @@ LaunchView_Error_1=Error LaunchView_Exception_occurred_opening_editor_for_debugger__2=Exception occurred opening editor for debugger. LaunchView_Terminate_and_Remove_1=Terminate and Remove LaunchView_Terminate_and_remove_selected__2=Terminate and remove selected? -LaunchView_Exceptions_occurred_attempting_to_terminate_and_remove_3=Exceptions occurred attempting to terminate and remove -LaunchView_Terminate_and_Remove_4=Terminate and Remove -LaunchView_Terminate_and_remove_failed_5=Terminate and remove failed SourceNotFoundEditorInput_Source_Not_Found_1=Source Not Found SourceNotFoundEditorInput_Source_not_found_for__0__2=Source not found for {0} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java index b17575779..adf60b1ee 100644 --- a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/LaunchView.java @@ -19,23 +19,19 @@ import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.ArrayList; -import java.util.Iterator; +import org.eclipse.core.commands.IHandler2; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; -import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; -import org.eclipse.debug.core.DebugException; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; -import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.core.commands.IRestartHandler; import org.eclipse.debug.core.model.IDebugTarget; import org.eclipse.debug.core.model.IProcess; import org.eclipse.debug.core.model.IStackFrame; -import org.eclipse.debug.core.model.ITerminate; import org.eclipse.debug.internal.ui.DebugUIPlugin; import org.eclipse.debug.internal.ui.DelegatingModelPresentation; import org.eclipse.debug.internal.ui.IDebugHelpContextIds; @@ -68,7 +64,6 @@ import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdate; import org.eclipse.debug.internal.ui.viewers.model.provisional.IViewerUpdateListener; import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer; import org.eclipse.debug.internal.ui.views.DebugModelPresentationContext; -import org.eclipse.debug.internal.ui.views.DebugUIViewsMessages; import org.eclipse.debug.ui.AbstractDebugView; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.debug.ui.IDebugModelPresentation; @@ -84,7 +79,7 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; -import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.commands.ActionHandler; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.ISelection; @@ -99,8 +94,6 @@ import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ControlEvent; import org.eclipse.swt.events.ControlListener; -import org.eclipse.swt.events.KeyAdapter; -import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.IActionBars; @@ -225,6 +218,12 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi */ private boolean fBreadcrumbDropDownAutoExpand = false; + /** + * Terminate and remove handler + * @since 3.6 + */ + IHandler2 fTARHandler = null; + /** * Page-book page for the breadcrumb viewer. This page is activated in * Debug view when the height of the view is reduced to just one line. @@ -506,7 +505,10 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi addCapabilityAction(new StepOverCommandAction(), STEP_OVER); addCapabilityAction(new StepIntoCommandAction(), STEP_INTO); addCapabilityAction(new DropToFrameCommandAction(), DROP_TO_FRAME); - addCapabilityAction(new TerminateAndRemoveAction(), TERMINATE_AND_REMOVE); + TerminateAndRemoveAction tar = new TerminateAndRemoveAction(); + addCapabilityAction(tar, TERMINATE_AND_REMOVE); + // also create a handler for this action + fTARHandler = new ActionHandler(tar); addCapabilityAction(new TerminateAndRelaunchAction(), TERMINATE_AND_RELAUNCH); addCapabilityAction(new RestartCommandAction(), RESTART); addCapabilityAction(new TerminateAllAction(), TERMINATE_ALL); @@ -780,13 +782,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi fPresentationContext); viewer.addSelectionChangedListener(fTreeViewerSelectionChangedListener); - viewer.getControl().addKeyListener(new KeyAdapter() { - public void keyPressed(KeyEvent event) { - if (event.character == SWT.DEL && event.stateMask == 0) { - handleDeleteKeyPressed(); - } - } - }); viewer.addViewerUpdateListener(this); viewer.setInput(DebugPlugin.getDefault().getLaunchManager()); @@ -795,77 +790,6 @@ public class LaunchView extends AbstractDebugView implements ISelectionChangedLi return viewer; } - - private void handleDeleteKeyPressed() { - IStructuredSelection selection= (IStructuredSelection) getViewer().getSelection(); - Iterator iter= selection.iterator(); - Object item; - boolean itemsToTerminate= false; - ITerminate terminable; - while (iter.hasNext()) { - item= iter.next(); - if (item instanceof ITerminate) { - terminable= (ITerminate) item; - if (terminable.canTerminate() && !terminable.isTerminated()) { - itemsToTerminate= true; - break; - } - } - } - if (itemsToTerminate) { - // Prompt the user to proceed with termination - if (!MessageDialog.openQuestion(getSite().getShell(), DebugUIViewsMessages.LaunchView_Terminate_and_Remove_1, DebugUIViewsMessages.LaunchView_Terminate_and_remove_selected__2)) { - return; - } - } - MultiStatus status= new MultiStatus(DebugUIPlugin.getUniqueIdentifier(), DebugException.REQUEST_FAILED, DebugUIViewsMessages.LaunchView_Exceptions_occurred_attempting_to_terminate_and_remove_3, null); - iter= selection.iterator(); - while (iter.hasNext()) { - try { - terminateAndRemove(iter.next()); - } catch (DebugException exception) { - status.merge(exception.getStatus()); - } - } - if (!status.isOK()) { - IWorkbenchWindow window= DebugUIPlugin.getActiveWorkbenchWindow(); - if (window != null) { - DebugUIPlugin.errorDialog(window.getShell(), DebugUIViewsMessages.LaunchView_Terminate_and_Remove_4, DebugUIViewsMessages.LaunchView_Terminate_and_remove_failed_5, status); - } else { - DebugUIPlugin.log(status); - } - } - } - - /** - * Terminates and removes the given element from the launch manager - */ - public static void terminateAndRemove(Object element) throws DebugException { - ILaunch launch = DebugUIPlugin.getLaunch(element); - ITerminate terminable = launch; - if (terminable == null) { - if (element instanceof ITerminate) { - terminable = (ITerminate) element; - } - } - if (terminable == null) { - return; - } - if (!(terminable.canTerminate() || terminable.isTerminated())) { - // Don't try to terminate or remove attached launches - return; - } - try { - if (!terminable.isTerminated()) { - terminable.terminate(); - } - } finally { - if (launch != null) { - ILaunchManager lManager= DebugPlugin.getDefault().getLaunchManager(); - lManager.removeLaunch(launch); - } - } - } private void commonInit(IViewSite site) { site.getPage().addPartListener((IPartListener2) this); diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java new file mode 100644 index 000000000..1fa0df48b --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/views/launch/TerminateAndRemoveHandler.java @@ -0,0 +1,118 @@ +/******************************************************************************* + * Copyright (c) 2010 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.views.launch; + +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.IHandler2; +import org.eclipse.core.commands.IHandlerListener; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.ui.IViewPart; +import org.eclipse.ui.IViewReference; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +/** + * Handler for terminate and remove. See bug 290219. + * + * @since 3.6 + */ +public class TerminateAndRemoveHandler implements IHandler2 { + + /** + * Returns the handler from the debug view, or <code>null</code> if none. + * + * @return handler or <code>null</code> + */ + protected IHandler2 getDelegate() { + IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); + if (window != null) { + IViewReference reference = window.getActivePage().findViewReference(IDebugUIConstants.ID_DEBUG_VIEW); + if (reference != null) { + IViewPart view = reference.getView(false); + if (view instanceof LaunchView) { + return ((LaunchView)view).fTARHandler; + } + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) + */ + public Object execute(ExecutionEvent event) throws ExecutionException { + IHandler2 delegate = getDelegate(); + if (delegate != null) { + return delegate.execute(event); + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#addHandlerListener(org.eclipse.core.commands.IHandlerListener) + */ + public void addHandlerListener(IHandlerListener handlerListener) { + IHandler2 delegate = getDelegate(); + if (delegate != null) { + delegate.addHandlerListener(handlerListener); + } + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#dispose() + */ + public void dispose() { + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#isEnabled() + */ + public boolean isEnabled() { + IHandler2 delegate = getDelegate(); + if (delegate != null) { + return delegate.isEnabled(); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#isHandled() + */ + public boolean isHandled() { + IHandler2 delegate = getDelegate(); + if (delegate != null) { + return delegate.isHandled(); + } + return false; + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler#removeHandlerListener(org.eclipse.core.commands.IHandlerListener) + */ + public void removeHandlerListener(IHandlerListener handlerListener) { + IHandler2 delegate = getDelegate(); + if (delegate != null) { + delegate.removeHandlerListener(handlerListener); + } + } + + /* (non-Javadoc) + * @see org.eclipse.core.commands.IHandler2#setEnabled(java.lang.Object) + */ + public void setEnabled(Object evaluationContext) { + IHandler2 delegate = getDelegate(); + if (delegate != null) { + delegate.setEnabled(evaluationContext); + } + } + +} |