A activação e/ou visibilidade de uma acção pode ser definida utilizando os elementos enablement e visibility, respectivamente. Estes dois elementos contêm uma expressão booleana que é avaliada para determinar a activação e/ou visibilidade.
A sintaxe é igual para os elementos enablement e visibility. Ambos contêm apenas um subelemento de expressão booleana. No caso mais simples, este será um elemento objectClass, objectState, pluginState ou systemProperty. No caso mais complexo, os elementos and, or e not podem ser combinados para formar uma expressão booleana. Tanto o elemento and como o elemento or têm de conter dois subelementos. O elemento not tem de conter apenas um subelemento.
<!ELEMENT extension (viewContribution+)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT viewContribution (menu* , action*)>
<!ATTLIST viewContribution
id CDATA #REQUIRED
targetID CDATA #REQUIRED>
Este elemento é utilizado para definir um grupo de acções e/ou menus das vistas.
<!ELEMENT action (selection* | enablement?)>
<!ATTLIST action
id CDATA #REQUIRED
label CDATA #REQUIRED
menubarPath CDATA #IMPLIED
toolbarPath CDATA #IMPLIED
icon CDATA #IMPLIED
disabledIcon CDATA #IMPLIED
hoverIcon CDATA #IMPLIED
tooltip CDATA #IMPLIED
helpContextId CDATA #IMPLIED
style (push|radio|toggle) "push"
state (true | false)
class CDATA #REQUIRED
enablesFor CDATA #IMPLIED>
Este elemento define uma acção que o utilizador pode invocar na UI.
push | - como artigo de menu ou artigo de barra de ferramentas habitual. | |
radio | - como artigo de menu ou de barra de ferramentas de estilo de botão de opção. As acções com o estilo de botão de opção no mesmo grupo de menus ou de barras de ferramentas comportam-se como um conjunto de botões de opção. O valor inicial é especificado pelo atributo state. | |
toggle | - como um artigo de menu ou da barra de ferramentas do tipo marca de selecção. O valor inicial é especificado pelo atributo state. |
! | - 0 artigos seleccionados | |
? | - 0 ou 1 artigos seleccionados | |
+ | - 1 ou mais artigos seleccionados | |
multiple, 2+ | - 2 ou mais artigos seleccionados | |
n | - um número preciso de artigos seleccionados. Por exemplo: enablesFor=" 4" activa a acção apenas quando são seleccionados 4 artigos | |
* | - qualquer número de artigos seleccionados |
<!ELEMENT menu (separator+ , groupMarker*)>
<!ATTLIST menu
id CDATA #REQUIRED
label CDATA #REQUIRED
path CDATA #IMPLIED>
Este elemento é utilizado para definir um novo menu.
<!ELEMENT separator EMPTY>
<!ATTLIST separator
name CDATA #REQUIRED>
Este elemento é utilizado para criar um separador de menu no novo menu.
<!ELEMENT groupMarker EMPTY>
<!ATTLIST groupMarker
name CDATA #REQUIRED>
Este elemento é utilizado para criar um grupo designado no novo menu. Não tem qualquer representação visual no novo menu, ao contrário do elemento separator.
<!ELEMENT selection EMPTY>
<!ATTLIST selection
class CDATA #REQUIRED
name CDATA #IMPLIED>
Este elemento é utilizado para ajudar a determinar a activação da acção com base na selecção actual. É ignorado se o elemento enablement estiver especificado.
<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Este elemento é utilizado para definir a activação da extensão.
<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Este elemento é utilizado para definir a visibilidade da extensão.
<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Este elemento representa uma operação AND booleana no resultado de avaliação das duas expressões de subelemento respectivas.
<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Este elemento representa uma operação OR booleana no resultado de avaliação das duas expressões de subelemento respectivas.
<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>
Este elemento representa uma operação NOT booleana no resultado de avaliação das expressões de subelemento respectivas.
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name CDATA #REQUIRED>
Este elemento é utilizado para avaliar a classe ou interface de cada objecto na selecção actual. Se cada objecto da selecção implementar a classe ou interface especificadas, a expressão é avaliada como true.
<!ELEMENT objectState EMPTY>
<!ATTLIST objectState
name CDATA #REQUIRED
value CDATA #REQUIRED>
Este elemento é utilizado para avaliar o estado do atributo de cada objecto na selecção actual. Se cada objecto na selecção tiver o estado de atributo especificado, a expressão será avaliada como true. Para avaliar este tipo de expressão, cada objecto na selecção tem de implementar ou adaptar-se à interface org.eclipse.ui.IActionFilter.
<!ELEMENT pluginState EMPTY>
<!ATTLIST pluginState
id CDATA #REQUIRED
value (installed|activated) "installed">
Este elemento é utilizado para avaliar o estado de um conector. O estado do conector pode ser um dos seguintes: installed (equivalente ao conceito OSGi de "resolved") ou activated (equivalente ao conceito OSGi de "active").
<!ELEMENT systemProperty EMPTY>
<!ATTLIST systemProperty
name CDATA #REQUIRED
value CDATA #REQUIRED>
Este elemento é utilizado para avaliar o estado de alguma propriedade do sistema. O valor property é obtido a partir de java.lang.System.
<extension point=
"org.eclipse.ui.viewActions"
>
<viewContribution id=
"com.xyz.xyzViewC1"
targetID=
"org.eclipse.ui.views.navigator.ResourceNavigator"
>
<menu id=
"com.xyz.xyzMenu"
label=
"XYZ Menu"
path=
"additions"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ"
label=
"&Run XYZ Tool"
menubarPath=
"com.xyz.xyzMenu/group1"
toolbarPath=
"Normal/additions"
style=
"toggle"
state=
"true"
icon=
"icons/runXYZ.gif"
tooltip=
"Run XYZ Tool"
helpContextId=
"com.xyz.run_action_context"
class=
"com.xyz.actions.RunXYZ"
>
<selection class=
"org.eclipse.core.resources.IFile"
name=
"*.java"
/>
</action>
</viewContribution>
</extension>
No exemplo anterior, a acção especificada será apenas activada para uma selecção única (atributo enablesFor). Além disso, o objecto na selecção tem de ser um recurso de ficheiro Java.
A seguir encontra-se um outro exemplo de uma extensão de acções de vista:
<extension point=
"org.eclipse.ui.viewActions"
>
<viewContribution id=
"com.xyz.xyzViewC1"
targetID=
"org.eclipse.ui.views.navigator.ResourceNavigator"
>
<menu id=
"com.xyz.xyzMenu"
label=
"XYZ Menu"
path=
"additions"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ2"
label=
"&Run XYZ2 Tool"
menubarPath=
"com.xyz.xyzMenu/group1"
style=
"push"
icon=
"icons/runXYZ2.gif"
tooltip=
"Run XYZ2 Tool"
helpContextId=
"com.xyz.run_action_context2"
class=
"com.xyz.actions.RunXYZ2"
>
<enablement>
<and>
<objectClass name=
"org.eclipse.core.resources.IFile"
/>
<not>
<objectState name=
"extension"
value=
"java"
/>
</not>
</and>
</enablement>
</action>
</viewContribution>
</extension>
No exemplo anterior, a acção especificada irá aparecer como um artigo de menu. A acção é activada se a selecção não contiver quaisquer recursos de ficheiro Java.
A interface org.eclipse.ui.IViewActionDelegate expande org.eclipse.ui.IActionDelegate e adiciona um método adicional que permite ao delegado iniciar com a instância da vista para a qual efectua contribuições.
Este ponto de extensão pode ser utilizado para colaborar com acções nos menus anteriormente criados pela vista de destino. Omitir o atributo de caminho de acesso ao menu (menu path) irá resultar na junção do novo menu ou acção ao fim do menu pendente.
Os critérios de activação para uma extensão de acção são inicialmente definidos por enablesFor, e também por selection ou enablement. No entanto, quando o delegado de acção tiver sido dividido em instâncias, poderá controlar o estado de activação da acção directamente dentro do respectivo método selectionChanged.
As etiquetas de acções e menus podem conter caracteres especiais que codifiquem mnemónicas, utilizando as seguintes regras:
Os elementos selection e enablement excluem-se mutuamente. O elemento enablement pode substituir o elemento selection utilizando os subelementos objectClass e objectState. Por exemplo, o seguinte código:
pode ser expresso utilizando:<selection class=
"org.eclipse.core.resources.IFile"
name=
"*.java"
>
</selection>
<enablement>
<and>
<objectClass name=
"org.eclipse.core.resources.IFile"
/>
<objectState name=
"extension"
value=
"java"
/>
</and>
</enablement>
Copyright (c) 2002, 2005 IBM Corporation e outros.
Todos os direitos reservados. Este programa e os materiais que o acompanham estão disponíveis
sob os termos da Eclipse Public License v1.0 que acompanha
esta distribuição e está disponível em http://www.eclipse.org/legal/epl-v10.html