eu.geclipse.traceview.internal.SelectionPartnerMarker.java Source code

Java tutorial

Introduction

Here is the source code for eu.geclipse.traceview.internal.SelectionPartnerMarker.java

Source

/*****************************************************************************
 * 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;
    }
}