선택사항이 이기종이면 지시문은 선택사항의 공통 유형에 대해 등록된 경우에 적용됩니다. 직접 일치가 가능하지 않으면 수퍼클래스 및 수퍼인터페이스에 대해 일치하는 항목을 찾습니다.
이름 필터를 사용하여 선택사항을 더 제한할 수 있습니다. 이름 필터를 사용하는 경우 선택사항의 모든 오브젝트가 해당 필터와 일치해야만 지시문을 적용할 수 있습니다.
오브젝트 지시문의 개별 조치는 enablesFor
속성을 사용하여 해당 조치가 단일, 다중 또는 기타 선택사항 유형 중 어느 유형에 대해서만 적용되어야 하는지 지정할 수 있습니다.
이러한 필터링 메커니즘이 적당하지 않으면, 조치 지시문은 filter 메커니즘으로 사용할 수도 있습니다. 이 경우 대상 오브젝트의 속성은 일련의 이름-값 쌍으로 설명됩니다. 선택사항에 적용되는 속성은 특정 유형과 관련되며 Workbench 자체의 도메인 범위를 넘어서므로 이 레벨의 필터링에서는 실제 선택사항이 Workbench를 맡습니다.
enablement 및 visibility 요소를 각각 사용하여 조치의 활성 및/또는 표시 여부를 정의할 수 있습니다. 이들 두 요소는 활성 및/또는 표시 여부를 판별하는 데 평가되는 부울 표현식을 포함합니다.
구문은 enablement 및 visibility 요소에 대해 동일합니다. 이들 두 요소는 하나의 부울 표현식 하위 요소를 포함합니다. 가장 간단한 경우에 이것은 objectClass, objectState, pluginState 또는 systemProperty 요소가 됩니다. 복잡한 경우에는 and, or 및 not 요소가 조합되어 부울 표현식을 형성할 수 있습니다. and 요소와 or 요소는 모두 두 개의 하위 요소를 포함해야 합니다. not 요소는 1개의 부속요소만 포함해야 합니다.
<!ELEMENT extension (objectContribution , viewerContribution)>
<!ATTLIST extension
point CDATA #REQUIRED
id CDATA #IMPLIED
name CDATA #IMPLIED>
<!ELEMENT objectContribution (filter* , visibility? , enablement? , menu* , action*)>
<!ATTLIST objectContribution
id CDATA #REQUIRED
objectClass CDATA #REQUIRED
nameFilter CDATA #IMPLIED
adaptable (true | false) "false">
이 요소는 지정된 유형의 오브젝트를 선택하는 모든 표시기 컨텍스트 메뉴에 대해 메뉴 또는 조치 그룹을 정의하는 데 사용됩니다.
<!ELEMENT viewerContribution (visibility? , menu* , action*)>
<!ATTLIST viewerContribution
id CDATA #REQUIRED
targetID CDATA #REQUIRED>
이 요소는 특정 보기 또는 편집기 파트 컨텍스트 메뉴에 대해 메뉴 또는 조치 그룹을 정의하는 데 사용됩니다.
<!ELEMENT action (selection* , enablement?)>
<!ATTLIST action
id CDATA #REQUIRED
label CDATA #REQUIRED
definitionId CDATA #IMPLIED
menubarPath CDATA #IMPLIED
icon CDATA #IMPLIED
helpContextId CDATA #IMPLIED
style (push|radio|toggle|pulldown)
state (true | false)
class CDATA #REQUIRED
enablesFor CDATA #IMPLIED
overrideActionId CDATA #IMPLIED
tooltip CDATA #IMPLIED>
이 요소는 UI에서 사용자가 호출할 수 있는 조치를 정의합니다.
push | - 일반 메뉴 항목 또는 도구 항목. | |
radio | - 라디오 스타일 메뉴 항목 또는 도구 항목. 같은 메뉴나 도구 모음 그룹에 있는 라디오 스타일의 조치는 라디오 세트로 동작합니다. 초기값은 state 속성에서 지정됩니다. | |
toggle | - 선택된 스타일 메뉴 항목 또는 토글 도구 항목. 초기값은 state 속성에서 지정됩니다. | |
pulldown | - 계단식 스타일 메뉴 항목 |
! | - 0개 항목 선택 | |
? | - 0개 또는 1개 항목 선택 | |
+ | - 1개 이상의 항목 선택 | |
multiple, 2+ | - 두 개 이상의 항목 선택 | |
n | - 선택한 항목의 정확한 개수. 예를 들어, enablesFor=" 4"이면 항목 네 개가 선택된 경우에만 조치를 사용할 수 있습니다. | |
* | - 선택한 항목 개수 |
조치 확장에 대한 활성 기준은 초기에 enablesFor, selection 및 enablement로 정의합니다. 그러나 조치 위임이 인스턴스화되면 조치 활성 상태를 selectionChanged 메소드 내에서 직접 제어할 수 있습니다.
<!ELEMENT filter EMPTY>
<!ATTLIST filter
name CDATA #REQUIRED
value CDATA #REQUIRED>
이 요소는 현재 선택사항의 각 오브젝트 속성 상태를 평가하는 데 사용됩니다. 선택사항의 각 오브젝트에 속성 상태가 지정된 경우에만 일치합니다. 선택사항에서 각 오브젝트는 구현하거나 org.eclipse.ui.IActionFilter에 적용시켜야 합니다.
<!ELEMENT menu (separator+ , groupMarker*)>
<!ATTLIST menu
id CDATA #REQUIRED
label CDATA #REQUIRED
path CDATA #IMPLIED>
이 요소는 새 메뉴를 정의하는 데 사용됩니다.
<!ELEMENT separator EMPTY>
<!ATTLIST separator
name CDATA #REQUIRED>
이 요소는 새 메뉴에 메뉴 분리자를 작성하는 데 사용됩니다.
<!ELEMENT groupMarker EMPTY>
<!ATTLIST groupMarker
name CDATA #REQUIRED>
이 요소는 새 메뉴에 이름 지정된 그룹을 작성하는 데 사용됩니다. separator 요소와는 달리 새 메뉴에 시각적으로 표시되지 않습니다.
<!ELEMENT selection EMPTY>
<!ATTLIST selection
class CDATA #REQUIRED
name CDATA #IMPLIED>
이 요소는 현재 선택사항에 기초한 조치 활성 판별을 돕는 데 사용됩니다. enablement 요소가 지정되는 경우 무시됩니다.
<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>
이 요소는 확장의 활성을 정의하는 데 사용됩니다.
<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>
이 요소는 확장의 가시성을 정의하는 데 사용됩니다.
<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>
이 요소는 두 개의 하위 요소 표현식 평가 결과에서 부울 AND 연산을 나타냅니다.
<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>
이 요소는 두 개의 하위 요소 표현식 평가 결과에서 부울 OR 연산을 나타냅니다.
<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>
이 요소는 하위 요소 표현식 평가 결과에서 부울 NOT 연산을 나타냅니다.
<!ELEMENT objectClass EMPTY>
<!ATTLIST objectClass
name CDATA #REQUIRED>
이 요소는 현재 선택사항에 있는 각 오브젝트의 클래스 또는 인터페이스를 평가하는 데 사용됩니다. 선택사항의 각 오브젝트에서 지정된 클래스 또는 인터페이스를 구현하면 표현식은 true로 평가됩니다.
<!ELEMENT objectState EMPTY>
<!ATTLIST objectState
name CDATA #REQUIRED
value CDATA #REQUIRED>
이 요소는 현재 선택사항의 각 오브젝트 속성 상태를 평가하는 데 사용됩니다. 선택사항의 각 오브젝트에 지정된 속성 상태가 있으면 표현식은 true로 평가됩니다. 표현식의 이 유형을 평가하려면 선택사항의 각 오브젝트를 구현하거나 org.eclipse.ui.IActionFilter 인터페이스에 적용시켜야 합니다.
<!ELEMENT pluginState EMPTY>
<!ATTLIST pluginState
id CDATA #REQUIRED
value (installed|activated) "installed">
이 요소는 플러그인의 상태를 평가하는 데 사용됩니다. 플러그인의 상태는 installed(OSGi의 "resolved" 개념에 해당) 또는 activated(OSGi의 "active" 개념에 해당) 중 하나일 수 있습니다.
<!ELEMENT systemProperty EMPTY>
<!ATTLIST systemProperty
name CDATA #REQUIRED
value CDATA #REQUIRED>
이 요소는 일부 시스템 특성의 상태를 평가하는 데 사용됩니다. 특성 값은 java.lang.System에서 검색됩니다.
위의 예에서 지정된 오브젝트 지시문 조치는 단일 선택사항(enablesFor 속성)에 대해서만 활성화됩니다. 또한 선택사항의 각 오브젝트는 지정된 인터페이스(IFile)를 구현해야 하며 Java 파일이어야 합니다. 이 조치는 이전에 작성된 서브메뉴에 추가됩니다. 이 컨트리뷰션은 필수 선택사항이 있는 모든 보기에 적용됩니다.<extension point=
"org.eclipse.ui.popupMenus"
>
<objectContribution id=
"com.xyz.C1"
objectClass=
"org.eclipse.core.resources.IFile"
nameFilter=
"*.java"
>
<menu id=
"com.xyz.xyzMenu"
path=
"additions"
label=
"&XYZ Java Tools"
>
<separator name=
"group1"
/>
</menu>
<action id=
"com.xyz.runXYZ"
label=
"&Run XYZ Tool"
style=
"push"
menubarPath=
"com.xyz.xyzMenu/group1"
icon=
"icons/runXYZ.gif"
helpContextId=
"com.xyz.run_action_context"
class=
"com.xyz.actions.XYZToolActionDelegate"
enablesFor=
"1"
/>
</objectContribution>
<viewerContribution id=
"com.xyz.C2"
targetID=
"org.eclipse.ui.views.TaskList"
>
<action id=
"com.xyz.showXYZ"
label=
"&Show XYZ"
style=
"toggle"
state=
"true"
menubarPath=
"additions"
icon=
"icons/showXYZ.gif"
helpContextId=
"com.xyz.show_action_context"
class=
"com.xyz.actions.XYZShowActionDelegate"
/>
</viewerContribution>
</extension>
반면, 위의 표시기 컨트리뷰션은 타스크 보기 컨텍스트 메뉴에서만 나타나며 보기의 선택사항에 영향을 받지 않습니다.
다음은 필터 메커니즘의 예입니다. 이 경우 조치는 우선순위가 높고 완료된 IMarkers에 대해서만 나타납니다.
다음은 표시 여부 요소 사용의 기타 예제입니다.<extension point=
"org.eclipse.ui.popupMenus"
>
<objectContribution id=
"com.xyz.C3"
objectClass=
"org.eclipse.core.resources.IMarker"
>
<filter name=
"done"
value=
"true"
/>
<filter name=
"priority"
value=
"2"
/>
<action id=
"com.xyz.runXYZ"
label=
"High Priority Completed Action Tool"
icon=
"icons/runXYZ.gif"
class=
"com.xyz.actions.MarkerActionDelegate"
>
</action>
</objectContribution>
</extension>
<extension point=
"org.eclipse.ui.popupMenus"
>
<viewerContribution id=
"com.xyz.C4"
targetID=
"org.eclipse.ui.views.TaskList"
>
<visibility>
<and>
<pluginState id=
"com.xyz"
value=
"activated"
/>
<systemProperty name=
"ADVANCED_MODE"
value=
"true"
/>
</and>
</visibility>
<action id=
"com.xyz.showXYZ"
label=
"&Show XYZ"
style=
"push"
menubarPath=
"additions"
icon=
"icons/showXYZ.gif"
helpContextId=
"com.xyz.show_action_context"
class=
"com.xyz.actions.XYZShowActionDelegate"
>
</action>
</viewerContribution>
</extension>
위의 예제에서 지정한 조치는 "com.xyz" 플러그인이 활성화되고 지정한 시스템 특성이 true로 설정된 경우에만 타스크 보기 텍스트 메뉴에 메뉴 항목으로 나타납니다.
참고: 이전 버전과의 호환성을 위해 org.eclipse.ui.IActionDelegate가 오브젝트 지시문에 대해 구현될 수 있습니다.
파트 내의 컨텍스트 메뉴 확장은 대상 파트가 확장에 해당하는 메뉴를 공개할 때만 가능합니다. 이 확장은 제품의 확장성을 향상시키므로 권장됩니다. 이를 성취하려면 각 파트는 IWorkbenchPartSite.registerContextMenu를 호출하여 정의되는 컨텍스트 메뉴를 공개해야 합니다. 이 작업이 완료되면 Workbench는 기존의 조치 확장을 자동으로 삽입합니다.
메뉴 ID는 등록된 각 메뉴에 대해 제공되어야 합니다. 또한 파트 사이의 일관성을 위해 모든 파트 구현자가 다음 계획을 채택해야 합니다.
또한 Workbench에 등록된 모든 컨텐스트 메뉴에는 ID IWorkbenchActionConstants.MB_ADDITIONS를 갖는 표준 삽입점이 있어야 합니다. 기타 플러그인은 이 값을 삽입을 위한 참조점으로 사용합니다. 삽입점은 적절한 삽입 위치에서 메뉴에 GroupMarker를 추가하여 정의할 수 있습니다.
컨텍스트 메뉴의 선택사항인 Workbench의 오브젝트는 org.eclipse.ui.IActionFilter를 정의할 수 있습니다. 이것은 필터링 특정 유형을 수행할 수 있는 필터링 계획입니다. Workbench는 IActionFilter를 구현하는지 확인하기 위해 테스트하여 선택사항에 대한 필터를 검색합니다. 실패하는 경우 Workbench는 IAdaptable 메커니즘을 통해 필터를 요구합니다.
조치 및 메뉴 레이블에는 니모닉을 인코딩하는 특수 문자가 있을 수 있습니다. 변환되는 텍스트에서 선택한 문자 앞에 앰퍼샌드(&osq;&') 문자를 사용하여 이 특수 문자를 지정합니다. XML 문자열에는 앰퍼샌드를 사용할 수 없으므로 & 문자 엔티티를 사용하십시오.
둘 이상의 조치가 하나의 단일 확장에 의해 메뉴에 제공된 경우 조치는 plugin.xml 파일에 나열되는 순서와 반대로 나타납니다. 이것은 확실하게 직관적이지 않습니다. 그러나 이것을 Eclipse 플랫폼 API가 확정된 후 발견했습니다. 이 작동을 지금 변경하면 기존 작동에 의존하는 모든 플러그인이 중단됩니다.
selection 및 enablement 요소는 서로 같이 사용할 수 없습니다. enablement 요소는 objectClass 및 objectState 하위 요소를 사용하여 selection 요소를 바꿀 수 있습니다. 예를 들어, 다음과 같습니다.
다음을 사용하여 표현될 수 있습니다.<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) 2000, 2005 IBM Corporation and others.
All rights reserved. 본 프로그램 및 본 프로그램에 동봉되는 자료는 본 배포물에 동봉되는 Eclipse Public License v1.0의 조항에 따라 사용해야 하며
웹 사이트(http://www.eclipse.org/legal/epl-v10.html)에서도 관련 사항을 참조할 수 있습니다.