上下文菜单

popupmenu扩展点是为各种对象上的右键弹出的菜单,添加菜单项的。

主要分为三种:

对象操作(比如文件、工程、String对象等等,当在这些对象上点击右键,怎么添加菜单项到弹出的菜单里面);
对应<extension point="org.eclipse.ui.popupMenus">
<objectContribution
      id="org.eclipse.ui.articles.action.contribution.popup.object"
   objectClass="org.eclipse.core.resources.IFile"
   nameFilter="*.java">
   <filter
         name="projectNature"
         value="org.eclipse.jdt.core.javanature">
      </filter>
      <action
         id="org.eclipse.ui.articles.action.contribution.object.action1"
         label="Object Action 1"
         icon="icons/red_dot.gif"
         menubarPath="additions"
      class="org.eclipse.ui.articles.action.contribution.ObjectAction1Delegate">
      </action>
   </objectContribution>
</extension>
子元素

对象操作必须实现IObjectActionDelegate接口




视图操作,对应 <extension point="org.eclipse.ui.popupMenus">
   <viewerContribution
      id="org.eclipse.ui.articles.action.contribution.popup.navigator"
   //该元素表示为哪个视图提供操作
   targetID="org.eclipse.ui.views.ResourceNavigator">
   <action
         id="org.eclipse.ui.articles.action.contribution.navigator.action1"
         label="View Action 1"
         icon="icons/red_dot.gif"
         menubarPath="additions"
         class="org.eclipse.ui.articles.action.contribution.ViewAction1Delegate"
      enablesFor="!">
      </action>

   <menu
         id="org.eclipse.ui.articles.action.contribution.navigator.subMenu"
         label="View Sub Menu"
         path="additions">
      <separator name="group1"/>
      </menu>
      <action
         id="org.eclipse.ui.articles.action.contribution.navigator.action2"
         label="View Action 2"
         icon="icons/red_dot.gif"
      menubarPath="org.eclipse.ui.articles.action.contribution.navigator.subMenu/group1"
         class="org.eclipse.ui.articles.action.contribution.ViewAction2Delegate"
      enablesFor="1">
      </action>
      <action
         id="org.eclipse.ui.articles.action.contribution.navigator.action3"
         label="View Action 3"
         icon="icons/red_dot.gif"
      menubarPath="org.eclipse.ui.articles.action.contribution.navigator.subMenu/group1"
         class="org.eclipse.ui.articles.action.contribution.ViewAction3Delegate"
      enablesFor="2+">
      </action>
   </viewerContribution>
</extension>子元素;

<viewerContribution> 规定了视图中所有对象的通用操作。

视图操作必须实现IViewActionDelegate接口







添加视图工具栏和下拉子菜单,下面的扩展点是用于添加视图工具栏操作和下拉菜单操作的,如下:
<extension
         point="org.eclipse.ui.viewActions">
      //和<viewerContribution>子元素进行区别,是不同扩展点的子元素
      <viewContribution
            id="com.plugindev.addressbook.example.viewActionTest"
            targetID="com.plugindev.addressbook.views.AddressView">
         <action
               //也要实现IViewActionDelegate接口
               class="com.plugindev.addressbook.example.ViewExampleAction"
               icon="icons/sample.gif"
               id="com.plugindev.addressbook.viewExampleAction"
               label="视图操作"
               menubarPath="com.plugindev/example"
               style="push"
               //添加操作到视图工具栏上
               toolbarPath="additions"
               tooltip="举例说明如何添加视图操作"/>
         <menu
               id="com.plugindev"
               label="下拉菜单示例"
               //添加下拉菜单比较容易,只有定义path属性等于“addtions”即可
               path="addtions">
            <separator name="example"/>
         </menu>
      </viewContribution>
   </extension>







编辑器操作,对应<viewerContribution
      id="org.eclipse.ui.articles.action.contribution.popup.editor"
   targetID="#TextEditorContext"子元素;


为编辑器添加顶层工作台菜单,需要扩展org.eclipse.ui.editorActions扩展点。和前面的添加菜单和工具栏按钮不同,前面的在所有的情况下都会出现添加的操作,而编辑器顶层菜单呢,只有在使用与之关联的特定编辑器时才会出现:

<extension
         point="org.eclipse.ui.editorActions">
      <editorContribution
            id="com.plugindev.addressbook.example.editorActionTest"
            //必须属性,用来与特定的编辑器想关联
            targetID="org.eclipse.ui.DefaultTextEditor">
         <menu
               id="com.plugindev.defaultEditorMenu"
               label="顶层编辑器菜单"
               path="additions">
            <separator name="example"/>
         </menu>
         <action
               class="com.plugindev.addressbook.example.TopEditorAction"
               icon="icons/sample.gif"
               id="com.plugindev.addressbook.TopEditorAction"
               label="顶层编辑操作"
               menubarPath="com.plugindev.defaultEditorMenu/example"
               style="push"
               toolbarPath="Normal/additions"
               tooltip="编辑器操作示例"/>
      </editorContribution>
</extension>

编辑器操作要实现IEditorActionDelegate接口。








快捷键映射

如果要支持快捷键映射,就必须考虑一下三个问题:
1.不同的插件可能会为不相关的操作定义相同的快捷键;
2.插件可能会为相同的操作定义不同的快捷键;
3.插件可能会定义与工作台冲突的快捷键;
因而,eclipse不能直接将操作与快捷键相关联。为了解决该问题,eclipse引入了命令的概念



<extension
         point="org.eclipse.ui.actionSets">
      <actionSet
            id="com.plugindev.addressbook.actionSet"
            label="地址本操作"
            visible="true">
         <menu
               id="AddressBookMenu"
               label="地址本">
            <separator name="content"/>
         </menu>
         <action
               class="com.plugindev.addressbook.actions.OpenAddressViewAction"
               //将某个快捷键通过“命令”这个桥梁和该操作关联起来,
               definitionId="com.plugindev.addressbook.commands.openAddressView"
               icon="icons/sample.gif"
               id="com.plugindev.addressbook.actions.OpenAddressViewAction"
               label="打开视图"
               menubarPath="AddressBookMenu/content"
               toolbarPath="Normal/addition"
               tooltip="在当前透视图中打开地址本视图"/>
      </actionSet>
   </extension>




//通过该扩展点定义一个命令,该命令不包含操作的具体实现,也不和任何操作相关联。
<extension
         point="org.eclipse.ui.commands">
      //命令的类别
      <category
            description="地址本插件添加的命令"
            id="com.plugindev.addressbook.commands"
            name="地址本"/>
      <command
            categoryId="com.plugindev.addressbook.commands"
            description="打开地址本视图"
            //此id可以随便定义,要保证唯一性。以便action引入
            id="com.plugindev.addressbook.commands.openAddressView"
            name="打开地址本"/>


//通过该扩展点可以将命令和快捷键绑定
</extension>
   <extension
         point="org.eclipse.ui.bindings">
      <key
            //定义和哪个命令绑定
            commandId="com.plugindev.addressbook.commands.openAddressView"
            //默认
            contextId="org.eclipse.ui.contexts.window"
            //默认将快捷键添加到eclipse配置中
            schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
            //定义快捷键,快捷键通常由管理键(ALT,COMMAND,CTRL,SHIFT)和普通键组成,普通键一般用大写字母表示,不同键用+分割
            sequence="CTRL+SHIFT+V"/>
   </extension>

这样定义后,就可以在窗口-》定制透视图 的命令选项卡中,找到刚才定义的刚才定义的命令组,打勾表示在当前透视图中显示该操作,否则不显示。

你可能感兴趣的:(菜单)