편집기 메뉴, 도구 모음 및 조치

org.eclipse.ui.editorActions

이 확장점은 다른 플러그인에서 등록한 편집기의 메뉴와 도구 모음에 조치를 추가하는 데 사용됩니다.

편집기에 대한 최초 컨트리뷰션 세트는 다른 확장점(org.eclipse.ui.editors)에서 정의합니다. 하나의 조치 세트는 같은 편집기 유형의 모든 인스턴스에서 작성되고 공유됩니다. 호출하면 이들 조치는 활성화 편집기에 따라 실행합니다. 이 확장점은 같은 패턴을 따릅니다. 각 조치 확장은 같은 편집기 유형의 모든 인스턴스에서 작성되고 공유됩니다. 조치 클래스는 org.eclipse.ui.IEditorActionDelegate를 구현하는 데 필요합니다. 활성화 편집기는 IEditorActionDelegate.setActiveEditor를 호출하여 위임에 전달됩니다.

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

구문은 enablementvisibility 요소에 대해 동일합니다. 이들 두 요소는 하나의 부울 표현식 하위 요소를 포함합니다. 가장 간단한 경우에 이것은 objectClass, objectState, pluginState 또는 systemProperty 요소가 됩니다. 복잡한 경우에는 and, ornot 요소가 조합되어 부울 표현식을 형성할 수 있습니다. and 요소와 or 요소는 모두 두 개의 하위 요소를 포함해야 합니다. not 요소는 1개의 부속요소만 포함해야 합니다.

<!ELEMENT extension (editorContribution+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT editorContribution (menu* , action*)>

<!ATTLIST editorContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

이 요소는 편집기 조치 또는 메뉴의 그룹을 정의하는 데 사용됩니다.



<!ELEMENT action (selection* | enablement?)>

<!ATTLIST action

id            CDATA #REQUIRED

label         CDATA #REQUIRED

accelerator   CDATA #IMPLIED

definitionId  CDATA #IMPLIED

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

actionID      CDATA #IMPLIED>

이 요소는 UI에서 사용자가 호출할 수 있는 조치를 정의합니다.



<!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.editorActions"

>

<editorContribution id=

"com.xyz.xyzContribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ"

label=

"&amp;XYZ Menu"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

menubarPath=

"XYZ/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>

</editorContribution>

</extension>

위의 예제에서 지정한 조치는 "XYZ 메뉴"라는 새로운 최상위 레벨 메뉴에서 선택란 항목으로 나타나며 도구 모음에서는 전환 단추로 나타납니다. 선택사항에 Java 파일 자원만 있는 경우에 조치를 사용할 수 있습니다.

다음은 편집기 조치 확장의 기타 예제입니다.

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyz2Contribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ2"

label=

"&amp;XYZ2 Menu"

path=

"edit/additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp;Run XYZ2 Tool"

menubarPath=

"edit/XYZ2/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>

</editorContribution>

</extension>

위의 예제에서 지정한 조치는 최상위 레벨의 "편집" 메뉴에 있는 "XYZ2 메뉴"라는 이름의 서브메뉴에서 메뉴 항목으로 나타납니다. 선택사항에 Java 파일 자원이 없는 경우에 조치를 사용할 수 있습니다.

class 속성 값은 org.eclipse.ui.IEditorActionDelegate를 구현하는 Java 클래스의 완전한 이름이어야 합니다. 실질적으로 필요하기 전에 전체 플러그인이 로드되는 것을 방지하기 위해 가능한 늦게 이 클래스를 로드합니다. 지정한 유형의 편집기를 활성화할 때마다 setActiveEditor 메소드가 호출됩니다. 현재 Workbench에 열려 있는 편집기 인스턴스 수에 상관 없이 지정한 편집기 유형의 모든 인스턴스에 한 세트의 조치와 메뉴만 만들어집니다.

이 확장점을 사용하여 대상 편집기에서 이전에 만든 메뉴로 조치를 제공할 수 있습니다. 또한, 메뉴와 조치가 Workbench 창에 제공될 수 있습니다. Workbench 창에 있는 주 그룹과 조치의 ID는 org.eclipse.ui.IWorkbenchActionConstants에서 정의됩니다. 주 그룹과 조치의 ID는 새로운 조치를 추가할 때 참조 지점으로 사용되어야 합니다. path 속성에 대한 다음 값을 사용하여 상위 레벨 메뉴를 작성합니다.

path 속성을 생략하면 추가 메뉴 표시줄 그룹에 새 메뉴가 추가됩니다.

이 경로에 추가된 조치와 메뉴는 관련된 편집기가 활성화된 경우에만 표시됩니다. 편집기가 닫히면 메뉴와 조치가 제거됩니다.

조치 확장에 대한 활성 기준은 초기에 enablesForselection 또는 enablement로 정의합니다. 그러나 조치 위임이 인스턴스화되면 조치 활성 상태를 selectionChanged 메소드에서 직접 제어할 수 있습니다.

조치 및 메뉴 레이블에는 다음 규칙을 사용하여 니모닉을 인코딩하는 특수 문자가 포함될 수 있습니다.

  1. 변환된 텍스트의 선택 문자 앞에 앰퍼샌드('&') 문자를 사용하여 니모닉을 지정합니다. 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에서는 내장된 "기본 문서 편집기"를 제공합니다. 기타 플러그인에서 제공한 기본 편집기 또는 편집기에 플러그인 기능이 제공될 수 있습니다.