2012-02-19 16 views
12

Nel mio plugin Eclipse, ho bisogno di sapere quando l'editor che è visibile sullo schermo è cambiato. Attualmente sto ricevendo l'editor attiva come segue:Come ottenere "editor attivo" nel plugin Eclipse?

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

Questo funziona per la maggior parte dei casi tranne quando il pulsante verde Continua viene premuto:

Debugger buttons

Se uso la scorciatoia F8 poi l'attiva l'editor è aggiornato come previsto.

Sembra che la proprietà di editor attivo non venga aggiornata finché la scheda dell'editor non viene messa a fuoco (cosa che non accade quando si preme il pulsante Continua).

C'è qualche altro percorso che posso prendere per ottenere il "editor visibile"?

Grazie in anticipo.

Alan

+0

Data la discussione seguente, presumo che il plug-in sia un _estensione_ al plug-in di debug esistente. Corretta? –

+0

Non è un'estensione del plug-in di debug ma collego vari eventi di debug sui punti di interruzione ecc. –

risposta

2
  1. Un editor è attivo solo quando è a fuoco, in modo che cosa stai ricevendo è l'uscita giusta dall'API. L'utente del plugin non sarà in esecuzione in modalità di debug, quindi non è un problema per l'utente finale
  2. In alternativa, per ottenere tutti gli editor aperti si possono fare le seguenti operazioni:

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

+0

Grazie per la risposta. In realtà mi riferivo all'utente che esegue il debugger nella loro copia di Eclipse, quindi è un problema per l'utente finale. –

+0

è altamente improbabile che l'uso abbia un punto di interruzione nel codice in modo che l'esecuzione sia bloccata a quel punto giusto? – codejammer

+0

Sto parlando del codice dell'utente. Voglio fare le cose mentre l'utente sta passando attraverso il debugger nel loro codice. Questo particolare scenario non funziona come vorrei. Se avessi accesso all'editor visibile, potrei occuparmene. –

1

Il IWorkbenchPage interface has an isPartVisible() `metodo che indica se la parte specificata è visibile. Il risultato non dipende dal fatto che la parte specificata sia attualmente attiva, ovvero ha lo stato attivo o meno.

Per trovare un editor visibile ma attualmente non attivo, potrebbe tuttavia non essere sufficiente chiamare semplicemente questo metodo nella pagina workbench attiva. Invece dovresti eseguire iterazioni su tutte le finestre del workbench e controllare la visibilità del tuo editor sulla pagina di ognuna di esse.

1

elenco editor di Active ulteriori dettagli si prega di visitare questa domanda:

Eclipse RCP : have the same editor open in editor window


nome del pacchetto: rcp_demo.Editor

nome della classe: EmpCommand.java, EmployeeEditor. java e 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; 
    } 
}