2016-02-17 128 views
0

我有一个使用org.eclipse.ui.popupMenus编写的上下文菜单。既然它现在已经被弃用了,我想用org.eclipse.ui.menus来做同样的事情。将对象贡献转换为日食中的菜单贡献

早些时候实施看起来是这样的

<extension 
    point="org.eclipse.ui.popupMenus"> 
    <objectContribution 
     adaptable="true" 
     id="com.xyz.plm.analysis.func.gui.popupOnComponentForCA" 
     objectClass="com.xyz.plm.componentmodel.IComponent"> 
    <action 
      class="com.xyz.plm.analysis.my.gui.MyAction" 
      enablesFor="1" 
      id="com.xyz.plm.analysis.my.gui.MyActionion2" 
      label="Run My Action" 
      menubarPath="com.xyz.plm.ide.ui.myToolsPopupMenu/myToolsGroup" 
      tooltip="Run My Action"> 
    </action> 

我试了一下,到目前为止低于

<extension 
    point="org.eclipse.ui.commands"> 
    <command 
     id="com.xyz.plm.analysis.my.commandmygui" 
     name="Run My Action"> 
    </command> 
</extension> 

<extension 
    point="org.eclipse.ui.handlers"> 
    <handler 
     class="com.xyz.plm.analysis.my.gui.MyAnalysisGui" 
     commandId="com.xyz.plm.analysis.my.commandmygui"> 
    <enabledWhen> 
     <with 
       variable="selection"> 
      <iterate 
       ifEmpty="false" 
       operator="or"> 
       <instanceof 
        value="com.xyz.plm.componentmodel.IComponent"> 
       </instanceof> 
      </iterate> 
     </with> 
    </enabledWhen> 
    </handler> 
</extension> 

<extension 
     point="org.eclipse.ui.menus"> 
    <menuContribution 
     locationURI="popup:com.xyz.plm.ide.ui.myToolsPopupMenu"> 
    <command 
      commandId="com.xyz.plm.analysis.my.commandmygui" 
      label="RunMyACtion" 
      style="push"> 
    </command> 
    </menuContribution> 
</extension> 

但有了这个,我在铭佑上下文菜单中看到MyAction子菜单。但MyAction被禁用。另外我看到MyACtion出现在projectExplorer窗口以及编辑器中,当我右击选择MyTools。

我想要的是MyAction子菜单应该只出现在MyTools popupmenu下,只有当我右键点击IComponent类型的对象时,才会出现这个菜单。

回答

1

您应该在菜单中使用visibleWhen,对于处理程序不应使用enabledWhen。您应该使用adapt而不是instanceof

因此,像:

<extension 
    point="org.eclipse.ui.handlers"> 
    <handler 
     class="com.xyz.plm.analysis.my.gui.MyAnalysisGui" 
     commandId="com.xyz.plm.analysis.my.commandmygui"> 
    </handler> 
</extension> 

<extension 
     point="org.eclipse.ui.menus"> 
    <menuContribution 
     locationURI="popup:com.xyz.plm.ide.ui.myToolsPopupMenu"> 
    <command 
      commandId="com.xyz.plm.analysis.my.commandmygui" 
      label="RunMyACtion" 
      style="push"> 
     <visibleWhen> 
     <with 
       variable="selection"> 
      <iterate 
       ifEmpty="false" 
       operator="or"> 
       <adapt 
        value="com.xyz.plm.componentmodel.IComponent"> 
       </adapt> 
      </iterate> 
     </with> 
     </visibleWhen> 
    </command> 
    </menuContribution> 
</extension> 
0

相当于是测试activeMenuSelectionactiveMenuEditorInput,设置当您单击鼠标右键,并检查等价条件。值是可迭代的,所以你需要遍历它们来执行你的测试。请参阅the example on the Eclipse Wiki