Package org.codemap.util

Source Code of org.codemap.util.SelectionView

package org.codemap.util;

import static org.codemap.util.ID.PACKAGE_EXPLORER;

import org.codemap.CodemapCore;
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 {
 
  public static final String SELECTION_VIEW_ID = CodemapCore.makeID(SelectionView.class);

  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 e) {
        Log.error(e);
      }
    }
  }

  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());
  }

  @Override
  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());
    tableviewer.setSelection(null);

    // 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(PACKAGE_EXPLORER.id, listener);
  }

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

  @Override
  public void dispose() {
    getSite().getWorkbenchWindow().getSelectionService().removeSelectionListener(PACKAGE_EXPLORER.id, listener);
    super.dispose();
  }

}
TOP

Related Classes of org.codemap.util.SelectionView

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.