Eclipse4 RCP 指南

视图、弹出以及动态菜单

视图菜单

Part 中的一个菜单可以定义为 View 菜单。

注意:默认的 Eclipse(渲染)框架对于一个 Part 只支持一个菜单。

要添加 View 菜单项,在 Part 下方选择菜单,然后添加一个 ViewMenu 模型项到它。

弹出菜单

你也可以通过应用程序模型为 SWT 控件定义弹出菜单,为包含 SWT 控件的 Part 创建一个弹出菜单。

弹出菜单包含项,例如,一个 HandledMenuItem。

之后,弹出菜单可以指派给一个带有 EMenuService 服务的 SWT 控件,可以通过依赖注入来访问。这个类提供了registerContextMenu(control, id)方法来作此用途。registerContextMenu 方法的参数 id 必须是你的弹出菜单模型元素的 ID 属性。

下面的伪代码演示了一个注册的例子,它用 JFace viewer,因为弹出菜单需要注册到 SWT 控件,例子代码演示了如何访问这个控件。

package com.example.e4.rcp.todo.parts;

import javax.annotation.PostConstruct;

import org.eclipse.e4.ui.services.EMenuService;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Text;

public class TodoOverviewPart {

  @PostConstruct
  public void createControls(Composite parent, EMenuService menuService) {
    // more code...
    TableViewer viewer = new TableViewer(parent, SWT.FULLSELECTION | SWT.MULTI);

    // more code

    // register context menu on the table
    menuService.registerContextMenu(viewer.getControl(), 
        "com.example.e4.rcp.todo.popupmenu.table");
  }
}

如果你希望实现这个例子,在插件的 MANIFEST.MF 文件中必须定义依赖于org.eclipse.e4.ui.workbench.swtorg.eclipse.e4.ui.servicesorg.eclipse.e4.ui.model.workbench 插件。

动态菜单和工具栏项

你也可以通过DynamicMenuContribution模型元素在运行时创建菜单和工具条。

This model element points to a class in which you annotate a method with the annotation. The annotated method is called if the user selects the user interface element.

The @AboutToHide annotation can be used to annotate a method which is called before the menu is hidden.

In these methods you can dynamically adjust the application model.