blob: 6ccee8c3512e3294d210a11cb19f1b292bdb2d76 [file] [log] [blame]
package com.mountainminds.eclipse.selectionsample;
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 SelectionView 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 != SelectionView.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();
}
}