Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/RemoveTerminatedAction.java')
-rw-r--r--org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/RemoveTerminatedAction.java82
1 files changed, 82 insertions, 0 deletions
diff --git a/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/RemoveTerminatedAction.java b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/RemoveTerminatedAction.java
new file mode 100644
index 000000000..f8f805ee0
--- /dev/null
+++ b/org.eclipse.debug.ui/ui/org/eclipse/debug/internal/ui/RemoveTerminatedAction.java
@@ -0,0 +1,82 @@
+package org.eclipse.debug.internal.ui;
+
+/*
+ * Licensed Materials - Property of IBM,
+ * WebSphere Studio Workbench
+ * (c) Copyright IBM Corp 2000
+ */
+
+import org.eclipse.debug.core.DebugPlugin;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.debug.core.model.IProcess;
+import org.eclipse.jface.action.Action;
+import org.eclipse.ui.texteditor.IUpdate;
+
+/**
+ * Removes all terminated/detached launches from the UI.
+ * Clears the launches output as well.
+ */
+public class RemoveTerminatedAction extends Action implements IUpdate {
+
+ private static final String PREFIX= "remove_all_terminated_action.";
+ boolean fRemoveDebug;
+
+ public RemoveTerminatedAction(boolean removeDebug) {
+ super(DebugUIUtils.getResourceString(PREFIX + TEXT));
+ setToolTipText(DebugUIUtils.getResourceString(PREFIX + TOOL_TIP_TEXT));
+ fRemoveDebug= removeDebug;
+ setEnabled(false);
+ }
+
+ /**
+ * Removes all of the terminated launches relevant to the
+ * current perspective. Has the
+ * side effect of clearing the console output.
+ * @see IAction
+ */
+ public void run() {
+ ILaunchManager lManager= DebugPlugin.getDefault().getLaunchManager();
+ Object[] launches= lManager.getLaunches();
+ for (int i= 0; i < launches.length; i++) {
+ ILaunch launch= (ILaunch)launches[i];
+ if (launch.isTerminated() && isLaunchRelevantToCurrentPerpective(launch)) {
+ lManager.deregisterLaunch(launch);
+ }
+ }
+ }
+
+ /**
+ * Updates the enabled state of this action to enabled if at
+ * least one launch is terminated and relative to the current perspective.
+ * @see IUpdate
+ */
+ public void update() {
+ ILaunchManager lManager= DebugPlugin.getDefault().getLaunchManager();
+ ILaunch[] launches= lManager.getLaunches();
+ for (int i= 0; i < launches.length; i++) {
+ ILaunch launch= launches[i];
+ if (launch.isTerminated() && isLaunchRelevantToCurrentPerpective(launch)) {
+ setEnabled(true);
+ return;
+ }
+ }
+ setEnabled(false);
+ }
+
+ /**
+ * Returns whether this launch is relevant to the
+ * current perspective...ie Run or Debug.
+ * For example, if in the debug perspective (fRemoveDebug= true)
+ * and the launch does not have a debug target, <code>false</code>
+ * will be returned.
+ */
+ protected boolean isLaunchRelevantToCurrentPerpective(ILaunch launch) {
+ if (fRemoveDebug) {
+ return launch.getDebugTarget() != null;
+ }
+ IProcess[] processes= launch.getProcesses();
+ return (processes != null && processes.length > 0);
+ }
+}
+

Back to the top