【问题标题】:Converting object contribution to menu contribution in eclipse在eclipse中将对象贡献转换为菜单贡献
【发布时间】:2016-07-07 02:54:11
【问题描述】:

我有一个使用 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 类型的对象时,这个菜单才会出现。

【问题讨论】:

    标签: java eclipse eclipse-plugin popupmenu


    【解决方案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>
    

    【讨论】:

      【解决方案2】:

      等效是测试activeMenuSelectionactiveMenuEditorInput,右键设置,检查等效条件。这些值是可迭代的,因此您需要遍历它们以执行测试。见the example on the Eclipse Wiki

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多