扩展Eclipse视图弹出菜单

转自:http://cnfree2000.spaces.live.com/blog/cns!6201144F025F9D77!426.entry

Eclipse里每种编辑器都有它自己的视图,有时候我们需要在上面添加自己的功能,扩充视图弹出菜单则是必不可少的工作之一。

在一个视图的PopupMenu里增加一个菜单项,含有2种方式:

1、viewerContribution,也就是通过视图的id。这样只有视图id和给定的id一致的时候,它的弹出菜单才会增加我们定义的菜单项。

2、objectContribution,通过对象类型。当在视图里选定的对象类型和给定的一致时,在视图的弹出菜单增加我们定义的菜单项。

菜单项的Action需要继承org.eclipse.ui.actions.ActionDelegate,然后实现特殊的View的ActionDelegate接口。比如要扩展Java编辑器:

publicclassFinderActionDelegateextendsActionDelegateimplements
IEditorActionDelegate{

来看看插件的Plugin.xml的组成部分:

viewerContribution形式:
<extension
point="org.eclipse.ui.popupMenus">
<viewerContribution
targetID="#TextEditorContext"
id="com.cnfree.finder.editor">
<action
label="查找最大ID"
icon="icon/search.gif"
helpContextId="com.cnfree.finder.finderaction"
class="com.cnfree.finder.FinderActionDelegate"
menubarPath="additions"
enablesFor="+"
id="com.cnfree.finder">
</action>
</viewerContribution>
<viewerContribution
targetID="#CompilationUnitEditorContext"
id="com.cnfree.finder.editor">
<action
label="查找最大ID"
icon="icon/search.gif"
helpContextId="com.cnfree.finder.finderaction"
class="com.cnfree.finder.FinderActionDelegate"
menubarPath="additions"
enablesFor="*"
id="com.cnfree.finder">
</action>
</viewerContribution>
</extension> < br /><extension
point="org.eclipse.ui.editorActions">
</extension>

这里我们需要知道扩展的视图它的菜单项在Eclipse插件注册表里定义的id(稍后我会附上Eclipse插件菜单项ID注册表)。比如Java编辑器对应的ID为:
#TextEditorContext和#CompilationUnitEditorContext,我们定义好targetID,就把我们的插件id指向视图菜单的id了。这样Java编辑器就会添加我们的菜单项了。

<!ATTLISTaction
idCDATA#REQUIRED
labelCDATA#REQUIRED
menubarPathCDATA#IMPLIED
toolbarPathCDATA#IMPLIED
iconCDATA#IMPLIED
disabledIconCDATA#IMPLIED
hoverIconCDATA#IMPLIED
tooltipCDATA#IMPLIED
helpContextIdCDATA#IMPLIED
style(push|radio|toggle)"push"
state(true|false)
classCDATA#REQUIRED
enablesForCDATA#IMPLIED>
< br />此元素定义用户可在用户界面中调用的操作。


  • id-用作此操作的引用的唯一标识。
  • label-用作菜单项文本或工具栏按钮标签的可翻译名称。此名称可包括助记符信息。
  • menubarPath-用来指定下拉菜单中此操作位置的以斜杠(“/”)定界的路径。路径中的每个标记(最后一个标记除外)都必须表示层次结构中现有菜单的有效标识。最后一个标记表示要将操作添加到其中的命名组。如果省略了路径,则此操作将不会出现在下拉菜单中。
  • toolbarPath-目标视图的本地工具栏内的命名组。如果该组不存在,则将创建它。如果省略该项,则操作将不会出现在本地工具栏中。
  • icon-用来在操作的上下文中可视地表示操作的图标的相对路径。如果省略该项且操作出现在工具栏中,则“工作台”将使用占位符图标。该路径是相对于添加插件的plugin.xml文件的位置的。图标将出现在工具栏中,但是不会出现在下拉菜单中。
  • disabledIcon-当禁用操作时,用于在操作的上下文中可视地表示操作的图标的相对路径。如果省略该项,则正常图标将变灰。该路径是相对于添加插件的plugin.xml文件的位置的。禁用的图标将出现在工具栏中,但是不会出现在下拉菜单中。
  • hoverIcon-当鼠标指针位于操作上时,用来在操作的上下文中可视地表示操作的图标的相对路径。如果省略此项,则将使用正常图标。该路径是相对于添加插件的plugin.xml文件的位置的。
  • tooltip-表示操作的工具提示的可翻译文本。仅当操作出现在工具栏中时才使用。
  • helpContextId-一个指示此操作的帮助上下文的唯一标识。如果操作作为菜单项出现,则在突出显示该菜单项时按F1键将显示帮助。
  • style-用来定义操作的用户界面样式类型的可选属性。如果定义了此项,则属性值将是下列其中一项:
    push-作为普通菜单项或工具项。
    radio-作为单选样式菜单项或工具项。同一菜单或工具栏组内具有单选样式的操作相当于单选按钮集。初始值由state属性指定。
    toggle-作为复选样式菜单项或切换工具项。初始值由state属性指定。
  • state-指示初始状态(true或false)的可选属性,当style属性具有值radio或toggle时使用。
  • class-实现org.eclipse.ui.IViewActionDelegate的标准类的名称。
  • enablesFor-指示必须满足才能启用操作的选择计数的值。如果指定了此属性并且满足条件,则启用操作。如果条件不满足,则禁用操作。如果没有指定任何属性,则对选择了任意数目的项启用操作。下列属性格式受支持:!-选择了零项
    ?-选择了零项或一项
    +-选择了一项或多项
    multiple,2+-选择了两项或多项
    n-选择了精确数目的项。例如:nablesFor="4"仅当选择了4个项时才启用操作。
    *-选择了任意数目的项

objectContribution形式:

<objectContributionobjectClass="com.cnfree.action.IOpenable">
<action
id="com.cnfree.open"
menubarPath="new.ext"
definitionID="com.cnfree.open.selection"
label="&Open@Ctrl+O"
tooltip="Opentheselecteditem(s)"
helpContextId="com.cnfree.open.selection"
icon="icon/open.gif"
class="com.cnfree.action.Op enSelectedActionDelegate"
enablesFor="+">
</action>
</objectContribution>

actionOpen实现了IOpenable,这样就意味着,所有包含了IOpenable对象的视图,当我们选中其中的IOpenable对象时,它的弹出菜单都会增加我们自定义的菜单项。

附带的例子:
cnfreeeditorplugin

使用说明:建立一个Java文件,在它的注释里添加xxx.yyy,xxx为一个类名,yyy为一个三位数ID,比如cnfee.100,cnfree.101,cnfree.102,在Java透视图里打开这个Java文件,右键菜单会有一个选项:查找最大ID,打开后输入cnfree,它就会自动找到cnfree.102,并将该字符串高亮显示。

Eclipse插件菜单ID注册表参考:http://www.jdg2e.com/ch21.actions.table/doc/

参考资料:
http://www.eclipsesource.com/EN_ARCHIVE/etips_07072004.html
Eclipse帮助:org.eclipse.platform.doc.isv/guide/workbench_basicext_popupMenus.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值