com.minres.scviewer.ui.views.SelectionTableView.java Source code

Java tutorial

Introduction

Here is the source code for com.minres.scviewer.ui.views.SelectionTableView.java

Source

/*******************************************************************************
 * Copyright (c) 2015 MINRES Technologies GmbH 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:
 *     MINRES Technologies GmbH - initial API and implementation
 *******************************************************************************/
package com.minres.scviewer.ui.views;

import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IMarkSelection;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.text.TextViewer;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.ISelectionListener;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.model.WorkbenchLabelProvider;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;

/**
 * This view simply mirrors the current selection in the workbench window.
 * It works for both, element and text selection.
 */
public class SelectionTableView extends ViewPart {

    private PageBook pagebook;
    private TableViewer tableviewer;
    private TextViewer textviewer;

    // the listener we register with the selection service 
    private ISelectionListener listener = new ISelectionListener() {
        public void selectionChanged(IWorkbenchPart sourcepart, ISelection selection) {
            // we ignore our own selections
            if (sourcepart != SelectionTableView.this) {
                showSelection(sourcepart, selection);
            }
        }
    };

    /**
     * Shows the given selection in this view.
     */
    public void showSelection(IWorkbenchPart sourcepart, ISelection selection) {
        setContentDescription(sourcepart.getTitle() + " (" + selection.getClass().getName() + ")");
        if (selection instanceof IStructuredSelection) {
            IStructuredSelection ss = (IStructuredSelection) selection;
            showItems(ss.toArray());
        }
        if (selection instanceof ITextSelection) {
            ITextSelection ts = (ITextSelection) selection;
            showText(ts.getText());
        }
        if (selection instanceof IMarkSelection) {
            IMarkSelection ms = (IMarkSelection) selection;
            try {
                showText(ms.getDocument().get(ms.getOffset(), ms.getLength()));
            } catch (BadLocationException ble) {
            }
        }
    }

    private void showItems(Object[] items) {
        tableviewer.setInput(items);
        pagebook.showPage(tableviewer.getControl());
    }

    private void showText(String text) {
        textviewer.setDocument(new Document(text));
        pagebook.showPage(textviewer.getControl());
    }

    public void createPartControl(Composite parent) {
        // the PageBook allows simple switching between two viewers
        pagebook = new PageBook(parent, SWT.NONE);

        tableviewer = new TableViewer(pagebook, SWT.NONE);
        tableviewer.setLabelProvider(new WorkbenchLabelProvider());
        tableviewer.setContentProvider(new ArrayContentProvider());

        // we're cooperative and also provide our selection
        // at least for the tableviewer
        getSite().setSelectionProvider(tableviewer);

        textviewer = new TextViewer(pagebook, SWT.H_SCROLL | SWT.V_SCROLL);
        textviewer.setEditable(false);

        getSite().getWorkbenchWindow().getSelectionService().addSelectionListener(listener);
    }

    public void setFocus() {
        pagebook.setFocus();
    }

    public void dispose() {
        // important: We need do unregister our listener when the view is disposed
        getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(listener);
        super.dispose();
    }

}