本文为《eclipse插件开发学习笔记》的笔记,用于本人复习使用。
添加工作台窗口操作
-
定制操作集 actionSet
id——引用该操作集所使用的唯一标识符
label——用户可见的该操作集的名称
visible——该属性可见性的布尔值 -
定制工作台菜单 menu
id——用于菜单的唯一标识符
label——出现在菜单栏中的菜单名称
path——表示在菜单中的插入点
插入点用来定义菜单出现的位置,例如希望将菜单放入“帮助”菜单中,其属性应设为help/additions。
seperator元素和groupMarker元素,用来分离不同的组,只有name一个属性。 -
定制操作菜单项 action
id,label同上
icon——该操作相关联的图像
menubarPath——该操作出现在菜单中的位置
菜单id/separator名
toolbarPath——该操作出现在工具栏中的位置
工作台工具栏标识符/工具栏的组
tooltip——鼠标悬浮时的提示信息
class——一个实现了IWorkbencWindowActionDelegate或实现了IWorkbencWindowPulldownDelegate接口的类的全名(包含其包的名字)。这个类作为Action的代理。 -
实现操作代理类
编写run方法(下文会详细介绍)
IAction与IActionDelegate接口
IActionDelegate接口的子类型:
-
IWorkbenchWindowDelegate为工作台窗口的菜单栏和工具栏提供生命周期事件
-
IEditorActionDelegate为编辑器中的操作代理提供生命周期事件
-
IObjectActionDelegate为快捷键相关联的操作代理提供生命周期事件
-
IViewActionDelgate为视图中的操作代理提供生命周期事件
Eclipse的操作由插件清单中操作XML声明、用来代表这个操作的UI实例化的IAction对象、插件清单中定义的实现了IActionDelegate的类。
Eclipse工作台根据清单中的描述(标题、图标、工具提示等)实例化了一个IAction对象,将Action对象变为真实动作的代理,但不能执行实际操作。执行操作的任务交给了实现了IActionDelegate的类。
IActionDelegate类提供给了两个方法
- selectionChange
插件清单的操作声明提供了操作的初始状态,此方法提供了一个使用IAction接口动态的调整状态
- run
当用户在有效状态下选择某个操作后,该方法将被调用,操作真正得到执行。一般selectionChange方法会在run方法之前执行。
对象操作
基于用户选中的对象不同,出现的操作也不同。如Eclipse的包资源管理器
-
添加对象操作
使用插件清单编辑器的“扩展”页面创建新的对象添加行为。添加“org.eclipse.ui.popupMenus"扩展,新疆一个objectContribution。其有四个属性
id——添加操作的唯一标识符
nameFilter——通配符过滤器,该锅炉其指定可以接受目标的名称。例如,“*.java”,只包括java文件。也可指定具体名称。
adaptable——适配IResourse的时可接受的目标,默认该属性为False。
objectClass——知识可以接受的目标对象类型。
设置好对象后,再为其设置上下文菜单。 -
Action类实现IObjectActionDelegate接口
setActivePart()——为代理指定当前活动的部分
selectionChanged)——响应选择部分的更改
run()——操作运行的主要方法
注:在没有创建Action类,便运行程序的情况下,编译器不会报错,当单击新创建的操作时,会弹出对话框,提示该操作目前不可用。
视图操作
- 添加视图的上下文菜单(比如在空白区域右击出现的菜单)
与objectContribution同属于一个扩展点, 与其不同的是,viewerContribution不是针对视图中的对象决定应出现的上下文菜单,而是根据查看器(viewer)的类型而选择。与objectContribution都是popupMenus的一个子元素,添加 扩展和元素,编辑属性的方法也同前者类似。
targetID——表示该viewerContribution将为哪个视图提供操作。
<viewerContribution
id="com.plugindev.addressbook.example.viewerActionTest"
targetID="com.plugindev.addressbook.views.AddressView">
<menu
id="com.plugindev.viewToolbarMenu"
label="示例工具栏菜单"
path="additions">
<separator name="example"/>
</menu>
<action
class = "com.plugindev.addressbook.example.ViewerExampleAction"
enablesFor="+"
id="com.plugindev.addressbook.example.ViewerExampleAction"
label="查看器示例操作"
menubarPath="com.plugindev.viewToolbarMenu/example"
tooltip="举例说明如何添加查看器操作"/>
</viewerContribution>
- 添加视图的工具栏
添加视图的工具栏要使用一个新的扩展点 org.eclipse.ui.viewActions。扩展点包含viewContribution,与viewerContribution不同。
Action类依旧需要实现IViewActionDelegate。
Style属性——定义可见形式的属性(同样适用于操作)
push:普通菜单或工具栏
radio:单选按钮样式的菜单或工具栏项,其中一个在组中,所有单选样式的项一次只有一个项是活动的。
toggle:选择的菜单项或切换的工具箱。
pulldown:子菜单或下拉工具栏菜单。
<extension
point="org.eclipse.ui.viewActions">
<viewContribution
id="com.plugindev.addressbook.example.viewActionTest"
targetID="com.plugindev.addressbook.views.AddressView">
<action
class="com.plugindev.addressbook.example.ViewExampleAction"
icon="icons/sample.gif"
id="com.plugindev.addressbook.ViewExampleAction"
label="视图操作"
style="push"
toolbarPath="additions"
tooltip="举例说明如何添加视图操作"/>
</viewContribution>
</extension>
- 添加视图的下拉子菜单
添加视图下拉子菜单的操作很简单,只需要定义一个菜单,将其path设为addtions,然后在操作中加入menubarPath即可。
效果图:
menubarPath = "com.plugindev.addressViewPullDownMenu/example"
<menu
id="com.plugindev.addressViewPullDownMenu"
label="下拉菜单示例"
path="additions">
<separator name = "example"/>
</menu>
- 实现IViewActionDelegate接口
实现IViewActionDelegate和IObjectActionDelegate接口类似,只是实现IViewActionDelegate没有setActivePart()方法,增加了init()方法。IViewActionDelegate与IViewerActionDelegate的代码类似
private IWorkbenchPart targetPart;
@Override
public void init(IViewPart view) {
// TODO Auto-generated method stub
this.targetPart = view;
}
编辑器操作
(待学完编辑器一章后详细补充)
- 创建编辑器上下文操作
需要使用org.eclipse,ui.popupMenus扩展点的viewerContribution元素,子需要将其中的TargetID写为编辑器上下文菜单的标识符即可。
<viewerContribution
id="com.plugindev.addressbook.example.editorActionTest"
targetID = "#TextEditorContext">
<menu
id="com.plugindev.defaultEditorMenu"
label="示例编辑器菜单"
path="additions">
<separator name="example"/>
</menu>
<action
class = "com.plugindev.addressbook.example.EditorExampleAction"
icon = "icons/sample.gif"
id="com.plugindev.addressbook.editorExampleAction"
label="编辑器操作"
menubarPath = "com.plugindev.defaultEditorMenu/example"
tooltip="举例说明如何添加编辑器操作"/>
</viewerContribution>
- 添加顶层工作台菜单
使用org.eclipse.ui.editor.Actions扩展点。
为编辑器添加的顶层工作台菜单只有当使用与之相关联的特定的编辑器时才会出现。
targetID——必选属性,用来与特定的编辑器相关联。