2012-02-19 40 views
12

在我的Eclipse插件中,我需要知道屏幕上可见的编辑器何时发生更改。我目前得到的活动编辑器,如下所示:如何在Eclipse插件中获得“活动编辑器”?

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor() 

这适用于大多数情况下,除了当绿色Continue按钮被按下:

Debugger buttons

如果我使用F8快捷键则活动编辑器按预期更新。

似乎活动编辑器属性不会更新,直到编辑器选项卡获得焦点(按下继续按钮时不会发生这种情况)。

有没有其他的途径可以拿到“可见编辑器”?

在此先感谢。

艾伦

+0

鉴于下面的讨论,我假设你的插件是对现有调试插件的_extension_。正确? – 2012-02-19 14:52:16

+0

它不是调试插件的扩展,但是我会连接到各种有关断点的调试事件等。 – 2012-02-19 15:09:04

回答

2
  1. 编辑器是积极的,只有当它具有焦点,所以你越来越是通过API输出的权利。你的插件的用户将不会在调试模式下运行,所以不是一个面向最终用户的关注
  2. 或者,让所有打开的编辑器,你可以做到以下几点:

PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences()

+0

感谢您的回复。我实际上是指用户在他们的Eclipse副本中运行调试器,所以这对于最终用户来说是一个问题。 – 2012-02-19 12:17:40

+0

它的可能性很小,在你的代码中有一个断点,这样执行就停滞在那一点了吗? – codejammer 2012-02-19 12:21:05

+0

我正在谈论用户自己的代码。我想要在用户通过代码中的调试器时执行这些操作。这种特殊的情况只是我不喜欢它的工作。如果我有权访问可见的编辑器,那么我可以处理它。 – 2012-02-19 12:35:47

1

IWorkbenchPage interface has an isPartVisible()`方法,指示指定部分是否可见。结果不取决于指定部分当前是否处于活动状态,即是否具有焦点。

要找到一个可见但当前不活动的编辑器,可能不足以在活动工作台页面上简单调用此方法。相反,您可能需要遍历所有工作台窗口,并检查编辑器在每个窗口页面上的可见性。

1

活动编辑器列表中进行更多详细信息,请访问这个问题:

Eclipse RCP : have the same editor open in editor window


包名称:rcp_demo.Editor

类名称:EmpCommand.java,EmployeeEditor。 java和EmployeeEditorInput.java

package rcp_demo.Editor; 

import org.eclipse.core.commands.AbstractHandler; 
import org.eclipse.core.commands.ExecutionEvent; 
import org.eclipse.core.commands.ExecutionException; 
import org.eclipse.ui.IEditorReference; 
import org.eclipse.ui.IWorkbenchPage; 
import org.eclipse.ui.IWorkbenchWindow; 
import org.eclipse.ui.PartInitException; 
import org.eclipse.ui.handlers.HandlerUtil; 

public class EmpCommand extends AbstractHandler { 
    public static final String Id = "rcp_demo.Editor.EmpCommand"; 

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

     IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindow(event); 
      IWorkbenchPage page = window.getActivePage(); 
      IEditorReference[] editors = page.getEditorReferences(); 
      EmployeeEditorInput input = new EmployeeEditorInput(); 
      //All Comments are easily understand 
      //public class EmployeeEditorInput implements IEditorInput{} 
      for (int i=0; i<editors.length; i++) { 
      //List out all Exist editor 
      //compare with EmployeeEditor.Id="rcp_demo.Editor.emp"; 
       if (editors[i].getId().equals(EmployeeEditor.Id)) { 
       //public class EmployeeEditor extends EditorPart 
       //{ 
       // public static final String Id="rcp_demo.Editor.emp"; 
       //  public void createPartControl(Composite parent) {.....} 
       //} 
        page.activate(editors[i].getEditor(true)); 
        System.out.println("set focus an existing editor(Employee)"); 
        return null; 
       } 
      } 
      try { 
       //open new Editor like EmployeeEditor.Id="rcp_demo.Editor.emp"; 
       page.openEditor(input,EmployeeEditor.Id); 
       System.out.println("open Editor(Employee) "); 
      } catch (PartInitException e) { 
       e.printStackTrace(); 
      } 
     return null; 
    } 
} 
相关问题