메뉴 및 도구 모음 경로

조치의 위치 경로를 지정하는 다양한 조치 컨트리뷰션을 살펴 보았습니다. 이제 이러한 경로의 의미를 자세히 살펴보겠습니다.  

메뉴 경로

우선 Workbench 도움말 메뉴를 살펴봄으로써 메뉴 경로를 학습합니다.

Workbench에서 그룹 이름 지정

이름 지정된 그룹을 사용하여 새 메뉴, 메뉴 항목을 삽입할 위치를 정의합니다. 이름 지정된 그룹을 메뉴 표시줄 또는 풀다운 메뉴의 특정 지점에 메뉴 항목을 삽입할 수 있는 슬롯 또는 위치 표시기로 간주할 수 있습니다.

Workbench에서는 IWorkbenchActionConstantsIIDEActionConstants 클래스에 모든 그룹 슬롯 이름을 정의합니다. (자원 관련 메뉴 항목이 일반 Workbench에서 팩토링되므로 두 가지 다른 클래스가 사용됩니다). Workbench 메뉴의 경우 플러그인에서 새 조치를 삽입할 것으로 예상되는 위치의 메뉴에 이름 지정된 그룹이 배치됩니다.

다음 도움말 메뉴 설명은 IWorkbenchActionConstants 클래스 정의에서 가져온 것입니다.

표준 도움말 메뉴 조치

   시작 그룹 - HELP_START - "start"
   종료 그룹 - HELP_END - "end"

표준 Workbench 도움말 메뉴는 이름 지정된 그룹 "start", 이름 지정된 그룹 "end"의 순서로 정의합니다. 두 그룹을 정의하면 플러그인이 도움말 메뉴에서 제공된 항목의 위치를 제어할 수 있습니다. 메뉴를 정의하면 원하는 수만큼 슬롯을 정의할 수 있습니다. 슬롯을 추가하면 다른 플러그인이 기존 제공에 따라서 해당 컨트리뷰션이 나타나는 위치에 대해 더 많이 제어할 수 있습니다.

도움말 메뉴에 메뉴 항목을 추가하는 플러그인은 이 그룹 이름을 사용하여 메뉴 항목이 이동하는 위치를 결정할 수 있습니다. 예를 들어, 치트 시트 플러그인은 "치트 시트..." 메뉴를 포함하는 조치 설정을 Workbench에 추가합니다. 다음은 org.eclipse.ui.cheatsheets 플러그인 plugin.xml의 마크업입니다.

<extension
	point="org.eclipse.ui.actionSets">
	<actionSet
		label="%CHEAT_SHEETS"
		visible="true"
		id="org.eclipse.ui.cheatsheets.actionSet">
		<action
			label="%CHEAT_SHEETS_MENU"
			class="org.eclipse.ui.internal.cheatsheets.actions.CheatSheetHelpMenuAction"
			menubarPath="help/helpStart"
			id="org.eclipse.ui.cheatsheets.actions.CheatSheetHelpMenuAction">
		   </action>
	   </actionSet>
   </extension>   

새 도움말 조치는 helpStart 그룹 안에 있는 도움말 메뉴에 배치됩니다.

완전한 메뉴 경로

완전한 메뉴 경로는 "메뉴 이름/그룹 이름" 입니다. Workbench의 메뉴 이름은 대부분 IWorkbenchActionConstants에서 정의합니다. (자원 관련 메뉴 이름은 IIDEActionConstants에서 정의됩니다.) 이 클래스에서 도움말 메뉴의 이름을 찾는 경우 도움말 조치의 완전한 경로 이름이 "help/helpEnd임을 알 수 있습니다."

일부 메뉴에는 중첩된 서브메뉴가 있습니다. 서브메뉴에서는 더 긴 경로가 작동합니다. 도움말 메뉴에서 "submenuStart"라는 이름 지정된 그룹을 사용하여 "submenu"라는 서브메뉴를 정의한 경우 새 서브메뉴의 조치에 대한 완전한 메뉴 경로는 "help/submenu/submenuStart"가 됩니다.

UI 레이블 구체화

위의 예제는 UI에 나타나는 문자열을 구체화하는 방식을 보여줍니다. 구체화된 문자열은 플러그인의 UI를 다른 언어로 간단히 변환하는 데 사용됩니다. 문자열을 키(%CHEAT_SHEETS_MENU)로 바꾸고 다음과 같은 양식의 plugin.properties 파일에 항목을 작성하여 plugin.xml 파일의 문자열을 구체화할 수 있습니다.

	CHEAT_SHEETS_MENU = Cheat Sheets...

plugin.properties 파일을 다른 언어로 변환할 수 있으며 plugin.xml은 수정할 필요가 없습니다.

새 메뉴와 그룹 추가

지금까지 여러 예를 통해 샘플 플러그인에서 제공한 조치를 메뉴에 있는 기존의 이름 지정된 그룹에 추가했습니다.

actionSets, viewActions, editorActionspopupMenus 확장점을 사용하면 지시문에 새 메뉴와 그룹을 정의할 수 있습니다. 이것은 새 서브메뉴나 새 풀다운 메뉴를 정의하고 조치를 이 새 메뉴에 제공할 수 있음을 의미합니다. 이 경우 새 조치의 경로에는 새로 정의한 메뉴 이름이 포함됩니다.

Readme 도구에서 해당 조치 세트에 대해 새 메뉴를 정의할 때 이 방법을 보았습니다. 메뉴 경로를 자세히 살펴 보았으므로 마크업을 한 번 더 확인해 보겠습니다.

   <extension point = "org.eclipse.ui.actionSets">
   <actionSet id="org_eclipse_ui_examples_readmetool_actionSet"
	   label="%ActionSet.name"
	   visible="true">
	   <menu id="org_eclipse_ui_examples_readmetool"
		   label="%ActionSet.menu"
		   path="window/additions"> 
		   <separator name="slot1"/>
		   <separator name="slot2"/>
		   <separator name="slot3"/>
	   </menu>
	   <action id="org_eclipse_ui_examples_readmetool_readmeAction"
		   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
		   toolbarPath="readme"
		   label="%ReadmeAction.label"
		   tooltip="%ReadmeAction.tooltip"
		   helpContextId="org.eclipse.ui.examples.readmetool.open_browser_action_context"
	       icon="icons/ctool16/openbrwsr.png"
		   class="org.eclipse.ui.examples.readmetool.WindowActionDelegate"
		   enablesFor="1">
		   <selection class="org.eclipse.core.resources.IFile"
				name="*.readme">
		   </selection>
	   </action>
	   ...

"org_eclipse_ui_examples_readmetool"이라는 새 메뉴를 추가했습니다. 이 메뉴의 레이블은 특성 파일의 "%ActionSet.name" 키에서 정의됩니다.  이 메뉴에서 "slot1," "slot2" 및 "slot3"으로 이름 지정된 세 그룹을 정의합니다. 이 새 메뉴를 "window/additions 경로에 추가합니다."

IWorkbenchActionConstants로 다시 돌아가면 javadoc에서 창 메뉴에 대한 이 정의를 볼 수 있습니다.

    * <h3>Standard Window menu actions</h3>
    * <ul>
 *   <li>Extra Window-like action group (<code>WINDOW_EXT</code>)</li> 

클래스 정의를 자세히 보면 다음과 같이 관련된 정의를 볼 수 있습니다.

   public static final String MENU_PREFIX = "";
   ...
    public static final String M_WINDOW = MENU_PREFIX+"window";
   ...
   public static final String MB_ADDITIONS = "additions";  // Group.
   ...
public static final String WINDOW_EXT = MB_ADDITIONS;   // Group.

이 정보에서 Workbench "window" 메뉴에 추가할 항목의 경로를 파악할 수 있습니다. 메뉴 자체는 "window"라고 하고 여기서 "additions"라는 슬롯을 하나 정의합니다. "window/additions" 경로를 사용하여 새 메뉴를 추가합니다.

조치 세트 선언에서 "window/org_eclipse_ui_examples_readmetool/slot1" 경로를 사용하여 새로 정의된 메뉴에 조치를 추가합니다.

다른 플러그인의 경우에는 플러그인 메뉴를 추가하기 위해 이와 동일한 경로나 다른 슬롯 중 하나를 사용하여 현재 메뉴에 추가할 수 있습니다.  

readme 도구 예제에서, separator 속성을 사용하여 그룹 이름을 식별합니다. 이 속성은 그룹에 항목이 있는 경우 분리자 행이 해당 그룹 사이에 나타나게 합니다. 메뉴에 분리자를 표시하지 않고 그룹을 식별하고 이름 지정된 그룹을 정의하려면 대신 groupMarker 속성을 사용할 수 있습니다.

도구 모음 경로

도구 모음 경로는 메뉴 경로와 비슷하게 작동합니다.  

Workbench에서 도구 모음 이름 지정

Workbench 도구 모음은 Workbench 자체를 포함하여 다른 플러그인에 의해 제공되는 도구 모음으로 구성됩니다. 특정 도구 모음에는 새 도구 모음 항목을 삽입하는 데 사용할 수 있는 이름 지정된 그룹 또는 슬롯이 있습니다.    

다음 Workbench 도구 모음 설명은 IWorkbenchActionConstants 클래스 정의에서 가져온 것입니다.

// Workbench toolbar ids
public static final String TOOLBAR_FILE = "org.eclipse.ui.workbench.file"
public static final String TOOLBAR_NAVIGATE = "org.eclipse.ui.workbench.navigate"; 

// Workbench toolbar group ids.  To add an item at the beginning of the group, 
// use the GROUP id.  To add an item at the end of the group, use the EXT id.
public static final String PIN_GROUP = "pin.group"; 
public static final String HISTORY_GROUP = "history.group"; 
public static final String NEW_GROUP = "new.group"; 
public static final String SAVE_GROUP = "save.group"; 
public static final String BUILD_GROUP = "build.group"; 

가장 간단한 경우 플러그인은 자체 도구 모음에 도구 모음 항목을 제공할 수 있습니다. 예를 들어, 메뉴에 제공된 readme 도구 조치는 도구 모음 경로에도 제공됩니다.

<action id="org_eclipse_ui_examples_readmetool_readmeAction"  
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="readme"
...

Workbench 도구 모음 경로 또는 그룹에 대한 참조사항이 없으므로, readme 조치가 도구 모음의 해당 그룹에 나타납니다. 다음 경로를 지정하면 대신 항목을 저장 그룹의 파일 도구 모음에 배치합니다.

...
<action id="org_eclipse_ui_examples_readmetool_readmeAction"  
   menubarPath="window/org_eclipse_ui_examples_readmetool/slot1"
   toolbarPath="org.eclipse.ui.workbench.file/save.group"
...

IWorkbenchActionConstants에 정의된 경로는 다른 플러그인의 도구 모음 경로에서 참조될 수 있습니다.

다른 플러그인의 조치 세트에 추가

해당 도구 모음 항목이 다른 플러그인의 조치와 더 잘 통합되기를 플러그인이 원한다고 가정합니다. 외부 도구 플러그인(org.eclipse.ui.externaltools)이 디버거 도구 모음과 해당 조치를 통합하는 방법을 살펴보겠습니다. 디버거(org.eclipse.debug.ui)는 다음과 같이 도구 모음 조치를 정의합니다.

<extension
      point="org.eclipse.ui.actionSets">
<actionSet
         label="%LaunchActionSet.label"
   visible="false"
         id="org.eclipse.debug.ui.launchActionSet">
   ...
        <action
         toolbarPath="debug"
         id="org.eclipse.debug.internal.ui.actions.RunDropDownAction"
         hoverIcon="icons/full/ctool16/run_exc.png"
         class="org.eclipse.debug.internal.ui.actions.RunToolbarAction"
         disabledIcon="icons/full/dtool16/run_exc.png"
         icon="icons/full/etool16/run_exc.png"
         helpContextId="run_action_context"
         label="%RunDropDownAction.label"
         pulldown="true">
        </action>
   ...

readme 도구처럼 디버거 플러그인은 고유한 도구 모음 경로를 정의하며, 이것은 해당 도구 모음 항목이 Workbench에서 고유한 도구 모음 내부에 있음을 의미합니다. 외부 도구 플러그인이 수행하는 작업은 무엇입니까?

<extension point="org.eclipse.ui.actionSets">
	<actionSet
		id="org.eclipse.ui.externaltools.ExternalToolsSet"
		label="%ActionSet.externalTools"
		visible="true">
		...
		<action
			id="org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar"
			definitionId= "org.eclipse.ui.externaltools.ExternalToolMenuDelegateToolbar"
			label="%Action.externalTools"
			toolbarPath="org.eclipse.debug.ui.launchActionSet/debug"
			disabledIcon="icons/full/dtool16/external_tools.png"
			icon="icons/full/etool16/external_tools.png"
			hoverIcon="icons/full/ctool16/external_tools.png"
			tooltip="%Action.externalToolsTip"
			pulldown="true"
			class="org.eclipse.ui.externaltools.internal.menu.ExternalToolMenuDelegate">
		   </action>
	   </actionSet>
   </extension>

도구 모음 경로에 있는 디버거의 조치 세트 ID를 사용함에 유의합니다. 경로에 있는 조치 세트 ID를 사용하는 것은 도구 모음 항목이 참조한 조치 세트가 사용한 도구 모음에 위치해야 한다는 것을 의미합니다. 도구 모음 그룹에서 항목은 조치 세트 ID별로 정렬되고 따라서 예를 들어, 외부 도구 조치는 디버거 조치 다음에 나타납니다. 

조치 세트의 도구 모음에 추가할 때 새 그룹도 정의할 수 있습니다. 외부 도구 플러그인이 toolbarpath"org.eclipse.debug.ui.launchActionSet/external"로 정의한 경우 조치에 해당하는 새 그룹이 도구 모음에 작성됩니다. 메뉴와 관련하여 도구 모음 그룹은 분리자로 표시됩니다. 

다른 플러그인에서 경로 사용

일반적으로, 클라이언트에 사용 가능한 것으로 특별히 표시된 경우를 제외하고 plugin.xml에서 경로 이름을 가져와 다른 플러그인의 메뉴 또는 도구 모음에 제공하는 것은 바람직하지 않습니다.  이후 버전의 플러그인에서는 경로 이름을 변경할 수 있을 것입니다. 플러그인의 조치 세트 ID 및 경로를 표시하는 바람직한 두 가지 공통 방법은 다음과 같습니다.