Quando um plug-in contribui com uma ação para a UI do workbench utilizando um dos pontos de extensão do menu, ele pode especificar as condições sob as quais o item de menu fica visível e/ou ativado no menu. Além de fornecer condições simples de ativação, como contagens de seleção e classes de seleção, os plug-ins podem utilizar expressões booleanas para maior flexibilidade na determinação de quando uma ação deve estar visível ou ativada.
As expressões booleanas podem conter operadores booleanos (NOT, AND, OR) combinados com uma sintaxe predefinida para avaliar determinadas condições. Muitas dessas condições testam um objeto específico. A identidade do "objeto em foco" (o objeto que está sendo testado) depende do contexto específico da expressão enablement:
Ao especificar um valor a ser testado em relação a qualquer uma dessas expressões, o valor é suposto ser uma cadeia, exceto quando as seguintes conversões são bem-sucedidas:
Uma definição completa da sintaxe de ativação de XML pode ser localizada na documentação de referência do ponto de extensão de qualquer extensão que defina um elemento enablement, como por exemplo, org.eclipse.ui.popupMenus.
Antes do R3.0, essas expressões booleanas generalizadas não estavam disponíveis. As seguintes expressões predefinidas foram utilizadas para avaliar determinadas condições sem construir uma expressão geral. Observe que qualquer uma dessas expressões pode agora ser expressa com a sintaxe mais generalizada. As expressões predefinidas ainda podem ser utilizadas da seguinte maneira:
objectClass - true se cada objeto na seleção subdividir em classes ou implementar a classe.
objectState - true se o atributo nomeado for igual ao valor especificado. IActionFilter auxilia na avaliação da expressão. Um filtro de ação calcula dinamicamente os critérios de ativação de uma ação com base na seleção de destino e no valor dos atributos nomeados.
systemProperty - true se a propriedade de sistema nomeado for igual ao valor especificado.
pluginState - especifica se o plug-in especificado (pelo id) deve ser instalado ou ativado
Por exemplo, os seguintes fragmentos representam expressões de ativação que poderiam ser utilizadas em uma ação hipotética em um conjunto de ações:
<action id="org.eclipse.examples.actionEnablement.class" label="Elemento Vermelho" 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="Property" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PropertyTestAction"> <enablement> <systemProperty name="MyTestProperty" value="puppy"/> </enablement> </action>
<action id="org.eclipse.examples.actionEnablement.pluginState" label="Installed" menubarPath="additions" class="org.eclipse.examples.actionEnablement.PluginTestAction"> <enablement> <pluginState id="x.y.z.anotherPlugin" value="installed"/> </enablement> </action>
Consulte a documentação de referência dos pontos de extensão para obter amostras mais elaboradas dessas expressões e uma descrição completa do XML.
A tabela a seguir lista os pontos de extensão que contribuem com ações e resume como os atributos e expressões booleanas da marcação XML podem ser utilizados para afetar a ativação.
Nome do ponto de extensão |
Atributos que afetam a ativação |
Expressões Booleanas |
---|---|---|
enablesFor - especifica a contagem de seleção que deve ser atendida para que a ação seja ativada selection class - a classe que os objetos selecionados devem subdividir em classes ou implementar para ativar a ação selection name - um filtro de caractere curinga que pode ser aplicado aos objetos na seleção. |
visibility - uma expressão booleana. Controla se o item de menu está visível no menu. enablement - uma expressão booleana. Controla se o item de menu está ativado no menu. O atributo enablesFor, selection class e name, devem ser atendidos antes que a expressão enablement seja aplicada. |
|
(Apenas para contribuições de objetos.) objectClass - especifica a classe que os objetos na seleção devem subdividir em classes ou implementar (Para as contribuições de objetos e de visualizadores) enablesFor - especifica a contagem de seleção que deve ser atendida para que a ação seja ativada selection class - a classe que os objetos selecionados devem subdividir em classes ou implementar para ativar a ação selection name - um filtro de caractere curinga que pode ser aplicado aos objetos na seleção.
|
(Para as contribuições de objetos e de visualizadores) visibility - uma expressão booleana. Controla se o item de menu está visível no menu. enablement - uma expressão booleana. Controla se o item de menu está ativado no menu. O atributo enablesFor, selection class e name, devem ser atendidos antes que a expressão enablement seja aplicada. |
A habilidade de definir os tipos de conteúdo (consulte Tipos de conteúdo) pode ser combinada com expressões booleanas para definir condições de ativação ou de visibilidade muito específicas com base no tipo de conteúdo de um recurso. Por exemplo, o seguinte fragmento torna um item de menu pop-up visível somente se o conteúdo do arquivo selecionado corresponder aos tipos de conteúdo especializado do plug-in.
<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" ...O atributo contentTypeId pode ser utilizado em uma expressão objectState para verificar o tipo de conteúdo do arquivo xml selecionado. Isso permite que um plug-in aplique uma verificação de conteúdo muito específica antes de ativar ou mostrar ações do menu relacionadas aos tipos específicos de arquivos. Consulte Tipos de conteúdo para obter detalhes adicionais sobre a extensão do tipo de conteúdo.