2012-02-19 26 views
12

En mi plugin de Eclipse, necesito saber cuándo ha cambiado el editor que está visible en la pantalla. Actualmente estoy recibiendo el editor activo de la siguiente manera:¿Cómo obtener "editor activo" en el plugin de Eclipse?

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

Esto funciona para la mayoría de los casos, a excepción de cuando el verde botón Continuar se presiona:

Debugger buttons

Si utilizo el acceso F8 entonces el activo editor se actualiza como se esperaba

Parece que la propiedad del editor activo no se actualiza hasta que la pestaña del editor obtiene el foco (lo que no sucede cuando se presiona el botón Continuar).

¿Hay alguna otra ruta que pueda tomar para obtener el "editor visible"?

Gracias de antemano.

Alan

+0

Dado el debate a continuación, asumo que su complemento es una extensión del complemento de depuración existente. ¿Correcto? –

+0

No es una extensión del complemento de depuración, pero me conecto a varios eventos de depuración sobre puntos de interrupción, etc. –

Respuesta

2
  1. Un editor está activa sólo cuando tiene el foco, por lo que lo que está recibiendo es la salida justo al lado de la API. El usuario de su plugin no estará funcionando en modo de depuración, por lo que no es una preocupación para el usuario final
  2. Alternativamente, para obtener todos los editores abiertos que usted puede hacer lo siguiente:

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

+0

Gracias por su respuesta. En realidad, me estaba refiriendo al usuario que ejecuta el depurador en su copia de Eclipse, por lo que es un problema para el usuario final. –

+0

es altamente improbable que el uso tenga un punto de interrupción en su código para que la ejecución se estanque en ese punto, ¿verdad? – codejammer

+0

Estoy hablando del código del usuario. Quiero hacer cosas cuando el usuario está pasando por el depurador en su código. Este escenario en particular simplemente no funciona como me gustaría. Si tuviera acceso al editor visible, entonces puedo manejarlo. –

1

la IWorkbenchPage interface has an isPartVisible() `método que indica si la parte especificada es visible. El resultado no depende de si la parte especificada está actualmente activa, es decir, tiene foco, o no.

Para encontrar un editor visible pero actualmente no activo, puede no ser suficiente llamar simplemente a este método en la página del banco de trabajo activo. En su lugar, es posible que deba iterar sobre todas las ventanas del banco de trabajo y verificar la visibilidad de su editor en la página de cada una de ellas.

1

lista de editor de Active más detalles visite la pregunta: ¿

Eclipse RCP : have the same editor open in editor window


nombre del paquete: rcp_demo.Editor

nombre de la clase: EmpCommand.java, EmployeeEditor. java y 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; 
    } 
} 
Cuestiones relacionadas