org.robotframework.red.viewers.ViewersCombiningSelectionProvider.java Source code

Java tutorial

Introduction

Here is the source code for org.robotframework.red.viewers.ViewersCombiningSelectionProvider.java

Source

/*
 * Copyright 2015 Nokia Solutions and Networks
 * Licensed under the Apache License, Version 2.0,
 * see license.txt file for details.
 */
package org.robotframework.red.viewers;

import java.util.Arrays;
import java.util.List;

import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;

public class ViewersCombiningSelectionProvider implements ISelectionProvider {

    private final List<TableViewer> viewers;

    private TableViewer activeViewer;

    public ViewersCombiningSelectionProvider(final TableViewer... viewers) {
        this.viewers = Arrays.asList(viewers);

        for (final TableViewer viewer : viewers) {
            addFocusListener(viewer);
        }
    }

    private void addFocusListener(final TableViewer viewer) {
        viewer.getControl().addFocusListener(new FocusAdapter() {

            @Override
            public void focusGained(final FocusEvent e) {
                activeViewer = viewer;
            }
        });
    }

    @Override
    public void addSelectionChangedListener(final ISelectionChangedListener listener) {

        for (final TableViewer viewer : viewers) {
            viewer.addSelectionChangedListener(listener);
        }
    }

    @Override
    public ISelection getSelection() {
        if (activeViewer == null) {
            return StructuredSelection.EMPTY;
        }
        return activeViewer.getSelection();
    }

    @Override
    public void removeSelectionChangedListener(final ISelectionChangedListener listener) {
        for (final TableViewer viewer : viewers) {
            viewer.removeSelectionChangedListener(listener);
        }
    }

    @Override
    public void setSelection(final ISelection selection) {
        if (activeViewer != null) {
            activeViewer.setSelection(selection);
        }
    }

}