1
/*******************************************************************************
2
* Copyright (c) 2006, 2008 STMicroelectronics and others.
3
* All rights reserved. This program and the accompanying materials
4
* are made available under the terms of the Eclipse Public License v1.0
5
* which accompanies this distribution, and is available at
6
* http://www.eclipse.org/legal/epl-v10.html
9
* STMicroelectronics - Process console enhancements
10
* Alena Laskavaia (QNX) - Fix for 186172
11
*******************************************************************************/
12
package org.eclipse.cdt.debug.mi.ui.console;
14
import java.util.Observable;
15
import java.util.Observer;
17
import org.eclipse.cdt.debug.mi.core.GDBProcess;
18
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
19
import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleSaveAction;
20
import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleVerboseModeAction;
21
import org.eclipse.debug.core.DebugEvent;
22
import org.eclipse.debug.core.DebugPlugin;
23
import org.eclipse.debug.core.IDebugEventSetListener;
24
import org.eclipse.jface.action.Separator;
25
import org.eclipse.ui.IActionBars;
26
import org.eclipse.ui.console.IConsoleConstants;
27
import org.eclipse.ui.console.IConsolePageParticipant;
28
import org.eclipse.ui.part.IPageBookViewPage;
29
import org.eclipse.ui.console.IConsole;
32
* Enhances ProcessConsole when the process attached is a GDBProcess
35
public class MiConsolePageParticipant implements IConsolePageParticipant, IDebugEventSetListener, Observer {
37
private MiConsoleSaveAction fSaveConsole = null;
38
private MiConsoleVerboseModeAction fVerboseMode = null;
39
private org.eclipse.debug.ui.console.IConsole fConsole = null;
40
private org.eclipse.cdt.debug.mi.core.GDBProcess GDBProcess = null;
42
public void activated() {
45
public void deactivated() {
48
public void dispose() {
49
if (GDBProcess != null) {
50
DebugPlugin.getDefault().removeDebugEventListener(this);
58
public void init(IPageBookViewPage page, IConsole console) {
60
if(console instanceof org.eclipse.debug.ui.console.IConsole)
62
fConsole = (org.eclipse.debug.ui.console.IConsole) console;
63
if(fConsole.getProcess() instanceof GDBProcess) {
65
GDBProcess = (GDBProcess) fConsole.getProcess();
67
// add two new actions: save console content and verbose console mode switcher
68
IActionBars bars = page.getSite().getActionBars();
69
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, new Separator());
70
fSaveConsole = new MiConsoleSaveAction(fConsole);
71
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, fSaveConsole);
72
fVerboseMode = new MiConsoleVerboseModeAction(fConsole);
73
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, fVerboseMode);
74
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, new Separator());
76
// add a debug event listener
77
DebugPlugin.getDefault().addDebugEventListener(this);
78
// if we miss change event update enablement manually
79
fVerboseMode.updateStateAndEnablement();
80
Target target = GDBProcess.getTarget();
82
// register this object as MISession observer
83
target.getMISession().addObserver(this);
89
public Object getAdapter(Class adapter) {
93
public void handleDebugEvents(DebugEvent[] events) {
94
for (int i = 0; i < events.length; i++) {
95
DebugEvent event = events[i];
96
if (event.getSource().equals(GDBProcess)) {
97
if (fVerboseMode != null) {
98
fVerboseMode.updateStateAndEnablement();
99
Target target = GDBProcess.getTarget();
100
if (target != null) {
101
// register this object as MISession observer
102
target.getMISession().addObserver(this);
110
* Handle MISession notification
112
public void update(Observable arg0, Object arg1) {
113
if((arg1!=null) && (arg1 instanceof VerboseModeChangedEvent) && (fVerboseMode != null)) {
115
fVerboseMode.updateStateAndEnablement();
116
} catch (Exception e) {