2011-05-21 7 views
6

Creé el elemento de menú en el menú "Archivo" como un comando. Para este comando, hay un controlador que implementa la interfaz IHandler. Este controlador contiene el método isEnabled. Estoy intentando usar este método para habilitar/deshabilitar mi elemento de menú, pero ese método se llama solo una vez cuando hago clic en el menú "Archivo". Cuando se hace clic en la segunda, en la tercera, etc. veces, el método isEnabled no se vuelve a llamar aunque cambie el estado de la página (abrir/cerrar editores) anteriormente.Actualizar estado habilitado del elemento de menú Eclipse

¿Qué debo hacer? ¿Tal vez este método no está destinado a los elementos del menú de control?

Respuesta

3

¿Está usted subclasificando org.eclipse.core.commands.AbstractHandler? Debe usar setBaseEnabled(boolean) para actualizar el estado de su controlador (que actualizaría su comando).

Solo es válido cambiar el estado habilitado en su controlador siempre que también active el HandlerEvent. Por lo general, es más fácil llamar al setBaseEnabled(boolean), que activará el evento por usted.

2

Si está intentando habilitar/deshabilitar el menú, entonces debe usar las expresiones del núcleo. ya he explicado cómo hacerlo en esta respuesta:

Eclipse RCP menus & actions: Configure or code?

La parte que le interesa comienza con:

Para activar/desactivar un menú [... ]

Espero que esto sea lo que estás buscando.

+0

¿Qué pasa si tengo el mango para el MenuManager, cómo puedo habilitar/deshabilitar el elemento de menú mediante programación? – Neel

+1

@Neel Bueno, (en el ejemplo mencionado) debe llamar a CommandState.setNotLoaded() que cambiará el valor de la variable "myapp.commands.sourceprovider.active" a NOT_LOADED, que a su vez será detectado por la condición en el controlador . La condición en el manejador indica que si "myapp.commands.sourceprovider.active" no es igual a PLAYING o PAUSED, el botón debería estar inactivo (tan desactivado). En resumen, use la clase de proveedor (aquí, CommandState) para cambiar el valor de la variable que desencadena el controlador. –

Cuestiones relacionadas