Eclipse 用語でのワークベンチ ウィンドウは、通常、メニュー、ツールバー、エディター領域、およびビューを含むウィンドウです。通常、Eclipse RCP アプリケーションには単一のウィンドウが含まれますが、一部のアプリケーションでは複数のウィンドウを作成できます。たとえば、Eclipse IDE では、ウィンドウ メニューから [新しいウィンドウ] を選択して、別のウィンドウを開くことができます。パースペクティブは、各ウィンドウに個別に設定できます。
複数のウィンドウは混乱を招く可能性がありますが、非常に便利な場合もあります。たとえば、ユーザーが 2 つの異なるデータソースで作業しているが、各データソースに対して複数のエディターとビューを開いている場合、2 つのウィンドウを開くと便利です。RCP アプリケーションの 2 つのインスタンスを開くと、同じ効果が得られます。ただし、それには、コードやその他のリソースの複数のコピーをロードする必要があり、データソースごとにアプリケーションを完全に初期化する必要があり、ウィンドウ間の相互通信がより困難になります。
RCP アプリケーションのユーザーが別のウィンドウを開くことができるようにするには、2 つの選択肢があります。
RCP アプリケーションに「新しいウィンドウ」メニュー項目を含めることができます。これは、ワークベンチによって提供されるアクションを RCP アプリケーションに追加することによって実行できます。ActionBarAdvisor クラスを変更します。
フィールド宣言に追加します。
private IWorkbenchAction newWindowAction;
アクションを作成するコード (通常は makeActions と呼ばれるメソッド) に追加します。
newWindowAction = ActionFactory.OPEN_NEW_WINDOW.create(window);
register(newWindowAction);
メニューを作成するコードに追加します。
menu.add(newWindowAction);
ここで、menu は通常、ウィンドウ メニューです。アプリケーションにまだウィンドウ メニューがなく、作成したい場合は、次の行が機能します。
MenuManager menu = new MenuManager( "&Window", IWorkbenchActionConstants.M_WINDOW);
これにより、Eclipse IDE の Window->New Window メニュー項目と同じ方法で新しいウィンドウを作成するメニュー項目が表示されます。
ただし、これでは入力を制御できません。2 番目のウィンドウには、異なるビュー セットとエディターが開いている場合があり、パースペクティブ セットが異なる場合がありますが、「入力」は同じままです。たとえば、Eclipse IDE では 2 番目のウィンドウを開くことができますが、ワークスペースを切り替えると、すべてのウィンドウに適用されます。
新しいウィンドウを作成する 2 つ目の方法は、ページを作成してプログラムで作成することです。これにより、「入力」をウィンドウに設定できます。そのため、あるウィンドウでビューを開くと、同じビューを別のウィンドウで開いた場合とは異なるデータが表示される場合があります。
技術的には、ウィンドウには入力がありません。ページには入力があります。ウィンドウには、最大で 1 ページを含めることができます。一部のメソッド名から、ウィンドウが複数のページを持つことができるように見える場合があります (たとえば、getActivePage は非アクティブなページがあることを意味します)。これらのメソッド名は、複数のページがサポートされていた Eclipse 2.0 の時代からの名残です。
プログラムで新しいページを開くには:
IWorkbenchPage newPage = window.openPage(myInput);
このメソッドは、ウィンドウにまだページが含まれていない場合、指定されたウィンドウに新しいページを作成します。それ以外の場合は、ページを含む新しいウィンドウが作成されます。
入力が異なる複数のウィンドウをサポートする場合は、各ウィンドウを区別するタイトルを各ウィンドウに設定する必要があります。
newPage.getWorkbenchWindow().getShell().setText("My App - " + myInput.getName());
ウィンドウへの入力を変更したい場合があります。ページへの入力を変更することはできないため、既存のページを閉じて新しいページを作成する必要があります。次のコードは、既存のページを閉じます。
IWorkbenchPage activePage = window.getActivePage();
activePage.close();
Eclipse が提供する一部のビューは、ページ入力を使用することに注意してください。たとえば、Common Navigator ビューは、ページ入力をナビゲーション ツリーのルート要素として使用します。
独自のビューからページ入力にアクセスするには、 を呼び出しますsite.getPage().getInput()
。開始するサイト コンテキストがない場合は、次を呼び出して入力を取得します。
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getInput();
「入力」はオブジェクトであることに注意してください。任意のクラスのオブジェクトにすることができます。から戻したらPage::getInput()
、適切なクラスにキャストして戻します。通常、入力となる新しいクラスを作成しないでください。ほとんどの場合、既存のクラスを使用できます。これは通常、オブジェクト モデルの最上位オブジェクトです。Eclipse フレームワークは、この入力を保管し、Page::getInput()
呼び出されたときに戻す以外には何もしません。