java - 在 Eclipse 中将对象贡献转换为菜单贡献

标签 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 子菜单。但 MyAction 被禁用。当我右键单击选择 MyTools 时,我还看到 MyACtion 出现在 projectExplorer 窗口以及编辑器中。

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

最佳答案

您应该在菜单贡献上使用 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>

关于java - 在 Eclipse 中将对象贡献转换为菜单贡献,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35448915/

相关文章:

java - 如何从 IResource 对象获取完全限定的类名?

java - 计算与另一个纬度/经度点有米距离的纬度和经度

java - 如何在我的自定义标签中使用 struts bean 标签?

c++ - C++开发是否值得学习Eclipse

java - Eclipse - 内容辅助不适用于对象

java - 如何在 Eclipse 插件中查找 View 的大小?

eclipse - 调用层次结构和查找引用 eclipse 有什么区别?

java - 多线程 GAE 应用程序需要同步吗?

java - Spring Boot Actuator 应用程序无法在 Ubuntu VPS 上启动

java - 使用 Eclipse 插件检测 git 存储库中的代码气味?