插件的视图和编辑器实现与现有工作台操作语义相似的操作(如剪贴板剪切/复制/粘贴、视图刷新或属性)是很常见的。 如果每个视图或编辑器都不得不为这些操作定义唯一操作并将它们包括在菜单中, 则视图和编辑器的弹出菜单可能变得很混乱。
为了解决此问题,工作台定义可以由任何视图或编辑器处理的可重定目标(也称为全局)操作。 当视图或编辑器活动时,如果用户从工作台菜单或工具栏选择该操作, 将运行它的处理程序。这允许视图和编辑器对语法相似的操作共享工作台菜单空间。
IWorkbenchActionConstants 描述所有的工作台操作并将可重定目标操作指示为全局。 例如,以下是属性操作的定义。
public static final String PROPERTIES = "properties"; // Global action.
下表总结由视图或编辑器实现的一些更常见的可重定目标操作:
文件菜单 | 编辑菜单 | 浏览菜单 | 项目菜单 | |
视图 | 移动 重命名 刷新 属性 |
进入 转至资源 与编辑器同步 上一步 下一步 向上 下一个 上一个 |
打开 关闭 构建 重建 |
|
编辑器 | 回复 打印 |
查找 | ||
视图和编辑器 | 剪切 复制 粘贴 删除 全部选中 撤销 重做 |
使用 RetargetAction 创建可重定目标操作。 以下代码片段来自于 WorkbenchActionBuilder。
propertiesAction = createGlobalAction(IWorkbenchActionConstants.PROPERTIES, "file", false);
createGlobalAction 向我们精确显示如何建立 RetargetAction。
private RetargetAction createGlobalAction(String id, String actionDefPrefix, boolean labelRetarget) { RetargetAction action; if (labelRetarget) { action = new LabelRetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } else { action = new RetargetAction(id, WorkbenchMessages.getString("Workbench." + id)); } ... return action; }
创建可重定目标操作时,工作台为该操作指定标识和缺省标号。 注意有两种样式的重定目标操作。RetargetAction 只允许视图或编辑器重新实现操作。LabelRetargetAction 也允许视图和编辑器重新设置操作的标号。这对于使菜单标号更具体(如将撤销操作重新标号为撤销输入)是很有用的。
现在我们知道了工作台如何定义重定目标操作。 接下来考察视图或编辑器如何提供重定目标操作的实现。 这由设置全局操作处理程序完成。