0

RCPアプリケーションを作成しています。同じビューの複数のインスタンスを開く必要がありますが、データは異なります。同じビューのさまざまなインスタンスにセカンダリIDを設定することでそれを行いました。具体的には、私の問題は次のとおりです。ご覧ください

と呼ばれるグラフビューがありますViews.GraphViewopenGraphViewさまざまなグラフを表示するために呼び出されたコマンドから、さまざまなインスタンスを開きました。コマンドは次のとおりです。

page.showView("Views.GraphView", Integer.toString(instanceNum++), IWorkbenchPage.VIEW_ACTIVATE);

TreeLayoutこれで、このツールバーで呼び出されるコマンドがあります。このコマンドViews.GraphViewは、グラフのレイアウトを変更することを想定しており、ビューの各インスタンスで動作します。しかし、このためには、ビューのどのインスタンスがアクティブであるかを特定する必要があると思います。コマンドは次のTreeLayoutようになります。

IViewPart findView =  HandlerUtil.getActiveWorkbenchWindow(event).getActivePage(). findView( "Views.GraphView"); //I think in the findView I need to give the id of the view [but how can I put the secondary id?]

GraphView view = (GraphView) findView;
view.changeLayout();  //I wrote this method in the graph view to change the layout 

//I just tried to print the secondary id, but it did not print anyting
System.out.println("From treelayout command:- " + view.getViewSite().getSecondaryId());

では、ビューのどのインスタンスが現在アクティブであるかを識別し、それを操作するにはどうすればよいですか?

4

4 に答える 4

1

このview.getViewSite().getSecondaryId()方法は、セカンダリビューを識別するのに適しています。このメソッドは、「プライマリ」ビューのNull文字列のみを返します。ユーザーが[ウィンドウ]->[ビューの表示]-[ビュー]をクリックしたときに開いた文字列です。

ビューツールバーボタンがすべてのビューインスタンスで動作する必要がある理由がわかりません。私の目には、各ビューインスタンスツールバーに1つのボタンがあり、それ自体のビューでのみ動作するはずです。1つのボタンからすべてのビューを操作する必要がある場合は、開いているビューの参照を自分で保持する必要があると思います。ワークベンチには、ビュー配列を返すfindViewsメソッドがないためです。

于 2010-07-08T11:28:29.850 に答える
1

IWorkBenchPage.findViewReference(String viewId, String viewId)を使用できます。nullが返された場合、viewId と viewId を持つビューは現在のパースペクティブに存在しません。

ViewReference がある場合は、ViewReference.getView(boolean restore)を使用してビューを取得できます

したがって、ハンドラーで次のようなものが得られます。

final IWorkbenchPage page = HandlerUtil.getActiveWorkbenchWindow(
                    event).getActivePage();
final int instanceNum = 8;//the number of instances that are created
for (int index = 0; index < instanceNum; index++) {
    final IViewReference viewReference = page.findViewReference(
                        "Views.GraphView", Integer.toString(index));
    if (viewReference != null) {
        final IViewPart view = viewReference.getView(true);
        if (view instanceof GraphView) {
            final GraphView graphView = (GraphView) view;
            graphView.changeLayout();
        }
    }
}
于 2010-07-08T08:08:01.700 に答える
0

MessageDialogbox のアクティブなビューとエディター名の表示

public class Active_Workbench extends AbstractHandler{

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        // A part service tracks the creation and activation of parts within a workbench page.
        IPartService service = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getPartService();

        MessageDialog.openInformation(HandlerUtil.getActiveWorkbenchWindow(
                event).getShell(), "Current Workbench Window", service.getActivePart().getTitle().toString());

        return null;
    }
}

この回答がお役に立てば幸いです。

于 2017-02-16T09:21:32.890 に答える