首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在eclipse中将对象贡献转换为菜单贡献

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

Stack Overflow用户
提问于 2016-02-17 05:52:23
回答 2查看 492关注 0票数 0

我有一个使用org.eclipse.ui.popupMenus编写的上下文菜单。由于现在不推荐使用org.eclipse.ui.menus,所以我也想使用它。

以前的实现如下所示

代码语言:javascript
复制
 <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>

到目前为止,我尝试的是下面的内容

代码语言:javascript
复制
<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 subMenu在MyTools上下文菜单下。但是MyAction是禁用的。此外,当我右键单击select MyACtion时,我看到projectExplorer窗口和编辑器中都出现了MyTools。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-17 08:19:54

您应该在菜单贡献上使用visibleWhen,而对处理程序不使用enabledWhen。您可能应该使用adapt而不是instanceof

所以,就像:

代码语言:javascript
复制
<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>
票数 2
EN

Stack Overflow用户

发布于 2016-07-06 18:54:11

等价物是测试activeMenuSelectionactiveMenuEditorInput,在右键单击时设置,并检查等效条件。这些值是可迭代的,因此您需要对它们进行迭代以执行测试。见Eclipse的示例

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35448915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档