在eclipse中将对象贡献转换为菜单贡献

时间:2016-02-17 05:52:24

标签: java eclipse eclipse-plugin popupmenu

我有一个使用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>

但是有了这个,我在MyTools上下文菜单下看到MyAction subMenu。但MyAction已被禁用。另外,当我右键单击选择MyTools时,我看到MyACtion出现在projectExplorer窗口和编辑器中。

我想要的是MyAction子菜单应仅出现在MyTools弹出菜单下,并且只有当我右键单击IComponent类型的对象时才会出现此菜单。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

等效于测试activeMenuSelectionactiveMenuEditorInput,右键单击时设置,并检查等效条件。值是迭代的,因此您需要迭代它们来执行测试。请参阅the example on the Eclipse Wiki