0

我正在创建一个 RCP 应用程序。我需要用不同的数据打开同一个视图的多个实例。我通过为同一视图的不同实例设置辅助 id 来做到这一点。具体来说,我的问题如下: 请看一下

我有一个名为Views.GraphView. openGraphView我从一个名为显示不同图形的命令中打开了它的不同实例。命令如下:

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

您可以使用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 回答
1

view.getViewSite().getSecondaryId()方法是识别次要视图的好方法。此方法仅返回“主要”视图的 Null 字符串:当用户单击 Window -> Show View - Your View 时打开的那个。

我不明白为什么您的视图工具栏按钮必须对所有视图实例进行操作。在我看来,每个视图实例工具栏中应该有一个按钮,只能在其自己的视图中操作。如果您确实需要从一个按钮操作到所有视图,我认为您必须自己保留打开的视图引用,因为我认为工作台不提供返回视图数组的 findViews 方法。

于 2010-07-08T11:28:29.850 回答
1

使用下面的代码,您应该能够获得当前的活动视图。

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart()
于 2012-10-09T05:15:22.570 回答
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 回答