Expressões booleanas e filtros de acção

Quando um plug-in contribui com uma acção para a UI da área de trabalho com um dos pontos de extensão de menu, pode especificar as condições nas quais a opção de menu fica visível e/ou activado no menu. Além de facultar simples condições de activação como, por exemplo, contagens de selecções e classes de selecção, os plug-ins podem utilizar expressões booleanas para mais flexibilidade ao determinar quando uma acção deve ficar visível ou activada.

Expressões booleanas de activação

As Expressões booleanas podem conter os operadores booleanos (NOT, AND, OR) combinados com uma sintaxe predeterminada para avaliar certas condições. Muitas destas condições testam um objecto particular. A identidade do "objecto em foco" (o objecto a ser testado) depende do contexto específico da expressão de activação:

Ao especificar um valor para testar numa destas expressões, parte-de do princípio de que o valor é uma cadeia de caracteres, salvo quando as seguintes conversões são satisfatórias:

Poderá encontrar uma definição completa da sintaxe XML de activação na documentação de referência sobre pontos de extensão relativa a qualquer extensão que defina o elemento enablement (activação) como, por exemplo, org.eclipse.ui.popupMenus.

Antes da R3.0, estas expressões booleanas generalizadas não estavam disponíveis. Eram utilizadas as expressões predeterminadas seguintes para avaliar certas condições sem construir uma expressão geral. Repare que qualquer destas expressões poderia agora ser expressa com a sintaxe mais generalizada. As expressões predeterminadas ainda podem ser usadas como se segue:

Por exemplo, as porções de código seguintes representam expressões de activação que poderiam ser usadas numa acção hipotética num conjunto de acções:

<action id="org.eclipse.examples.actionEnablement.class" 
       label="Red Element"
       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 sobre pontos de extensão para exemplos mais elaborados destas expressões e uma descrição completa do XML.

A tabela seguinte enumera pontos de extensão que contribuem com acções e resume como os atributos da marcação XML e as expressões booleanas podem ser utilizadas para afectar a activação.

Nome do ponto de extensão

Atributos que afectam a activação

Expressões booleanas

viewActions,

editorActions,

actionSets

enablesFor - especifica a contagem de selecções que deve ser cumprida para a acção ser activada

selection class - a classe que os objectos seleccionados devem constituir subclass ou implementar para a acção ser activada

selection name - filtro de caracteres globais que pode aplicar-se aos objectos na selecção

visibility - expressão booleana.   Controla se a opção de menu fica ou não visível no menu.

enablement - expressão booleana.   Controla se a opção de menu fica ou não activada no menu.  O atributo enablesFor, selection class e name devem ser cumpridos antes de aplicar a expressão de activação.

popupMenus

(Somente para contributos de objectos.)

objectClass - especifica a classe que os objectos na selecção devem constituir subclasse ou implementar

(Para contributos de objectos e visualizadores.)

enablesFor - especifica a contagem de selecções que deve ser cumprida para a acção ser activada

selection class - a classe que os objectos seleccionados devem constituir subclasse ou implementar para activar a acção

selection name - filtro de caracteres globais que pode aplicar-se aos objectos na selecção

 

(Para contributos de objectos e visualizadores.)

visibility - expressão booleana.   Controla se a opção de menu fica ou não visível no menu.

enablement - expressão booleana.   Controla se a opção de menu fica ou não activada no menu.  O atributo enablesFor, selection class e name devem ser cumpridos antes de aplicar a expressão de activação.

Utilizar objectState com tipos de conteúdo

A capacidade de definir tipos de conteúdo (consulte Tipos de conteúdo) pode ser combinada com expressões booleanas para definir condições de activação ou visibilidade muito específicas com base no tipo de conteúdo de um recurso. Por exemplo, a porção de código seguinte assinala uma opção de menu emergente como visível somente se o conteúdo do ficheiro seleccionado corresponder aos tipos de conteúdo especializados 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 usado numa expressão objectState para verificar o tipo de conteúdo do ficheiro XML seleccionado. Isto permite ao plug-in aplicar verificações de conteúdo muito específicas antes de activar ou mostrar acções de menu relacionadas com tipos de ficheiros específicos. Consulte Tipos de conteúdo para mais detalhes sobre a extensão de tipo de conteúdo.