2011-05-05 14 views
11

Estoy intentando anular la acción del menú Eclipse Archivo> Guardar para agregar alguna funcionalidad. He tratado de las siguientes cosasAnular archivo Eclipse> Guardar acción

a) Crear una nueva acción y añadirla al controlador de la acción global

actionBars.setGlobalActionHandler(ActionFactory.SAVE.getId(), mySaveAction); actionRegistry.registerAction(action);

b) Crear un nuevo controlador y anular el mandato de salvar

<extension point="org.eclipse.ui.handlers"> 
<handler commandId="org.eclipse.ui.file.save" 
    class="com.diagrams.ui.SaveFileHandler"> 
<enabledWhen> 
    <with variable="activePartId"> 
    <equals 
    value="com.diagrams.editors.MultiPageEditor" /> 
    </with> 
</enabledWhen> 
<activeWhen> 
    <with variable="activePartId"> 
    <equals 
    value="com.diagrams.editors.MultiPageEditor" /> 
    </with> 
</activeWhen> 
</handler> 
</extension> 

Con estos dos enfoques, he podido anular la funcionalidad de Teclado Ctrl + S, pero el menú "Archivo> Guardar" parece funcionar de manera diferente.

realmente apreciaría cualquier ayuda, gracias

Respuesta

5

En una aplicación RCP, puede contribuir con la acción Guardar en su ActionBarAdvisor. Esto también registra la acción para que esté disponible desde el comando guardar.

Pero como un complemento en el Eclipse IDE, el IDE proporciona el ActionBarAdvisor y enlaza la acción Guardar en el menú Archivo. Debido a que técnicamente no es un comando (las acciones son un paso por encima de un oyente SWT.Selection) es por eso que no puede anular la acción Archivo> Guardar.

Sin embargo, cada parte proporciona su propia implementación de guardado, por lo que puede hacer lo que desee en su MultiPageEditor.

La otra opción es usar org.eclipse.ui.commands.ICommandService.addExecutionListener(IExecutionListener) y agregar un IExecutionListener (o IEL2). Eso puede escuchar el comando guardar, el ID está declarado en org.eclipse.ui.IWorkbenchCommandConstants.

+0

Gracias por la aclaración Paul. Mi principal motivo para la consulta fue que tenía que diferenciar el guardado que se llama desde el Archivo> Guardar y cuando se llama debido a un archivo que se cierra. Por ahora puedo realizar mi tarea por qué anular los métodos onSave e isSaveNeededOnClose en el editor. Pero tendré presente el enfoque de oyente si es necesario en el futuro. –

+0

¿Sigue siendo cierto? No parece funcionar para nada (en Indigo) :( – snim2

+0

sí, funciona en Indigo (aunque no está actualmente en Juno, eso viene) –

0

que podría tener algo que ver con la activePartId ser diferente cuando el menú principal se selecciona frente a un golpe de teclado o usando el menú del botón derecho. ¿Has mirado otros puntos de extensión?

+0

Según lo que he calculado, activePartId debería ser el mismo. Además, tengo otras acciones (que he creado) que aparecen en el menú Archivo para el mismo activePartId. Miré los puntos de extensión de comando y manejador y este parecía el camino correcto a seguir. ¿Hay algún otro punto de extensión que debería usar? –