/*******************************************************************************
* Copyright (c) 2006, 2010 STMicroelectronics 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:
* STMicroelectronics - Process console enhancements
* Alena Laskavaia (QNX) - Fix for 186172
*******************************************************************************/
package org.eclipse.cdt.debug.mi.ui.console;
import java.util.Observable;
import java.util.Observer;
import org.eclipse.cdt.debug.mi.core.GDBProcess;
import org.eclipse.cdt.debug.mi.core.cdi.model.Target;
import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleSaveAction;
import org.eclipse.cdt.debug.mi.ui.console.actions.MiConsoleVerboseModeAction;
import org.eclipse.debug.core.DebugEvent;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IDebugEventSetListener;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.console.IConsoleConstants;
import org.eclipse.ui.console.IConsolePageParticipant;
import org.eclipse.ui.part.IPageBookViewPage;
import org.eclipse.ui.console.IConsole;
/**
* Enhances ProcessConsole when the process attached is a GDBProcess
* @since 6.1
*
*/
public class MiConsolePageParticipant implements IConsolePageParticipant, IDebugEventSetListener, Observer {
private MiConsoleSaveAction fSaveConsole = null;
private MiConsoleVerboseModeAction fVerboseMode = null;
private org.eclipse.debug.ui.console.IConsole fConsole = null;
private org.eclipse.cdt.debug.mi.core.GDBProcess GDBProcess = null;
public void activated() {
}
public void deactivated() {
}
public void dispose() {
if (GDBProcess != null) {
DebugPlugin.getDefault().removeDebugEventListener(this);
}
fSaveConsole = null;
fVerboseMode = null;
GDBProcess = null;
fConsole = null;
}
public void init(IPageBookViewPage page, IConsole console) {
if(console instanceof org.eclipse.debug.ui.console.IConsole)
{
fConsole = (org.eclipse.debug.ui.console.IConsole) console;
if(fConsole.getProcess() instanceof GDBProcess) {
GDBProcess = (GDBProcess) fConsole.getProcess();
// add two new actions: save console content and verbose console mode switcher
IActionBars bars = page.getSite().getActionBars();
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, new Separator());
fSaveConsole = new MiConsoleSaveAction(fConsole);
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, fSaveConsole);
fVerboseMode = new MiConsoleVerboseModeAction(fConsole);
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, fVerboseMode);
bars.getToolBarManager().appendToGroup(IConsoleConstants.OUTPUT_GROUP, new Separator());
// add a debug event listener
DebugPlugin.getDefault().addDebugEventListener(this);
// if we miss change event update enablement manually
fVerboseMode.updateStateAndEnablement();
Target target = GDBProcess.getTarget();
if (target != null) {
// register this object as MISession observer
target.getMISession().addObserver(this);
}
}
}
}
@SuppressWarnings("rawtypes")
public Object getAdapter(Class adapter) {
return null;
}
public void handleDebugEvents(DebugEvent[] events) {
for (int i = 0; i < events.length; i++) {
DebugEvent event = events[i];
if (event.getSource().equals(GDBProcess)) {
if (fVerboseMode != null) {
fVerboseMode.updateStateAndEnablement();
Target target = GDBProcess.getTarget();
if (target != null) {
// register this object as MISession observer
target.getMISession().addObserver(this);
}
}
}
}
}
/**
* Handle MISession notification
*/
public void update(Observable arg0, Object arg1) {
if((arg1!=null) && (arg1 instanceof VerboseModeChangedEvent) && (fVerboseMode != null)) {
try {
fVerboseMode.updateStateAndEnablement();
} catch (Exception e) {
}
}
}
}