Cuando un conector aporta una acción a la UI del entorno de trabajo mediante uno de los puntos de extensión de menú, puede especificar las condiciones que deben darse para que el elemento de menú quede habilitado (o visible) en el menú. Además de suministrar condiciones simples de habilitación, como la cuenta de selecciones y las clases de selección, los conectores pueden emplear expresiones booleanas para tener más flexibilidad a la hora de determinar cuando una acción debe habilitarse o hacerse visible.
Las expresiones booleanas pueden contener operadores booleanos (NOT, AND, OR) combinados con una sintaxis predefinida para evaluar determinadas condiciones. Muchas de estas condiciones prueban un objeto determinado. La identidad del "objeto con foco" (el objeto que se prueba) dependerá del contexto específico de la expresión de habilitación:
Al especificar que se pruebe un valor para cualquiera de estas expresiones, se supone que el valor es una serie, excepto cuando las conversiones siguientes son satisfactorias:
Puede encontrarse una definición completa de la sintaxis XML de habilitación en la documentación de consulta de punto de extensión para cualquier extensión que defina un elemento enablement como, por ejemplo, org.eclipse.ui.popupMenus.
Antes del R3.0, estas expresiones booleanas generalizadas no estaban disponibles. Se utilizaban las siguientes expresiones predefinidas para evaluar ciertas condiciones sin construir una expresión general. Observe que cualquiera de estas expresiones podría expresarse ahora con la sintaxis más generalizada. Las expresiones predefinidas todavía pueden utilizarse de la manera siguiente:
objectClass: tiene el valor true si cada objeto de la selección es una subclase de la clase o la implementa.
objectState: tiene el valor true si el atributo nombrado es igual al valor especificado. IActionFilter ayuda a evaluar la expresión. Los filtros de acción calculan dinámicamente los criterios de habilitación de una acción tomando como base la selección destino y el valor de los atributos nombrados.
systemProperty: tiene el valor true si la propiedad nombrada del sistema es igual al valor especificado.
pluginState: especifica si el conector especificado (por su id) debe tener el estado instalado (installed) o activado (activated).
Por ejemplo, los siguientes fragmentos de código representan expresiones de habilitación que se podrían usar en una acción hipotética de un conjunto de acciones:
<action id="org.eclipse.examples.actionEnablement.class" label="Elemento rojo" menubarPath="additions" class="org.eclipse.examples.actionEnablement.ObjectTestAction"> <enablement> <and> <objectClass name="org.eclipse.examples.actionEnablement.TestElement"/> <objectState name="name" value="red"/> </and> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.property" label="Propiedad" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PropertyTestAction"> <enablement> <systemProperty name="MyTestProperty" value="puppy"/> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.pluginState" label="Instalado" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PluginTestAction"> <enablement> <pluginState id="x.y.z.anotherPlugin" value="installed"/> </enablement> </action>
Consulte la documentación de consulta de los puntos de extensión para obtener ejemplos más elaborados de estas expresiones y una descripción completa del lenguaje XML.
En la siguiente tabla figuran los puntos de extensión que contribuyen con acciones; en ella se da un resumen de cómo se utilizan los atributos y las expresiones booleanas de los códigos XML para aplicar la habilitación.
Nombre del punto de extensión |
Atributos que afectan a la habilitación |
Expresiones booleanas |
---|---|---|
enablesFor: especifica la cuenta de selecciones que se debe cumplir para que se habilite la acción. selection class: clase que los objetos seleccionados deben implementar (o de la que deben ser una subclase) para que se habilite la acción. selection name: filtro comodín que se puede aplicar a los objetos de la selección. |
visibility: expresión booleana. Controla si la opción es visible en el menú. enablement: expresión booleana. Controla si la opción está habilitada en el menú. Para que se aplique la expresión de habilitación, primero deben satisfacerse el atributo enablesFor y selection class y name. |
|
(Solo para las contribuciones de objeto) objectClass: especifica la clase que los objetos de la selección deben implementar (o de la que deben ser una subclase). (Para las contribuciones de objeto y de visor) enablesFor: especifica la cuenta de selecciones que se debe cumplir para que se habilite la acción. selection class: clase que los objetos seleccionados deben implementar (o de la que deben ser una subclase) para que se habilite la acción. selection name: filtro comodín que se puede aplicar a los objetos de la selección.
|
(Para las contribuciones de objeto y de visor) visibility: expresión booleana. Controla si la opción es visible en el menú. enablement: expresión booleana. Controla si la opción está habilitada en el menú. Para que se aplique la expresión de habilitación, primero deben satisfacerse el atributo enablesFor y selection class y name. |
La capacidad para definir tipos de contenido (consulte la sección Tipos de contenido) puede combinarse con expresiones booleanas para definir condiciones muy específicas de habilitación o visibilidad basadas en el tipo de contenido de un recurso. Por ejemplo, el siguiente fragmento de código hace visible una opción de menú emergente sólo si el contenido del archivo seleccionado coincide con los tipos de contenido especializados del conector.
<extension point="org.eclipse.ui.popupMenus"> <objectContribution id="com.example.objectContributions" objectClass="org.eclipse.core.resources.IFile" nameFilter="*.xml"> <visibility> <or> <objectState name="contentTypeId" value="com.example.employeeRecordContentType"/> <objectState name="contentTypeId" value="com.example.customerRecordContentType"/> </or> </visibility> <action id="com.example.action1" ...Puede utilizarse el atributo contentTypeId en una expresión objectState para comprobar el tipo de contenido del archivo xml seleccionado. Esto permite a un conector aplicar una comprobación de contenido muy específica antes de habilitar o mostrar acciones de menú relacionadas con tipos o archivos específicos. Consulte la sección Tipos de contenido para obtener más detalles acerca de la extensión de tipos de contenido.