팝업 메뉴

org.eclipse.ui.popupMenus

이 확장점은 다른 플러그인에서 소유하는 컨텍스트 메뉴에 새로운 조치를 추가하는 데 사용됩니다. 특정 오브젝트 유형(objectContribution) 또는 보기나 편집기 파트의 특정 컨텍스트 메뉴(viewerContribution)에 대해 조치 지시문이 작성될 수 있습니다. objectContribution를 사용할 때, 지정된 유형의 오브젝트가 선택된 모든 보기 또는 편집기 파트 컨텍스트 메뉴에 지시문이 나타납니다. 반면, viewerContribution을 사용하여 지시문이 선택사항과 관계 없이 지정된 보기나 편집기 파트 컨텍스트 메뉴에서만 나타납니다.

선택사항이 이기종이면 지시문은 선택사항의 공통 유형에 대해 등록된 경우에 적용됩니다. 직접 일치가 가능하지 않으면 수퍼클래스 및 수퍼인터페이스에 대해 일치하는 항목을 찾습니다.

이름 필터를 사용하여 선택사항을 더 제한할 수 있습니다. 이름 필터를 사용하는 경우 선택사항의 모든 오브젝트가 해당 필터와 일치해야만 지시문을 적용할 수 있습니다.

오브젝트 지시문의 개별 조치는 enablesFor 속성을 사용하여 해당 조치가 단일, 다중 또는 기타 선택사항 유형 중 어느 유형에 대해서만 적용되어야 하는지 지정할 수 있습니다.

이러한 필터링 메커니즘이 적당하지 않으면, 조치 지시문은 filter 메커니즘으로 사용할 수도 있습니다. 이 경우 대상 오브젝트의 속성은 일련의 이름-값 쌍으로 설명됩니다. 선택사항에 적용되는 속성은 특정 유형과 관련되며 Workbench 자체의 도메인 범위를 넘어서므로 이 레벨의 필터링에서는 실제 선택사항이 Workbench를 맡습니다.

enablementvisibility 요소를 각각 사용하여 조치의 활성 및/또는 표시 여부를 정의할 수 있습니다. 이들 두 요소는 활성 및/또는 표시 여부를 판별하는 데 평가되는 부울 표현식을 포함합니다.

구문은 enablementvisibility 요소에 대해 동일합니다. 이들 두 요소는 하나의 부울 표현식 하위 요소를 포함합니다. 가장 간단한 경우에 이것은 objectClass, objectState, pluginState 또는 systemProperty 요소가 됩니다. 복잡한 경우에는 and, ornot 요소가 조합되어 부울 표현식을 형성할 수 있습니다. 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에서 사용자가 호출할 수 있는 조치를 정의합니다.



<!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에서 검색됩니다.



다음은 팝업 메뉴 확장점의 예제입니다.

   

<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=

"&amp;XYZ Java Tools"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;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=

"&amp;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>

위의 예에서 지정된 오브젝트 지시문 조치는 단일 선택사항(enablesFor 속성)에 대해서만 활성화됩니다. 또한 선택사항의 각 오브젝트는 지정된 인터페이스(IFile)를 구현해야 하며 Java 파일이어야 합니다. 이 조치는 이전에 작성된 서브메뉴에 추가됩니다. 이 컨트리뷰션은 필수 선택사항이 있는 모든 보기에 적용됩니다.

반면, 위의 표시기 컨트리뷰션은 타스크 보기 컨텍스트 메뉴에서만 나타나며 보기의 선택사항에 영향을 받지 않습니다.

다음은 필터 메커니즘의 예입니다. 이 경우 조치는 우선순위가 높고 완료된 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=

"&amp;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로 설정된 경우에만 타스크 보기 텍스트 메뉴에 메뉴 항목으로 나타납니다.

조치 속성 class의 값은 org.eclipse.ui.IObjectActionDelegate(오브젝트 지시문의 경우), org.eclipse.ui.IViewActionDelegate(보기에 속하는 표시기에 대한 지시문의 경우) 또는 org.eclipse.ui.IEditorActionDelegate(편집기에 속하는 표시기에 대한 지시문의 경우)를 구현하는 Java 클래스의 완전한 클래스 이름이어야 합니다. 모든 경우에서, 실질적으로 필요하기 전에 전체 플러그인이 로드되는 것을 방지하기 위해 가능한 늦게 이 클래스를 로드합니다.

참고: 이전 버전과의 호환성을 위해 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 문자열에는 앰퍼샌드를 사용할 수 없으므로 &amp; 문자 엔티티를 사용하십시오.

둘 이상의 조치가 하나의 단일 확장에 의해 메뉴에 제공된 경우 조치는 plugin.xml 파일에 나열되는 순서와 반대로 나타납니다. 이것은 확실하게 직관적이지 않습니다. 그러나 이것을 Eclipse 플랫폼 API가 확정된 후 발견했습니다. 이 작동을 지금 변경하면 기존 작동에 의존하는 모든 플러그인이 중단됩니다.

selectionenablement 요소는 서로 같이 사용할 수 없습니다. enablement 요소는 objectClassobjectState 하위 요소를 사용하여 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>

Workbench 보기에는 여러 조치와 함께 이미 로드된 내장 컨텍스트 메뉴가 있습니다. 플러그인은 이러한 메뉴에 도움이 될 수 있습니다. 표시기에 이러한 지시문을 위해 예약된 슬롯이 있고 해당 슬롯이 공용으로 만들어진 경우에는 슬롯 이름을 경로로 사용할 수 있습니다. 그렇지 않은 경우에는 조치 및 서브메뉴가 팝업 메뉴의 끝에 추가됩니다.