Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleManager.java')
-rw-r--r--debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleManager.java136
1 files changed, 136 insertions, 0 deletions
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleManager.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleManager.java
new file mode 100644
index 00000000000..ca17bc087a2
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/views/debuggerconsole/DebuggerConsoleManager.java
@@ -0,0 +1,136 @@
+/*******************************************************************************
+ * Copyright (c) 2009, 2015 Ericsson 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:
+ * Ericsson - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.cdt.debug.internal.ui.views.debuggerconsole;
+
+import java.util.ArrayList;
+
+import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
+import org.eclipse.cdt.debug.ui.debuggerconsole.IDebuggerConsole;
+import org.eclipse.cdt.debug.ui.debuggerconsole.IDebuggerConsoleManager;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.ListenerList;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.console.IConsole;
+import org.eclipse.ui.console.IConsoleListener;
+import org.eclipse.ui.progress.WorkbenchJob;
+
+/**
+ * A singleton Debugger Console manager which handles keeping track of all
+ * active debugger consoles.
+ */
+public class DebuggerConsoleManager implements IDebuggerConsoleManager {
+
+ /** A list of all known consoles */
+ private ArrayList<IDebuggerConsole> fConsoleList = new ArrayList<>();
+
+ /** A list of listeners registered for notifications of changes to consoles */
+ private ListenerList<IConsoleListener> fConsoleListeners = new ListenerList<>();
+
+ private ShowDebuggerConsoleViewJob fShowDebuggerConsoleViewJob = new ShowDebuggerConsoleViewJob();
+
+ @Override
+ public void addConsoleListener(IConsoleListener listener) {
+ fConsoleListeners.add(listener);
+ }
+
+ @Override
+ public void removeConsoleListener(IConsoleListener listener) {
+ fConsoleListeners.remove(listener);
+ }
+
+ @Override
+ public IDebuggerConsole[] getConsoles() {
+ synchronized (fConsoleList) {
+ return fConsoleList.toArray(new IDebuggerConsole[fConsoleList.size()]);
+ }
+ }
+
+ @Override
+ public void addConsole(IDebuggerConsole console) {
+ synchronized (fConsoleList) {
+ fConsoleList.add(console);
+ }
+ for (IConsoleListener listener : fConsoleListeners) {
+ listener.consolesAdded(new IConsole[] { console });
+ }
+ }
+
+ @Override
+ public void removeConsole(IDebuggerConsole console) {
+ synchronized (fConsoleList) {
+ fConsoleList.remove(console);
+ }
+ for (IConsoleListener listener : fConsoleListeners) {
+ listener.consolesRemoved(new IConsole[] { console });
+ }
+ }
+
+ @Override
+ public void showConsoleView(IDebuggerConsole console) {
+ fShowDebuggerConsoleViewJob.setConsole(console);
+ fShowDebuggerConsoleViewJob.schedule(100);
+ }
+
+ private class ShowDebuggerConsoleViewJob extends WorkbenchJob {
+ private IConsole fConsole;
+
+ ShowDebuggerConsoleViewJob() {
+ super("Show GDB Console View"); //$NON-NLS-1$
+ setSystem(true);
+ setPriority(Job.SHORT);
+ }
+
+ void setConsole(IConsole console) {
+ fConsole = console;
+ }
+
+ @Override
+ public IStatus runInUIThread(IProgressMonitor monitor) {
+ IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+ if (window != null && fConsole != null) {
+ IWorkbenchPage page = window.getActivePage();
+ if (page != null) {
+ boolean consoleFound = false;
+ IViewPart view = page.findView(DebuggerConsoleView.DEBUGGER_CONSOLE_VIEW_ID);
+ if (view != null) {
+ DebuggerConsoleView consoleView = (DebuggerConsoleView)view;
+ boolean consoleVisible = page.isPartVisible(consoleView);
+ if (consoleVisible) {
+ consoleFound = true;
+ page.bringToTop(consoleView);
+ }
+ }
+
+ if (!consoleFound) {
+ try {
+ DebuggerConsoleView consoleView =
+ (DebuggerConsoleView)page.showView(DebuggerConsoleView.DEBUGGER_CONSOLE_VIEW_ID,
+ null,
+ IWorkbenchPage.VIEW_CREATE);
+ page.bringToTop(consoleView);
+ } catch (PartInitException e) {
+ CDebugUIPlugin.log(e);
+ }
+ }
+ }
+ }
+ fConsole = null;
+ return Status.OK_STATUS;
+ }
+ }
+}

Back to the top