java视图扩展_扩展Eclipse视图弹出菜单

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

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

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

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

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

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

public class FinderActionDelegate extends ActionDelegate implements

IEditorActionDelegate {

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

viewerContribution形式:

point="org.eclipse.ui.popupMenus">

targetID="#TextEditorContext"

id="com.cnfree.finder.editor">

label="查找最大ID"

icon="icon/search.gif"

helpContextId="com.cnfree.finder.finderaction"

class="com.cnfree.finder.FinderActionDelegate"

menubarPath="additions"

enablesFor="+"

id="com.cnfree.finder">

targetID="#CompilationUnitEditorContext"

id="com.cnfree.finder.editor">

label="查找最大ID"

icon="icon/search.gif"

helpContextId="com.cnfree.finder.finderaction"

class="com.cnfree.finder.FinderActionDelegate"

menubarPath="additions"

enablesFor="*"

id="com.cnfree.finder">

< br />   

point="org.eclipse.ui.editorActions">

这里我们需要知道扩展的视图它的菜单项在Eclipse插件注册表里定义的id(稍后我会附上Eclipse插件菜单项ID注册表)。比如Java编辑器对应的ID为:

#TextEditorContext 和 #CompilationUnitEditorContext,我们定义好 targetID,就把我们的插件id指向视图菜单的id了。这样Java编辑器就会添加我们的菜单项了。

id            CDATA #REQUIRED

label         CDATA #REQUIRED

menubarPath   CDATA #IMPLIED

toolbarPath   CDATA #IMPLIED

icon          CDATA #IMPLIED

disabledIcon  CDATA #IMPLIED

hoverIcon     CDATA #IMPLIED

tooltip       CDATA #IMPLIED

helpContextId CDATA #IMPLIED

style         (push|radio|toggle) "push"

state         (true | false)

class         CDATA #REQUIRED

enablesFor    CDATA #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形式:

id="com.cnfree.open"

menubarPath="new.ext"

definitionID="com.cnfree.open.selection"

label="&Open@Ctrl+O"

tooltip="Open the selected item(s)"

helpContextId="com.cnfree.open.selection"

icon="icon/open.gif"

class="com.cnfree.action.Op enSelectedActionDelegate"

enablesFor="+">

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

附带的例子:

cnfree editor plugin

使用说明:建立一个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值