/***************************************************************************** * Copyright (c) 2006, 2008 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 GUP, JKU - initial API and implementation *****************************************************************************/ 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.utils.AbstractEventMarker; public class SelectionPartnerMarker extends AbstractEventMarker { private Set<IEvent> selectedEvents = new HashSet<IEvent>(); private Set<IEvent> partnerEvents = new HashSet<IEvent>(); private final Color fgColor = Display.getDefault().getSystemColor( SWT.COLOR_BLACK ); private final Color bgColor = Display.getDefault().getSystemColor( SWT.COLOR_GRAY ); public SelectionPartnerMarker() { ISelectionService selectionService = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService(); selectionService.addSelectionListener( "eu.geclipse.traceview.views.TraceView", new ISelectionListener() { public void selectionChanged( IWorkbenchPart part, ISelection selection ) { StructuredSelection sSel = ( StructuredSelection )selection; Set<IEvent> newSelectedEvents = new HashSet<IEvent>(); Set<IEvent> newPartnerEvents = new HashSet<IEvent>(); for (Object obj : sSel.toList()) { if (obj instanceof IEvent) { IEvent event = ( IEvent )obj; if (event.getProcess().getTrace() == trace) { newSelectedEvents.add( event ); if (event.getPartnerEvent() != null) { newPartnerEvents.add( event.getPartnerEvent() ); } } } } SelectionPartnerMarker.this.selectedEvents = newSelectedEvents; SelectionPartnerMarker.this.partnerEvents = newPartnerEvents; } }); } @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; for (IEvent parEvent : this.partnerEvents) { if (parEvent.equals( event )) { result = IEventMarker.Ellipse_Event; break; } } if (result == 0) { if(event.getPartnerEvent() != null && this.selectedEvents.contains( event.getPartnerEvent() ) ) { result = IEventMarker.Ellipse_Event; } } return result; } }