/*******************************************************************************
* Copyright (c) 2004, 2012 QNX Software Systems 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:
* QNX Software Systems - Initial API and implementation
* Anton Leherbauer (Wind River Systems)
*******************************************************************************/
package org.eclipse.cdt.debug.internal.ui;
import java.io.File;
import org.eclipse.cdt.debug.core.model.ICBreakpoint;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IMarkerDelta;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointsListener;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.ui.texteditor.AbstractMarkerAnnotationModel;
public class DebugMarkerAnnotationModel extends AbstractMarkerAnnotationModel implements IBreakpointsListener {
private final File fFile;
public DebugMarkerAnnotationModel( File file ) {
super();
fFile = file;
}
@Override
protected IMarker[] retrieveMarkers() throws CoreException {
IBreakpoint[] breakpoints = DebugPlugin.getDefault().getBreakpointManager().getBreakpoints();
IMarker[] markers = new IMarker[breakpoints.length];
for ( int i = 0; i < markers.length; ++i ) {
markers[i] = breakpoints[i].getMarker();
}
return markers;
}
@Override
protected void deleteMarkers( IMarker[] markers ) throws CoreException {
}
@Override
protected void listenToMarkerChanges( boolean listen ) {
if ( listen )
DebugPlugin.getDefault().getBreakpointManager().addBreakpointListener( this );
else
DebugPlugin.getDefault().getBreakpointManager().removeBreakpointListener( this );
}
@Override
protected boolean isAcceptable( IMarker marker ) {
String handle = marker.getAttribute(ICBreakpoint.SOURCE_HANDLE, null);
if (handle != null) {
File file = new File( handle );
return file.equals( getFile() );
}
return false;
}
protected File getFile() {
return fFile;
}
@Override
public void breakpointsAdded( IBreakpoint[] breakpoints ) {
for ( int i = 0; i < breakpoints.length; ++i ) {
addMarkerAnnotation( breakpoints[i].getMarker() );
}
fireModelChanged();
}
@Override
public void breakpointsRemoved( IBreakpoint[] breakpoints, IMarkerDelta[] deltas ) {
for ( int i = 0; i < breakpoints.length; ++i ) {
removeMarkerAnnotation( breakpoints[i].getMarker() );
}
fireModelChanged();
}
@Override
public void breakpointsChanged( IBreakpoint[] breakpoints, IMarkerDelta[] deltas ) {
for ( int i = 0; i < breakpoints.length; ++i ) {
modifyMarkerAnnotation( breakpoints[i].getMarker() );
}
fireModelChanged();
}
}