如何在eclipse中弹出时检查编辑器是否处于活动状态?

时间:2016-07-13 10:05:41

标签: eclipse eclipse-plugin popup eclipse-rcp

我正在开发一个项目,我需要在其中显示一个弹出菜单,仅显示具有特定扩展名的文件,以及编辑器窗口和项目浏览器的弹出窗口。

以下是我所做的plugin.xml文件:

  <menuContribution
        locationURI="popup:org.eclipse.ui.popup.any">
     <command
           commandId="abc.contextMenu"
           label="Open"
           mnemonic="P"
           style="push">
        <visibleWhen
              checkEnabled="false">
           <or>
              <with
                    variable="selection">
                 <iterate
                       ifEmpty="false">
                    <reference
                          definitionId="com.varun.ease.ui.sign.definition.testType">
                    </reference>
                 </iterate>
              </with>
              <with
                    variable="activeEditorInput">
                 <and>
                    <test
                          property="org.eclipse.ui.IWorkbenchPart"
                          value="true">
                    </test>
                    <reference
                          definitionId="com.varun.ease.ui.sign.definition.testType">
                    </reference>
                 </and>
              </with>
           </or>
        </visibleWhen>
     </command>
  </menuContribution>

<extension
     point="org.eclipse.core.expressions.definitions">
  <definition
        id="com.varun.ease.ui.sign.definition.testType">
     <adapt
           type="org.eclipse.core.resources.IFile">
        <or>
           <test
                 property="org.eclipse.core.resources.name"
                 value="*.py">
           </test>
           <test
                 property="org.eclipse.core.resources.name"
                 value="*.js">
           </test>
        </or>
     </adapt>
  </definition>

我想在编辑器处于活动状态时显示命令,即它在窗口中或从项目浏览器中选择项目时具有焦点。

我该怎么做才能检查编辑器是否处于活动状态,即它是否在窗口中具有焦点?

目前我正在使用<test/> org.eclipse.ui.IWorkbenchPart属性,但命令在编辑器窗口的弹出窗口中根本不可见。

在没有该属性的情况下运行,甚至在编辑器中打开适当的文件时显示命令,虽然不活动,但是从项目浏览器打开弹出窗口而不是从适当的文件打开。

感谢您的帮助

修改

在@ greg-449的指导下成功运行编辑器命令后更新了代码。但是现在,在尝试限制特定文件类型时,命令不可见。

        <visibleWhen
              checkEnabled="false">
           <or>
              <with
                    variable="selection">
                 <iterate
                       ifEmpty="false">
                    <reference
                          definitionId="com.varun.ease.ui.sign.definition.testType">
                    </reference>
                 </iterate>
              </with>
              <with
                    variable="activePart">
                 <and>
                    <reference
                          definitionId="com.varun.ease.ui.sign.definition.testType">
                    </reference>
                    <instanceof
                          value="org.eclipse.ui.IEditorPart">
                    </instanceof>
                 </and>
              </with>
           </or>
        </visibleWhen>

2 个答案:

答案 0 :(得分:1)

使用activePart并测试编辑器类的实例。

所以:

<with
   variable="activePart">
   <instanceof
        value="org.eclipse.ui.IEditorPart">
   </instanceof>
</with>

测试任何编辑器。

您还可以使用activePartId来测试编辑ID。

如果您还要测试编辑器输入,则需要使用<and>

<and>
  <with
     variable="activePart">
     <instanceof
          value="org.eclipse.ui.IEditorPart">
     </instanceof>
  </with>
  <with
     variable="activeEditorInput">
     <reference
         definitionId="com.varun.ease.ui.sign.definition.testType">
     </reference>
  </with>
</and>

答案 1 :(得分:0)

  

使用rcp eclipse

检查编辑器是否处于活动状态
HttpContext.Current.Session.Add("Title", "Data"); 

string foo = Session["Title"]; 
  

列出开放式编辑器

多个编辑器在时间打开而不是公开或重新打开新编辑器

public class Stud_editor_open extends AbstractHandler{

@Override
public Object execute(ExecutionEvent event) throws ExecutionException {

    IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event);
    IWorkbenchPage page = window.getActivePage();
    IEditorReference[] editors = page.getEditorReferences();
    //  How many editor open..
    //  System.out.println("Length : "+editors.length);

    if(editors.length==0){
            System.out.println("Editor is not an active");
    }else{
            System.out.println("Editor is an active");
            System.out.println("Editor Name is :: "+page.getActiveEditor().getTitle());
    }
}