/*****************************************************************************
* Copyright (c) 2009 g-Eclipse Consortium
* 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
*
* Initial development of the original code was made for the
* g-Eclipse project founded by European Union
* project number: FP6-IST-034327 http://www.geclipse.eu/
*
* Contributors:
* Christof Klausecker - MNM-Team, LMU Munich
*****************************************************************************/
package eu.geclipse.traceview.internal;
import java.util.HashSet;
import java.util.Set;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.ISelectionService;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.PlatformUI;
import eu.geclipse.traceview.IEvent;
import eu.geclipse.traceview.IEventMarker;
import eu.geclipse.traceview.ISourceLocation;
import eu.geclipse.traceview.utils.AbstractEventMarker;
public class SourceLineEventMarker extends AbstractEventMarker {
private Set<IEvent> selectedEvents = new HashSet<IEvent>();
private final Color bgColor = Display.getDefault().getSystemColor( SWT.COLOR_CYAN );
private final Color fgColor = Display.getDefault().getSystemColor( SWT.COLOR_BLACK );
public SourceLineEventMarker() {
ISelectionService selectionService = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getSelectionService();
selectionService.addSelectionListener(
"eu.geclipse.traceview.views.TraceView", //$NON-NLS-1$
new ISelectionListener() {
public void selectionChanged( final IWorkbenchPart part,
final ISelection selection ) {
StructuredSelection sSel = ( StructuredSelection )selection;
SourceLineEventMarker.this.selectedEvents = new HashSet<IEvent>();
for( Object obj : sSel.toList() ) {
if( obj instanceof ISourceLocation ) {
IEvent event = ( IEvent )obj;
SourceLineEventMarker.this.selectedEvents.add( event );
}
}
}
} );
}
@Override
public Color getBackgroundColor( final int type ) {
return bgColor;
}
@Override
public Color getForegroundColor( final int type ) {
return fgColor;
}
@Override
public int mark( final IEvent event ) {
int result = 0;
if( event instanceof ISourceLocation ) {
ISourceLocation sourceLocation = ( ISourceLocation )event;
for( IEvent selectedEvent : this.selectedEvents ) {
ISourceLocation selectedISourceLocation = ( ISourceLocation )selectedEvent;
if( sourceLocation.getSourceFilename() != null
&& sourceLocation.getSourceFilename()
.equals( selectedISourceLocation.getSourceFilename() )
&& sourceLocation.getSourceLineNumber() == selectedISourceLocation.getSourceLineNumber()
&& event.getProcess().getTrace() == selectedEvent.getProcess()
.getTrace() )
{
result = IEventMarker.Ellipse_Event;
break;
}
}
}
return result;
}
}