操作定义

操作定义是根据标识对操作的声明。 操作定义用来声明语义操作,以便在操作集和编辑器中定义的操作可以将它们本身与特定语义操作定义相关联。 将操作定义与操作实现分开将允许多个插件定义实现相同语义操作的操作。 操作定义是与加速键组合相关联的内容。

工作台在它的 plugin.xml 文件中定义许多常见操作定义, 并鼓励插件将它们自已的操作与这些定义相关联以使其有意义。这样, 在不同的插件中实现的语义上相似的操作可能共享相同的键绑定。

定义操作定义

使用 org.eclipse.ui.actionDefinitions 扩展点定义操作定义。下列代码来自于工作台标记:

<extension
         point="org.eclipse.ui.actionDefinitions">
      <actionDefinition
            id="org.eclipse.ui.file.close">
      </actionDefinition>
      <actionDefinition
            id="org.eclipse.ui.file.closeAll">
      </actionDefinition>
      <actionDefinition
            id="org.eclipse.ui.file.save">
      </actionDefinition>
      ...

定义本身很简单。它只是为语义操作指定标识。 仅当插件将其操作与定义相关联时,操作定义才变得具体。

将操作与操作定义相关联

可以使用代码或在操作集的 plugin.xml 中将操作与操作定义相关联。 您的选择取决于定义操作的位置。

使用代码实现的操作也可以使用 IAction 协议与操作定义相关联。这通常是在创建该操作时完成的。WorkbenchActionBuilder 使用此技术来初始化其操作。

private void makeActions() {
	...
saveAction = new SaveAction(window);
saveAction.setImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT));
saveAction.setHoverImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_HOVER));
saveAction.setDisabledImageDescriptor(WorkbenchImages.getImageDescriptor(IWorkbenchGraphicConstants.IMG_CTOOL_SAVE_EDIT_DISABLED));
partService.addPartListener(saveAction);
saveAction.setActionDefinitionId(saveActionDefId);
	...

这样,实现操作(SaveAction)就与操作定义 saveActionDefId 关联起来了。 什么是 saveActionDefId?快速查看 WorkbenchActionBuilder 中的静态字段定义将显示下列内容:

private static final String saveActionDefId = "org.eclipse.ui.file.save";

最好是为操作定义定义常量以便于使用代码引用它们。

如果在操作集中定义操作,则通常不需要自已实现它。 用户从菜单或键盘调用操作时,工作台将会实现它。在此情况下,可以将操作与 XML 标记中的操作定义相关联。下面显示操作集的试探性标记:

<extension point = "org.eclipse.ui.actionSets">
   <actionSet id="com.example.actions.actionSet"
   label="Example Actions"
   visible="true">
   <action id="com.example.actions.action1"
   menubarPath="additions"
   label="Example Save Action"
   class="org.example.actions.ExampleActionDelegate"
   definitionID="org.eclipse.ui.file.save">
   </action>
		   ...
   </actionSet>
   </extension>

definitionID 属性用来为操作声明操作定义标识。

不管使用哪种技术,将操作与操作定义相关联都将导致为操作定义 org.eclipse.ui.file.save 定义的所有键绑定在适当的时候调用操作。

现在我们考察如何定义这些键绑定。

 

Copyright IBM Corp. and others 2000,2002.