- 介绍
在Eclipse中,菜单是非常重要的一个角色,下面就介绍如何自定义菜单。 菜单包括有主菜单、视图菜单、上下文菜单。 Eclipse提供了两种方式扩展菜单,分别是通过org.eclipse.ui.commands和org.eclipse.ui.actionSets。
- 扩展点org.eclipse.ui.actionSets
[codesyntax lang="xml"]
1<extension point="org.eclipse.ui.actionSets"> 2<actionSet label="EasyShell Action Set" 3 visible="true" 4 id="org.suren.easyshell.actionSet"> 5 <menu label="Explorer &Menu" 6 id="suren.menu"> 7 <separator 8 name="surenGroup"> 9 </separator> 10 </menu> 11 <action label="&Explorer Action" 12 icon="icons/fldr_obj.gif" 13 class="org.suren.easyshell.actions.ExplorerAction" 14 tooltip="Explorer Resources" 15 menubarPath="suren.menu/surenGroup" 16 toolbarPath="surenGroup" 17 id="org.suren.easyshell.actions.ExplorerAction"> 18 </action> 19</actionSet> 20</extension>
[/codesyntax]
- org.eclipse.ui.actionSets实现类
可以实现接口org.eclipse.ui.IWorkbenchWindowActionDelegate 这种方式并没有把界面和实现分离,而下面的commands的方式确做到了分离的效果。
- 扩展点org.eclipse.ui.commands
[codesyntax lang="xml"]
1<extension point="org.eclipse.ui.commands"> 2 <command categoryId="org.suren.easyshell.command.category" 3 id="org.suren.easyshell.command.shellExplore" 4 name="Easy Shell Explore" /> 5</extension> 6 7<extension point="org.eclipse.ui.handlers"> 8 <handler class="org.suren.easyshell.command.EasyShellCommand" 9 commandId="org.suren.easyshell.command.command.shellExplore"> 10 </handler> 11</extension> 12 13<extension point="org.eclipse.ui.menus"> 14 <command 15 categoryId="org.suren.easyshell.command.command.category1" 16 id="org.suren.easyshell.command.command.shellExplore" 17 name="Easy Shell Explore"> 18 </command> 19 20 <menuContribution locationURI="popup:org.eclipse.ui.popup.any?before=additions"> 21 <menu id="com.tetrade.eclipse.plugins.easyshell.menu" 22 label="Easy Shell"> 23 <command 24 commandId="org.suren.easyshell.command.command.shellExplore" 25 icon="icons/fldr_obj.gif" 26 label="Explore..." 27 style="push"> 28 </command> 29 </menu> 30 </menuContribution> 31 32 <menuContribution 33 locationURI="toolbar:org.eclipse.ui.main.toolbar?after=additions"> 34 <toolbar id="org.suren.easyshell.toolbars.shellExplore"> 35 <command commandId="org.suren.easyshell.command.command.shellExplore" 36 icon="icons/fldr_obj.gif" 37 tooltip="Explore..." 38 id="org.suren.easyshell.toolbars.shellExplore.cmd"> 39 </command> 40 </toolbar> 41 </menuContribution> 42</extension>
[/codesyntax] menuContribution的语法:locationURI="[scheme]:[id]?[argument-list]" scheme表明了菜单应该出现的区域——menu为视图的下拉菜单,toolbar为视图的工具栏 id为菜单区域的id argument-list为该菜单项出现在菜单的位置,这里的参数常见的如:after=additions。如果你想要把你的菜单项放到一个确切的菜单项后面的话,把additions修改为那个菜单项的id即可。
- org.eclipse.ui.commands实现类
步骤如下:
- 通过org.eclipse.ui.commands来扩展命令(类别category)
- 通过org.eclipse.ui.menus来指定命令在哪里出现
- 通过org.eclipse.ui.handlers指定命令的实现类
[codesyntax lang="java"]
1package org.suren.easyshell.actions; 2 3import org.eclipse.jface.action.IAction; 4import org.eclipse.jface.viewers.ISelection; 5import org.eclipse.ui.IWorkbenchWindow; 6import org.eclipse.ui.IWorkbenchWindowActionDelegate; 7import org.eclipse.jface.dialogs.MessageDialog; 8 9public class ExplorerAction implements IWorkbenchWindowActionDelegate { 10 private IWorkbenchWindow window; 11 public ExplorerAction() { 12 } 13 14 public void run(IAction action) { 15 MessageDialog.openInformation( 16 window.getShell(), 17 "SEasyshell", 18 "Hello, Eclipse world"); 19 } 20 21 public void selectionChanged(IAction action, ISelection selection) { 22 } 23 24 public void dispose() { 25 } 26 27 public void init(IWorkbenchWindow window) { 28 this.window = window; 29 } 30}
[/codesyntax] 要实现上下文的菜单扩展的话,要使用org.eclipse.ui.popupMenus来实现。
- 参考
http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-menuext/ http://www.fengfly.com/plus/view-179398-1.html