diff options
author | cvs2svn | 2006-10-16 18:47:29 +0000 |
---|---|---|
committer | cvs2svn | 2006-10-16 18:47:29 +0000 |
commit | 7ca596fe4811c5eaff3ad7bbabdb3395da730c8f (patch) | |
tree | 38dbf1844a840176f0bbe8dc6f6864dc8c1c469f | |
parent | 2991b85318abdb9760ad6da7392c0b8c18f22d5c (diff) | |
download | eclipse.platform.debug-7ca596fe4811c5eaff3ad7bbabdb3395da730c8f.tar.gz eclipse.platform.debug-7ca596fe4811c5eaff3ad7bbabdb3395da730c8f.tar.xz eclipse.platform.debug-7ca596fe4811c5eaff3ad7bbabdb3395da730c8f.zip |
This commit was manufactured by cvs2svn to create branch
'viewer_rework_3_3'.
Cherrypick from master 2006-10-16 18:47:27 UTC Darin Wright <darin> 'Bug 160932 API for debug context and debug commands':
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DebugCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DisconnectCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DropToFrameCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/ResumeCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepFiltersCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepIntoCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepOverCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepReturnCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/SuspendCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/TerminateCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/AbstractRequestMonitor.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionAdapterFactory.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionRequestMonitor.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/BooleanRequestMonitor.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/CommandMonitor.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandService.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DisconnectCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DropToFrameCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ProxyBooleanRequestMonitor.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAllAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersAction.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersCommandActionDelegate.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IBooleanRequestMonitor.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDebugCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDisconnectCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDropToFrameCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IResumeCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepFiltersCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepIntoCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepOverCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepReturnCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ISuspendCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ITerminateCommand.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/AbstractDebugContextProvider.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/DebugContextEvent.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextEventListener.java
org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextService.java
54 files changed, 3252 insertions, 0 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DebugCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DebugCommand.java new file mode 100644 index 000000000..d838317d7 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DebugCommand.java @@ -0,0 +1,147 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +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.core.runtime.jobs.ISchedulingRule; +import org.eclipse.core.runtime.jobs.Job; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.debug.internal.ui.commands.provisional.IBooleanRequestMonitor; +import org.eclipse.debug.internal.ui.commands.provisional.IDebugCommand; +import org.eclipse.debug.internal.ui.viewers.AsynchronousSchedulingRuleFactory; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; +import org.eclipse.debug.ui.IDebugUIConstants; + +/** + * Common function for standard debug commands. + * + * @since 3.3 + * + */ +public abstract class DebugCommand implements IDebugCommand { + + // debug flag + public static boolean DEBUG_COMMANDS = false; + + static { + DEBUG_COMMANDS = DebugUIPlugin.DEBUG && "true".equals( //$NON-NLS-1$ + Platform.getDebugOption("org.eclipse.debug.ui/debug/commands")); //$NON-NLS-1$ + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.commands.provisional.IDebugCommand#performCapability(java.lang.Object, org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor) + */ + public void execute(final Object element, final IAsynchronousRequestMonitor requestMonitor) { + Job job = new Job("execute command") { //$NON-NLS-1$ + protected IStatus run(IProgressMonitor monitor) { + if (DEBUG_COMMANDS) { + System.out.println("execute: " + DebugCommand.this); //$NON-NLS-1$ + } + Object target = getTarget(element); + if (target != null) { + try { + doExecute(target, requestMonitor); + } catch (CoreException e) { + requestMonitor.setStatus(e.getStatus()); + if (DEBUG_COMMANDS) { + System.out.println("\t" + e.getStatus().getMessage()); //$NON-NLS-1$ + } + } + } else { + requestMonitor.setStatus(new Status(IStatus.ERROR, IDebugUIConstants.PLUGIN_ID, IDebugUIConstants.INTERNAL_ERROR, "element did not adapt to capability", //$NON-NLS-1$ + null)); + } + requestMonitor.done(); + return Status.OK_STATUS; + } + }; + job.setSystem(true); + job.schedule(); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.commands.provisional.IDebugCommand#checkCapability(java.lang.Object, org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor) + */ + public void canExecute(final Object element, final IBooleanRequestMonitor requestMonitor) { + Job job = new Job("check command") { //$NON-NLS-1$ + protected IStatus run(IProgressMonitor monitor) { + if (DEBUG_COMMANDS) { + System.out.print("can execute command: " + DebugCommand.this); //$NON-NLS-1$ + } + Object target = getTarget(element); + if (target != null) { + try { + boolean executable = isExecutable(target, requestMonitor); + if (DEBUG_COMMANDS) { + System.out.println(" >> " + executable); //$NON-NLS-1$ + } + requestMonitor.setResult(executable); + } catch (CoreException e) { + requestMonitor.setStatus(e.getStatus()); + if (DEBUG_COMMANDS) { + System.out.println(" >> ABORTED"); //$NON-NLS-1$ + System.out.println("\t" + e.getStatus().getMessage()); //$NON-NLS-1$ + } + } + } else { + requestMonitor.setResult(false); + if (DEBUG_COMMANDS) { + System.out.println(" >> false (no adapter)"); //$NON-NLS-1$ + } + } + requestMonitor.done(); + return Status.OK_STATUS; + } + }; + job.setSystem(true); + job.setRule(createUpdateSchedulingRule(element)); + job.schedule(); + + } + + /** + * Executes the actual operation. + * + * @param target object to perform on + * @param monitor progress monitor + */ + protected abstract void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException; + + /** + * Returns whether this command is executable. + * + * @param target object to check command for + * @param monitor progress monitor + * @return whether this command can be executed + */ + protected abstract boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException; + + /** + * Returns the appropriate command adapter from the given object. + * + * @param element object to obtain adapter from + * @return adapter + */ + protected abstract Object getTarget(Object element); + + /** + * Scheduling rule for checking capability. + * + * @return scheduling rule or <code>null</code> + */ + protected ISchedulingRule createUpdateSchedulingRule(Object element) { + return AsynchronousSchedulingRuleFactory.getDefault().newSerialPerObjectRule(element); + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DisconnectCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DisconnectCommand.java new file mode 100644 index 000000000..cf01524ff --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DisconnectCommand.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.model.IDisconnect; +import org.eclipse.debug.internal.ui.commands.provisional.IDisconnectCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default disconnect command for the standard debug model. + * + * @since 3.3 + */ +public class DisconnectCommand extends DebugCommand implements IDisconnectCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((IDisconnect)target).canDisconnect(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((IDisconnect)target).disconnect(); + } + + protected Object getTarget(Object element) { + if (element instanceof IDisconnect) { + return element; + } else if (element instanceof IAdaptable) { + return ((IAdaptable) element).getAdapter(IDisconnect.class); + } + return null; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DropToFrameCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DropToFrameCommand.java new file mode 100644 index 000000000..8821a5c74 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/DropToFrameCommand.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.model.IDropToFrame; +import org.eclipse.debug.internal.ui.commands.provisional.IDropToFrameCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default drop to frame command for the standard debug model. + * + * @since 3.3 + */ +public class DropToFrameCommand extends DebugCommand implements IDropToFrameCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((IDropToFrame)target).canDropToFrame(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((IDropToFrame)target).dropToFrame(); + } + + protected Object getTarget(Object element) { + if (element instanceof IDropToFrame) { + return element; + } else if (element instanceof IAdaptable) { + return ((IAdaptable) element).getAdapter(IDropToFrame.class); + } + return null; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/ResumeCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/ResumeCommand.java new file mode 100644 index 000000000..e75739737 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/ResumeCommand.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.model.ISuspendResume; +import org.eclipse.debug.internal.ui.commands.provisional.IResumeCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default resume command for the standard debug model. + * + * @since 3.3 + */ +public class ResumeCommand extends SuspendCommand implements IResumeCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((ISuspendResume)target).canResume(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((ISuspendResume)target).resume(); + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepCommand.java new file mode 100644 index 000000000..6775b53f3 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepCommand.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.model.IStep; + +/** + * Common function for step commands. + * + * @since 3.3 + */ +public abstract class StepCommand extends DebugCommand { + + protected Object getTarget(Object element) { + if (element instanceof IStep) { + return element; + } else if (element instanceof IAdaptable) { + return ((IAdaptable) element).getAdapter(IStep.class); + } + return null; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepFiltersCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepFiltersCommand.java new file mode 100644 index 000000000..6394850ff --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepFiltersCommand.java @@ -0,0 +1,81 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +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.IProcess; +import org.eclipse.debug.core.model.IStepFilters; +import org.eclipse.debug.internal.ui.commands.provisional.IStepFiltersCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; +import org.eclipse.debug.ui.DebugUITools; + +/** + * Default toggle step filters command for the standard debug model. + * + * @since 3.3 + */ +public class StepFiltersCommand extends DebugCommand implements IStepFiltersCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + IStepFilters[] filters = (IStepFilters[]) target; + for (int i = 0; i < filters.length; i++) { + IStepFilters filter = filters[i]; + if (filter == null || !filter.supportsStepFilters()) { + return false; + } + } + return true; + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + IStepFilters[] filters = (IStepFilters[]) target; + for (int i = 0; i < filters.length; i++) { + IStepFilters filter = filters[i]; + filter.setStepFiltersEnabled(DebugUITools.isUseStepFilters()); + } + } + + protected Object getTarget(Object element) { + IDebugTarget[] targets = getDebugTargets(element); + if (targets.length > 0) { + IStepFilters[] filters = new IStepFilters[targets.length]; + for (int i = 0; i < targets.length; i++) { + IDebugTarget target = targets[i]; + if (target instanceof IStepFilters) { + filters[i] = (IStepFilters) target; + } else { + filters[i] = (IStepFilters) ((IAdaptable)element).getAdapter(IStepFilters.class); + } + } + return filters; + } + return new IStepFilters[0]; + } + + private IDebugTarget[] getDebugTargets(Object element) { + if (element instanceof IDebugElement) { + IDebugElement debugElement = (IDebugElement) element; + return new IDebugTarget[] { debugElement.getDebugTarget() }; + } else if (element instanceof ILaunch) { + ILaunch launch = (ILaunch) element; + return launch.getDebugTargets(); + } else if (element instanceof IProcess) { + IProcess process = (IProcess) element; + return process.getLaunch().getDebugTargets(); + } else { + return new IDebugTarget[0]; + } + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepIntoCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepIntoCommand.java new file mode 100644 index 000000000..b419af29a --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepIntoCommand.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.model.IStep; +import org.eclipse.debug.internal.ui.commands.provisional.IStepIntoCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default step into command for the standard debug model. + * + * @since 3.3 + */ +public class StepIntoCommand extends StepCommand implements IStepIntoCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((IStep)target).canStepInto(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((IStep)target).stepInto(); + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepOverCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepOverCommand.java new file mode 100644 index 000000000..335759a14 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepOverCommand.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.model.IStep; +import org.eclipse.debug.internal.ui.commands.provisional.IStepOverCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default step over command for the standard debug model. + * + * @since 3.3 + */ +public class StepOverCommand extends StepCommand implements IStepOverCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((IStep)target).canStepOver(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((IStep)target).stepOver(); + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepReturnCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepReturnCommand.java new file mode 100644 index 000000000..2b5f4057d --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/StepReturnCommand.java @@ -0,0 +1,33 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.debug.core.model.IStep; +import org.eclipse.debug.internal.ui.commands.provisional.IStepReturnCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default step return command for the standard debug model. + * + * @since 3.3 + */ +public class StepReturnCommand extends StepCommand implements IStepReturnCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((IStep)target).canStepReturn(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((IStep)target).stepReturn(); + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/SuspendCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/SuspendCommand.java new file mode 100644 index 000000000..6013edfbc --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/SuspendCommand.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.model.ISuspendResume; +import org.eclipse.debug.internal.ui.commands.provisional.ISuspendCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default suspend command for the standard debug model. + * + * @since 3.3 + */ +public class SuspendCommand extends DebugCommand implements ISuspendCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((ISuspendResume)target).canSuspend(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((ISuspendResume)target).suspend(); + } + + protected Object getTarget(Object element) { + if (element instanceof ISuspendResume) { + return element; + } else if (element instanceof IAdaptable) { + return ((IAdaptable) element).getAdapter(ISuspendResume.class); + } + return null; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/TerminateCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/TerminateCommand.java new file mode 100644 index 000000000..6ca8f73f1 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/TerminateCommand.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.core.model.ITerminate; +import org.eclipse.debug.internal.ui.commands.provisional.ITerminateCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Default terminate command for the standard debug model. + * + * @since 3.3 + */ +public class TerminateCommand extends DebugCommand implements ITerminateCommand { + + protected boolean isExecutable(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + return ((ITerminate)target).canTerminate(); + } + + protected void doExecute(Object target, IAsynchronousRequestMonitor monitor) throws CoreException { + ((ITerminate)target).terminate(); + } + + protected Object getTarget(Object element) { + if (element instanceof ITerminate) { + return element; + } else if (element instanceof IAdaptable) { + return ((IAdaptable) element).getAdapter(ITerminate.class); + } + return null; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/AbstractRequestMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/AbstractRequestMonitor.java new file mode 100644 index 000000000..bf06bda8a --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/AbstractRequestMonitor.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Common function for request monitors + * + * @since 3.3 + * + */ +public abstract class AbstractRequestMonitor implements IAsynchronousRequestMonitor { + + private IStatus fStatus; + private boolean fCancelled = false; + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor#setStatus(org.eclipse.core.runtime.IStatus) + */ + public void setStatus(IStatus status) { + fStatus = status; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#beginTask(java.lang.String, int) + */ + public void beginTask(String name, int totalWork) { + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#internalWorked(double) + */ + public void internalWorked(double work) { + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#isCanceled() + */ + public boolean isCanceled() { + return fCancelled; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#setCanceled(boolean) + */ + public void setCanceled(boolean value) { + fCancelled = value; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#setTaskName(java.lang.String) + */ + public void setTaskName(String name) { + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#subTask(java.lang.String) + */ + public void subTask(String name) { + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#worked(int) + */ + public void worked(int work) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor#getStatus() + */ + public IStatus getStatus() { + return fStatus; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionAdapterFactory.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionAdapterFactory.java new file mode 100644 index 000000000..ca6378ca8 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionAdapterFactory.java @@ -0,0 +1,131 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.core.runtime.IAdapterFactory; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.model.IDebugElement; +import org.eclipse.debug.core.model.IDisconnect; +import org.eclipse.debug.core.model.IDropToFrame; +import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.core.model.IStep; +import org.eclipse.debug.core.model.ISuspendResume; +import org.eclipse.debug.core.model.ITerminate; +import org.eclipse.debug.internal.ui.commands.DisconnectCommand; +import org.eclipse.debug.internal.ui.commands.DropToFrameCommand; +import org.eclipse.debug.internal.ui.commands.ResumeCommand; +import org.eclipse.debug.internal.ui.commands.StepFiltersCommand; +import org.eclipse.debug.internal.ui.commands.StepIntoCommand; +import org.eclipse.debug.internal.ui.commands.StepOverCommand; +import org.eclipse.debug.internal.ui.commands.StepReturnCommand; +import org.eclipse.debug.internal.ui.commands.SuspendCommand; +import org.eclipse.debug.internal.ui.commands.TerminateCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IDisconnectCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IDropToFrameCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IResumeCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IStepFiltersCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IStepIntoCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IStepOverCommand; +import org.eclipse.debug.internal.ui.commands.provisional.IStepReturnCommand; +import org.eclipse.debug.internal.ui.commands.provisional.ISuspendCommand; +import org.eclipse.debug.internal.ui.commands.provisional.ITerminateCommand; + +/** + * Adapter factory for debug capabilities. + * + * @since 3.3 + * + */ +public class ActionAdapterFactory implements IAdapterFactory { + + + private static ITerminateCommand fgTerminateCommand = new TerminateCommand(); + private static IStepOverCommand fgStepOverCommand = new StepOverCommand(); + private static IStepIntoCommand fgStepIntoCommand = new StepIntoCommand(); + private static IStepReturnCommand fgStepReturnCommand = new StepReturnCommand(); + private static IDropToFrameCommand fgDropToFrameCommand = new DropToFrameCommand(); + private static IDisconnectCommand fgDisconnectCommand = new DisconnectCommand(); + private static ISuspendCommand fgSuspendCommand = new SuspendCommand(); + private static IResumeCommand fgResumeCommand = new ResumeCommand(); + private static IStepFiltersCommand fgStepFiltersCommand = new StepFiltersCommand(); + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) + */ + public Object getAdapter(Object adaptableObject, Class adapterType) { + if (IStepFiltersCommand.class.equals(adapterType)) { + if (adaptableObject instanceof IDebugElement || + adaptableObject instanceof ILaunch || + adaptableObject instanceof IProcess) { + return fgStepFiltersCommand; + } + } + + if (ITerminateCommand.class.equals(adapterType)) { + if (adaptableObject instanceof ITerminate) { + return fgTerminateCommand; + } + } + if (IStepOverCommand.class.equals(adapterType)) { + if (adaptableObject instanceof IStep) { + return fgStepOverCommand; + } + } + if (IStepIntoCommand.class.equals(adapterType)) { + if (adaptableObject instanceof IStep) { + return fgStepIntoCommand; + } + } + if (IStepReturnCommand.class.equals(adapterType)) { + if (adaptableObject instanceof IStep) { + return fgStepReturnCommand; + } + } + if (ISuspendCommand.class.equals(adapterType)) { + if (adaptableObject instanceof ISuspendResume) { + return fgSuspendCommand; + } + } + if (IResumeCommand.class.equals(adapterType)) { + if (adaptableObject instanceof ISuspendResume) { + return fgResumeCommand; + } + } + if (IDisconnectCommand.class.equals(adapterType)) { + if (adaptableObject instanceof IDisconnect) { + return fgDisconnectCommand; + } + } + if (IDropToFrameCommand.class.equals(adapterType)) { + if (adaptableObject instanceof IDropToFrame) { + return fgDropToFrameCommand; + } + } + return null; + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() + */ + public Class[] getAdapterList() { + return new Class[]{ + ITerminateCommand.class, + IStepOverCommand.class, + IStepIntoCommand.class, + IStepReturnCommand.class, + ISuspendCommand.class, + IResumeCommand.class, + IDropToFrameCommand.class, + IDisconnectCommand.class, + IStepFiltersCommand.class}; + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionRequestMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionRequestMonitor.java new file mode 100644 index 000000000..9a9de76d3 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ActionRequestMonitor.java @@ -0,0 +1,60 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.debug.internal.ui.DebugUIMessages; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.jface.dialogs.MessageDialog; + +/** + * Plain request monitor for actions. Has no result. + * + * @since 3.3 + * + */ +public class ActionRequestMonitor extends AbstractRequestMonitor { + + /* + * (non-Javadoc) + * + * @see org.eclipse.core.runtime.IProgressMonitor#done() + */ + public void done() { + final IStatus status = getStatus(); + if (status != null) { + switch (status.getSeverity()) { + case IStatus.ERROR: + DebugUIPlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { + MessageDialog.openError(DebugUIPlugin.getShell(), DebugUIMessages.DebugUITools_Error_1, status.getMessage()); + } + }); + break; + case IStatus.WARNING: + DebugUIPlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { + MessageDialog.openWarning(DebugUIPlugin.getShell(), DebugUIMessages.DebugUITools_Error_1, status.getMessage()); + } + }); + break; + case IStatus.INFO: + DebugUIPlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { + MessageDialog.openInformation(DebugUIPlugin.getShell(), DebugUIMessages.DebugUITools_Error_1, status.getMessage()); + } + }); + break; + } + } + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/BooleanRequestMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/BooleanRequestMonitor.java new file mode 100644 index 000000000..ae6d99a69 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/BooleanRequestMonitor.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.commands.provisional.IBooleanRequestMonitor; +import org.eclipse.jface.action.IAction; + +/** + * Boolean request monitor that collects boolean results from a number of voters. + * Request is cancelled when one voter votes false. + * + * @since 3.3 + * + */ +public class BooleanRequestMonitor extends AbstractRequestMonitor implements IBooleanRequestMonitor { + + private IAction fAction; + private int fNumVoters; + private int fNumOfVotes = 0; + + public BooleanRequestMonitor(IAction action, int numVoters) { + fAction = action; + fNumVoters = numVoters; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor#setResult(boolean) + */ + public void setResult(boolean result) { + fNumOfVotes++; + if (!isCanceled()) { + if (!result) { + setCanceled(true); + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#done() + */ + public void done() { + if (isCanceled()) { + fAction.setEnabled(false); + } else { + fAction.setEnabled(fNumOfVotes == fNumVoters); + } + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/CommandMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/CommandMonitor.java new file mode 100644 index 000000000..c037ff2ed --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/CommandMonitor.java @@ -0,0 +1,42 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.commands.provisional.IBooleanRequestMonitor; +import org.eclipse.jface.action.IAction; + +/** + * Request monitor for a command action. + * + * @since 3.3 + */ +public class CommandMonitor extends AbstractRequestMonitor implements IBooleanRequestMonitor { + + private IAction fAction; + + public CommandMonitor(IAction action) { + fAction = action; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor#setResult(boolean) + */ + public void setResult(boolean result) { + setCanceled(!result); + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#done() + */ + public void done() { + fAction.setEnabled(!isCanceled()); + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandAction.java new file mode 100644 index 000000000..230908e5d --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandAction.java @@ -0,0 +1,269 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import java.util.Iterator; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.internal.ui.commands.provisional.IDebugCommand; +import org.eclipse.debug.internal.ui.contexts.DebugContextManager; +import org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextListener; +import org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextManager; +import org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextService; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.swt.widgets.Event; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +/** + * Abstract base class for actions performing debug commands + * + * @since 3.3 + */ +public abstract class DebugCommandAction extends Action implements IDebugContextListener { + + /** + * The window this action is working for. + */ + private IWorkbenchWindow fWindow; + + /** + * The part this action is working for, or <code>null</code> if global to + * a window. + */ + private IWorkbenchPart fPart; + + /** + * Command service. + */ + private DebugCommandService fUpdateService; + + /** + * Delegate this action is working for or <code>null</code> if none. + */ + private DebugCommandActionDelegate fDelegate; + + /** + * Constructor + */ + public DebugCommandAction() { + super(); + String helpContextId = getHelpContextId(); + if (helpContextId != null) + PlatformUI.getWorkbench().getHelpSystem().setHelp(this, helpContextId); + setEnabled(false); + } + + /** + * Set the current delegate + * @param delegate + */ + public void setDelegate(DebugCommandActionDelegate delegate) { + fDelegate = delegate; + } + + /** + * This method is analagous to the standard 'run' method for an <code>IAction</code> + * @param target the target to perform the action on + */ + protected void execute(Object target) { + if (target instanceof IAdaptable) { + IAdaptable adaptable = (IAdaptable) target; + IDebugCommand capability = (IDebugCommand) adaptable.getAdapter(getCommandType()); + if (capability != null) { + capability.execute(target, createStatusMonitor(target)); + } + } + } + + /** + * Creates and returns the status monitor to execute this action with. + * + * @param target target of the command + * @return status monitor to execute with + */ + protected IAsynchronousRequestMonitor createStatusMonitor(Object target) { + return new ActionRequestMonitor(); + } + + /** + * Returns the command type this action executes. + * + * @return command class. + */ + abstract protected Class getCommandType(); + + public void contextActivated(ISelection context, IWorkbenchPart part) { + fUpdateService.postUpdateCommand(getCommandType(), new CommandMonitor(this)); + } + + public void contextChanged(ISelection context, IWorkbenchPart part) { + contextActivated(context, part); + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#setEnabled(boolean) + */ + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + if (fDelegate != null) { + fDelegate.setEnabled(enabled); + } + } + + /** + * Initializes this action for a specific part. + * + * @param part workbench part + */ + public void init(IWorkbenchPart part) { + fPart = part; + fWindow = part.getSite().getWorkbenchWindow(); + fUpdateService = DebugCommandService.getService(fWindow); + IDebugContextService service = DebugContextManager.getDefault().getContextService(fWindow); + String partId = part.getSite().getId(); + service.addDebugContextListener(this, partId); + ISelection activeContext = service.getActiveContext(partId); + if (activeContext != null) { + fUpdateService.updateCommand(getCommandType(), new CommandMonitor(this)); + } else { + setEnabled(getInitialEnablement()); + } + } + + /** + * Initializes the context action + * @param window the window + */ + public void init(IWorkbenchWindow window) { + fWindow = window; + fUpdateService = DebugCommandService.getService(fWindow); + IDebugContextManager manager = DebugContextManager.getDefault(); + manager.addDebugContextListener(this, window); + ISelection activeContext = manager.getActiveContext(window); + if (activeContext != null) { + fUpdateService.updateCommand(getCommandType(), new BooleanRequestMonitor(this, 1)); + } else { + setEnabled(getInitialEnablement()); + } + } + + /** + * Returns whether this action should be enabled when initialized + * and there is no active debug context. + * + * @return false, by default + */ + protected boolean getInitialEnablement() { + return false; + } + + /** + * Returns the most recent selection + * + * @return structured selection + */ + protected ISelection getContext() { + if (fPart != null) { + DebugContextManager.getDefault().getContextService(fWindow).getActiveContext(fPart.getSite().getId()); + } + return DebugContextManager.getDefault().getActiveContext(fWindow); + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#run() + */ + public void run() { + ISelection selection = getContext(); + if (selection instanceof IStructuredSelection && isEnabled()) { + // disable the action so it cannot be run again until an event or + // selection change updates the enablement + setEnabled(false); + IStructuredSelection ss = (IStructuredSelection) selection; + for (Iterator iter = ss.iterator(); iter.hasNext();) { + Object element = iter.next(); + execute(element); + } + } + } + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#runWithEvent(org.eclipse.swt.widgets.Event) + */ + public void runWithEvent(Event event) { + run(); + } + + /** + * Clean up when removing + */ + public void dispose() { + IDebugContextManager manager = DebugContextManager.getDefault(); + if (fPart != null) { + IDebugContextService service = manager.getContextService(fWindow); + service.removeDebugContextListener(this, fPart.getSite().getId()); + } else { + manager.removeDebugContextListener(this, fWindow); + } + fWindow = null; + fPart = null; + } + + /** + * @return The help context id for this action + */ + public abstract String getHelpContextId(); + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#getId() + */ + public abstract String getId(); + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#getText() + */ + public abstract String getText(); + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#getToolTipText() + */ + public abstract String getToolTipText(); + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#getDisabledImageDescriptor() + */ + public abstract ImageDescriptor getDisabledImageDescriptor(); + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#getHoverImageDescriptor() + */ + public abstract ImageDescriptor getHoverImageDescriptor(); + + /* + * (non-Javadoc) + * @see org.eclipse.jface.action.Action#getImageDescriptor() + */ + public abstract ImageDescriptor getImageDescriptor(); +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandActionDelegate.java new file mode 100644 index 000000000..db973418d --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandActionDelegate.java @@ -0,0 +1,126 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +import org.eclipse.jface.action.IAction; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.swt.widgets.Event; +import org.eclipse.ui.IActionDelegate2; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.IWorkbenchWindowActionDelegate; + +/** + * Abstract base class for debug action delegates performing debug commands. + * + * @since 3.3 + */ +public abstract class DebugCommandActionDelegate implements IWorkbenchWindowActionDelegate, IActionDelegate2 { + + /** + *The real action for this delegate + */ + private DebugCommandAction fDebugAction; + + /** + * The underlying action for this delegate + */ + private IAction fWindowAction; + + /** + * Whether this action has been initialized before it has been run + * (ensures enablement state is up to date when lazily instantiated) + */ + private boolean fInitialized = false; + + public DebugCommandActionDelegate() { + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose() + */ + public void dispose() { + fDebugAction.dispose(); + + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate2#init(org.eclipse.jface.action.IAction) + */ + public void init(IAction action) { + fWindowAction = action; + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow) + */ + public void init(IWorkbenchWindow window) { + fDebugAction.init(window); + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) + */ + public synchronized void run(IAction action) { + if (!fInitialized) { + try { + wait(); + } catch (InterruptedException e) { + } + } + fDebugAction.run(); + } + + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate2#runWithEvent(org.eclipse.jface.action.IAction, org.eclipse.swt.widgets.Event) + */ + public void runWithEvent(IAction action, Event event) { + run(action); + } + + /* + * (non-Javadoc) + * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) + */ + public void selectionChanged(IAction action, ISelection s) { + // do nothing + } + + protected DebugCommandAction getAction() { + return fDebugAction; + } + + protected void setAction(DebugCommandAction action) { + fDebugAction = action; + action.setDelegate(this); + } + + public synchronized void setEnabled(boolean enabled) { + if (!fInitialized) { + fInitialized = true; + notifyAll(); + } + fWindowAction.setEnabled(enabled); + } + + protected IAction getWindowAction() + { + return fWindowAction; + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandService.java new file mode 100644 index 000000000..2ef382fe7 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DebugCommandService.java @@ -0,0 +1,205 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.debug.internal.ui.commands.provisional.IBooleanRequestMonitor; +import org.eclipse.debug.internal.ui.commands.provisional.IDebugCommand; +import org.eclipse.debug.internal.ui.contexts.DebugContextManager; +import org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextListener; +import org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextService; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IWindowListener; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; + +/** + * Updates commands for a window. Coalesces update requests by command type. + * + * @since 3.3 + */ +public class DebugCommandService implements IDebugContextListener { + + /** + * Maps command types to update monitors + */ + private Map fCommandUpdates = new HashMap(); + + /** + * Window this service is for. + */ + private IWorkbenchWindow fWindow = null; + + /** + * The context service for this command service. + */ + private IDebugContextService fContextService = null; + + /** + * Service per window + */ + private static Map fgServices = new HashMap(); + + /** + * Returns the service for a window. + * + * @param window + * @return service + */ + public synchronized static DebugCommandService getService(IWorkbenchWindow window) { + DebugCommandService service = (DebugCommandService) fgServices.get(window); + if (service == null) { + service = new DebugCommandService(window); + fgServices.put(window, service); + } + return service; + } + + public DebugCommandService(IWorkbenchWindow window) { + fWindow = window; + fContextService = DebugContextManager.getDefault().getContextService(window); + fContextService.addPostDebugContextListener(this); + PlatformUI.getWorkbench().addWindowListener(new IWindowListener() { + + public void windowOpened(IWorkbenchWindow window) { + } + + public void windowDeactivated(IWorkbenchWindow window) { + } + + public void windowClosed(IWorkbenchWindow window) { + if (fWindow == window) { + dispose(); + } + } + + public void windowActivated(IWorkbenchWindow window) { + } + + }); + } + + private void dispose() { + fContextService.removeDebugContextListener(this); + fgServices.remove(fWindow); + fCommandUpdates.clear(); + fWindow = null; + } + + /** + * Updates the given command type after the next context change. + * + * @param commandType + * @param monitor + */ + public void postUpdateCommand(Class commandType, IBooleanRequestMonitor monitor) { + ProxyBooleanRequestMonitor proxy = (ProxyBooleanRequestMonitor) fCommandUpdates.get(commandType); + if (proxy == null) { + proxy = new ProxyBooleanRequestMonitor(); + fCommandUpdates.put(commandType, proxy); + } + proxy.addMonitor(monitor); + } + + /** + * Updates the given command type based on the active context. + * + * @param commandType + * @param requestMonitor + */ + public void updateCommand(Class commandType, IBooleanRequestMonitor requestMonitor) { + ISelection context = fContextService.getActiveContext(); + if (context instanceof IStructuredSelection && !context.isEmpty()) { + Object[] elements = ((IStructuredSelection)context).toArray(); + ProxyBooleanRequestMonitor monitor = new ProxyBooleanRequestMonitor(); + monitor.addMonitor(requestMonitor); + updateCommand(commandType, elements, monitor); + } else { + requestMonitor.setCanceled(true); + requestMonitor.done(); + } + } + + private void postUpdate(ISelection context) { + if (context instanceof IStructuredSelection && !context.isEmpty()) { + Object[] elements = ((IStructuredSelection)context).toArray(); + Iterator iterator = fCommandUpdates.entrySet().iterator(); + while (iterator.hasNext()) { + Entry entry = (Entry) iterator.next(); + Class commandType = (Class)entry.getKey(); + ProxyBooleanRequestMonitor monitor = (ProxyBooleanRequestMonitor) entry.getValue(); + updateCommand(commandType, elements, monitor); + } + } else { + Iterator iterator = fCommandUpdates.values().iterator(); + while (iterator.hasNext()) { + ProxyBooleanRequestMonitor monitor = (ProxyBooleanRequestMonitor) iterator.next(); + monitor.setCanceled(true); + monitor.done(); + } + } + fCommandUpdates.clear(); + } + + /** + * Updates the given command type for the specified elements. + * + * @param commandType command class to update + * @param elements elements to update for + * @param monitor status monitor + */ + private void updateCommand(Class commandType, Object[] elements, ProxyBooleanRequestMonitor monitor) { + IDebugCommand[] commands = new IDebugCommand[elements.length]; + int numVoters = 0; + for (int i = 0; i < elements.length; i++) { + Object element = elements[i]; + if (element instanceof IAdaptable) { + IDebugCommand command = (IDebugCommand) ((IAdaptable)element).getAdapter(commandType); + if (command != null) { + commands[i] = command; + numVoters++; + } else { + monitor.setCanceled(true); + monitor.done(); + return; + } + } + } + if (!monitor.isCanceled()) { + monitor.setNumVoters(numVoters); + for (int i = 0; i < commands.length; i++) { + IDebugCommand command = commands[i]; + command.canExecute(elements[i], monitor); + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextListener#contextActivated(org.eclipse.jface.viewers.ISelection, org.eclipse.ui.IWorkbenchPart, org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextService) + */ + public void contextActivated(ISelection selection, IWorkbenchPart part) { + postUpdate(selection); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextListener#contextChanged(org.eclipse.jface.viewers.ISelection, org.eclipse.ui.IWorkbenchPart, org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextService) + */ + public void contextChanged(ISelection selection, IWorkbenchPart part) { + postUpdate(selection); + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DisconnectCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DisconnectCommandAction.java new file mode 100644 index 000000000..8b3f43f04 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DisconnectCommandAction.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IDisconnectCommand; +import org.eclipse.debug.ui.IDebugUIConstants; +import org.eclipse.jface.resource.ImageDescriptor; +/** + * Disconnect action. + * + * @since 3.3 + */ +public class DisconnectCommandAction extends DebugCommandAction{ + + public String getText() { + return ActionMessages.DisconnectAction_0; + } + + public String getHelpContextId() { + return "disconnect_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.disconnect"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.DisconnectAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_DISCONNECT); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_DISCONNECT); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IDebugUIConstants.IMG_LCL_DISCONNECT); + } + + protected Class getCommandType() { + return IDisconnectCommand.class; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DropToFrameCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DropToFrameCommandAction.java new file mode 100644 index 000000000..1f93ed617 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/DropToFrameCommandAction.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IDropToFrameCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Drop to frame action. + * + * @since 3.3 + */ +public class DropToFrameCommandAction extends DebugCommandAction { + + public String getText() { + return ActionMessages.DropToFrameAction_0; + } + + public String getHelpContextId() { + return "drop_to_frame_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.dropToFrame"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.DropToFrameAction_3; + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_DROP_TO_FRAME); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_DROP_TO_FRAME); + } + + public ImageDescriptor getDisabledImageDescriptor() { + return null; + } + + protected Class getCommandType() { + return IDropToFrameCommand.class; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ProxyBooleanRequestMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ProxyBooleanRequestMonitor.java new file mode 100644 index 000000000..257744464 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ProxyBooleanRequestMonitor.java @@ -0,0 +1,86 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.debug.internal.ui.commands.provisional.IBooleanRequestMonitor; + +/** + * Boolean request monitor that collects boolean results from a number of voters. + * Request is cancelled when one voter votes false. Forwards the results to + * any number of boolean request monitors. + * + * @since 3.3 + * + */ +public class ProxyBooleanRequestMonitor extends AbstractRequestMonitor implements IBooleanRequestMonitor { + + private List fMonitors = new ArrayList(); + private int fNumVoters; + private int fNumOfVotes = 0; + private boolean fDone = false; + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.actions.provisional.IBooleanRequestMonitor#setResult(boolean) + */ + public synchronized void setResult(boolean result) { + fNumOfVotes++; + if (!isCanceled()) { + if (!result) { + setCanceled(true); + } + } + } + + /* (non-Javadoc) + * @see org.eclipse.core.runtime.IProgressMonitor#done() + */ + public synchronized void done() { + if (!fDone) { + if (isCanceled() || fNumOfVotes == fNumVoters) { + fDone = true; + Iterator monitors = fMonitors.iterator(); + while (monitors.hasNext()) { + IBooleanRequestMonitor monitor = (IBooleanRequestMonitor) monitors.next(); + monitor.setStatus(getStatus()); + if (isCanceled()) { + monitor.setCanceled(true); + } else { + monitor.setResult(true); + } + monitor.done(); + } + fMonitors.clear(); + } + } + } + + /** + * Sets the number of voters required for this capability test. + * + * @param numVoters + */ + void setNumVoters(int numVoters) { + fNumVoters = numVoters; + } + + /** + * Adds the given monitor to forward the result to when done. + * + * @param monitor + */ + void addMonitor(IBooleanRequestMonitor monitor) { + fMonitors.add(monitor); + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandAction.java new file mode 100644 index 000000000..5f1cf0cf3 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandAction.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IResumeCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Resume action. + * + * @since 3.3 + */ +public class ResumeCommandAction extends DebugCommandAction{ + + public ResumeCommandAction() { + setActionDefinitionId("org.eclipse.debug.ui.commands.Resume"); //$NON-NLS-1$ + } + + public String getText() { + return ActionMessages.ResumeAction_0; + } + + public String getHelpContextId() { + return "resume_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.resume"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.ResumeAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_RESUME); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_RESUME); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_RESUME); + } + + protected Class getCommandType() { + return IResumeCommand.class; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandActionDelegate.java new file mode 100644 index 000000000..77a6cb6d2 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ResumeCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Resume action delegate. + * + * @since 3.3 + */ +public class ResumeCommandActionDelegate extends DebugCommandActionDelegate { + + public ResumeCommandActionDelegate() { + super(); + setAction(new ResumeCommandAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandAction.java new file mode 100644 index 000000000..45ae8d711 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandAction.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IStepIntoCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Step into action + * + * @since 3.3 + */ +public class StepIntoCommandAction extends DebugCommandAction { + + public StepIntoCommandAction() { + setActionDefinitionId("org.eclipse.debug.ui.commands.StepInto"); //$NON-NLS-1$ + } + + public String getText() { + return ActionMessages.StepIntoAction_0; + } + + public String getHelpContextId() { + return "step_into_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.stepInto"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.StepIntoAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_STEP_INTO); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_INTO); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_INTO); + } + + protected Class getCommandType() { + return IStepIntoCommand.class; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandActionDelegate.java new file mode 100644 index 000000000..0364de6eb --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepIntoCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Step into action delegate. + * + * @since 3.3 + */ +public class StepIntoCommandActionDelegate extends DebugCommandActionDelegate { + + public StepIntoCommandActionDelegate() { + super(); + setAction(new StepIntoCommandAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandAction.java new file mode 100644 index 000000000..e33e2e407 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandAction.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IStepOverCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Step over action. + * + * @since 3.3 + */ +public class StepOverCommandAction extends DebugCommandAction { + + public StepOverCommandAction() { + setActionDefinitionId("org.eclipse.debug.ui.commands.StepOver"); //$NON-NLS-1$ + } + + public String getText() { + return ActionMessages.StepOverAction_0; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_STEP_OVER); + } + + public String getHelpContextId() { + return "step_over_action_context"; //$NON-NLS-1$ + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_OVER); + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.stepOver"; //$NON-NLS-1$ + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_OVER); + } + + public String getToolTipText() { + return ActionMessages.StepOverAction_3; + } + + protected Class getCommandType() { + return IStepOverCommand.class; + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandActionDelegate.java new file mode 100644 index 000000000..71a20406d --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepOverCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Step over action delegate. + * + * @since 3.3 + */ +public class StepOverCommandActionDelegate extends DebugCommandActionDelegate { + + public StepOverCommandActionDelegate() { + super(); + setAction(new StepOverCommandAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandAction.java new file mode 100644 index 000000000..7bf961264 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandAction.java @@ -0,0 +1,63 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IStepReturnCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Step return action. + * + * @since 3.3 + */ +public class StepReturnCommandAction extends DebugCommandAction { + + + public StepReturnCommandAction() { + setActionDefinitionId("org.eclipse.debug.ui.commands.StepReturn"); //$NON-NLS-1$ + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_STEP_RETURN); + } + + public String getHelpContextId() { + return "step_return_action_context"; //$NON-NLS-1$ + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_RETURN); + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.stepReturn"; //$NON-NLS-1$ + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_STEP_RETURN); + } + + public String getToolTipText() { + return ActionMessages.StepReturnAction_2; + } + + public String getText() { + return ActionMessages.StepReturnAction_3; + } + + protected Class getCommandType() { + return IStepReturnCommand.class; + } + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandActionDelegate.java new file mode 100644 index 000000000..2f78cced1 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/StepReturnCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Step return action delegate. + * + * @since 3.3 + */ +public class StepReturnCommandActionDelegate extends DebugCommandActionDelegate { + + public StepReturnCommandActionDelegate() { + super(); + setAction(new StepReturnCommandAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandAction.java new file mode 100644 index 000000000..98602fd58 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandAction.java @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.ISuspendCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Suspend action. + * + * @since 3.3 + */ +public class SuspendCommandAction extends DebugCommandAction { + + + public String getText() { + return ActionMessages.SuspendAction_0; + } + + public String getHelpContextId() { + return "suspend_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.suspend"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.SuspendAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_SUSPEND); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_SUSPEND); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_SUSPEND); + } + + protected Class getCommandType() { + return ISuspendCommand.class; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandActionDelegate.java new file mode 100644 index 000000000..9747cdc42 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/SuspendCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Suspend action delegate. + * + * @since 3.3 + */ +public class SuspendCommandActionDelegate extends DebugCommandActionDelegate { + + public SuspendCommandActionDelegate() { + super(); + setAction(new SuspendCommandAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAllAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAllAction.java new file mode 100644 index 000000000..777167a50 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAllAction.java @@ -0,0 +1,123 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.ILaunchManager; +import org.eclipse.debug.core.ILaunchesListener2; +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.ITerminateCommand; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.StructuredSelection; +import org.eclipse.ui.IWorkbenchPart; + +/** + * Terminates all launches. + * + * @since 3.3 + */ +public class TerminateAllAction extends DebugCommandAction implements ILaunchesListener2 { + + protected ISelection getContext() { + return new StructuredSelection(getLaunchManager().getLaunches()); + } + + public void contextActivated(ISelection context, IWorkbenchPart part) { + // DO NOTHING + } + + public void contextChanged(ISelection context, IWorkbenchPart part) { + // DO NOTHING + } + + public void dispose() { + getLaunchManager().removeLaunchListener(this); + super.dispose(); + } + + public void init(IWorkbenchPart part) { + super.init(part); + ILaunchManager launchManager = getLaunchManager(); + launchManager.addLaunchListener(this); + // heuristic... rather than updating all the time, just assume there's + // something that's not terminated. + setEnabled(launchManager.getLaunches().length > 0); + } + + private ILaunchManager getLaunchManager() { + return DebugPlugin.getDefault().getLaunchManager(); + } + + public String getHelpContextId() { + return "terminate_all_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.popupMenu.terminateAll"; //$NON-NLS-1$ + } + + public String getText() { + return ActionMessages.TerminateAllAction_2; + } + + public String getToolTipText() { + return ActionMessages.TerminateAllAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages + .getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_TERMINATE_ALL); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages + .getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE_ALL); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages + .getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE_ALL); + } + + protected Class getCommandType() { + return ITerminateCommand.class; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener2#launchesTerminated(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesTerminated(ILaunch[] launches) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesAdded(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesAdded(ILaunch[] launches) { + setEnabled(true); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesChanged(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesChanged(ILaunch[] launches) { + } + + /* (non-Javadoc) + * @see org.eclipse.debug.core.ILaunchesListener#launchesRemoved(org.eclipse.debug.core.ILaunch[]) + */ + public void launchesRemoved(ILaunch[] launches) { + setEnabled(getLaunchManager().getLaunches().length > 0); + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java new file mode 100644 index 000000000..146967d45 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRelaunchAction.java @@ -0,0 +1,111 @@ +/******************************************************************************* + * Copyright (c) 2004, 2006 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 implementation + *******************************************************************************/ +package org.eclipse.debug.internal.ui.commands.actions; + +import org.eclipse.debug.core.ILaunch; +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.actions.RelaunchActionDelegate; +import org.eclipse.debug.internal.ui.commands.provisional.ITerminateCommand; +import org.eclipse.debug.internal.ui.launchConfigurations.LaunchConfigurationManager; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.ui.IWorkbenchPart; + +/** + * Action which terminates a launch and then re-launches it. + */ +public class TerminateAndRelaunchAction extends DebugCommandAction { + + class RequestMonitor extends ActionRequestMonitor { + + private ILaunch fLaunch; + + public RequestMonitor(ILaunch launch) { + fLaunch = launch; + } + + public void done() { + super.done(); + DebugUIPlugin.getStandardDisplay().asyncExec(new Runnable() { + public void run() { + // Must be run in the UI thread since the launch can require + // prompting to proceed + RelaunchActionDelegate.relaunch(fLaunch.getLaunchConfiguration(), fLaunch.getLaunchMode()); + } + }); + } + + } + + protected IAsynchronousRequestMonitor createStatusMonitor(Object target) { + ILaunch launch = RelaunchActionDelegate.getLaunch(target); + return new RequestMonitor(launch); + } + + protected Class getCommandType() { + return ITerminateCommand.class; + } + + public void contextActivated(ISelection context, IWorkbenchPart part) { + if (context instanceof IStructuredSelection) { + Object[] elements = ((IStructuredSelection)context).toArray(); + for (int i = 0; i < elements.length; i++) { + if (!canRelaunch(elements[i])) { + setEnabled(false); + return; + } + } + } + super.contextActivated(context, part); + } + + protected boolean canRelaunch(Object element) { + ILaunch launch = RelaunchActionDelegate.getLaunch(element); + return launch != null && LaunchConfigurationManager.isVisible(launch.getLaunchConfiguration()); + } + + public String getActionDefinitionId() { + return ActionMessages.TerminateAndRelaunchAction_0; + } + + public String getHelpContextId() { + return "terminate_and_relaunch_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.popupMenu.TerminateAndRelaunch"; //$NON-NLS-1$ + } + + public String getText() { + return ActionMessages.TerminateAndRelaunchAction_3; + } + + public String getToolTipText() { + return ActionMessages.TerminateAndRelaunchAction_4; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_TERMINATE_AND_RELAUNCH); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE_AND_RELAUNCH); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE_AND_RELAUNCH); + } +} 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 new file mode 100644 index 000000000..19e9c0408 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateAndRemoveAction.java @@ -0,0 +1,94 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.core.runtime.IStatus; +import org.eclipse.debug.core.DebugPlugin; +import org.eclipse.debug.core.ILaunch; +import org.eclipse.debug.core.model.IDebugElement; +import org.eclipse.debug.core.model.IProcess; +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.ITerminateCommand; +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Terminate and remove action. + * + * @since 3.3 + */ +public class TerminateAndRemoveAction extends DebugCommandAction { + + + class TerminateAndRemoveMonitor extends ActionRequestMonitor { + private Object fElement; + TerminateAndRemoveMonitor(Object element) { + fElement = element; + } + public void done() { + IStatus status = getStatus(); + if(status == null || status.isOK()) { + ILaunch launch= null; + if (fElement instanceof ILaunch) { + launch= (ILaunch) fElement; + } else if (fElement instanceof IDebugElement) { + launch= ((IDebugElement) fElement).getLaunch(); + } else if (fElement instanceof IProcess) { + launch= ((IProcess) fElement).getLaunch(); + } + if (launch != null) + DebugPlugin.getDefault().getLaunchManager().removeLaunch(launch); + } + super.done(); + } + + } + + public String getText() { + return ActionMessages.TerminateAndRemoveAction_0; + } + + public String getHelpContextId() { + return "terminate_and_remove_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.popupMenu.terminateAndRemove"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.TerminateAndRemoveAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_TERMINATE_AND_REMOVE); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE_AND_REMOVE); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TERMINATE_AND_REMOVE); + } + + protected Class getCommandType() { + return ITerminateCommand.class; + } + + protected IAsynchronousRequestMonitor createStatusMonitor(Object target) { + return new TerminateAndRemoveMonitor(target); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandAction.java new file mode 100644 index 000000000..07528acf4 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandAction.java @@ -0,0 +1,61 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.ITerminateCommand; +import org.eclipse.jface.resource.ImageDescriptor; + +/** + * Terminate action. + * + * @since 3.3 + */ +public class TerminateCommandAction extends DebugCommandAction { + + public TerminateCommandAction() { + setActionDefinitionId("org.eclipse.debug.ui.commands.Terminate"); //$NON-NLS-1$ + } + + public String getText() { + return ActionMessages.TerminateAction_0; + } + + public String getHelpContextId() { + return "terminate_action_context"; //$NON-NLS-1$ + } + + public String getId() { + return "org.eclipse.debug.ui.debugview.toolbar.terminate"; //$NON-NLS-1$ + } + + public String getToolTipText() { + return ActionMessages.TerminateAction_3; + } + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_TERMINATE); + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_LCL_TERMINATE); + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_LCL_TERMINATE); + } + + protected Class getCommandType() { + return ITerminateCommand.class; + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandActionDelegate.java new file mode 100644 index 000000000..a401b2209 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/TerminateCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Terminate action delegate. + * + * @since 3.3 + */ +public class TerminateCommandActionDelegate extends DebugCommandActionDelegate { + + public TerminateCommandActionDelegate() { + super(); + setAction(new TerminateCommandAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersAction.java new file mode 100644 index 000000000..85de71dea --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersAction.java @@ -0,0 +1,80 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.actions; + +import org.eclipse.debug.internal.ui.DebugPluginImages; +import org.eclipse.debug.internal.ui.IInternalDebugUIConstants; +import org.eclipse.debug.internal.ui.actions.ActionMessages; +import org.eclipse.debug.internal.ui.commands.provisional.IStepFiltersCommand; +import org.eclipse.debug.ui.DebugUITools; +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.IWorkbenchPart; + +public class ToggleStepFiltersAction extends DebugCommandAction { + + public ImageDescriptor getDisabledImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_DLCL_TOGGLE_STEP_FILTERS); + } + + public String getHelpContextId() { + return "step_with_filters_action_context"; //$NON-NLS-1$ + } + + public ImageDescriptor getHoverImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TOGGLE_STEP_FILTERS); + } + + public String getId() { + return "org.eclipse.debug.ui.actions.ToggleStepFilters"; //$NON-NLS-1$ + } + + public ImageDescriptor getImageDescriptor() { + return DebugPluginImages.getImageDescriptor(IInternalDebugUIConstants.IMG_ELCL_TOGGLE_STEP_FILTERS); + } + + public String getText() { + return ActionMessages.ToggleStepFiltersAction_0; + } + + public String getToolTipText() { + return ActionMessages.ToggleStepFiltersAction_0; + } + + protected boolean getInitialEnablement() { + return true; + } + + protected Class getCommandType() { + return IStepFiltersCommand.class; + } + + public void run() { + DebugUITools.setUseStepFilters(!DebugUITools.isUseStepFilters()); + } + + public int getStyle() { + return AS_CHECK_BOX; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.commands.actions.DebugCommandAction#contextActivated(org.eclipse.jface.viewers.ISelection, org.eclipse.ui.IWorkbenchPart, org.eclipse.debug.internal.ui.contexts.IDebugContextService) + */ + public void contextActivated(ISelection context, IWorkbenchPart part) { + if (context.isEmpty()) { + setEnabled(true); + } else { + super.contextActivated(context, part); + } + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersCommandActionDelegate.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersCommandActionDelegate.java new file mode 100644 index 000000000..ad58f05af --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/actions/ToggleStepFiltersCommandActionDelegate.java @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 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.commands.actions; + +/** + * Toggle step filters action delegate. + * + * @since 3.3 + */ +public class ToggleStepFiltersCommandActionDelegate extends DebugCommandActionDelegate { + + public ToggleStepFiltersCommandActionDelegate() { + super(); + setAction(new ToggleStepFiltersAction()); + } + + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IBooleanRequestMonitor.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IBooleanRequestMonitor.java new file mode 100644 index 000000000..2618d52d6 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IBooleanRequestMonitor.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * Request monitor for obtaining a boolean result asynchronously. + * + * @since 3.3 + */ +public interface IBooleanRequestMonitor extends IAsynchronousRequestMonitor { + + /** + * Sets the result of a boolean request. + * + * @param result the result + */ + public void setResult(boolean result); +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDebugCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDebugCommand.java new file mode 100644 index 000000000..36598bf9c --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDebugCommand.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +import org.eclipse.debug.internal.ui.viewers.provisional.IAsynchronousRequestMonitor; + +/** + * A command that can be enabled or disabled and executed. + * + * @since 3.3 + */ +public interface IDebugCommand { + + /** + * Determines whether this command can be executed on the specified element. + * + * @param element element to operate on + * @param monitor accepts result + */ + public void canExecute(Object element, IBooleanRequestMonitor monitor); + + /** + * Executes this command on the specified element reporting any status + * to the given monitor. + * + * @param element element to perform capability on + * @param monitor status monitor + */ + public void execute(Object element, IAsynchronousRequestMonitor monitor); + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDisconnectCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDisconnectCommand.java new file mode 100644 index 000000000..2e0c03d7f --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDisconnectCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Disconnect command. + * + * @since 3.3 + */ +public interface IDisconnectCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDropToFrameCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDropToFrameCommand.java new file mode 100644 index 000000000..5eae61965 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IDropToFrameCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Drop to frame command. + * + * @since 3.3 + */ +public interface IDropToFrameCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IResumeCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IResumeCommand.java new file mode 100644 index 000000000..2838b9101 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IResumeCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Resume command. + * + * @since 3.3 + */ +public interface IResumeCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepFiltersCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepFiltersCommand.java new file mode 100644 index 000000000..f9bd5b39e --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepFiltersCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Step filters command. + * + * @since 3.3 + */ +public interface IStepFiltersCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepIntoCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepIntoCommand.java new file mode 100644 index 000000000..e797e371c --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepIntoCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Step into command. + * + * @since 3.3 + */ +public interface IStepIntoCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepOverCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepOverCommand.java new file mode 100644 index 000000000..b86dc92a8 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepOverCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Step over command. + * + * @since 3.3 + */ +public interface IStepOverCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepReturnCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepReturnCommand.java new file mode 100644 index 000000000..373ef3ca3 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/IStepReturnCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Step return command. + * + * @since 3.3 + */ +public interface IStepReturnCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ISuspendCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ISuspendCommand.java new file mode 100644 index 000000000..3380ba058 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ISuspendCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Suspend command. + * + * @since 3.3 + */ +public interface ISuspendCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ITerminateCommand.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ITerminateCommand.java new file mode 100644 index 000000000..39d0933d8 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/commands/provisional/ITerminateCommand.java @@ -0,0 +1,20 @@ +/******************************************************************************* + * Copyright (c) 2006 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.commands.provisional; + +/** + * Terminate command. + * + * @since 3.3 + */ +public interface ITerminateCommand extends IDebugCommand { + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/AbstractDebugContextProvider.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/AbstractDebugContextProvider.java new file mode 100644 index 000000000..5370af0ad --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/AbstractDebugContextProvider.java @@ -0,0 +1,88 @@ +/******************************************************************************* + * Copyright (c) 2006 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.contexts.provisional; + +import org.eclipse.core.runtime.ISafeRunnable; +import org.eclipse.core.runtime.ListenerList; +import org.eclipse.core.runtime.SafeRunner; +import org.eclipse.debug.internal.ui.DebugUIPlugin; +import org.eclipse.ui.IWorkbenchPart; + +/** + * Abstract implementation of a debug context provider. + * <p> + * Clients implementing context providers should subclass this class. + * </p> + * @since 3.3 + */ +public abstract class AbstractDebugContextProvider implements IDebugContextProvider { + + /** + * Event listeners + */ + private ListenerList fListeners = new ListenerList(); + + /** + * Part or <code>null</code> + */ + private IWorkbenchPart fPart; + + /** + * Constructs a context provider for the specified part, possibly <code>null</code>. + * + * @param part workbench part or <code>null</code> + */ + public AbstractDebugContextProvider(IWorkbenchPart part) { + fPart = part; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextProvider#addDebugContextEventListener(org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextEventListener) + */ + public void addDebugContextEventListener(IDebugContextEventListener listener) { + fListeners.add(listener); + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextProvider#getPart() + */ + public IWorkbenchPart getPart() { + return fPart; + } + + /* (non-Javadoc) + * @see org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextProvider#removeDebugContextEventListener(org.eclipse.debug.internal.ui.contexts.provisional.IDebugContextEventListener) + */ + public void removeDebugContextEventListener(IDebugContextEventListener listener) { + fListeners.remove(listener); + } + + /** + * Fires the given context event to all listeners. + * + * @param event debug context event + */ + protected void fire(final DebugContextEvent event) { + Object[] listeners = fListeners.getListeners(); + for (int i = 0; i < listeners.length; i++) { + final IDebugContextEventListener listener = (IDebugContextEventListener) listeners[i]; + SafeRunner.run(new ISafeRunnable() { + public void run() throws Exception { + listener.contextEvent(event); + } + public void handleException(Throwable exception) { + DebugUIPlugin.log(exception); + } + }); + + } + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/DebugContextEvent.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/DebugContextEvent.java new file mode 100644 index 000000000..a1ebea685 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/DebugContextEvent.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2006 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.contexts.provisional; + +import java.util.EventObject; + +import org.eclipse.jface.viewers.ISelection; + +/** + * A debug context event. + * + * @since 3.3 + */ +public class DebugContextEvent extends EventObject { + + /** + * The context + */ + private ISelection fContext; + + /** + * Type of context event - change or activation + */ + private int fEventType; + + /** + * Context activation event type. + */ + public static final int ACTIVATED = 1; + + /** + * Context change event type. + */ + public static final int CHANGED = 2; + + /** + * Generated serial version UID for this class. + */ + private static final long serialVersionUID = 3395172504615255524L; + + /** + * @param source + */ + public DebugContextEvent(IDebugContextProvider source, ISelection context, int eventType) { + super(source); + fContext = context; + fEventType = eventType; + } + + /** + * Returns the context associated with this event. + * + * @return + */ + public ISelection getContext() { + return fContext; + } + + /** + * Returns the event type. + * + * @return event type + */ + public int getEventType() { + return fEventType; + } + + /** + * Returns the context provider that initiated this event. + * + * @return context provider + */ + public IDebugContextProvider getDebugContextProvider() { + return (IDebugContextProvider) getSource(); + } +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextEventListener.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextEventListener.java new file mode 100644 index 000000000..a5238fdee --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextEventListener.java @@ -0,0 +1,31 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 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.contexts.provisional; + + +/** + * Notified of context events by a debug context provider. + * <p> + * Clients are not intended to implement this interface. + * </p> + * @since 3.3 + * @see IDebugContextManager + */ +public interface IDebugContextEventListener { + + /** + * Notification of the specified debug context event. + * + * @param event debug context event + */ + public void contextEvent(DebugContextEvent event); + +} diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextService.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextService.java new file mode 100644 index 000000000..a7d7a4706 --- /dev/null +++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/contexts/provisional/IDebugContextService.java @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2005, 2006 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.contexts.provisional; + +import org.eclipse.jface.viewers.ISelection; + + +/** + * Debug context service for a window. + * + * @since 3.2 + */ +public interface IDebugContextService { + + /** + * Registers for context activation notification in this service. + * + * @param listener + */ + public void addDebugContextListener(IDebugContextListener listener); + /** + * Unregisters for context activation notification in this service. + * + * @param listener + */ + public void removeDebugContextListener(IDebugContextListener listener); + + /** + * Registers for context activation notification in the specified part. + * + * @param listener + * @param partId + */ + public void addDebugContextListener(IDebugContextListener listener, String partId); + + /** + * Unregisters for context activation notification in the specified part. + * + * @param listener + * @param partId + */ + public void removeDebugContextListener(IDebugContextListener listener, String partId); + + /** + * Returns the active context in this service's window + * or <code>null</code>. + * + * @return + */ + public ISelection getActiveContext(); + + /** + * Returns the active context in the specified part or <code>null</code>. + * + * @param partId + * @return + */ + public ISelection getActiveContext(String partId); + + /** + * Registers for post context notification. Post listeners + * are notified of context activation and change after all + * non-post listeners are notified. + * + * @param listener + * @since 3.3 + */ + public void addPostDebugContextListener(IDebugContextListener listener); + /** + * Unregisters for post context notification. + * + * @param listener + * @since 3.3 + */ + public void removePostDebugContextListener(IDebugContextListener listener); + + /** + * Registers for post context notification in the specified part. Post listeners + * are notified of context activation and change after all + * non-post listeners are notified. + * + * @param listener + * @param partId + * @since 3.3 + */ + public void addPostDebugContextListener(IDebugContextListener listener, String partId); + + /** + * Unregisters for post context notification in the specified part. + * + * @param listener + * @param partId + * @since 3.3 + */ + public void removePostDebugContextListener(IDebugContextListener listener, String partId); + +} |