S-JIS[2013-12-28/2014-12-01] 変更履歴

ビュー

Eclipseプラグイン開発のビューのメモ。


概要

ビューは、情報を表示する為の領域。
(編集する目的ではエディターを使う)

通常の操作では、Eclipseのメニューバーの「ウィンドウ(W)」→「ビューの表示(V)」でビューを開くことが出来る。
(ワークベンチ内に同じビューを複数開くことは出来ない)
プログラムからビューを開く例


ビューを開く例

プログラム内からビューを開く例。

import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.WorkbenchPart;
	String ID = "org.eclipse.ui.views.ProblemView";

	WorkbenchPart part = 〜; //エディターとか
	IWorkbenchPage page = part.getSite().getWorkbenchWindow().getActivePage();
	try {
		/* IViewPart view = */ page.showView(ID, null, IWorkbenchPage.VIEW_VISIBLE);
	} catch (PartInitException e) {
		/* IViewPart view = */ page.findView(ID);
	}
ビューID ビュー
org.eclipse.ui.views.ContentOutline アウトラインビュー
org.eclipse.ui.views.PropertySheet プロパティービュー
org.eclipse.ui.views.TaskList タスクビュー
org.eclipse.ui.views.ProblemView 問題ビュー
org.eclipse.ui.console.ConsoleView コンソールビュー

独自のビューを作成する例

独自のビューを作るには、ViewPartを継承する。

ExampleView.java:

package jp.hishidama.example.view;

import org.eclipse.ui.IPartListener;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.part.ViewPart;
public class ExampleView extends ViewPart implements IPartListener {

	public static final String ID = "jp.hishidama.example.view.examleView";
	private TreeViewer viewer;

	@Override
	public void createPartControl(Composite parent) {
		// ビューの内容は普通にSWTで作成する
		this.viewer = new TreeViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
		〜

		IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage();
		page.addPartListener(this);
	}
	@Override
	public void dispose() {
		IWorkbenchPage page = getSite().getWorkbenchWindow().getActivePage();
		page.removePartListener(this);

		super.dispose();
	}
	@Override
	public void setFocus() {
	}
	// ビューが開かれた時とか閉じられた時とか
	@Override
	public void partOpened(IWorkbenchPart part) {
	}

	@Override
	public void partClosed(IWorkbenchPart part) {
	}

	@Override
	public void partActivated(IWorkbenchPart part) {
	}

	@Override
	public void partDeactivated(IWorkbenchPart part) {
	}

	@Override
	public void partBroughtToTop(IWorkbenchPart part) {
	}
}

plugin.xml:

   <extension
         point="org.eclipse.ui.views">
      <category
            id="jp.hishidama.example.views.category"
            name="My Example">
      </category>
      <view
            category="jp.hishidama.example.views.category"
            class="jp.hishidama.example.view.ExampleView"
            id="jp.hishidama.example.view.exampleView"
            name="Example View"
            restorable="true">
      </view>
   </extension>

ビューの位置

ビューの位置はパースペクティブの定義で指定する。[2014-02-23]

plugin.xml:

   <extension
         point="org.eclipse.ui.perspectiveExtensions">
      <perspectiveExtension
            targetID="org.eclipse.jdt.ui.JavaPerspective">
         <view
               id="jp.hishidama.example.view.exampleView"
               relationship="stack"
               relative="org.eclipse.ui.views.ResourceNavigator"
               visible="true">
         </view>
      </perspectiveExtension>
   </extension>

relativeとrelationshipは、既存のビューに対して自分のビューをどの位置に配置するかを指定する。

visibleをtrueにしておくと、パースペクティブを(初めて)開いたときに自動的にビューを表示する。


選択状態

自分のビューの選択状態(ISelection)を返すには、ISelectionProviderを登録しておく必要がある。[2014-11-29]

import org.eclipse.jface.viewers.StructuredSelection;
	@Override
	public void createPartControl(Composite parent) {
〜
		getSite().setSelectionProvider(new SelectionProviderAdapter());
	}
	// 選択状態をセット
	protected void setSelection(Object element) {
		getSite().getSelectionProvider().setSelection(new StructuredSelection(element));
	}

package jp.hishidama.eclipse_plugin.jface;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.jface.util.SafeRunnable;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
public class SelectionProviderAdapter implements ISelectionProvider {

	private final List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();

	private ISelection theSelection = StructuredSelection.EMPTY;
	@Override
	public void addSelectionChangedListener(ISelectionChangedListener listener) {
		listeners.add(listener);
	}

	@Override
	public void removeSelectionChangedListener(ISelectionChangedListener listener) {
		listeners.remove(listener);
	}
	@Override
	public void setSelection(ISelection selection) {
		theSelection = selection;

		final SelectionChangedEvent event = new SelectionChangedEvent(this, selection);

		for (final ISelectionChangedListener listener : listeners) {
			SafeRunner.run(new SafeRunnable() {
				@Override
				public void run() {
					listener.selectionChanged(event);
				}
			});
		}
	}

	@Override
	public ISelection getSelection() {
		return theSelection;
	}
}

ビュー用のコンテキストメニュー

独自ビュー用のコンテキストメニューを作る例。[2014-12-01]

import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.ui.IWorkbenchActionConstants;
public class ExampleView extends ViewPart implements IPartListener {

	private static final String MENU_ID = "com.example.ui.exampleView";

	private static final String CONTEXT_MENU_ID = "ExampleViewContextMenu";

	private TreeViewer viewer;
	@Override
	public void createPartControl(Composite parent) {
		this.viewer = new TreeViewer(parent, SWT.BORDER | SWT.FULL_SELECTION);
〜
		configureContextMenu();
	}
	protected void configureContextMenu() {
		MenuManager menuManager = new MenuManager(CONTEXT_MENU_ID, CONTEXT_MENU_ID);
		menuManager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
		menuManager.setRemoveAllWhenShown(true);

		Menu contextMenu = menuManager.createContextMenu(this.viewer.getTree());
		this.viewer.getTree().setMenu(contextMenu);
		getSite().registerContextMenu(MENU_ID, menuManager, this.viewer);
	}
}

plugin.xml:

   <extension point="org.eclipse.ui.menus">
      <menuContribution
            locationURI="popup:com.example.ui.exampleView?after=additions">

      </menuContribution>
   </extension>

Eclipseプラグインへ戻る / Eclipseへ戻る / 技術メモへ戻る
メールの送信先:ひしだま