ワークベンチの詳細

ワークベンチは、複雑なユーザー・インターフェースを作成するため、多くのクラスおよびインターフェースのセットを提供します。 これらをすべて理解していなくても、単純な作業を行うことができます。 ここでは、最初に、 ワークベンチのユーザー・インターフェースに見られる概念と、その対応する構造について説明します。

ワークベンチ

ワークベンチ とは、大ざっぱに言うと、「プラットフォームの始動時に開くウィンドウ」のことです。 もう少し詳しくワークベンチを構成するビジュアル・コンポーネントの一部を見てみましょう。

ページに 3 つのビューと 1 つのエディターがあるワークベンチ

以後の説明において、用語「ワークベンチ」は、ワークベンチ・ウィンドウ (IWorkbenchWindow) を指します。 ワークベンチ・ウィンドウは、ワークベンチにおけるトップレベルのウィンドウです。これは、 メニュー・バー、ツールバー、状況表示行、ショートカット・バー、およびページを含むフレームです。 通常、ワークベンチ・ウィンドウをプログラミングする必要はありません。ウィンドウを確認するだけで十分です。

注:  複数のワークベンチ・ウィンドウを開くことができます。 ただし、それぞれのワークベンチ・ウィンドウには、多数の内臓タイプのエディターとビューが含まれるため、1 つのウィンドウだけに焦点を当てます。

ユーザーから見たワークベンチには、ビューおよびエディターが含まれています。 その他にも、ワークベンチ・ウィンドウを実装するために使用されるクラスがいくつかあります。 

ページ

ワークベンチ・ウィンドウの内部には、パーツを含む 1 つのページ (IWorkbenchPage) があります。 ページは、パーツをグループ化するための実装メカニズムです。 通常、ページはプログラミングの必要はありませんが、プログラミングおよびデバッグの観点から参照します。

パースペクティブ

パースペクティブは、ワークベンチ・ページ内で追加の編成レイヤーを提供します。 パースペクティブは、ビュー、そのレイアウト、 および指定されたユーザー・タスクに適用できるアクションの適切なコレクションを定義します。 ユーザーは、パースペクティブが複数のタスク間に渡る場合に、パースペクティブを切り替えることができます。 実装の観点では、ユーザーのアクティブ・パースペクティブは、 ワークベンチ・ページにどのビューを表示するか、およびその位置とサイズを制御します。 エディターは、パースペクティブの変更の影響を受けません。

ビューおよびエディター

ビューおよびエディターについては、 実装の詳細だけでなく、共通のプラグイン・プログラミングについても説明します。 ワークベンチにビジュアル・コンポーネントを追加する場合、 ビューまたはエディターを実装するかどうかを決める必要があります。 これは、次のようにして決定します。

いずれの場合も、共通のライフ・サイクルに応じてビューまたはエディターを作成します。

このライフ・サイクルを通じて、含んでいるワークベンチ・ページからはイベントが発行され、 ビューおよびエディターを開いたり、活動化、非活動化、また閉じることについて関係するパーティーに通知が行われます。

このように単純な点がワークベンチのビューおよびエディターの利点です。 ビューやエディターはウィジェットのホルダーであり、必要に応じて、単純化、または複雑化することができます。 ハロー・ワールド・ビューを作成した前の例では、最も単純なビューを参照しました。 内容の詳細を説明したので、ここでもう一度見てみましょう。

   package org.eclipse.examples.helloworld;

   import org.eclipse.swt.widgets.Composite;
   import org.eclipse.swt.widgets.Label;
   import org.eclipse.swt.SWT;
   import org.eclipse.ui.part.ViewPart;

   public class HelloWorldView extends ViewPart {
      Label label;
      public HelloWorldView() {
      }
      public void createPartControl(Composite parent) {
         label = new Label(parent, SWT.WRAP);
         label.setText("Hello World");
      }
      public void setFocus() {
         // set focus to my widget.  For a label, this doesn't
         // make much sense, but for more complex sets of widgets
         // you would decide which one gets the focus.
      }
   }

ここで dispose() メソッドを実装する必要はなかったことに注意してください。 これは、createPartControl(parent) メソッドでラベルの作成のみを行っているためです。 イメージやフォントなどの UI リソースを割り振った場合には、ここでその廃棄を行うことになります。 ViewPart クラスを拡張しているため、 dispose() の「何もしない」実装を継承しています。