2012-02-19 80 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; 
    } 
} 
相關問題