org.eclipse.ui.menus的名称过滤器 - 也适用于编辑器视图

时间:2016-12-20 11:03:33

标签: java eclipse plugins menu contextmenu

我有一个由此扩展点定义的菜单:org.eclipse.ui.menus。 它的位置URI是popup:org.eclipse.ui.popup.any,这意味着它也可以从不同的资源管理器视图和编辑器视图中显示(右键单击代码上的某个位置)。

我希望此菜单仅显示某些扩展程序。我使用了来自here的greg的答案,它对于资源管理器的观点非常有用。 如何为编辑器视图执行相同的过滤器

我希望以某种方式更改它,如果有人右键单击文件的编辑器视图(以及浏览器视图),只有当它是“* .myextension”文件时才会显示。

感谢。

尝试合并过滤器 - 按照greg的回答,这是我的代码无法正常工作。

        <visibleWhen
              checkEnabled="false">
            <iterate
                 ifEmpty="false"
                 operator="or">
                <or>
                <test
                    property="org.eclipse.core.resources.name"
                    value="*.myextension">
                </test>
                </or>
                <or>
                  <with variable="activeEditorInput">
                     <adapt type="org.eclipse.core.resources.IResource">
                        <test
                            property="org.eclipse.core.resources.name"
                            value="*.myextension">
                        </test>
                     </adapt>
                  </with>   
               </or>                
            </iterate>
        </visibleWhen>

1 个答案:

答案 0 :(得分:1)

对于编辑器,您可以使用以下内容测试“活动编辑器输入”:

<visibleWhen
  checkEnabled="false">
  <with variable="activeEditorInput">
     <adapt type="org.eclipse.core.resources.IResource">
        <test
            property="org.eclipse.core.resources.name"
            value="*.myextension">
        </test>
     </adapt>
  </with>
</visibleWhen>

这是主动编辑器输入,获取正在编辑的IResource并进行测试。

组合可能会给:

<visibleWhen
   checkEnabled="false">
   <or>
     <with variable="activeEditorInput">
       <adapt type="org.eclipse.core.resources.IResource">
          <test
              property="org.eclipse.core.resources.name"
              value="*.myextension">
          </test>
       </adapt>
     </with>
     <iterate
           ifEmpty="false"
           operator="or">
        <test
            property="org.eclipse.core.resources.name"
            value="*.myextension">
        </test>
     </iterate>
   </or>
 </visibleWhen>